Kamera Snapshot erstellen und über Telegram verschicken (mit Home Assistant) in 2 Schritten

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.

Kamera Snapshot erstellen und über Telegram verschicken (mit Home Assistant)

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:

9,99 EUR € Rabatt
Ubiquiti Networks UniFi Protect G4 Dome Camera UVC-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
( 402 Followers )
X

Follow Home Assistant

E-mail : *
* Ich stimme der Datenschutzerklärung zu!

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!

Dieser Beitrag ist Teil einer kleinen Beitrags-Serie rund um den hass.io Home Assistant.

9 Gedanken zu „Kamera Snapshot erstellen und über Telegram verschicken (mit Home Assistant) in 2 Schritten“

  1. 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

    Antworten
  2. 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

    Antworten
  3. 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

    Antworten
    • 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.

      Antworten
      • 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

        Antworten
  4. 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?

    Antworten
    • 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

      Antworten

Schreibe einen Kommentar