A Home Security Dashboard: Status, Alerts, Cards, Buttons, and Event History
A Home Security Dashboard: Status, Alerts, Cards, Buttons, and Event History
In earlier lessons you built the logic: notifications, flooding, home modes, a supporting alarm, and failure monitoring. Now you'll bring it together on one screen: a dashboard that answers a single question: is the house secure?
This isn't a lesson about "pretty UI." A security dashboard is a daily-use tool: you check status in the morning, run tests in the evening, and click acknowledge during an alarm: with no hunting for entities in settings.
Plan on about 90 to 105 minutes. Start with the summary sensor. Then add sections one at a time.
The rule for this lesson
The dashboard should be shorter than your memory.
One screen, one status message, quick tests, and alarm acknowledgment.
A real-life problem: you know something's wrong: but you don't know where to look
You have dozens of entities scattered across Home Assistant: home mode on one card, flooding on another, the alarm test somewhere in Developer Tools. The push says "ALARM," but you have to click through five different views to understand the context. Under stress, that's too slow.
A security dashboard solves this through hierarchy: at the top, one home_security_status sensor; below it, sections organized by topic; and at the bottom, an event history.
What belongs on the dashboard
1. Overall status: one message: OK, alarm, offline, no internet.
2. Home mode and the alarm: home_mode, home_alarm_armed, disarming.
3. Openings: the critical_openings group from Lesson 6.
4. Flooding and water: flood_sensors, the water valve from Lesson 4.
5. Weather and windows: alerts from Lesson 7, if you have them.
6. System failures: offline sensors, internet, monitoring from Lesson 10.
7. Tests and acknowledgment: test buttons and intrusion_alarm_acknowledged.
8. History: a logbook of the last 24 hours.
What's actually the risk
A dashboard as decoration: it looks nice, but nobody opens it: zero value.
Too many entities on one card: you don't see the problem, because it drowns in detail.
No acknowledgment button: during an alarm, you go hunting for the entity in Developer Tools.
Tests with no description: you click something without knowing what: and the full escalation fires.
No mobile view: the dashboard works on a computer, but not on your phone on the way home.
The summary sensor: home_security_status
Before adding cards, build one template sensor that gathers the most important signals from the whole module. It's the first thing you see on the dashboard.
template:
- sensor:
- name: "Home security status"
unique_id: home_security_status
icon: >
{% if is_state('input_boolean.life_alarm_active', 'on')
or is_state('input_boolean.flood_alarm_active', 'on')
or is_state('input_boolean.intrusion_alarm_active', 'on') %}
mdi:alarm-light
{% elif expand('group.flood_sensors') | selectattr('state', 'eq', 'on') | list | count > 0 %}
mdi:water-alert
{% elif expand('group.critical_openings') | selectattr('state', 'eq', 'on') | list | count > 0
and is_state('input_select.home_mode', 'Away') %}
mdi:door-open
{% elif states('sensor.critical_sensors_offline') | int(0) > 0 %}
mdi:access-point-off
{% elif is_state('binary_sensor.internet_available', 'off') %}
mdi:web-off
{% elif is_state('input_boolean.home_alarm_armed', 'on') %}
mdi:shield-lock
{% else %}
mdi:shield-check
{% endif %}
state: >
{% if is_state('input_boolean.life_alarm_active', 'on')
or is_state('input_boolean.flood_alarm_active', 'on')
or is_state('input_boolean.intrusion_alarm_active', 'on') %}
Alarm active
{% elif expand('group.flood_sensors') | selectattr('state', 'eq', 'on') | list | count > 0 %}
Flooding detected
{% elif expand('group.critical_openings') | selectattr('state', 'eq', 'on') | list | count > 0
and is_state('input_select.home_mode', 'Away') %}
Open entries in Away mode
{% elif states('sensor.critical_sensors_offline') | int(0) > 0 %}
Sensors offline: {{ states('sensor.critical_sensors_offline') }}
{% elif is_state('binary_sensor.internet_available', 'off') %}
No internet
{% elif is_state('input_boolean.home_alarm_armed', 'on') %}
Alarm armed: no active problem detected
{% else %}
No problems detected (HA layer)
{% endif %}
A group doesn't always show a readable history of its members in Logbook: keep a variant listing the specific entities instead.
The order of the conditions matters. We show an active alarm and a real threat first, e.g. flooding or open entries in Away mode. Only after that do we show system failures, like an offline sensor or no internet. If you don't have one of the groups: remove the corresponding block from the template.
Optional: in a more advanced version, you can add a separate text sensor or attributes with the cause, e.g. which sensors are offline. In this lesson we stick with a short message, since the dashboard needs to stay readable.
A single status message hides simultaneous problems (e.g. flooding + no internet). Add a counter or a list of active problems. Don't write a bare "OK": "No problems detected" or "No active alarm detected" reads better. The status doesn't check smoke-detector batteries, the UPS, SMS, or Zigbee until you add them to the template.
OK doesn't mean "nothing can happen"
An OK state means: "on this dashboard, I don't currently see a problem within what we're monitoring." A certified smoke detector still works independently of HA.
How to create the dashboard view
In Home Assistant: Settings → Dashboards → Add dashboard → name it, e.g. Security. Add a Home Status view. In the editor, switch each card to YAML mode: paste in the ready-made blocks below.
In the Companion mobile app, set this dashboard as the default, or add a shortcut to your phone's home screen. The security dashboard should be reachable in two taps.
Card 1: overall status
type: glance
title: Security status
entities:
- entity: sensor.home_security_status
name: Home
- entity: sensor.critical_sensors_offline
name: Offline
- entity: binary_sensor.internet_available
name: Internet
show_name: true
show_icon: true
state_color: true
Card 2: home mode and the alarm
type: entities
title: Home mode and alarm
entities:
- entity: input_select.home_mode
name: Home mode
- entity: input_boolean.automatic_home_modes
name: Automatic modes
- entity: input_boolean.home_alarm_armed
name: Alarm armed
- entity: input_boolean.disarming_in_progress
name: Disarming in progress
If you added the input_boolean.automatic_arming helper in Lesson 9, you can add it to this card as an extra row. The dashboard should only show entities that actually exist.
Card 3: critical openings
type: entities
title: Critical openings
entities:
- entity: group.critical_openings
name: All openings
- entity: binary_sensor.front_door
- entity: binary_sensor.living_room_window
- entity: binary_sensor.garage_gate
- entity: binary_sensor.garden_gate
- entity: input_boolean.leaving_home_in_progress
name: Leaving in progress
Card 4: flooding and water
type: entities
title: Flooding and water
entities:
- entity: group.flood_sensors
name: Flood sensors
- entity: switch.water_valve
name: Water valve
- entity: input_boolean.auto_close_water_on_flood
name: Auto close water on flood
The helper's name has to match Lesson 4. If yours has a different name, swap the entity on the card. If you don't have a water valve: remove those entities. The flood_sensors group is enough for a quick overview.
Card 5: weather and windows (optional)
type: entities
title: Weather and windows
entities:
- entity: input_boolean.weather_alerts_windows
name: Weather alerts
- entity: input_boolean.airing_in_progress
name: Airing in progress
- entity: input_number.wind_threshold_skylights
name: Wind threshold
- entity: input_number.frost_threshold_windows
name: Frost threshold
- entity: input_number.heat_threshold_windows
name: Heat threshold
Skip this card if you didn't complete Lesson 7. The dashboard should only show what you actually have in the system.
Card 6: system failures
type: entities
title: System failures
entities:
- entity: input_boolean.failure_monitoring_enabled
name: Failure monitoring
- entity: sensor.critical_sensors_offline
name: Sensors offline
- entity: group.critical_sensors
name: Critical list
- entity: input_number.battery_alert_threshold
name: Battery threshold
Card 7: alarm and escalation
You're extending the card from Lesson 3. This holds the escalation helpers and the stop buttons: the most important controls during a real alarm.
type: entities
title: Alarm and escalation
entities:
- entity: input_boolean.life_alarm_active
name: Life alarm active
- entity: input_boolean.flood_alarm_active
name: Flood alarm active
- entity: input_boolean.intrusion_alarm_active
name: Intrusion alarm active
- entity: input_boolean.life_alarm_acknowledged
name: Acknowledge (life)
- entity: input_boolean.flood_alarm_acknowledged
name: Acknowledge (flood)
- entity: input_boolean.intrusion_alarm_acknowledged
name: Acknowledge (intrusion)
- entity: input_boolean.alarm_event_closed
name: Close the event
- entity: input_boolean.alarm_sms_enabled
name: SMS alerting
- entity: script.security_alarm_stop
name: Stop siren / lights
icon: mdi:alarm-off
Acknowledgment has to be visible
Put the intrusion_alarm_acknowledged helper on this card, not tucked away in Developer Tools. Every second counts during an alarm.
Acknowledge isn't always the same as stop
The intrusion_alarm_acknowledged helper tells the system: "I know about the alarm, don't keep repeating it." The script.security_alarm_stop script stops local responses, like a siren or lights. Show both elements on the dashboard, but label them clearly.
Technical helpers ≠ a household member's UI
Keep the daily panel to buttons with a plain description of what they do. Move raw helpers (tests, SMS, modes) to an admin section. Don't put an escalation script that requires title/message on the everyday card: running it with no data sends an empty alarm.
Card 8: tests: a separate section
Keep every test helper from the module together. That way you know a click here might trigger an escalation or a simulation: not something you'd mix up with an everyday toggle.
type: entities
title: "Tests: use carefully"
entities:
- type: section
label: Security module tests
- entity: input_boolean.security_notifications_test
name: Notification test (L2)
- entity: input_boolean.security_alarm_test
name: Escalation test (L3)
- entity: input_boolean.flood_test
name: Flood test (L4)
- entity: input_boolean.away_opening_test
name: Away opening test (L6)
- entity: input_boolean.weather_alert_test
name: Weather alert test (L7)
- entity: input_boolean.automatic_modes_test
name: Home mode test (L8)
- entity: input_boolean.home_alarm_test
name: Home alarm test (L9)
- entity: input_boolean.system_failure_test
name: System failure test (L10)
Your test entity names might look different: swap in your own from earlier lessons. If you skipped a given lesson, remove the corresponding row.
Tests aren't everyday toggles
The "Tests" section should sit at the bottom of the dashboard with a clear title. The escalation test from Lesson 3 can trigger a siren and SMS: warn the household before clicking.
Run alarm tests during the day, after warning the household. The tests section is on the dashboard so you test deliberately, not by accident.
Card 9: event history: the logbook
The logbook shows what happened over the last several hours: sensor state changes, alarm activations, acknowledgments. It's the first place to check after a false alarm: "what triggered, and when?"
type: logbook
title: Security history: 24 h
entities:
- input_boolean.life_alarm_active
- input_boolean.flood_alarm_active
- input_boolean.intrusion_alarm_active
- input_boolean.home_alarm_armed
- input_select.home_mode
- group.flood_sensors
- group.critical_openings
- group.critical_sensors
hours_to_show: 24
collapse: 5
Don't add every entity in the house to the logbook: only the ones tied to security. Otherwise the history becomes unreadable.
A group doesn't always tell you everything
A group shows that something in that category changed state, but after a false alarm you often want to know exactly which sensor triggered it. If a logbook with groups is too general, add the most important individual entities to it, e.g. the front door, the washer flood sensor, and the garage gate.
A variant with specific entities: instead of groups, or alongside them:
type: logbook
title: Security history: 24 h
entities:
- input_boolean.life_alarm_active
- input_boolean.flood_alarm_active
- input_boolean.intrusion_alarm_active
- input_boolean.home_alarm_armed
- input_select.home_mode
- binary_sensor.front_door
- binary_sensor.living_room_window
- binary_sensor.kitchen_flood
- binary_sensor.bathroom_flood
- sensor.critical_sensors_offline
hours_to_show: 24
collapse: 5
Optional: a conditional card while an alarm is active
When an alarm is active, you can show a large message at the top of the dashboard. A conditional card only appears when its condition is met.
type: conditional
conditions:
- condition: or
conditions:
- entity: input_boolean.life_alarm_active
state: "on"
- entity: input_boolean.flood_alarm_active
state: "on"
- entity: input_boolean.intrusion_alarm_active
state: "on"
card:
type: vertical-stack
cards:
- type: markdown
content: >
## ALARM ACTIVE
Acknowledge the response or stop the escalation.
Use the buttons in the Alarm and Escalation section.
- type: entities
entities:
- entity: input_boolean.life_alarm_acknowledged
name: "I'M RESPONDING (life)"
- entity: input_boolean.flood_alarm_acknowledged
name: "I'M RESPONDING (flood)"
- entity: input_boolean.intrusion_alarm_acknowledged
name: "I'M RESPONDING (intrusion)"
- entity: input_boolean.alarm_event_closed
name: Close the event
- entity: script.security_alarm_stop
name: Stop the siren
The mobile view
On your phone, set the Security view as the first one in the Companion app, or add it to your favorites. The glance card with the overall status should sit right at the top: visible with no scrolling.
You can also add the alarm-acknowledgment button as an entity shortcut on an Android home screen: that's even faster than opening the dashboard.
Available options depend on your phone and app version. What matters most isn't whether you use an Android shortcut, but whether you can open the dashboard under stress without hunting through menus.
How to test the dashboard
1. Open the dashboard on your phone and computer. Check that home_security_status shows no problems detected.
2. Switch home mode to Away. Check that the mode card and the sensor update.
3. Run system_failure_test from the tests card. The status sensor and logbook should show activity.
4. Run the escalation test from Lesson 3. Check that the conditional card appears and that the active alarm helper shows up.
5. Acknowledge the alarm and stop the escalation from the dashboard: with no need for Developer Tools.
6. Scroll through the logbook: can you see the recent events with no noise from the rest of the house?
Common mistakes
Everything on one card: 40 entities: you can't spot the alarm between the light switches.
No summary sensor: you have to piece together the picture from five cards yourself.
Tests next to everyday toggles: someone clicks the test instead of the home mode.
A logbook with the whole house: the history is useless under hundreds of light-switch entries.
A dashboard only on the computer: during an alarm you're away from home with no access to acknowledge it.
What not to do
Don't build a dashboard from entities you don't have: empty cards confuse more than a missing card.
Don't treat "no problems detected" as a life-safety guarantee: it's a summary of the HA layer.
Don't bury escalation tests at the bottom with no description: these aren't "buttons to experiment with."
Practical assignment
☐ Add the home_security_status template sensor from this lesson.
☐ Create the Security dashboard with Cards 1-9 (skip sections you don't have).
☐ Add the conditional card for an active alarm.
☐ Set the dashboard as the default in the mobile app.
☐ Test acknowledging the alarm and stopping the escalation entirely from the dashboard.
☐ Check the logbook after the test: is the history readable?
Key takeaways
One status sensor at the top: everything else is detail.
Sections by topic: mode, openings, flooding, failures, tests.
Alarm acknowledgment has to sit at the front, not in Developer Tools.
Tests stay separate: with a clear warning.
The logbook is post-event history: security entities only.
What's next
In Lesson 12, the mini project closing out this module, you'll put together your own home security plan: a risk map, a sensor list, response scenarios, and a monthly test schedule. The dashboard from this lesson will be the hub for that plan.
After this lesson, you no longer have to hop around Home Assistant looking for answers. You open one screen: and you know exactly what state your home's security is in.