FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: lynckmeister am 12 Juli 2021, 21:41:35

Titel: Viseron NVR per MQTT an Fhem anbinden *gelöst*
Beitrag von: lynckmeister am 12 Juli 2021, 21:41:35
Servus zusammen, ich experimentiere mit den Network Video Recorder Viseron rum, den man per MQTT an zb Fhem (eigentlich Home Assistent) anbinden kann. Viseron bietet mit Deepstack oder Tensorflow eine gute Objekterkennung für die Cams ...
Ich habe also einen MQTT Server in Fhem eingerichtet, und darauf hin hat sich das Device MQTT2_viseron selbst eingerichtet.
in den Readings sehe ich jetzt auch ein "latest" Image von meiner konfigurierten CAM, das per MQTT an Fhem übermittelt wurde.

das sieht so  aus
Internals:
   CFGFN     
   CID        viseron
   DEF        viseron
   DEVICETOPIC MQTT2_viseron
   FUUID      60eac5f0-f33f-c4df-98e7-264d950918b5c506
   IODev      myBroker
   LASTInputDev myBroker
   MSGCNT     719
   NAME       MQTT2_viseron
   NR         702
   STATE      scanning_for_objects
   TYPE       MQTT2_DEVICE
   myBroker_MSGCNT 719
   myBroker_TIME 2021-07-12 21:28:28
   READINGS:
     2021-07-11 12:20:32   IODev           myBroker
     2021-07-12 11:19:41   attributes_count 1
     2021-07-12 11:20:07   attributes_last_recording_end 2021-07-12T11:20:07.704659
     2021-07-12 11:20:07   attributes_last_recording_start 2021-07-12T11:19:41.736507
     2021-07-12 11:19:41   attributes_objects_1_confidence 0.945
     2021-07-12 11:19:41   attributes_objects_1_label person
     2021-07-12 11:19:41   attributes_objects_1_rel_height 0.365
     2021-07-12 11:19:41   attributes_objects_1_rel_width 0.105
     2021-07-12 11:19:41   attributes_objects_1_rel_x1 0.4000000059604645
     2021-07-12 11:19:41   attributes_objects_1_rel_x2 0.5049999952316284
     2021-07-12 11:19:41   attributes_objects_1_rel_y1 0.08799999952316284
     2021-07-12 11:19:41   attributes_objects_1_rel_y2 0.453000009059906
     2021-07-12 21:19:08   availability_topic viseron/lwt
     2021-07-12 21:19:08   command_topic   viseron/garage/switch/set
     2021-07-12 21:19:08   device_identifiers_1 viseron garage
     2021-07-12 21:19:08   device_manufacturer Viseron
     2021-07-12 21:19:08   device_name     viseron garage
     2021-07-12 21:28:28   image           ����JFIF��C 

 $.' ",#(7),01444'9=82<.342��C 
darunter kommt erstmal ne Menge mehr Binzeug ( das Image halt) und dann weitere Readings...
Meine Frage ist jetzt eigentlich wie ich an das Imgage als variable ran komme, um es zb an Telegram zu schicken ...
Ich hab mal ein Notify auf das Viserondevice gesetzt mit einem ReadingsVal auf Image, aber da passiert nicht viel:
define Bewerung_test_ntfy notify MQTT2_viseron:.* set teleBot sendMedia @#haus2021 ReadingsVal("MQTT2_viseron","image",0))

Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: Beta-User am 12 Juli 2021, 21:56:06
Bei den roborock's sollte Code zu finden sein, um Bild-Daten auf die Platte zu speichern...
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: Otto123 am 13 Juli 2021, 09:15:27
Hier: https://forum.fhem.de/index.php/topic,104687.msg986304.html#msg986304
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: lynckmeister am 13 Juli 2021, 10:34:59
klingt vielversprechend, ich habe die Funktion mal in die 99_myUtils.pm aufgenommen und die
readinglist ergänzt, die sieht jetzt bei mir so aus :

viseron:viseron/lwt:.* lwt
viseron:homeassistant/binary_sensor/garage/motion_detected/config:.* { json2nameValue($EVENT) }
viseron:viseron/garage/binary_sensor/motion_detected/state:.* { json2nameValue($EVENT) }
viseron:homeassistant/binary_sensor/garage/object_detected/config:.* { json2nameValue($EVENT) }
viseron:viseron/garage/binary_sensor/object_detected/state:.* { json2nameValue($EVENT) }
viseron:homeassistant/binary_sensor/garage/object_detected_person/config:.* { json2nameValue($EVENT) }
viseron:viseron/garage/binary_sensor/object_detected_person/state:.* { json2nameValue($EVENT) }
viseron:homeassistant/binary_sensor/garage/object_detected_pottedplant/config:.* { json2nameValue($EVENT) }
viseron:viseron/garage/binary_sensor/object_detected_pottedplant/state:.* { json2nameValue($EVENT) }
viseron:homeassistant/switch/garage/config:.* { json2nameValue($EVENT) }
viseron:homeassistant/camera/garage/config:.* { json2nameValue($EVENT) }
viseron:homeassistant/sensor/garage/status/config:.* { json2nameValue($EVENT) }
viseron:viseron/garage/sensor/status/state:.* { json2nameValue($EVENT) }
viseron:homeassistant/camera/garage/latest_thumbnail/config:.* { json2nameValue($EVENT) }
viseron:viseron/garage/camera/image:.* image
viseron:viseron/garage/camera/image:.* {valetudo2svg("image",$EVENT,"www/images/viseron_garage.svg")}

Den Weblink entsprechend angepasst aufgenommen :
htmlCode <img src="fhem/images/viseron_garage.svg">

es erscheint aber nur das Platzhalterimage... ich kann nicht sehen was schiefläuft - im log steht nichts , fällt euch was auf ? Wie kann ich das debuggen ?
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: Beta-User am 13 Juli 2021, 10:53:36
würde mal auf das Format tippen. Kommt da wirklich ein svg oder was anderes? (evtl. ist der Inhalt der Datei aufschlussreich, in dem kopierten Auszug ist das ggf. falsch encodiert...)
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: Otto123 am 13 Juli 2021, 10:53:48
Ich hatte nicht gesagt, dass das die Lösung ist. Nur zum Verständnis: bei valetudo ging es um png Daten - die wandeln in svg und anzeigen.

Eigentlich musst Du doch "nur" den Teil (es ist wahrscheinlich jpg als Bild ?) zum speichern nehmen?  Also Datei auf, Daten rein, Datei schließen, angucken. Hab da leider auch nichts auf die Schnelle parat...

Da war mein Link vielleicht unüberlegt?
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: Beta-User am 13 Juli 2021, 10:58:14
Da war mein Link vielleicht unüberlegt?
M.E. passt das schon, es ist einfach eine Option, wie man es machen kann bzw. was man alles machen kann, und ich wollte nur mobil nicht suchen...

Eigentlich musst Du doch "nur" den Teil (es ist wahrscheinlich jpg als Bild ?) zum speichern nehmen?  Also Datei auf, Daten rein, Datei schließen, angucken. Hab da leider auch nichts auf die Schnelle parat...
Kann man auch mit FHEM-Bordmitteln machen: FileWrite().
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: Otto123 am 13 Juli 2021, 11:33:16
Kann man auch mit FHEM-Bordmitteln machen: FileWrite().
Aber Achtung: nicht das die Bilder alle in der configDb landen :) https://wiki.fhem.de/wiki/DevelopmentModuleAPI#FileWrite
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: lynckmeister am 08 Oktober 2021, 12:51:58
Also ich komme nochmal darauf zurück ...
habe das JPG aus dem über MQTT angelegten Device nun mit Readingsval ausgelesen und in ein File geschrieben, Das JPG kann ich problemlos im Viewer ansehen, scheint also vom Format her zu passen. Wenn ich das JPG aber versuche an den Telebot zu sehen (was ja eigentlich mein Case ist ) dann bekomme ich eine Fehlermeldung im Log.
Hier mein Aufruf:
mytest:on  {
 my $a = ReadingsVal("MQTT2_viseron","image",0);
 fhem"set teleBot sendImage @#meineGruppe1 $a";

}

Im Log wird dann das ganze Bild ausgegeben ( Binärmüll) , mit einer Menge "Unknown command" vorangestellt - und zwischenzeitlich meldet sich auf der Telegrambot:
teleBot: resulted in Callback returned error :Bad Request: strings must be encoded in UTF-8: from SendIt

Muss ich das noch irgendwie im Format umschreiben?



Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: Otto123 am 08 Oktober 2021, 17:30:29
poste mal die Ausgabe von:
{ReadingsVal("MQTT2_viseron","image",0)}
Weil
Zitat
sendImage|image [ @<peer1> ... @<peerN>] <file> [<caption>]
Sends a photo to the given peer(s) or if ommitted to the default peer. File is specifying a filename and path to the image file to be send. Local paths should be given local to the root directory of fhem (the directory of fhem.pl e.g. /opt/fhem). Filenames with special characters (especially spaces) need to be given with url escaping (i.e. spaces need to be replaced by %20). Rules for specifying peers are the same as for messages. Multiple peers are to be separated by space. Captions can also contain multiple words and do not need to be quoted.
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: lynckmeister am 09 Oktober 2021, 13:22:47
hmm naja, das ist ja binär... also wenn ich es mit LOG 1 ausgebe kommt entsprechend nur Müll im Terminal an ...
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: Beta-User am 09 Oktober 2021, 13:27:39
...würde tippen, dass es erforderlich ist, den "Binärmüll" erst auf einen Datenträger zu schreiben...
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: Otto123 am 09 Oktober 2021, 13:55:48
Es mit LOG 1 auszugeben war nicht die Aufgabe, aber wenn in dem Reading Binärmüll steht, hast Du auch "Müll" erzählt und die Doku nicht verstanden!
Zitat
habe das JPG aus dem über MQTT angelegten Device nun mit Readingsval ausgelesen und in ein File geschrieben,
Du musst es wirklich tun! Also eine Datei schreiben und den Dateinamen übergeben!
Zitat
File is specifying a filename and path to the image file to be send
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: lynckmeister am 09 Oktober 2021, 16:35:15
Gut ich machs auch so, so funktioniert es wunderbar:
MQTT2_viseron:image.*  {

 my $a = ReadingsVal("MQTT2_viseron","image",0);
 open (DATEI, ">mynotify.jpg") or die "Couldn't open file: $!";
 print DATEI $a;
 close (DATEI);

fhem"set teleBot sendImage @#gruppe /opt/fhem/mynotify.jpg";


}


Allerding hab ich noch ein MQTT Problem, durch Viseron wird mir das MQTT2_viseron device automatisch angelegt...
darin gibt es ja wie oben zu sehen auch das image reading. Jetzt verwende ich zwei CAMs und hätte erwartet, dass idealerweise ein Device pro CAM angelegt wird, wird aber nicht. Laut Viseron wird das Image immer im Messagepfad mit dem Cameranamen eindeutig angegeben : {client_id}/{mqtt_name from camera config}/camera/image
Jetzt fällt mir aber auf, dass ich zwar ein neues Bild bekomme (auf das ja mein Notify auch reagiert) aber da ist halt mal das Bild der einen Cam drin und dann das Bild der anderen. Die aneren Readings werden teilweise garnicht gesetzt. Während also das bild von der Terrasse reinkommt, bleibt das Reading "Device Name" unverändert auf "GarageCam"

Ich gehe nicht davon aus, dass es ein Viseronfehler ist -kann ich meine MQTT Devices irgendwie anders konfigurieren?
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: TomLee am 09 Oktober 2021, 17:10:30
Ich hab auch noch nicht alles verstanden, wenn du die viseron: in den readingList-Einträgen rausnimmst und die DEF zu irgend etwas anderem änderst, ändert sich dann das Verhalten und es wird für die zweite Cam ein zweites Device automatisch erstellt ?

edit:

die Topics der zweiten Cam müssen natürlich aus dem ersten Device auch raus.
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: lynckmeister am 10 Oktober 2021, 12:49:30
ok das scheint ja über die Readinglist zu funktionieren, es heisst ja man könne bestimmte MQTT-topics abonnieren , also automatische Benachrichtigungen empfangen ...

ich habe hier eine Readinglist in der alles was ich brauch auftaucht :
viseron:viseron/lwt:.* lwt
viseron:homeassistant/binary_sensor/garage/motion_detected/config:.* { json2nameValue($EVENT) }
viseron:viseron/garage/binary_sensor/motion_detected/state:.* { json2nameValue($EVENT) }
viseron:homeassistant/binary_sensor/garage/object_detected/config:.* { json2nameValue($EVENT) }
viseron:viseron/garage/binary_sensor/object_detected/state:.* { json2nameValue($EVENT) }
viseron:homeassistant/binary_sensor/garage/object_detected_person/config:.* { json2nameValue($EVENT) }
viseron:viseron/garage/binary_sensor/object_detected_person/state:.* { json2nameValue($EVENT) }
viseron:homeassistant/switch/garage/config:.* { json2nameValue($EVENT) }
viseron:homeassistant/camera/garage/config:.* { json2nameValue($EVENT) }
viseron:homeassistant/sensor/garage/status/config:.* { json2nameValue($EVENT) }
viseron:viseron/garage/sensor/status/state:.* { json2nameValue($EVENT) }
viseron:viseron/garage/camera/image:.* image
viseron:homeassistant/camera/garage/latest_thumbnail/config:.* { json2nameValue($EVENT) }
viseron:viseron/garage/camera/latest_thumbnail/image:.* image
viseron:homeassistant/binary_sensor/terrasse_hinten/motion_detected/config:.* { json2nameValue($EVENT) }
viseron:viseron/terrasse_hinten/binary_sensor/motion_detected/state:.* { json2nameValue($EVENT) }
viseron:homeassistant/binary_sensor/terrasse_hinten/object_detected/config:.* { json2nameValue($EVENT) }
viseron:viseron/terrasse_hinten/binary_sensor/object_detected/state:.* { json2nameValue($EVENT) }
viseron:homeassistant/binary_sensor/terrasse_hinten/object_detected_person/config:.* { json2nameValue($EVENT) }
viseron:viseron/terrasse_hinten/binary_sensor/object_detected_person/state:.* { json2nameValue($EVENT) }
viseron:homeassistant/switch/terrasse_hinten/config:.* { json2nameValue($EVENT) }
viseron:homeassistant/camera/terrasse_hinten/config:.* { json2nameValue($EVENT) }
viseron:homeassistant/sensor/terrasse_hinten/status/config:.* { json2nameValue($EVENT) }
viseron:homeassistant/camera/terrasse_hinten/latest_thumbnail/config:.* { json2nameValue($EVENT) }
viseron:viseron/terrasse_hinten/sensor/status/state:.* { json2nameValue($EVENT) }
viseron:viseron/terrasse_hinten/camera/image:.* image
viseron:viseron/terrasse_hinten/camera/latest_thumbnail/image:.* image


Wie  man sieht gibt es eben die beiden Cams... wo ich das Bild herkriege weiß ich ja , also muss ich eigentlich nur auf die Events
viseron:viseron/garage/binary_sensor/object_detected/state
oder eben
viseron:viseron/terrasse_hinten/binary_sensor/object_detected/state:.*
reagieren.... dazu muss man sie Abonieren?
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: Beta-User am 10 Oktober 2021, 13:01:02
Haben da mehrere Clients dieselbe Client-ID? Dann bitte so ändern, dass jedes Geräte eine eigene hat.
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: lynckmeister am 10 Oktober 2021, 13:38:50
hmm naja das ist ja ein NVR , der verbindet sich mit dem FHEM MQTT Server , der NVR hat 2 CAMs konfiguriert... aber die Client-ID ist für den NVR , also hat er auch nur eine
die unterschiede müssten die Pfade , in denen ja die Namen der CAMs codiert sind kommen :

{client_id}/{mqtt_name from camera config}/sensor/status/state
Ich sehe ja auch in der Readinglist, dass die da sind, ich verstehe nur nicht wie das mit dem Abonieren funktionieren soll, sodass man drauf reagieren kann ...
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: Beta-User am 10 Oktober 2021, 13:56:10
Ah, ok. Dann wäre mein Vorschlag, pro cam je eine MQTT2_device-Instanz einzurichten.
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: lynckmeister am 10 Oktober 2021, 16:50:50
ja kling gut, mir ist nur nicht klar, wie ich zwei Instanzen so anlege, dass die Daten jeweils dann in die Richtige laufen... aktuell schreibt fhem ja alles in eine Instanz...

hier mal das Listing des Devices...
Internals:
   CFGFN     
   CID        viseron
   DEF        viseron
   DEVICETOPIC MQTT2_viseron
   FUUID      6162fc08-f33f-c4df-4047-272632788c94034c
   IODev      MQTT2_FHEM_Server
   LASTInputDev MQTT2_FHEM_Server
   MQTT2_FHEM_Server_MSGCNT 194
   MQTT2_FHEM_Server_TIME 2021-10-10 16:46:49
   MSGCNT     194
   NAME       MQTT2_viseron
   NR         2786
   STATE      on
   TYPE       MQTT2_DEVICE
   READINGS:
     2021-10-10 16:43:20   IODev           MQTT2_FHEM_Server
     2021-10-10 16:45:23   attributes_count 1
     2021-10-10 16:45:33   attributes_last_recording_end 2021-10-10T16:45:33.540045
     2021-10-10 16:45:33   attributes_last_recording_start 2021-10-10T16:45:23.439796
     2021-10-10 16:46:49   attributes_objects_1_confidence 0.723
     2021-10-10 16:46:49   attributes_objects_1_label person
     2021-10-10 16:46:49   attributes_objects_1_rel_height 0.346
     2021-10-10 16:46:49   attributes_objects_1_rel_width 0.115
     2021-10-10 16:46:49   attributes_objects_1_rel_x1 0.8700000047683716
     2021-10-10 16:46:49   attributes_objects_1_rel_x2 0.9850000143051147
     2021-10-10 16:46:49   attributes_objects_1_rel_y1 0.18199999630451202
     2021-10-10 16:46:49   attributes_objects_1_rel_y2 0.527999997138977
     2021-10-10 16:44:13   attributes_objects_2_confidence 0.5
     2021-10-10 16:44:13   attributes_objects_2_label person
     2021-10-10 16:44:13   attributes_objects_2_rel_height 0.564
     2021-10-10 16:44:13   attributes_objects_2_rel_width 0.151
     2021-10-10 16:44:13   attributes_objects_2_rel_x1 0.5299999713897705
     2021-10-10 16:44:13   attributes_objects_2_rel_x2 0.6809999942779541
     2021-10-10 16:44:13   attributes_objects_2_rel_y1 0.20100000500679016
     2021-10-10 16:44:13   attributes_objects_2_rel_y2 0.7649999856948853
     2021-10-10 16:45:23   image           ����JFIF��C    (noch viel mehr Bild-binär-müll)
     2021-10-10 16:43:20   lwt             alive
     2021-10-10 16:46:49   state           on
Attributes:
   readingList viseron:viseron/lwt:.* lwt
viseron:viseron/terrasse_hinten/binary_sensor/motion_detected/state:.* { json2nameValue($EVENT) }
viseron:viseron/terrasse_hinten/binary_sensor/object_detected/state:.* { json2nameValue($EVENT) }
viseron:viseron/terrasse_hinten/binary_sensor/object_detected_person/state:.* { json2nameValue($EVENT) }
viseron:viseron/garage/binary_sensor/motion_detected/state:.* { json2nameValue($EVENT) }
viseron:viseron/garage/binary_sensor/object_detected/state:.* { json2nameValue($EVENT) }
viseron:viseron/garage/binary_sensor/object_detected_person/state:.* { json2nameValue($EVENT) }
viseron:viseron/terrasse_hinten/sensor/status/state:.* { json2nameValue($EVENT) }
viseron:viseron/garage/sensor/status/state:.* { json2nameValue($EVENT) }
viseron:viseron/terrasse_hinten/camera/latest_thumbnail/image:.* image
viseron:viseron/garage/camera/latest_thumbnail/image:.* image
   room       MQTT2_DEVICE


man sieht schon unten in der Readinglist das die beiden thumbnails jeweils nach CAM unterschiedliche Pfade haben...

Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: TomLee am 10 Oktober 2021, 17:10:17
Ein Weg ist in #14 beschrieben.
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: Beta-User am 10 Oktober 2021, 19:14:58
ja kling gut, mir ist nur nicht klar, wie ich zwei Instanzen so anlege, dass die Daten jeweils dann in die Richtige laufen... aktuell schreibt fhem ja alles in eine Instanz...
Entweder mit "bridgeRegexp" beschäftigen oder halt manuell sortieren. Etwa so:
attr MQTT2_viseron readingList viseron/lwt:.* lwt\
homeassistant/.*/config:.* { }\
viseron/garage/binary_sensor/motion_detected/state:.* { json2nameValue($EVENT,'motion_') }\
viseron/garage/binary_sensor/object_detected/state:.* { json2nameValue($EVENT,'object_') }\
viseron/garage/binary_sensor/object_detected_person/state:.* { json2nameValue($EVENT,'person_') }\
viseron/garage/sensor/status/state:.* { json2nameValue($EVENT) }
viseron/garage/camera/image:.* image\
viseron/garage/camera/latest_thumbnail/image:.* tn_image
defmod MQTT2_viseron_2 MQTT2_DEVICE
attr MQTT2_viseron_2 readingList viseron/terrasse_hinten/binary_sensor/motion_detected/state:.* { json2nameValue($EVENT,'motion_') }\
viseron/terrasse_hinten/binary_sensor/object_detected/state:.* { json2nameValue($EVENT,'object_') }\
viseron/terrasse_hinten/binary_sensor/object_detected_person/state:.* { json2nameValue($EVENT,'person_') }\
viseron/terrasse_hinten/sensor/status/state:.* { json2nameValue($EVENT) }\
viseron/terrasse_hinten/camera/image:.* image\
viseron/terrasse_hinten/camera/latest_thumbnail/image:.* tn_image

Zur Erläuterung: die "homeassistant"-config-Infos sind völlig irrelevant für FHEM, die werden durch das erste Device abgefangen und sind dann weg (sollte eigentlich eine ignoreRegepx am IO machen). Da vermutlich viele Infos in den JSON gleich/ähnlich sind, bekommen die einen Präfix, damit man sieht, wo was herkommt. Muss man dann ggf. noch sortieren, was man wie braucht und kann es ggf. umbenennen.
Titel: Antw:Viseron NVR per MQTT an Fhem anbinden
Beitrag von: lynckmeister am 31 Oktober 2021, 14:57:05
genauso hat es auch geklappt, sobald man das zweite Device anlegt und die Readinglist einträgt, werden die richtigen Daten in dieses Device geschrieben... vielen Dank auch !