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)