NEWS
MQTT Full HD Kamera für ioBroker
-
Okay, danke für den Hinweis. Den Haken habe ich rausgenommen.
Ich würde das mit dem Debuggen über mqtt gern versuchen, bin da aber totaler Anfänger... ist so etwas gemeint ?
Da bekomme ich tatsächlich im Debug die ganzen Status!! Hurra!!
Nachtrag: und im ioBroker Objektbaum sind die Stats jetzt auch vorhanden
-
Jetzt würde ich das mit dem "raw" noch verstehen wollen. Im Vis-Editor habe ich den Button eingefügt und mit dem Objekt verlinkt. Aber woher kommt das raw ? Soweit ich es verstanden habe, kann ich die Kamera ja nur dann schalten, wenn ich den raw-Wert verändere, oder ?
-
@Förster Richtig.
Ich würde da weiterhin MQTT.fx oder MQTT Explorer empfehlen (in der Anleitung beschrieben), aber man bekommt das auch mit Node-RED hin:
Hier ist der benötigte Flow:
[{"id":"5aa0bd1c.0e4d64","type":"mqtt in","z":"cf5a544a.c32598","name":"status/alarm/area3/enable","topic":"instar/10D1DC2171FE/status/alarm/area3/enable","qos":"1","datatype":"auto","broker":"feae1d82.617d2","x":210,"y":80,"wires":[["ac4a5273.b5994"]]},{"id":"ac4a5273.b5994","type":"debug","z":"cf5a544a.c32598","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":230,"y":123,"wires":[]},{"id":"34dd783b.7454e8","type":"mqtt out","z":"cf5a544a.c32598","name":"alarm/area3/enable/raw","topic":"instar/10D1DC2171FE/alarm/area3/enable/raw","qos":"1","retain":"","broker":"feae1d82.617d2","x":270,"y":220,"wires":[]},{"id":"444eda9.fbd4524","type":"inject","z":"cf5a544a.c32598","name":"","topic":"","payload":"1","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":175,"y":178,"wires":[["34dd783b.7454e8"]]},{"id":"feae1d82.617d2","type":"mqtt-broker","z":"","name":"116Black","broker":"192.168.2.116","port":"8883","tls":"64ba55e0.2d728c","clientid":"","usetls":true,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"64ba55e0.2d728c","type":"tls-config","z":"","name":"8015Black","cert":"","key":"","ca":"","certname":"8015pcert.pem","keyname":"","caname":"","servername":"","verifyservercert":true}]
Ich habe da die MQTT ID bereits auf
10D1DC2171FE
angepasst. Sollte also sofort funktionieren. In Node-RED oben rechts in der Ecke das Menü öffnen und Import auswählen. Danach den JSON Code oben reinkopieren und bestätigen, die Node Sequenz plazieren und Deploy drücken. (Nicht vergessen bei den MQTT Nodes noch den MQTT Broker auswählen!)Wenn man jetzt auf den blauen Inject Node klickt wird eine
1
als Payload an das MQTT Topicinstar/10D1DC2171FE/alarm/area3/enable/raw
geschickt. Entsprechend sollte in der Kamera danach der dritte Alarmbereich aktiv sein. Wenn man im Inject Node den Payload auf0
ändert und den Vorgang wiederholt, wird der Bereich wieder deaktiviert.Im ioBroker Objekt Baum sollte dann auch das RAW Topic zu finden sein.
Anmerkung: Ich habe es gerade wieder erlebt, dass ioBroker die Änderung im Objektbaum nicht angezeigt hat. Nach einem Neustart von ioBroker lief dann wieder alles. Vermutlich hätte ein Neuladen des MQTT Adapters auch schon ausgereicht. Mir wurde bereits gesagt, dass man eventuell besser den reinen MQTT Client Adapter nutzen sollte, da dieser stabiler läuft. Hat da jemand hier im Forum Erfahrung mit?
Man kann jetzt im Node-RED Flow nach und nach die MQTT Topics reinkopieren und absenden, die man im ioBroker nutzen möchte.
-
Bei allen Full HD Kameramodellen kann man mit der aktuellen Firmware jetzt das Alarmserver Intervall per CGI Befehl einstellen. Der Standard-Wert ist 60s:
/param.cgi?cmd=setmdalarm&-aname=server2&-switch=on&-interval=60
Eine Reduktion ist bis auf eine Sekunde runter möglich - wir empfehlen jedoch es auf min. 10-15s zu belassen (wenn auf der Smarthome-Seite nicht anders benötigt). Um das Intervall zwischen Alarmauslösungen bei einer Kamera mit der IP 192.168.178.102 und dem HTTP Port 80 auf 15s zu stellen, lautet der Befehl beispielsweise:
http:// 192.168.178.102:80/param.cgi?cmd=setmdalarm&-aname=server2&-switch=on&-interval=15
Der Alarmserver wird verwendet um ioBroker zu informieren, wenn eine Bewegung von der Kamera erkannt wurde:
https://wiki.instar.de/Frequently_Asked_Question/ioBroker_and_INSTAR_Alarmserver/
-
@mpolinowski Super, vielen Dank für den tollen Support an dieser Stelle, hat funktioniert.
Werde mit den Einstellungen noch ein bisschen rumspielen und probieren, was damit alles möglich ist. Mein Ziel ist es, den Status der Kamera (Alarmserver an/aus) in VIS zu visualisieren bzw. auf die Schaltung durch meine Zentrale (homee) zu reagieren. Mit den Hinweisen sollte das klappen
-
ruhig posten sobald die Lösung steht - das interessiert bestimmt auch andere
Sollten noch Probleme auftreten, helfe ich gerne.
-
Der INSTAR MQTT Dienst ist jetzt regulär über das System/Update Menü erhältlich und es wurden noch einige Verbesserungen/Bugfixes hinzugefügt:
- Weitere MQTT Topics hinzugefügt (z.B. zur schrittweise (one-step) Steuerung der Kamera)
- Benutzer Logins sind nicht mehr per MQTT auslesbar
- Alle Sonderzeichen, die auch beim Kameralogin erlaubt sind, können jetzt auch fürs MQTT verwendet werden
- Die hinterlegten Ports für den MQTT Dienst wurden auf die Standards 1883/8883 angepasst
- In der Beta wurde bei Topics nicht zwischen “local” und “all” unterschieden. Ersters spricht jetzt nur noch die Kamera an, auf der der Broker läuft und letzteres alle Kameras im MQTT Netzwerk
- Die Verwendung von eigenen SSL Zertifikaten für den MQTT Dienst wurde vereinfacht. Wir haben bereits eine Anleitung für selbst-signierte Certs online, für CA Certs (Let’s Encrypt) folgt in Kürze.
-
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.