Wie kann man in Home Assistant einen Kamera Snapshot erstellen und diesen über Telegram verschicken? Als smarte Benachrichtigung habe ich dies zuletzt umgesetzt und möchte dich daran teilhaben lassen.
Im Rahmen meines Versuches, möglichst wenige Geräte und Anwendungen in meinem Smarthome zu nutzen, die ausschließlich über eine Anbindung an die Cloud funktionieren, habe ich zuletzt auch die bislang geliebte Netatmo Presence Kamera gegen eine andere Kamera getauscht.
Tatsächlich ist die Netatmo Presence noch im Einsatz, da ich die automatische Flutlichtfunktion sehr schätze. Aber zeitgleich nutze ich nun auch eine UniFi Protect G4 Dome:
- W125935142
- Ubiquiti Networks UniFi Protect G4 Dome Camera UVC-G4-DOME, IP...
Nachdem die Kamera in Home Assistant integriert ist, ist das erstellen von Snapshots des Kamera-Feeds sehr einfach. Darüber hinaus diesen Snapshot zu verschicken, ist auch nicht wirklich schwer. Aber der Reihe nach;
Inhaltsverzeichnis
Du magst Home Assistant? Dann abonniere kostenlos meine Beiträge mit Tipps, Tricks und Anleitungen rund um Home Assistant:
Follow Home Assistant
Garantiert kein Spam, keine Werbung und immer mit Abmelde-Link, solltest du es dir anders überlegen!
Home Assistant Kamera Snapshot erstellen und speichern
Für das Erstellen von Snapshots (also Momentaufnahmen) eines Kamera-Feeds bringt Home Assistant eigentlich schon alles benötigte mit. Hierfür nutzen wir den Service „camera.snapshot“ (Home Assistant Camera Snapshot), welcher von Automatisierungen oder Skripten aufgerufen werden kann.
Alles, was man dann noch machen muss, ist diesem Service mitzuteilen, von welcher Kamera ein Snapshot erstellt werden soll, wo der Snapshot gespeichert werden soll und wie dieser Snapshot heißen soll.
Das alles kann dann wie folgt aussehen:
action: - service: camera.snapshot target: entity_id: camera.g4_dome_high data: filename: '/config/www/cam_captures/dome_{{ now ().year }}_{{ now ().month }}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute }}.jpg'
Ein wenig Erklärung zu dem Code:
- Wir erstellen einen Snapshot von der Entität camera.g4_dome_high. So heißt bei mir die Kamera von UniFi Protect halt. Bei dir wird der Name natürlich ein anderer sein 😉
- Als „filename“ definieren wir zum einen den Speicherort, welche „config/www/cam_captures/“ ist. In diesem Ordner der Home Assistant Instanz legen wir die Bilddateien also ab. Zum anderen benennen wir die erstellten Bilder/Snapshots dahingehend eindeutig, als das wir das aktuelle Datum und die aktuelle Uhrzeit als Dateinamen nutzen.
Konkret würde ein solches Snapshot-Bild dann wie folgt heißen können:
dome_2022_2_24_14_30.jpg
Erstellten Kamera Snapshot verschicken
Nun haben wir also einen Snapshot der Kamera erstellt und diesen mit einem eindeutigen Dateinamen gespeichert. Diesen kann man dann natürlich auch verschicken.
Was nützt dir der Snapshot, wenn du ihn nicht automatisch angezeigt bekommst?
Ich persönlich nutze hierfür Telegram. Man muss Telegram nicht mögen, ich persönlich finde die Möglichkeiten in Kombination mit Home Assistant aber sehr interessant. Entsprechend beschreibe ich mit meinem Code-Beispiel, wie ein Snapshot mittels Telegram verschickt werden kann.
Ich setze somit voraus, dass du Telegram als Notify-Möglichkeit entsprechend eingerichtet hast!
Hier ein Code-Beispiel, wie der Versand umgesetzt werden kann:
- service: notify.telegram data: title: Dome-Alarm! data: photo: - file: '/config/www/cam_captures/dome_{{ now ().year }}_{{ now ().month }}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute }}.jpg' capture: Snapshot
Über den Service „notify.telegram“ verschicken wir ein vorhandenes Bild, und zwar konkret den zuvor erstellten Snapshot. Entsprechend geben wir unter „file“ exakt den gleichen Dateinamen an, den wir zuvor beim Erstellen des Snapshots genutzt haben.
Dies setzt natürlich voraus, dass beide Services unmittelbar nacheinander aufgerufen werden, da sonst aufgrund des Bezuges zur aktuellen Uhrzeit, die Dateinamen abweichen können.
Automatisierung zum Versand von Kamera Snapshots
In Summe kann man aus den zuvor gezeigten Code-Beispielen nun eine Automatisierung bauen, die einen informiert, sobald eine Bewegung erkannt wird.
Konkret möchte ich nun folgendes erreichen: sobald die Kamera eine Bewegung erkennt, soll es eine Telegram-Nachricht geben, mit dem Snapshot als Inhalt. Somit werde ich automatisch informiert, sobald die Kamera eine Bewegung erkannt hat.
Ergänzend schränke ich diese Benachrichtigung nun jedoch noch ein, nämlich um eine Bedingung: Die Benachrichtigung soll nur erfolgen, wenn niemand zu Hause ist.
- alias: "Dome Movement" trigger: - platform: state to: 'on' entity_id: binary_sensor.g4_dome_motion condition: - condition: state entity_id: group.awesome_people state: 'not_home' action: - service: camera.snapshot target: entity_id: camera.g4_dome_high data: filename: '/config/www/cam_captures/dome_{{ now ().year }}_{{ now ().month }}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute }}.jpg' - delay: seconds: 10 - service: notify.telegram data: title: Dome-Alarm! message: Bewegung erkannt! data: photo: - file: '/config/www/cam_captures/dome_{{ now ().year }}_{{ now ().month }}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute }}.jpg' capture: Snapshot
Der untere Teil des Codes ist eine 1:1 Kopie der hier bereits gezeigten Codes. Entsprechend gehe ich nun „nur noch“ auf die neuen, wesentlichen Code-Zeilen ein!
Im Wesentlichen sind nun nur noch folgende Code-Zeilen „neu“:
trigger: - platform: state to: 'on' entity_id: binary_sensor.g4_dome_motion condition: - condition: state entity_id: group.awesome_people state: 'not_home'
Die UniFi Protect G4 Dome Kamera liefert einen weiteren Sensor, nämlich den Binary-Sensor, welcher den Status „on“ erhält, sobald eine Bewegung erkannt wurde.
Wenn dieser Sensor auf „on“ wechselt, soll unsere Automatisierung ausgeführt werden, allerdings nur, wenn die direkt folgende Kondition erfüllt wird.
Als Kondition prüfen wir nun, ob die Gruppe „group.awesome_people“ nicht zu Hause ist. Hierfür habe ich in meiner configuration.yaml zuvor bereits diese Gruppe „awesome_people“ definiert, welche aus mehreren Handys des Haushaltes besteht. Sobald also auch nur ein relevantes Handy zu Hause ist, gilt die Gruppe als zu Hause.
Nur, wenn also niemand zu Hause ist, erhalte ich eine Benachrichtigung mit dem aktuellen Kamera-Snapshot, sobald eine Bewegung von der Kamera erkannt wurde!
Produktempfehlungen
Hallo Leute,
bei mir funktioniert es leider auch nicht..
Kann mir dort einer helfen ich bin am verzweifeln.
Die Dateien werden alle im file editor unter www/cam_captures abgelegt.
Aber es werden sie nicht per Whatsapp versendet…
Hier meine Automatisierung:
alias: Kamera Snapshot WhatsApp versenden
description: „“
trigger:
– platform: state
entity_id:
– binary_sensor.glubschi_bewegung
to: „on“
condition: []
action:
– service: camera.snapshot
data:
filename: >-
/config/www/cam_captures/dome_{{ now ().year }}_{{ now ().month }}_{{
now ().day }}_{{ now ().hour }}_{{ now ().minute }}.jpg
target:
entity_id:
– camera.glubschi_fliessend
– service: notify.whatsapp_a
data:
message: Bewegung erkannt!
data:
photo:
– file: >-
/config/www/cam_captures/dome_{{ now ().year }}_{{ now ().month
}}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute }}.jpg
capture: Snapshot
Super. Das muss ich gleich mal ausprobieren. Danke schön.
Mir ist nur die now()-Kette zu lang. Ich werde dafür die strftime-Funktion von now() verwenden. Ist aber Geschmackssache.
{{ now ().year }}_{{ now ().month }}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute }} = 2023_9_30_7_29
{{ now().strftime(„%Y_%m_%d_%H_%M“) }} = 2023_09_30_07_29
Danke für den Tipp, das ist mit strftime() natürlich auch super gelöst!
Hallo. Genau SOWAS habe ich gesucht! Vielen Dank!
Hallo Oli, zuerst vielen Dank für die Anleitung. hatte aber genau das gleiche Problem wie Thomas. Snapshot wollte einfach nicht übertragen werden. War am verzweifeln woran es liegt. Endlich heute nach drei weiteren Tagen testen und probieren hat es genau mit der
Änderung (ab „Target“) geklappt. Lag nur an den ‚ und genauem einrücken. Hoffe das hilft anderen auch. Nochmals vielen Dank.
target:
entity_id: camera.tapo_camera_fed6_hd_stream
data:
filename: >-
/config/www/cam_captures/tapo_camera_{{ now ().year }}_{{ now ().month
}}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute }}.jpg
– service: notify.telegram_notify_3
data:
title: TapoCam-Alarm!
message: Eingangsbereich Bewegung erkannt!
data:
photo:
file: >-
/config/www/cam_captures/tapo_camera_{{ now ().year }}_{{ now
().month }}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute
}}.jpg
mode: single
PS: Sieht man leider so nicht wo man nach „data:“ einrücken muss und aus dem Hochkomma wurde ein normales Komma. 🙂 Eventuell kannst du es ja in Deiner Beschreibung oben anpassen.
Hi Rolf!
Also ich habe den Code gerade 1:1 so in meinen Home Assistant Editor kopiert und er macht keine Probleme. Sehr komisch. Ich nutze aber seit ein paar Wochen eine andere Möglichkeit um Code einzubinden, das ändere ich an diesem Beitrag auch mal. Vielleicht hilft das ja!
VG und ein schönes Wochenende!
Olli
Hallo Olli, Danke für die Anleitung. Ich habe das Problem das der Snapshot nicht mit übertragen wird. Füge ich nur eine Nachricht von HomeAssistant an Telegramm ein funktioniert es. Hast du eine Idee woran das liegen kann?
Hallo Thomas,
das klingt danach, als wäre mit dem Bilderpfad oder Bild nicht in Ordnung. Kannst du die Dateien/Bilder denn im Dateiexplorer sehen? Und liegen diese da, wo du es gem. Script erwartest?
VG
Olli