[gelöst] frigate

Begonnen von pula, 26 Mai 2023, 21:16:41

Vorheriges Thema - Nächstes Thema

pula

Hallo,

wurde von einem Freund auf frigate aufmerksam gemacht, das ich mal testweise in einem container installiert habe. schaut nicht schlecht aus.
hat das jemand schon in fhem integriert und wäre bereit die (mqtt) config zu teilen?
Cheers,
Pula
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram

betateilchen

Zitat von: pula am 26 Mai 2023, 21:16:41und wäre bereit die (mqtt) config zu teilen?

Das ist doch vollständig dokumentiert - was ist Dir unklar, um das in FHEM zu nutzen?

https://github.com/blakeblackshear/frigate/blob/dev/docs/docs/integrations/mqtt.md
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

pula

nix, ich hatte nur gehofft, daß jemand das schon gemacht hat und evtl ein template hat oder so...
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram

pula

Zusatzfrage:
in readings der cam werden (anscheinend) binärdaten mit einem bild (snapshot) geliefert.
die daten fangen so an:
����␐JFIF␁␁␁␁��C
␇␇␈␇␆
␈␈␈␋

␋␎␘␐␎

␎␝␕␖␑␘#␟%$"␟"!&+7/&)4)!"0A149;>>>%.DIC<H7=>;��C␁
␋␋␎
Dürfte also ein jfif-bild sein. Gibt es eine Möglichkeit, das in fhem anzeigen zu lassen?
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram

rudolfkoenig

ZitatDürfte also ein jfif-bild sein. Gibt es eine Möglichkeit, das in fhem anzeigen zu lassen?
Ja, sinnvollerweise speichert man es irgendwo unter /opt/fhem/www (z.Bsp. mit der WriteFile($filename, $data) Funktion aus Utils.pm), dann kann man auf diese gespeicherte Datei einen (HTML) Link setzen.

pula

Danke für die rasche und tolle Antwort!
WriteFile haut so weit mal hin, das bild wird mit einem viewer angezeigt.
{WriteFile("www/test.jpg", ReadingsVal('frigate','garage_person_snapshot',''))}Leider tu ich mich in fhemweb schwer, dann dieses Bild anzeigen zu lassen.
mit einem define blubb weblink image www/test.jpg und anschliessendem set WEB rereadicons wird das bild nur "broken" angezeigt.
Bei der img-source im Browser wird das so aufgelöst:
<img src="www/test.jpg">Die Adresse des Bildes ist dann https://192.168.1.11:8083/www/test.jpgIch hab jetzt alle möglichen Pfade ausprobiert, die mir so eingefallen sind, aber irgendwie komm ich nicht weiter. Wie müsste denn die img-src aussehen, damit fhem das bild per http serviert?
Sorry, wenn ich mich dämlich anstelle....
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram

rudolfkoenig

Bei Anzeigen aus dem www Verzeichnis habe ich mich geirrt, es muss ein Unterverzeichnis von www sein, z.Bsp. www/images.

Wenn die Datei gespeichert ist, hat man mehrere Moeglichkeiten.
- mit einem unbenutzten Attribut (statt comment kann man auch per userattr was Eigenes definieren):
attr dev comment <html><img src="fhem/images/test.jpg"></html>- mit einem weblink:
define wl weblink image fhem/images/test.jpg

Mit eine readingsList Zeile wie
<topic>:.* { WriteFile("www/images/test.jpg", $EVENT) } koennte man die Daten auch direkt speichern, ohne die Detailansicht "kaputtzumachen".

pula

Super, vielen, vielen Dank!
Das funktioniert wie es soll :-)
Und das direkt ins readingsList mit reinzunehmen ist genial!
Danke!
Cheers,
Pula
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram

pula

#8
hm. wobei das WriteFile spannenderweise nicht ausgeführt wird. Stattdessen wird ein attribut mit folgendem Namen erzeugt:
{ WriteFile("www/images/stiege_snap.jpg", $EVENT) }Also inklusive der geschwungenen Klammern. Und in dem Attribut werden die Bilddaten abgelegt. Spannend.
Ein fhem:frigate/events:.* { json2nameValue($EVENT, 'events_', $JSONMAP) } in der ReadingList funktioniert tadellos.
Die Zeile, die ich in der ReadingList eingefügt habe:
fhem:frigate/stiege/person/snapshot:.* { WriteFile("www/images/stiege_snap.jpg", $EVENT) }ist doch eigentlich syntaktisch gleich und sollte auch ausgeführt werden.
Im log findet sich dazu nur folgendes:
MQTT2_DEVICE_Parse: frigate frigate/stiege/cat/snapshot => { WriteFile("www/images/stiege_snap.jpg", $EVENT) } Merkwürdig
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram

Icinger

readingList <regexp> [readingName|perl-Expression] ...
If the regexp matches topic:message or cid:topic:message either set readingName to the published message, or evaluate the perl expression, which has to return a hash consisting of readingName=>readingValue entries.

Ich unterstelle mal, dass WriteFile keinen hash zurückgibt.

Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

rudolfkoenig

ZitatIch unterstelle mal, dass WriteFile keinen hash zurückgibt.
Stimmt, das kommt davon, wenn man die eigenen Beispiele nicht durchtestet.

Naechster Versuch:

Wenn readingList folgende Zeile enthaelt:
fhem:frigate/stiege/person/snapshot:.* { WriteFile("www/images/stiege_snap.jpg", $EVENT);; {snapshot =>'<html><img src="fhem/images/stiege_snap.jpg"></html>' } }
dann erzeugt
mosquitto_pub -i fhem -t frigate/stiege/person/snapshot -f SP-120.jpg
das angehaengte Bild.

pula

Danke für Eure Bemühungen.
Ich muss zu meiner Schande gestehen, daß das Problem an meinem System lag :-(
Ich hatte die Bilder im Eifer des Gefechts zum Testen als root im filesystem kopiert und übersehen, daß der fhem-user dann ja nicht drüberschreiben kann. Schande über mich, aber das ist mir leider wirklich erst jetzt beim Test Deiner Zeilen aufgefallen.
Im log wäre das eh auch aufgefallen:
2023.06.05 07:00:15 1: ERROR WriteFile www/images/stiege_snap.jpg: Permission deniednur hab ich grad ziemlich viel auf verbose und das übersehen :-(
Danke auf jeden Fall nun _scheint_ es zu tun. schaumamoi die nächsten Tage...
Cheers,
Pula
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram

pula

hm. irgendwas mache ich wahrscheinlich falsch.
Es werden jetzt zwar die Attribute mit den Bildern richtig angezeigt, ZUSÄTZLICH habe ich aber Readings mit den Bildern UND den Binärdaten.  :o
Das ist zwar nicht tragisch, weil es der Funktionalität keinen Abbruch tut, aber schön ist es irgendwie auch nicht.
Ich hab mal ein list von dem Device angehängt, ich hoffe, man kann das so halbwegs lesen - die Bilder sieht man natürlich nicht. Falls jemand noch Ideen hätte, würde ich mich sehr freuen.
Cheers,
Pula
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram

rudolfkoenig

Zitathm. irgendwas mache ich wahrscheinlich falsch.
Davon gehe ich auch aus, ich weiss aber nicht was, meine Experimente erzeugen kein "Reading-Muell" wie im Anhang.


Mein abgewandelter Vorschlag mit
WriteFile("www/images/garage_snap.jpg", $EVENT); {snap_garage =>'' } } ist vermutlich auch nicht das, was man will, ich tippe da eher auf sowas:
WriteFile("www/images/garage_snap.jpg", $EVENT); undef }

Ich hab mal ein list von dem Device angehängt,
Bitte statt list den "Copy for forum.fhem.de" Link verwenden (oder "Raw definition, With internals" kopieren), da sind Mehrdeutigkeiten wegen fehlende \ oder ;; ausgeschlossen.

pula

#14
vielen, vielen Dank!
Das mit dem copy_for_forum ist mir neu (oder ich hab es vergessen), danke für den Hinweis!
Hab noch ein wenig herumgebastelt, komm aber irgendwie nicht weiter. Evtl mach ich das dann doch mit notify und einer einer sub.
So schaut das device momentan aus (die Bilddaten hab ich durch den String BINAERDATEN ersetzt)

define frigate MQTT2_DEVICE frigate
attr frigate userattr snap_stiege snap_garage
attr frigate IODev mqtt2
attr frigate readingList fhem:frigate/stiege/motion:.* stiege_motion\
fhem:frigate/stiege/recordings/state:.* stiege_recordings_state\
fhem:frigate/stiege/snapshots/state:.* stiege_snapshots_state\
fhem:frigate/stiege/detect/state:.* stiege_detect_state\
fhem:frigate/stiege/motion/state:.* stiege_motion_state\
fhem:frigate/stiege/improve_contrast/state:.* stiege_improve_contrast_state\
fhem:frigate/stiege/motion_threshold/state:.* stiege_motion_treshold_state\
fhem:frigate/stiege/motion_contour_area/state:.* stiege_motion_contour_area_state\
fhem:frigate/garage/recordings/state:.* garage_recordings_state\
fhem:frigate/garage/snapshots/state:.* garage_snapshots_state\
fhem:frigate/garage/detect/state:.* garage_detect_state\
fhem:frigate/garage/motion/state:.* garage_motion_state\
fhem:frigate/garage/improve_contrast/state:.* garage_improve_contrast_state\
fhem:frigate/garage/motion_threshold/state:.* garage_motion_treshold_state\
fhem:frigate/garage/motion_contour_area/state:.* garage_motion_contour_area_state\
fhem:frigate/available:.* frigate_available\
fhem:frigate/stiege/all:.* stiege_all\
fhem:frigate/garage/all:.* garage_all\
fhem:frigate/events:.* { json2nameValue($EVENT, 'events_', $JSONMAP) }\
fhem:frigate/stiege/person:.* stiege_person\
fhem:frigate/stiege/cat:.* stiege_cat\
fhem:frigate/stiege/.*/snapshot:.* { WriteFile("www/images/stiege_snap.jpg", $EVENT);; undef }\
fhem:frigate/stiege/dog:.* stiege_dog\
fhem:frigate/garage/person:.* garage_person\
fhem:frigate/garage/.*/snapshot:.* { WriteFile("www/images/garage_snap.jpg", $EVENT);; undef }\
fhem:frigate/garage/car:.* garage_car
attr frigate room MQTT,Verschiedenes
attr frigate snap_garage <html><img src="fhem/images/garage_snap.jpg"></html>
attr frigate snap_stiege <html><img src="fhem/images/stiege_snap.jpg"></html>
attr frigate stateFormat connected
attr frigate verbose 5
#   CID        frigate
#   DEF        frigate
#   FUUID      647ef00f-f33f-527c-fc0f-87aab36aa7d19255
#   IODev      mqtt2
#   LASTInputDev mqtt2
#   MSGCNT     168
#   NAME       frigate
#   NR         861
#   STATE      connected
#   TYPE       MQTT2_DEVICE
#   eventCount 167
#   mqtt2_MSGCNT 168
#   mqtt2_TIME 2023-06-06 12:11:35
#   OLDREADINGS:
#   READINGS:
#     2023-06-06 10:45:25   IODev           mqtt2
#     2023-06-06 12:11:14   events_after_area 195940
#     2023-06-06 12:11:14   events_after_box_1 108
#     2023-06-06 12:11:14   events_after_box_2 568
#     2023-06-06 12:11:14   events_after_box_3 496
#     2023-06-06 12:11:14   events_after_box_4 1073
#     2023-06-06 12:11:14   events_after_camera stiege
#     2023-06-06 11:58:31   events_after_end_time 1686045510.222514
#     2023-06-06 12:11:14   events_after_false_positive false
#     2023-06-06 12:11:14   events_after_frame_time 1686046274.23953
#     2023-06-06 12:11:14   events_after_has_clip true
#     2023-06-06 12:11:14   events_after_has_snapshot false
#     2023-06-06 12:11:14   events_after_id 1686044416.660174-tnn62d
#     2023-06-06 12:11:14   events_after_label person
#     2023-06-06 12:11:14   events_after_motionless_count 8905
#     2023-06-06 12:11:14   events_after_position_changes 1
#     2023-06-06 12:11:14   events_after_ratio 0.7683168316831683
#     2023-06-06 12:11:14   events_after_region_1 0
#     2023-06-06 12:11:14   events_after_region_2 356
#     2023-06-06 12:11:14   events_after_region_3 724
#     2023-06-06 12:11:14   events_after_region_4 1080
#     2023-06-06 12:11:14   events_after_score 0.74609375
#     2023-06-06 12:11:14   events_after_snapshot_time 1686044424.630513
#     2023-06-06 12:11:14   events_after_start_time 1686044416.660174
#     2023-06-06 12:11:14   events_after_stationary true
#     2023-06-06 12:11:14   events_after_top_score 0.84375
#     2023-06-06 12:11:14   events_before_area 195940
#     2023-06-06 12:11:14   events_before_box_1 108
#     2023-06-06 12:11:14   events_before_box_2 568
#     2023-06-06 12:11:14   events_before_box_3 496
#     2023-06-06 12:11:14   events_before_box_4 1073
#     2023-06-06 12:11:14   events_before_camera stiege
#     2023-06-06 12:11:14   events_before_false_positive false
#     2023-06-06 12:11:14   events_before_frame_time 1686046214.020258
#     2023-06-06 12:11:14   events_before_has_clip true
#     2023-06-06 12:11:14   events_before_has_snapshot false
#     2023-06-06 12:11:14   events_before_id 1686044416.660174-tnn62d
#     2023-06-06 12:11:14   events_before_label person
#     2023-06-06 12:11:14   events_before_motionless_count 8606
#     2023-06-06 12:11:14   events_before_position_changes 1
#     2023-06-06 12:11:14   events_before_ratio 0.7683168316831683
#     2023-06-06 12:11:14   events_before_region_1 0
#     2023-06-06 12:11:14   events_before_region_2 356
#     2023-06-06 12:11:14   events_before_region_3 724
#     2023-06-06 12:11:14   events_before_region_4 1080
#     2023-06-06 12:11:14   events_before_score 0.74609375
#     2023-06-06 12:11:14   events_before_snapshot_time 1686044424.630513
#     2023-06-06 12:11:14   events_before_start_time 1686044416.660174
#     2023-06-06 12:11:14   events_before_stationary true
#     2023-06-06 12:11:14   events_before_top_score 0.84375
#     2023-06-06 12:11:14   events_type     update
#     2023-06-06 10:45:32   frigate_available online
#     2023-06-06 11:58:31   garage_all      0
#     2023-06-06 10:45:34   garage_detect_state ON
#     2023-06-06 10:45:34   garage_improve_contrast_state OFF
#     2023-06-06 10:45:34   garage_motion_contour_area_state 30
#     2023-06-06 10:45:34   garage_motion_state ON
#     2023-06-06 10:45:34   garage_motion_treshold_state 25
#     2023-06-06 10:45:34   garage_recordings_state ON
#     2023-06-06 10:45:34   garage_snapshots_state OFF
#     2023-06-06 11:58:26   stiege_all      1
#     2023-06-06 10:45:32   stiege_detect_state ON
#     2023-06-06 10:45:32   stiege_improve_contrast_state OFF
#     2023-06-06 12:11:35   stiege_motion   OFF
#     2023-06-06 10:45:32   stiege_motion_contour_area_state 30
#     2023-06-06 10:45:32   stiege_motion_state ON
#     2023-06-06 10:45:32   stiege_motion_treshold_state 25
#     2023-06-06 10:45:32   stiege_recordings_state ON
#     2023-06-06 10:45:32   stiege_snapshots_state OFF
#     2023-06-06 11:58:31   { WriteFile("www/images/garage_snap.jpg", $EVENT); undef }  BINAERDATEN
setstate frigate connected
setstate frigate 2023-06-06 10:45:25 IODev mqtt2
setstate frigate 2023-06-06 12:11:14 events_after_area 195940
setstate frigate 2023-06-06 12:11:14 events_after_box_1 108
setstate frigate 2023-06-06 12:11:14 events_after_box_2 568
setstate frigate 2023-06-06 12:11:14 events_after_box_3 496
setstate frigate 2023-06-06 12:11:14 events_after_box_4 1073
setstate frigate 2023-06-06 12:11:14 events_after_camera stiege
setstate frigate 2023-06-06 11:58:31 events_after_end_time 1686045510.222514
setstate frigate 2023-06-06 12:11:14 events_after_false_positive false
setstate frigate 2023-06-06 12:11:14 events_after_frame_time 1686046274.23953
setstate frigate 2023-06-06 12:11:14 events_after_has_clip true
setstate frigate 2023-06-06 12:11:14 events_after_has_snapshot false
setstate frigate 2023-06-06 12:11:14 events_after_id 1686044416.660174-tnn62d
setstate frigate 2023-06-06 12:11:14 events_after_label person
setstate frigate 2023-06-06 12:11:14 events_after_motionless_count 8905
setstate frigate 2023-06-06 12:11:14 events_after_position_changes 1
setstate frigate 2023-06-06 12:11:14 events_after_ratio 0.7683168316831683
setstate frigate 2023-06-06 12:11:14 events_after_region_1 0
setstate frigate 2023-06-06 12:11:14 events_after_region_2 356
setstate frigate 2023-06-06 12:11:14 events_after_region_3 724
setstate frigate 2023-06-06 12:11:14 events_after_region_4 1080
setstate frigate 2023-06-06 12:11:14 events_after_score 0.74609375
setstate frigate 2023-06-06 12:11:14 events_after_snapshot_time 1686044424.630513
setstate frigate 2023-06-06 12:11:14 events_after_start_time 1686044416.660174
setstate frigate 2023-06-06 12:11:14 events_after_stationary true
setstate frigate 2023-06-06 12:11:14 events_after_top_score 0.84375
setstate frigate 2023-06-06 12:11:14 events_before_area 195940
setstate frigate 2023-06-06 12:11:14 events_before_box_1 108
setstate frigate 2023-06-06 12:11:14 events_before_box_2 568
setstate frigate 2023-06-06 12:11:14 events_before_box_3 496
setstate frigate 2023-06-06 12:11:14 events_before_box_4 1073
setstate frigate 2023-06-06 12:11:14 events_before_camera stiege
setstate frigate 2023-06-06 12:11:14 events_before_false_positive false
setstate frigate 2023-06-06 12:11:14 events_before_frame_time 1686046214.020258
setstate frigate 2023-06-06 12:11:14 events_before_has_clip true
setstate frigate 2023-06-06 12:11:14 events_before_has_snapshot false
setstate frigate 2023-06-06 12:11:14 events_before_id 1686044416.660174-tnn62d
setstate frigate 2023-06-06 12:11:14 events_before_label person
setstate frigate 2023-06-06 12:11:14 events_before_motionless_count 8606
setstate frigate 2023-06-06 12:11:14 events_before_position_changes 1
setstate frigate 2023-06-06 12:11:14 events_before_ratio 0.7683168316831683
setstate frigate 2023-06-06 12:11:14 events_before_region_1 0
setstate frigate 2023-06-06 12:11:14 events_before_region_2 356
setstate frigate 2023-06-06 12:11:14 events_before_region_3 724
setstate frigate 2023-06-06 12:11:14 events_before_region_4 1080
setstate frigate 2023-06-06 12:11:14 events_before_score 0.74609375
setstate frigate 2023-06-06 12:11:14 events_before_snapshot_time 1686044424.630513
setstate frigate 2023-06-06 12:11:14 events_before_start_time 1686044416.660174
setstate frigate 2023-06-06 12:11:14 events_before_stationary true
setstate frigate 2023-06-06 12:11:14 events_before_top_score 0.84375
setstate frigate 2023-06-06 12:11:14 events_type update
setstate frigate 2023-06-06 10:45:32 frigate_available online
setstate frigate 2023-06-06 11:58:31 garage_all 0
setstate frigate 2023-06-06 10:45:34 garage_detect_state ON
setstate frigate 2023-06-06 10:45:34 garage_improve_contrast_state OFF
setstate frigate 2023-06-06 10:45:34 garage_motion_contour_area_state 30
setstate frigate 2023-06-06 10:45:34 garage_motion_state ON
setstate frigate 2023-06-06 10:45:34 garage_motion_treshold_state 25
setstate frigate 2023-06-06 10:45:34 garage_recordings_state ON
setstate frigate 2023-06-06 10:45:34 garage_snapshots_state OFF
setstate frigate 2023-06-06 11:58:26 stiege_all 1
setstate frigate 2023-06-06 10:45:32 stiege_detect_state ON
setstate frigate 2023-06-06 10:45:32 stiege_improve_contrast_state OFF
setstate frigate 2023-06-06 12:11:35 stiege_motion OFF
setstate frigate 2023-06-06 10:45:32 stiege_motion_contour_area_state 30
setstate frigate 2023-06-06 10:45:32 stiege_motion_state ON
setstate frigate 2023-06-06 10:45:32 stiege_motion_treshold_state 25
setstate frigate 2023-06-06 10:45:32 stiege_recordings_state ON
setstate frigate 2023-06-06 10:45:32 stiege_snapshots_state OFF
setstate frigate 2023-06-06 11:58:31 { WriteFile("www/images/garage_snap.jpg", $EVENT); undef }  BINAERDATEN

Wobei auch noch eigenartig ist, daß zwar garage_snap.jpg hier in dem list ist, aber nicht als file geschrieben wird. Bei stiege_snap.jpg ist es umgekehrt: es scheint hier nicht auf, wird aber geschrieben?!
Die beiden Pfade sind aber bis auf die Namen gleich?!
fhem:frigate/stiege/.*/snapshot:.* { WriteFile("www/images/stiege_snap.jpg", $EVENT);; undef }
fhem:frigate/garage/.*/snapshot:.* { WriteFile("www/images/garage_snap.jpg", $EVENT);; undef }
fhem (debian auf proxmox), HM-LAN und wired, MySensors, FritzBoxes, Kodi, vdr, Onkyo, squeezeplayers, nanoCUL, wifilight (Ethernet-Bridge), Heizungssteuerung (python/vncdotool), doorpi, ESP/Arduinos/MQTT, Alexa, HomeConnect, Sonoff/Tasmota, espRGBWW, esphome, Telegram