NEWS
MQTT Full HD Kamera für ioBroker
-
Ich bin von einigen ioBroker Nutzern bzgl. Fälle in denen der ioBroker MQTT Adapter Kameraeinstellungen überschreibt, wie es aussieht, wenn man den ioBroker Adapter nicht als Client, sondern als MQTT Broker verwenden möchte. Und genrelle Anfragen dazu, wie man am besten das passenden Befehl, Status und RAW MQTT Topic für eine Anwendung finden kann.
Zu all diesen Themen gibt es jetzt kurze FAQ's im INSTAR Wiki.
-
Das letzte MQTT Update beinhaltet zwei ioBroker relevante Bug Fixes und man kann es direkt über die Weboberfläche der Kamera herunterladen:
1.) Beim Auflösen von eingehenden CGI Befehlen (zum Beispiel beim Benutzen der Kamera über die WebUI) in MQTT Status Updates, wurde eine DNS Anfrage für "localhost" an den DNS Server des Netzwerkes gesendet. Dieses Problem behoben. 2.) Der MQTT Adapter im ioBroker lässt sich so konfigurieren, dass dieser nach einem Neustart die Konfiguration der Kamera mit leeren "Strings" überschreibt. Da der ioBroker nur mit RAW Topics arbeitet, haben wir das Senden von "leeren" Updates auf RAW Topics unterbunden. Siehe auch Fehlerbeschreibung im Wiki, 3.) Wenn man ein Variable der Konfiguration auf einen leeren "String" setzen muss, ist dies über die regulären Befehl Topics im JSON Format möglich: {"val":""}. Der Fehler, dass hierbei die Variable auf den Wert "$val" gesetzt wurde, wurde behoben. 4.) Beim gleichzeitigen Versenden einer größeren Anzahl an CGI Befehle zur Kamera, konnte es vorkommen, dass die entsprechenden MQTT Status Updates nicht richtig aufgelöst wurden. Aufgefallen war dies bei der Verwendung von HTTP Schaltern in der Homebridge (Homekit). Dieses Problem wurde behoben. 5.) Die verfügbaren MQTT Topics wurden erweitert und die Dokumentation verbessert. z.B. ist es jetzt möglich einen Scan zwischen 2, vorher in der WebUI festgelegten, Positionen zu starten (features/ptz/preset) oder eine, ebenfalls zuvor festgelegte, Tour anzustoßen (features/ptz/scan). 6.) Die üblichen kleinen Bugfixes und Verbesserungen...
Es wird in Kürze dann ein Update geben, mit dem man Alarmereignisse per MQTT abgreifen kann.
-
MQTT Alarmserver
Mit dem aktuellsten Update kann man jetzt auch Alarmereignisse per MQTT im ioBroker nutzen. Hier gibt es eine Anleitung wie man dies mit dem Node-RED Adapter umsetzen kann.
Mit Blockly kann man es so machen:
Wenn das MQTT Status Topic
alarm/triggered
aktualisiert wird, dann mache was. Das Beispiel bezieht sich auf eine Kamera mit der MQTT ID10D1DC21F5DB
- das muß man dann auf die ID der eigenen Kamera anpassen.Die Werte die über das Topic reinkommen sind
{"val":"1"}
bis{"val":"10"}
und stehen für den Auslöser des Alarms:- Alarmbereich Bereich 1 ausgelöst: 1
- Alarmbereich Bereich 2 ausgelöst: 2
- Alarmbereich Bereich 3 ausgelöst: 3
- Alarmbereich Bereich 4 ausgelöst: 4
- Alarmeingang / PIR ausgelöst: 5
- Audioalarm ausgelöst: 6
- Bewegungserkennung & PIR wurde ausgelöst (Bereich 1): 7
- Bewegungserkennung & PIR wurde ausgelöst (Bereich 2): 8
- Bewegungserkennung & PIR wurde ausgelöst (Bereich 3): 9
- Bewegungserkennung & PIR wurde ausgelöst (Bereich 4): 10
In dem Beispiel Skript habe ich Alarmbereich 1 auf der linken und Bereich 4 auf der rechten Seite des Bildes in der Kamera eingezogen:
Wenn ich jetzt ein
{"val":"1"}
auf demalarm/triggered
Topic erhalte bedeutet das, dass eine Bewegung auf der linken Seite erkannt wurde - ich muß die Kamera also nach links Steuern um das Objekt zu zentrieren. Und bei einem {"val":"4"} schwenke ich die Kamera einen Schritt nach rechts.Das funktioniert mit dem Topic:
/features/ptz/movestep/raw
und dem Payloadleft
oderright
Zusätzlich hatte ich noch eine Aktion für ein
{"val": "6"}
eingerichtet - dies ist der Audioalarm, der aber auch mit dem Topicalarm/pushalarm
ausgelöst werden kann und somit für Automatisierungen im ioBroker genutzt werden kann. Die 8 gespeicherten Positionen kann man mit dem folgenden Topic anfahren lassen:features/ptz/presets/raw
mit Payload0
-7
Die Auslösung des Audioalarms würde gemäß des Beispielskripts dann dazu führen, dass die Kamera die Preset Position 3 anfährt.
-
XML Export für das Blockly Skript oben - bitte beachten, dass die hier verwendete Kamera die MQTT ID
10D1DC21F5DB
hat - hier muß man entsprechend die ID der eigenen Kamera eintragen:<xml xmlns="http://www.w3.org/1999/xhtml"> <block type="on_ext" id="5:E8z%?$kF2:_228=Fsl" x="-62" y="-112"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="7K},E#*On`zsq^jhPQ9v"> <field name="oid">mqtt.0.instar.10D1DC21F5DB.status.alarm.triggered</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="2%z$7WDJUl-dSz+miU(-"> <value name="IF0"> <block type="logic_compare" id="9]pjLD{[W^26TPYM6liS"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="-?/H,NwcYjPh~{p`fc`~"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="text" id="hKDWmg?WzR9@$Wo4RHj5"> <field name="TEXT">{"val":"1"}</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="g@M?e*b1_8ezO{_(PUcP"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.10D1DC21F5DB.features.ptz.movestep.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="u2H{{k$7nO+({(J4,2,C"> <field name="TEXT">left</field> </block> </value> </block> </statement> <next> <block type="controls_if" id="}uq*%|F/Nt=*`rn`|hV4"> <value name="IF0"> <block type="logic_compare" id="|x2u0AR*aTmVC=lfROzF"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="In|(S^y0YVoVN#Y^[.5m"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="text" id="uC/+7LgdO]A`UdHW*sHC"> <field name="TEXT">{"val":"4"}</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="K58]j^_|1M4|}D2aF?{u"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.10D1DC21F5DB.features.ptz.movestep.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="13|%(`^fM,_w499|gkt-"> <field name="TEXT">right</field> </block> </value> </block> </statement> <next> <block type="controls_if" id="JhXZ,A)R?fQ}!et!,!/7"> <value name="IF0"> <block type="logic_compare" id="560g5G|oV?rEcXER(oOD"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="9[A80k}o*RpbflDD2h/:"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="text" id="._5?cn:Mi%DWgz;OL}v4"> <field name="TEXT">{"val":"6"}</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="]KIbdkEE?:DEhmZ`)wE="> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.10D1DC21F5DB.features.ptz.preset.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="1HbkwoM-U/]J2go|iNoe"> <field name="TEXT">2</field> </block> </value> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> </xml>
-
Hallo ioBroker Forum,
Ich hatte eine Antwort bzgl. des Problems bekommen, das der Zustand (z.B. Alarmbereich ist an/aus) in der ioBroker Vis nicht aktualisiert wird, wenn man diesen z.B. über die Weboberfläche der Kamera schaltet:
EddyD's SmartHome - Youtube Tutorial
In dem Video wird gezeigt wie man das mit Blockly in Griff bekommen kann. Ich hatte mir daraufhin angeschaut wie es man das alternativ über den Node-RED Adapter löst.
Kurz gefasst:
1.) Man legt einen Datenpunkt für alles an was man per Vis schalten/empfangen möchte.
2.) Man nimmt Node-RED (oder Blockly), um diesen Datenpunkt zu manipulieren, wenn das entsprechende MQTT Befehls oder Status Topic aktualisiert wird.
MQTT Status Update kommt rein -> Schaltet Datenpunkt Datenpunkt wird über Vis geschaltet -> Aktualisiert MQTT Befehl Topic
3.) Jetzt braucht man nur noch einen An/Aus Schalter in der Vis, den man mit diesem Datenpunkt verknüpft. Und schon sieht man immer den aktuellen Status der Kamera - unabhängig davon wo man die Änderung vornimmt.
-
Hallo zusammen
Ich besitzt die Instar 9020 Full Hd seit einiger Zeit.
Gesteuert habe ich bisher die Cam über die CGI Befehle.
Nun wollte ich das alles über MQTT machen.
Die neuste Firmware von der Cam ist auch aufgespielt. 4.2.2.19.
Iobroker ist per Server-MQTT mit der Cam verbunden.
Alle Datenpunkte kommen auch an.
Nun will ich die Cam steuern :
z.B. Area 1 enable :
Alles Ok.Will ich sie auf gespeicherte Position 0 fahren :
tauchen im Iobroker folgende Warnmeldungen auf: Der Befehl wird aber ausgeführt.
Pir ein oder aus schalten funktioniert gar nicht. (Keine Reaktion in der Cam)
Irgendwie bin ich ratlos.
-
Hallo @Eisbaer721 ,
ich hatte jetzt schon 2 Berichte, dass der MQTT Adapter Client/Broker mit der Kamera Probleme machen kann, wenn man ihn als Broker der Kamera konfiguriert.
Da ich normalerweise eine meiner Kameras als Broker konfiguriert hatte (alle anderen Kameras + Smarthome Systeme als Client), habe ich das bei mir letztes Wochenende mal umgestellt. Bislang läuft alles ok:
Aber ich behalte es im Auge. Das einzige was ich früher schon mal erlebt hatte, war das mir Topic Updates nicht mehr im Objektbaum angezeigt wurden. Ein Neustart von ioBroker hatte das behoben.
Die Lösung die in dem Youtube Video (das ich oben verlinkt hatte) vorgeschalgen wurde, war eine extra Instanz des MQTT Brokers in ioBroker für die Kameras anzulegen. Danach lief es bei ihm stabil.
Läuft der Adapter bei als Broker oder Client? Und wie schaut die Konfiguration aus? In der Config hatte ich anfangs auch bei mir ein paar Fehler drinnen, die Probleme verursachten.
-
Hallo mpolinowski
ich besitze nur die 9020. Die Kamera läuft bei mir als Clint und der MQTT in Iobroker als
Server/Broker. Nur so bekomme ich überhaupt eine Verbindung hin das die Objekte geladen werden. In der Config habe ich bisher nichts eingestellt. Bei den Versuchen was zu verändern habe ich keine Verbesserung festgestellt.
Sobald ich die Instanz starte , werden alle Objekte geladen. Alles sieht gut aus
Ändere ich etwas an den Area bereichen wird alles ohne Warnungen übertragen.
Sobald ich zum Beispiel "Pir ein oder aus schalten" möchte, fängt es an diese Warnung auszugeben. Kontrolliere ich dieses auf der Webseite der Kamera scheint alles Ok zu sein.
Siehe Log:
Blauer Bereich = Instanz neu gestartet und alle Daten werden im Iobroker geladen.
Roter Bereich = Objekt im Iobroker : mqtt.0.instar.xxxxxxxxx.alarm.actions.pir.enable.raw = 0 gesetzt
![alt text]( image url)Irgendwann bricht dann auch mal die Verbindung so stark ab das nur noch im Logfile eine Dauerschleife zu sehen ist.
-
@Eisbaer721 Das schaut aber nicht gut aus. Wo kommen die Meldungen denn her? Der
instar/all/system/reset
würde zum Beispiel alle Kameras im MQTT Netz auf die Werkseinstellungen zurücksetzen!Ist es möglich das ioBroker dieser Befehl (MQTT Topic) bekannt ist, weil dieser mal gesendet wurde und in der Adapter Konfiguration ist das Senden des Zustandes beim Verbinden aktiv?
Dann würde die Kamera jedes mal, wenn sie sich mit dem Broker verbindet, in die Werkseinstellungen zurückgesetz.
Ich bin gerade dabei den MQTT Adapter mal langzeit als Broker zu testen, um zu schauen ob damit Probleme gibt - bislang läuft alles stabil mit diesen Broker Einstellungen:
Eventuell mal diese Einstellungen übernehmen und die MQTT Topics der Kamera aus dem Objektbaum im ioBroker löschen.
-
@mpolinowski
Hallo
Die Meldung kommt durch ein Neustart des Adapters Zustande im Iobroker. Er läd ja alle Objekte neu hinein. Das klappt auch wunderbar wenn Iobroker als BROKER angemeldet ist.
Nur leider kann ich dann oftmals die Zustände nicht ändern. Dann erscheinen immer diese Warnmeldungen ( Rot markiert im Bild.) Das passiert zum Beispiel wenn ich die PIR einschalten möchte. (Quasi wie der CGI Befehl =cmd=setioattr&-io_enable=1
Jetzt probiere ich gerade mal die Kamera als BROKER. Da bekomme ich den Adapter im Iobroker leider gar nicht auf grün.....
Zum Glück kann ich jeder Zeit die CGI Programme wieder starten und ich bin nicht vom MQTT abhängig. Ich wollte den auch nur mal ausprobieren ob die Skripte nicht kürzer werden dadurch.
Gruß -
@Eisbaer721 said in MQTT Full HD Kamera für ioBroker:
Die Meldung kommt durch ein Neustart des Adapters Zustande im Iobroker. Er läd ja alle Objekte neu hinein.
Das dürfte nicht passieren, wenn der Adapter wie oben im Screenshot zu sehen konfiguriert ist. Die Kamera hat bei den meisten Topics eine
retained
Flag dran. D.h. diese Topics sollten sofort angezeigt werden, wenn man sich verbindet. Beim Reset ist dies aber nicht der Fall und wie gesagt, wäre das auch fatal. Sobald das Werksreset Topic gesendet wird wird die Kamera zurückgesetz. D.h. wenn man den Broker falsch konfiguriert und irgendwann mal die Kamera zurückgesezt hat, kann es sein, dass der Broker diesen Befehl immer wieder raussendet, sobald sich die Kamera wieder verbindet und diese damit erneut resettet.Der Screenshot oben zeigt die richtige Konfiguration für den MQTT Adapter in der Broker Funktion. Als Klient sieht die Konfiguration aus wie in dieser Anleitung:
https://wiki.instar.de/Erweitert/INSTAR_MQTT_Broker/ioBroker/#mqtt-adapter
Wenn man den Adapter als Broker konfiguriert wird das Symbol erst grün wenn man einen Klienten - also die Kamera - mit dem Broker verbunden hat. Also Klient sollte es eigentlich sofort grün sein.
Und wenn man MQTT erstmal am Laufen hat, will man davon eigentlich nicht mehr runter. Das ist um einiges komfortabler als HTTP
-
Hallo @Eisbaer721 ,
Ich habe da eine potentielle Fehlerquelle gefunden.
Ich hatte eine neue Instanz des MQTT Adapters als Klient angelegt (gemäß der oben verlinkten Anleitung) und habe ihn auch einfach nicht dazu bekommen grün zu werden - im Log stand nur "Versuche zu verbinden..." und nichts weiter.
Die Ursache war ein Sonderzeichen Problem. Ich hatte für einen anderen Test das MQTT Login mit allen erlaubten Sonderzeichen gefüllt
!#()*-./<?@[]^_{|}
- eines davon oder eine Kombination aus allen mag der MQTT Adapter nicht. Nachdem ich das Kennwort aufinstar
genändert habe, sprang die Verbindung im ioBroker sofort von gelb auf grün. -
Das Sonderzeichen Problem tritt jedoch nur auf, wenn ich den Adapter als Klienten konfiguriere. Im Broker Modus ist
!#()*-./<?@[]^_{|}
als Passwort kein Problem. -
@mpolinowski
Hallo.
Sorry das ich mich jetzt erst wieder melde, aber ich brauchte mal eine Pause vom basteln.
Ich habe das System mal ein wenig in ruhe gelassen. Über die CGI befehle läuft ja alles.
Mit dem Passwort ist es nicht das Problem. Dort habe ich mal extra keine Sonderzeichen eingebracht.
Ich habe heute mal wieder ein wenig getestet und mir ist aufgefallen:
Übe ich diesen Befehl aus mit einer Zahl zwischen 1 - 7 taucht oftmals diese Fehlermeldung auf:
Ändere ich allerdings die Alarm-Areas in 1 und 0, dann taucht keine Warnmeldung auf.
Das klappt ohne Warnmeldung.
Gruß
Marko -
@Eisbaer721 Hallo Marko,
hmmm merkwürdig...
Werde heute nicht mehr dazu kommen. Aber ich schaue mal das ich morgen meinen ioBroker Container hochfahren. Mal sehen ob ich da etwas reproduzieren kann.
Bzgl. der abonnierten Topics hatte ich übrigens meinen Fehler gefunden. Das "Problem" war, das ich nicht alle Topics Subscribe Pattern abonniert hatte - demnach tauchten bei mir im Log auch nur die Topics auf, die ich im ioBroker verwende
Wenn man da aber alle abooniert instar/#, wie auch in der Anleitung beschrieben, sollte das keine Probleme verusachen.
-
ich habe jetzt auch eine 9020 FullHD, ich habe soweit alles zum laufen bekommen es kommen Sachen per mqtt in den iobroker. Aber wo finde ich den Datenpunkt mit dem ich die verschiedenen PTZ Positionen anfahren kann?
-
Ich habe jetzt alles über cgi Befehle und dem Alarmserver mit dem simple api Adapter gelöst das funktioniert sehr gut!
-
@saeft_2003 said in MQTT Full HD Kamera für ioBroker:
Aber wo finde ich den Datenpunkt mit dem ich die verschiedenen PTZ Positionen anfahren kann?
Hallo,
sorry für die späte Antwort.
Alle Topics findet man hier:
features/ptz/preset:
{"val":"0"} - {"val":"7"}
features/ptz/movestep:
{"val":"left"}, {"val":"right"}, {"val":"down"}, {"val":"up"}, {"val":"stop"}, {"val":"focusin"}, {"val":"focusout"}, {"val":"zoomout"}, {"val":"zoomin"}
features/ptz/move:
{"val":"left"}, {"val":"right"}, {"val":"down"}, {"val":"up"}, {"val":"stop"}, {"val":"focusin"}, {"val":"focusout"}, {"val":"zoomout"}, {"val":"zoomin"}
-
@mpolinowski said in MQTT Full HD Kamera für ioBroker:
@saeft_2003 said in MQTT Full HD Kamera für ioBroker:
Aber wo finde ich den Datenpunkt mit dem ich die verschiedenen PTZ Positionen anfahren kann?
Hallo,
sorry für die späte Antwort.
Alle Topics findet man hier:
features/ptz/preset:
{"val":"0"} - {"val":"7"}
features/ptz/movestep:
{"val":"left"}, {"val":"right"}, {"val":"down"}, {"val":"up"}, {"val":"stop"}, {"val":"focusin"}, {"val":"focusout"}, {"val":"zoomout"}, {"val":"zoomin"}
features/ptz/move:
{"val":"left"}, {"val":"right"}, {"val":"down"}, {"val":"up"}, {"val":"stop"}, {"val":"focusin"}, {"val":"focusout"}, {"val":"zoomout"}, {"val":"zoomin"}
Hallo.
DAs Problem habe ich leider auch.
Irgendwie bekomme ich aber diese Topics nicht mit Mqtt ausgelesen. Alle RAWs Bereiche fehlen.
Somit kann ich leider nichts steuern.
Alle anderen Tropics werden angezeigt und kann ich benutzen. -
@Eisbaer721 said in MQTT Full HD Kamera für ioBroker:
Irgendwie bekomme ich aber diese Topics nicht mit Mqtt ausgelesen. Alle RAWs Bereiche fehlen.
Hallo Eisbär,
hmm die Topics sind insofern besonders, dass sie keinen Status haben. D.h. es gibt dort nur den Befehl um die Fahrt anzustoßen. Man kann aber nicht auslesen ob die PTZ Fahrt gerade läuft. Es gibt entsprechend auch keine zurückgehaltenes ("retained") Topic das die Kamera einem beim Verbinden mitteilt.
Am besten einmal das Befehlstopic von Hand schicken und in ioBroker mitloggen - dann hat man es im Objektbaum und kann es nutzen:
In dem Beispiel habe ich
instar/cameraID/features/ptz/movestep/raw
mit dem Payloadright
gesendet. Die Software ist MQTT.fx aus der Anleitung.