Sicherheit: Einfahrt AI-Erkennung
Macht alle 30 Sekunden einen Kamera-Snapshot der Einfahrt und schickt ihn durch lokale AI-Objekterkennung. Telegram-Nachricht mit Foto und Inline-Buttons bei relevanten Objekten (Person, Auto, Tier). Laeuft nur nachts (22-06) oder bei Abwesenheit. Cooldown: 2 Min (Person), 10 Min (andere).
Entitäten:camerasensorpersontelegram_botshell_command
Was brauchst du dafür?
Integrationen
- Telegram Bot
- Kamera-Integration
- Shell Command
Geräte
- Sensor
- Kamera
- Person/Anwesenheit
Was musst du anpassen?
| Platzhalter | Ersetze mit |
|---|---|
| DEIN_NAME | Deine Person-Entity (z.B. person.max) |
| DEINE_KAMERA | Deine Kamera-Entity-ID (z.B. camera.einfahrt) |
Sicherheit: Einfahrt AI-Erkennung
# Entity-IDs sind anonymisiert. Ersetze sie durch deine eigenen.
# Beispiel: light.dein_wohnzimmer_licht -> light.wohnzimmer_deckenlampe
# Sicherheit: Einfahrt AI-Erkennung
# Alle 30 Sekunden wird ein Snapshot von der Einfahrt-Kamera gemacht,
# durch eine AI-Objekterkennung geschickt und bei relevanten Objekten
# eine Telegram-Benachrichtigung mit Foto gesendet.
# Cooldown: 2 Min bei Personen, 10 Min bei anderen Objekten.
alias: "Sicherheit: Einfahrt AI-Erkennung"
description: >-
Alle 30s Snapshot -> AI-Erkennung -> Telegram bei relevanter Erkennung.
- Laeuft nur nachts (22-06) oder bei Abwesenheit
- Statische Objekte (Topfpflanze, Bank, Vase) werden ignoriert
- Englische Labels werden uebersetzt
- Cooldown: 2 Min nach Person, 10 Min nach anderen Objekten
- Kein Blocking-Delay -- Automation bleibt immer reaktionsfaehig
# --- Trigger: Alle 30 Sekunden ---
triggers:
- trigger: time_pattern
seconds: /30
alias: Alle 30 Sekunden
# --- Bedingung: Nur nachts oder bei Abwesenheit ---
conditions:
- condition: or
alias: Nur nachts oder bei Abwesenheit
conditions:
- condition: time
after: "22:00:00"
before: "06:00:00"
- condition: not
conditions:
- condition: state
entity_id: person.DEIN_NAME # z.B. person.dein_name
state: home
# --- Aktionen ---
actions:
# Snapshot von der Einfahrt-Kamera erstellen
- alias: Snapshot von Einfahrt-Kamera
action: camera.snapshot
target:
entity_id: camera.DEINE_KAMERA # z.B. Einfahrt-Kamera
data:
filename: /config/www/tmp/camera/einfahrt_ai.jpg
- delay: 00:00:03
alias: Warten bis Snapshot gespeichert
# AI-Erkennung auf dem Snapshot ausfuehren (Shell Command)
- alias: AI-Erkennung auf Snapshot ausfuehren
action: shell_command.ai_detect_einfahrt
- delay: 00:00:05
alias: Warten auf AI-Analyse
# Sensor mit AI-Ergebnis aktualisieren
- alias: AI-Sensor aktualisieren
action: homeassistant.update_entity
target:
entity_id: sensor.ai_einfahrt_ergebnis
- delay: 00:00:01
alias: Kurz warten bis Sensor aktualisiert
# Variablen: Ignorier-Liste, Uebersetzungen, Cooldown-Berechnung
- alias: Variablen fuer Filterung und Uebersetzung setzen
variables:
ignore_objects:
- potted plant
- bench
- vase
- topfpflanze
translate_map:
person: Person
car: Auto
cat: Katze
dog: Hund
bird: Vogel
bicycle: Fahrrad
motorcycle: Motorrad
truck: LKW
umbrella: Regenschirm
backpack: Rucksack
handbag: Handtasche
suitcase: Koffer
cell phone: Handy
laptop: Laptop
sports ball: Ball
bus: Bus
skateboard: Skateboard
bowl: Schale
chair: Stuhl
dining table: Tisch
book: Buch
ai_raw: '{{ states("sensor.ai_einfahrt_ergebnis") }}'
filtered_list: >-
{% set items = states("sensor.ai_einfahrt_ergebnis").split(", ") %}
{% set ns = namespace(result=[]) %}
{% for item in items %}
{% set clean = item | trim | lower %}
{% if clean not in ignore_objects %}
{% set translated = translate_map.get(clean, item) %}
{% set ns.result = ns.result + [translated] %}
{% endif %}
{% endfor %}
{{ ns.result | join(", ") }}
has_person: '{{ "person" in (states("sensor.ai_einfahrt_ergebnis") | lower) }}'
timestamp: '{{ now().strftime("%H:%M") }}'
seconds_since_last: >-
{{ (now() - state_attr("automation.sicherheit_einfahrt_ai_erkennung",
"last_triggered") | as_datetime).total_seconds() | default(9999) }}
# Nur weiter wenn relevante Objekte erkannt wurden
- alias: Pruefe ob relevante Objekte erkannt wurden
condition: template
value_template: >-
{{ ai_raw not in ["Keine Objekte", "Warte auf Analyse", "unavailable", "unknown"]
and filtered_list | length > 0 }}
# Entscheidung: Person erkannt (kurzer Cooldown) oder anderes Objekt (langer Cooldown)
- choose:
# Person erkannt -- Cooldown 2 Minuten
- alias: Person erkannt -- Cooldown 2 Min
conditions:
- condition: template
value_template: "{{ has_person and seconds_since_last | float(9999) > 120 }}"
sequence:
- alias: Foto mit Person-Warnung an Telegram senden
action: telegram_bot.send_photo
data:
caption: >-
Einfahrt -- {{ timestamp }}
Person erkannt!
Objekte: {{ filtered_list }}
file: /config/www/tmp/camera/einfahrt_ai.jpg
inline_keyboard:
- - - Licht einschalten
- /einfahrt_licht_an
- - Neues Foto
- /einfahrt_neues_foto
- - - 30 Min. stumm
- /einfahrt_stumm_30
# Andere Objekte -- Cooldown 10 Minuten
default:
- alias: Pruefe Cooldown 10 Min fuer nicht-Person-Objekte
condition: template
value_template: "{{ seconds_since_last | float(9999) > 600 }}"
- alias: Foto mit Objekt-Erkennung an Telegram senden
action: telegram_bot.send_photo
data:
caption: >-
Einfahrt -- {{ timestamp }}
Bewegung erkannt.
Objekte: {{ filtered_list }}
file: /config/www/tmp/camera/einfahrt_ai.jpg
inline_keyboard:
- - - Licht einschalten
- /einfahrt_licht_an
- - Neues Foto
- /einfahrt_neues_foto
- - - 30 Min. stumm
- /einfahrt_stumm_30
mode: single
max_exceeded: silent
