Snapshot via WebRTC in Medien Speicher

Hallo Zusammen,
ich würde gerne mit dem Auslösen des Bewegeungsmelders eine Snapshot der kamera ( WebRTC Stream) in dem Medien - Camera Ordner abspeichern…oder wo es sonst übersichtlich möglich ist.

Einen Snapshot via App-Push verschicken bekomme ich hin. Aber nicht das Speichern.

Ich hab hier auf einer Webseite was gefunden, was gefühlt schon mal in die richtige Richtung geht. :

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'

Was ich dann wiederum entsprechend meiner WebRTC Standbild url angepasst habe. Eine entity_id existiert bei WebRTC cams ja nicht. Also etwa so:


action:
  - service: camera.snapshot
    target:
 image: >-
  http://192.168.178.5:1984/api/frame.jpeg?src=rtsp://192.168.178.10:554/stream=1
 data:
      filename: '/media/local/op.jpg_{{ now ().year }}_{{ now ().month }}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute }}.jpg'

Ich finde immer code schnipsel, wie diese, und bin dann aber überfragt, wo diese eigentlich hin gehören? Wo lege ich den abseites des UI eine Aktion mit eigenem code an? Kommt das auch in die configuration.yaml?

Danke Euch und Grüße

Bei target müsste die Camera Entität rein:

service: camera.snapshot
data:
  filename: /config/www/op_{{ now ().year }}_{{ now ().month }}_{{ now ().day }}_{{ now ().hour }}_{{ now ().minute }}.jpg
target:
  entity_id:
    - camera.g4_dome_high
enabled: true

Der Code ist die Aktion einer Automation. Kannst du auch über die UI machen, indem du in der Automation bei Aktion den Dienst camera.snapshot nimmst und dann alles weiter befüllst.

Es gibt leider keine Camera Entität. Die Generic Kameras schaffen den Stream nicht und brechen immer ohne Bild ab. Daher ist die einzige Möglichkeit, via WebRTC. Und das erzeugt keine Entität.

Hallo!

Ich habe behelfsweise die Downloader Integration genutzt um einen MP4-Frame von go2rtc zu holen - das geht natürlich auch mit dem o.g. JPEG-Pfad.

–> Nachdem die Integration mit einem Downloadpfad eingerichtet wurde, welcher der Media source Integration bereits zugänglich ist (z.B. /media/camera, ggf. vorher erstellen), lässt sich per Skript oder Automatisierung der Dienst starten:

action: downloader.download_file
data:
  overwrite: true
  url: http://127.0.0.1:1984/api/frame.mp4?src=MeinStream
  filename: /config/www/snapshot_MeinStream_{{ now().strftime("%Y%m%d-%H%M%S") }}.mp4

Oder jede andere für HA erreichbare URL, darunter auch die oben genannte oder weitere Links aus der go2rtc API:

action: downloader.download_file
data:
  overwrite: true
  url: http://127.0.0.1:1984/api/frame.jpeg?src=MeinStream
  filename: /config/www/snapshot_MeinStream_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg

Wird ein anderer Zielpfad bevorzugt, muss dieser ggf. über die configuration.yaml der Media source Integration bzw. HA allgemein zur Verfügung gestellt werden:

homeassistant:
  media_dirs:
    media: /media
    tmp: /tmp
  allowlist_external_dirs:
    - /tmp

Während das die ursprüngliche Frage beantworten sollte, wüsste ich gerne ob das besser geht:

Etwas eleganteres, wie camera.snapshot, würde auch mich interessieren; das Offenhalten der go2rtc-API (Port 1984 bzw. 81294) möchte ich vermeiden.