353 lines
14 KiB
YAML
353 lines
14 KiB
YAML
title: Sikkerhed
|
||
path: sikkerhed
|
||
icon: mdi:shield-home
|
||
|
||
cards:
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# 📷 KAMERAER
|
||
# ─────────────────────────────────────────────────────────────
|
||
- type: grid
|
||
columns: 2
|
||
square: false
|
||
cards:
|
||
|
||
- type: picture-entity
|
||
entity: camera.terrasse_sub
|
||
name: Terasse
|
||
camera_view: live
|
||
show_state: false
|
||
show_name: true
|
||
tap_action:
|
||
action: fire-dom-event
|
||
browser_mod:
|
||
service: browser_mod.popup
|
||
data:
|
||
title: Terasse – Live
|
||
content:
|
||
type: vertical-stack
|
||
cards:
|
||
- type: picture-entity
|
||
entity: camera.terrasse_sub
|
||
camera_view: live
|
||
show_name: false
|
||
show_state: false
|
||
tap_action:
|
||
action: none
|
||
- type: tile
|
||
entity: number.terrasse_focus
|
||
name: Fokus
|
||
icon: mdi:focus-field
|
||
features:
|
||
- type: numeric-input
|
||
style: slider
|
||
- type: tile
|
||
entity: number.terrasse_zoom
|
||
name: Zoom
|
||
icon: mdi:magnify
|
||
features:
|
||
- type: numeric-input
|
||
style: slider
|
||
|
||
- type: picture-entity
|
||
entity: camera.indkoersel_sub
|
||
name: Indkørsel
|
||
camera_view: live
|
||
show_state: false
|
||
show_name: true
|
||
tap_action:
|
||
action: fire-dom-event
|
||
browser_mod:
|
||
service: browser_mod.popup
|
||
data:
|
||
title: Indkørsel – Live
|
||
content:
|
||
type: vertical-stack
|
||
cards:
|
||
- type: picture-entity
|
||
entity: camera.indkoersel_sub
|
||
camera_view: live
|
||
show_name: false
|
||
show_state: false
|
||
tap_action:
|
||
action: none
|
||
- type: tile
|
||
entity: number.indkoersel_focus
|
||
name: Fokus
|
||
icon: mdi:focus-field
|
||
features:
|
||
- type: numeric-input
|
||
style: slider
|
||
- type: tile
|
||
entity: number.indkoersel_zoom
|
||
name: Zoom
|
||
icon: mdi:magnify
|
||
features:
|
||
- type: numeric-input
|
||
style: slider
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# 🛡️ SIKKERHEDSSTATUS
|
||
# ─────────────────────────────────────────────────────────────
|
||
- type: heading
|
||
heading: Sikkerhedsstatus
|
||
heading_style: title
|
||
|
||
- type: grid
|
||
columns: 2
|
||
square: false
|
||
cards:
|
||
|
||
# 👥 Tilstedeværelse
|
||
- type: custom:mushroom-template-card
|
||
entity: binary_sensor.family_presence
|
||
primary: >
|
||
{{ 'Nogen hjemme' if is_state('binary_sensor.family_presence', 'on') else 'Ingen hjemme' }}
|
||
secondary: >
|
||
{% set persons = [
|
||
('Claus', 'person.claus_dethlefsen'),
|
||
('Anne', 'person.anne_schusler_dethlefsen'),
|
||
('Andreas', 'person.andreas_schusler_dethlefsen'),
|
||
('Daniel', 'person.daniel_schusler_dethlefsen')
|
||
] %}
|
||
{% set ns = namespace(home=[]) %}
|
||
{% for name, eid in persons %}
|
||
{% if is_state(eid, 'home') %}{% set ns.home = ns.home + [name] %}{% endif %}
|
||
{% endfor %}
|
||
{{ ns.home | join(', ') if ns.home else 'Alle ude' }}
|
||
icon: >
|
||
{{ 'mdi:home-account' if is_state('binary_sensor.family_presence', 'on') else 'mdi:home-outline' }}
|
||
icon_color: >
|
||
{{ 'green' if is_state('binary_sensor.family_presence', 'on') else 'blue' }}
|
||
tap_action:
|
||
action: none
|
||
|
||
# 💡 Lys
|
||
- type: custom:mushroom-template-card
|
||
entity: light.alle_lys
|
||
primary: >
|
||
{{ 'Lys er tændt' if is_state('light.alle_lys', 'on') else 'Alt lys slukket' }}
|
||
secondary: ""
|
||
icon: >
|
||
{{ 'mdi:lightbulb-on' if is_state('light.alle_lys', 'on') else 'mdi:lightbulb-off' }}
|
||
icon_color: >
|
||
{{ 'yellow' if is_state('light.alle_lys', 'on') else 'grey' }}
|
||
tap_action:
|
||
action: navigate
|
||
navigation_path: /lovelace/lys
|
||
|
||
# 🪟 Vinduer og terrassedør
|
||
- type: custom:mushroom-template-card
|
||
multiline_secondary: true
|
||
primary: >
|
||
{% set sensors = [
|
||
'binary_sensor.andreas_vindue',
|
||
'binary_sensor.daniel_vindue',
|
||
'binary_sensor.sovevaerelse_vindue',
|
||
'binary_sensor.badevaerelse_vindue',
|
||
'binary_sensor.lille_bad_vindue',
|
||
'binary_sensor.terrassedor'
|
||
] %}
|
||
{% set ns = namespace(open=0) %}
|
||
{% for s in sensors %}{% if is_state(s, 'on') %}{% set ns.open = ns.open + 1 %}{% endif %}{% endfor %}
|
||
{{ 'Alle vinduer lukket' if ns.open == 0 else ns.open | string + ' vindue(r) åben' }}
|
||
secondary: >
|
||
{% set sensor_map = {
|
||
'binary_sensor.andreas_vindue': 'Andreas',
|
||
'binary_sensor.daniel_vindue': 'Daniel',
|
||
'binary_sensor.sovevaerelse_vindue': 'Soveværelse',
|
||
'binary_sensor.badevaerelse_vindue': 'Badeværelse',
|
||
'binary_sensor.lille_bad_vindue': 'Lille bad',
|
||
'binary_sensor.terrassedor': 'Terrassedør'
|
||
} %}
|
||
{% set ns = namespace(aabne=[]) %}
|
||
{% for s, n in sensor_map.items() %}{% if is_state(s, 'on') %}{% set ns.aabne = ns.aabne + [n] %}{% endif %}{% endfor %}
|
||
{{ ns.aabne | join(', ') if ns.aabne else '' }}
|
||
icon: >
|
||
{% set sensors = [
|
||
'binary_sensor.andreas_vindue',
|
||
'binary_sensor.daniel_vindue',
|
||
'binary_sensor.sovevaerelse_vindue',
|
||
'binary_sensor.badevaerelse_vindue',
|
||
'binary_sensor.lille_bad_vindue',
|
||
'binary_sensor.terrassedor'
|
||
] %}
|
||
{% set ns = namespace(open=0) %}
|
||
{% for s in sensors %}{% if is_state(s, 'on') %}{% set ns.open = ns.open + 1 %}{% endif %}{% endfor %}
|
||
{{ 'mdi:window-open-variant' if ns.open > 0 else 'mdi:window-closed-variant' }}
|
||
icon_color: >
|
||
{% set sensors = [
|
||
'binary_sensor.andreas_vindue',
|
||
'binary_sensor.daniel_vindue',
|
||
'binary_sensor.sovevaerelse_vindue',
|
||
'binary_sensor.badevaerelse_vindue',
|
||
'binary_sensor.lille_bad_vindue',
|
||
'binary_sensor.terrassedor'
|
||
] %}
|
||
{% set ns = namespace(open=0) %}
|
||
{% for s in sensors %}{% if is_state(s, 'on') %}{% set ns.open = ns.open + 1 %}{% endif %}{% endfor %}
|
||
{{ 'red' if ns.open > 0 else 'green' }}
|
||
tap_action:
|
||
action: none
|
||
|
||
# 🚗 Garage
|
||
- type: custom:mushroom-template-card
|
||
entity: binary_sensor.garageport
|
||
primary: >
|
||
{{ 'Garage åben' if is_state('binary_sensor.garageport', 'on') else 'Garage lukket' }}
|
||
secondary: >
|
||
Sidst ændret: {{ relative_time(states.binary_sensor.garageport.last_changed) }} siden
|
||
icon: >
|
||
{{ 'mdi:garage-open-variant' if is_state('binary_sensor.garageport', 'on') else 'mdi:garage-variant' }}
|
||
icon_color: >
|
||
{{ 'orange' if is_state('binary_sensor.garageport', 'on') else 'green' }}
|
||
tap_action:
|
||
action: call-service
|
||
service: cover.toggle
|
||
target:
|
||
entity_id: cover.anne
|
||
|
||
# 🏖️ Ferietilstand
|
||
- type: custom:mushroom-template-card
|
||
entity: input_boolean.vacation_mode
|
||
primary: >
|
||
{{ 'Ferie aktiv' if is_state('input_boolean.vacation_mode', 'on') else 'Normal tilstand' }}
|
||
secondary: >
|
||
{% if is_state('input_boolean.vacation_mode', 'on') %}
|
||
{% set end = states('input_datetime.vacation_end') %}
|
||
{% if end not in ['unknown', 'unavailable', ''] %}Slutter {{ as_datetime(end).strftime('%-d. %b') }}{% endif %}
|
||
{% endif %}
|
||
icon: >
|
||
{{ 'mdi:beach' if is_state('input_boolean.vacation_mode', 'on') else 'mdi:home' }}
|
||
icon_color: >
|
||
{{ 'cyan' if is_state('input_boolean.vacation_mode', 'on') else 'grey' }}
|
||
tap_action:
|
||
action: more-info
|
||
|
||
# 🤖 AI-overvågning (indkørsel)
|
||
- type: custom:mushroom-template-card
|
||
primary: >
|
||
{% set pause = states('input_datetime.ai_indkorsel_ai_pause_until') %}
|
||
{% set paused = pause not in ['unknown', 'unavailable', ''] and as_timestamp(pause) > as_timestamp(now()) %}
|
||
{{ 'AI-overvågning pauset' if paused else 'AI-overvågning aktiv' }}
|
||
secondary: >
|
||
{% set pause = states('input_datetime.ai_indkorsel_ai_pause_until') %}
|
||
{% set paused = pause not in ['unknown', 'unavailable', ''] and as_timestamp(pause) > as_timestamp(now()) %}
|
||
{% if paused %}Genoptages kl. {{ as_datetime(pause).strftime('%H:%M') }}{% else %}Indkørsel overvåges{% endif %}
|
||
icon: >
|
||
{% set pause = states('input_datetime.ai_indkorsel_ai_pause_until') %}
|
||
{% set paused = pause not in ['unknown', 'unavailable', ''] and as_timestamp(pause) > as_timestamp(now()) %}
|
||
{{ 'mdi:robot-off' if paused else 'mdi:robot' }}
|
||
icon_color: >
|
||
{% set pause = states('input_datetime.ai_indkorsel_ai_pause_until') %}
|
||
{% set paused = pause not in ['unknown', 'unavailable', ''] and as_timestamp(pause) > as_timestamp(now()) %}
|
||
{{ 'orange' if paused else 'green' }}
|
||
tap_action:
|
||
action: more-info
|
||
entity: input_datetime.ai_indkorsel_ai_pause_until
|
||
|
||
# 🔒 Terrassedør (separat overblik)
|
||
- type: custom:mushroom-template-card
|
||
entity: binary_sensor.terrassedor
|
||
primary: >
|
||
{{ 'Terrassedør åben' if is_state('binary_sensor.terrassedor', 'on') else 'Terrassedør lukket' }}
|
||
secondary: >
|
||
Sidst ændret: {{ relative_time(states.binary_sensor.terrassedor.last_changed) }} siden
|
||
icon: >
|
||
{{ 'mdi:door-open' if is_state('binary_sensor.terrassedor', 'on') else 'mdi:door-closed' }}
|
||
icon_color: >
|
||
{{ 'red' if is_state('binary_sensor.terrassedor', 'on') else 'green' }}
|
||
tap_action:
|
||
action: more-info
|
||
|
||
# 📡 Bevægelse i indkørslen lige nu
|
||
- type: custom:mushroom-template-card
|
||
entity: binary_sensor.indkorsel_sensor_motion
|
||
primary: >
|
||
{{ 'Bevægelse registreret!' if is_state('binary_sensor.indkorsel_sensor_motion', 'on') else 'Ingen bevægelse' }}
|
||
secondary: >
|
||
Sidst: {{ relative_time(states.binary_sensor.indkorsel_sensor_motion.last_changed) }} siden
|
||
icon: >
|
||
{{ 'mdi:motion-sensor' if is_state('binary_sensor.indkorsel_sensor_motion', 'on') else 'mdi:motion-sensor-off' }}
|
||
icon_color: >
|
||
{{ 'red' if is_state('binary_sensor.indkorsel_sensor_motion', 'on') else 'grey' }}
|
||
tap_action:
|
||
action: none
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# 📋 SENESTE BEVÆGELSE – INDKØRSEL (AI-log)
|
||
# ─────────────────────────────────────────────────────────────
|
||
- type: heading
|
||
heading: Seneste bevægelse – Indkørsel
|
||
heading_style: title
|
||
|
||
# Seneste snapshot gemt af AI-overvågningsscriptet
|
||
- type: picture-entity
|
||
entity: camera.indkorsel_snapshot
|
||
show_name: false
|
||
show_state: false
|
||
tap_action:
|
||
action: fire-dom-event
|
||
browser_mod:
|
||
service: browser_mod.popup
|
||
data:
|
||
title: Seneste bevægelse – Indkørsel
|
||
content:
|
||
type: picture-entity
|
||
entity: camera.indkorsel_snapshot
|
||
show_name: false
|
||
show_state: false
|
||
tap_action:
|
||
action: none
|
||
|
||
# Seneste AI-beskrivelse
|
||
- type: custom:button-card
|
||
entity: input_text.last_notification_message
|
||
show_name: false
|
||
show_icon: true
|
||
show_state: true
|
||
icon: mdi:robot
|
||
styles:
|
||
card:
|
||
- padding: 14px 16px
|
||
- text-align: left
|
||
grid:
|
||
- grid-template-areas: '"i s"'
|
||
- grid-template-columns: 44px 1fr
|
||
- grid-template-rows: auto
|
||
icon:
|
||
- width: 32px
|
||
- height: 32px
|
||
- color: var(--primary-color)
|
||
- align-self: flex-start
|
||
- margin-top: 2px
|
||
state:
|
||
- white-space: normal
|
||
- word-break: break-word
|
||
- font-size: 13px
|
||
- text-align: left
|
||
- line-height: "1.5"
|
||
tap_action:
|
||
action: none
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# 📸 SENESTE PERSON-SNAPSHOT – INDKØRSEL
|
||
# ─────────────────────────────────────────────────────────────
|
||
- type: heading
|
||
heading: Seneste person i indkørsel
|
||
heading_style: subtitle
|
||
|
||
# Klik åbner galleri med alle tidligere snapshots
|
||
- type: picture
|
||
image: /local/snapshots/indkorsel/latest.jpg
|
||
tap_action:
|
||
action: navigate
|
||
navigation_path: /lovelace/indkorsel-snapshots
|
||
|
||
# Logbog over bevægelseshændelser (48 timer)
|
||
- type: logbook
|
||
entities:
|
||
- binary_sensor.indkorsel_sensor_motion
|
||
hours_to_show: 48
|
||
title: Bevægelseslog (48 timer)
|