NEWS
MQTT Full HD Kamera für ioBroker
-
Hallo @saeft_2003 ,
Die WebUI und restliche INSTAR Software nimmt immer noch die HTTP API (CGI Befehle) zum Steuern der Kamera. Aber jeder Befehl der dort reinkommt wird auch sofort per MQTT wieder, als Status-Update, rausgesendet. Jeder Befehl, den man über die WebUI absenden kann, ist jetzt auch per MQTT schaltbar.
Und dank ioBroker kann man da dann auch etwas Logik dahinter packen - Automatisierungen, Schaltpläne, Kombinationen von Befehlen.
Die offizielle Doku zeigt auch wie man die Verbindung zur Kamera über den Node-RED Adapter herstellt. Und auf der Seite sind auch schon exportierte Node-RED Flows, die die gesamte Kamera API abbilden. Man braucht also nur den Flow in den Node-RED Adapter importieren und schon hat man ein MQTT WebUI für die Kamera.
Ich hatte zuvor einige der Funktionen der Kamera über HTTP Befehle eingebunden. Das war erheblich mehr Aufwand. Gerade wenn man versucht hat den Status von der Kamera auszulesen - da sind die Antworten recht inkonsistent formatiert.
Und hier steht noch etwas zur Datensicherheit der Übertragung:
Gerade wenn die Kamera per WLAN angebunden ist, hat man schon mal häufiger Zeitüberschreitungen beim Senden von CGI Befehlen. Bei MQTT stellt man das QoS = 1 und es ist sichergestellt, dass das Update ankommt.
-
Und da Smarthomes in der Regel alle MQTT unterstützen, bekommt man darüber auch alle Plattformen, in die man die Kamera eingebunden hat, synchronisiert. Ein Klick in der einen UI updated auch alle anderen.
-
@mpolinowski Klingt ja alles verlockend und würde es gerne nutzen mit meinen 2 IN-9008 FullHDs - Nur leider gibt es bei meinen Kameras keinerlei Einstellungen zu MQTT.
Die Kameras sind aktuell, so zumindest lt Info
Kann man da was tun?Edit: Wird eine Portfreigabe im Router erforderlich?
-
@Hardy6 Hallo,
der MQTT wird erst mit dem nächsten Update über den Auto-Updater freigegeben (vermutlich schon sehr bald).
Für die Beta Version kann man eine Email an support ett instar punkt de schreiben. Die brauchen nur die Info das man die MQTT Firmware möchte und welches Kameramodell man hat.
Es gibt auf der INSTAR Seite jetzt auch noch zwei neue Tutorials für ioBroker:
Edit: Für den Fernzugriff - hmm Jaein. Theoretisch braucht man eine Weiterleitung auf den MQTT/TLS Port um den Zugriff von Unterwegs zu haben.
Ich hatte die Kamera aber einmal als MQTT Klient an einen kostenlosen Online MQTT Broker angebunden und das funktionierte ohne Weiterleitung:
https://wiki.instar.com/Advanced_User/INSTAR_MQTT_Broker/Cloud_MQTT/
Die Erklärung dafür ist, dass bei einer MQTT Verbindung ein "keep-alive" Attribut mitgegeben wird, dass die Verbindung aufrecht erhält. Da der Klient in einem MQTT Netzwerk ständig einen "heartbeat" an den Broker sendet, hat man somit einen stabilen Tunnel durch die NAT Firewall, über den der Broker die Kamera erreichen kann.
Ich hatte dies allerdings nur für ein paar Tage am Laufen, um es mir einmal anzusehen. Über die Dauerhafte Stabilität ohne Weiterleitung kann ich somit nichts sagen. Und wenn man die Kamera als lokalen Broker verwendet, dann wäre das Handy der externe Klient. Das würde ohne Weiterleitung gar nicht funktionieren - der Heartbeat des Klienten muß aus dem lokalen Netz kommen, um die Verbindung aufzubauen.
Man kann allerdings z.B. Blockly verwenden, um mit dem Handy von Unterwegs über HTTP MQTT Topics im Objekt Baum vom ioBroker aktualisieren und dann die gesamte MQTT Kommunikation im lokalen Netz ablaufen lassen.
-
@mpolinowski zuerst mal Danke!
Die FW habe ich erhalten und aufgespielt.
Version : IN-9008_FW_4.1.2.46_WebUI_2.5(262)_beta_update_customer
(Achtung: hier ist der Default-Port auf 1885 und 8885 voreingestellt )Erster Test mit oben angegebenen Daten verlief erfolglos. Der Host wurde gefunden und gab Lebenszeichen, aber kein Connect zum MQTT Broker.
Fehlersuche hat ergeben, das das hinterlegte PW in der CAM mit einem Sonderzeichen ( & ) wohl nicht klappt.
Gut, das PW angepasst, dann funktioniert die Verbindung zu Cam.Was auffällt ist das MQTT das Systemlog vollgepumpt .
mqtt.0 2020-01-31 14:58:04.092 info (37488) Subscribe on: "instar/#" mqtt.0 2020-01-31 14:58:04.091 info (37488) Connected to 192.168.188.15 mqtt.0 2020-01-31 14:58:04.073 info (37488) Disconnected from 192.168.188.15: Error: write ECONNRESET mqtt.0 2020-01-31 14:58:03.312 info (37488) Subscribe on: "instar/#" mqtt.0 2020-01-31 14:58:03.312 info (37488) Connected to 192.168.188.15 mqtt.0 2020-01-31 14:58:03.283 info (37488) Disconnected from 192.168.188.15: Error: read ECONNRESET
Die Meldungen kommen im MilliSekundentakt. Ob das so richtig ist?
Wie kann man jetzt eine Bewegungserkennung hierüber abfragen?
-
Bezüglich der Sonderzeichen müsste ich auch noch mal nachfragen. Da Sollten eigentlich die gleichen Beschränkungen drinnen sein, wie auch beim Kamera-Login - und da ist das
&
ja erlaubt. Mal schauen.Das ioBroker Log ist beim Setup hier "sauber":
Bei dir schaut es so aus, als würde der MQTT Adpater ständig die Verbindung zur Kamera verlieren. Ist das Livebild der Kamera auch mit eingebunden? Wird das durchgehend angezeigt? Oder hat man da auch Unterbrechungen in der ioBroker Vis ?
Wie schaut das MQTT Log auf der Kamera aus?
http://192.168.188.15/tmpfs/mqtt-log
Kann man die Kamera denn steuern? Oder gibt es überhaupt keine Verbindung?
Und zur Alarmmeldung - ich glaube das hatte ich oben schon erwähnt. In dieser Ausbaustufe der MQTT API sind erstmal nur die GET und SET Befehle der HTTP API drinnen. Systemzustände - also alles was die Kamera auch in ihr System Logbuch schreibt - wird es mit der nächsten Version geben.
-
@mpolinowski
Die Signalanzeige der MQTT-Instanz geht im Wechsel Orange/grün im MillisekundentaktIch habe das Kamerabild von zwei IN-9008 eingebunden wie folgt:
Das wird alle 0,5sec jeweils aktualisiert.
Da ich ein Support Ticket erstellt hatte weis ich bereits das einige Sachen in der nächsten FW behoben wurden, ich warte nur noch auf Zusendung des Downloadlinks.
@mpolinowski sagte in MQTT Full HD Kamera für ioBroker:
Wie schaut das MQTT Log auf der Kamera aus?
http://192.168.188.15/tmpfs/mqtt-logDie Website ist nicht erreichbar
192.168.188.15 hat die Verbindung abgelehnt.
Auf Google nach tmpfs mqtt log suchen
ERR_CONNECTION_REFUSEDEDIT: ich benutze Google CHROME(aktuellen)
auch wenn ich die Credentials mitgebe. Zusätzlich bin ich im gleichen Browser in der Kamera eingelogt als admin. Also sollte das eigentlich kein Problem sein.
@mpolinowski sagte in MQTT Full HD Kamera für ioBroker:
Kann man die Kamera denn steuern? Oder gibt es überhaupt keine Verbindung?
Kann ich nicht sagen, da ich wissenstechnisch noch am Anfang stehe und mich erst das reinfusseln muss.
Habe die Instanz vorerst gestoppt. Aktuell warte ich erst mal auf die aktualisierte Beta FW und starte die Instanz dann neu.
-
Wenn das Log nicht vorhanden ist, dann ist bei Firmware Update was schief gelaufen. Kommt man den generell noch auf das tmpfs Verzeichnis?
Wenn ja, dann wäre vermutlich der MQTT Dienst gar nicht erst gestartet - denn das ist gleich der erste Log Eintrag:
Findet man in der WebUI das Netzwerk/MQTT Menü?
Ich denke ich würde da noch einmal die Firmware drüber bügeln und schauen dass es durchläuft. Ggf. auch die Firmware Datei noch mal runterladen - sicherstellen, dass die Datei beim ersten Download nicht unvollständig angekommen ist.
-
Hallo zusammen,
hätte auch noch eine Frage zur Vorgehensweise. Die mqtt-beta hatte ich per Email bekommen, das aufspielen hat (so scheint es zumindest) funktioniert. In der Kamera habe ich die Einstellungen vorgenommen. Im ioBroker habe ich den mqtt-Adapter auf client/subscriber stehen, der Adapter ist grün und im ioBroker log steht "connected to ..." und "all states published".
Müssten dann unter den Objekten nicht die ganzen states der Kamera erscheinen ? Bei mir kommt da nix an. Woran könnte das liegen ?
Ach ja: @mpolinowski Danke für den tollen Support hier und auch im homee-Forum
-
@Förster Hallo,
die Kamera pushed alle Status Topics sobald sie sich verbunden hat. D.h. die müsste man sofort sehen.
Ich hatte allerdings in der Übersicht im ioBroker auch schon mal das Problem, das nichts reinzukommen schien.
Ich persönlich nutze MQTT.fx - damit kann man auch all die Befehls-Topics in den Objekt Baum bekommen, wie auch in der ioBroker Anleitung beschrieben.
Sollten die Topics, die man über MQTT.fx aktualisiert, auch nicht auftauchen, am besten die MQTT Adapter Einstellungen noch mal überprüfen. Also vor allem, dass das Abo auf
instar/#
gesetzt wird und die Maske aufmqtt0.*
. -
Hmm. Schein richtig zu sein: instar/# und mqtt.0.*
Wäre es möglich, hier mal einen Screenshot von den Adapter-Einstellungen reinzustellen ? oben ist ja der Screenshot von "Verbindung". Ich meine den von "mqtt-Einstellungen". Da kann man ja noch einige Einstellungen vornehmen.Ansonsten habe ich mal "Teste Verbindung zum Server" geprüft. Da kommt dieses:
mqtt.0 2020-02-02 16:32:31.498 error (29272) uncaughtException: Error: Connection refused: Not authorized mqtt.0 2020-02-02 16:32:31.493 error at addChunk (_stream_readable.js:288:12) mqtt.0 2020-02-02 16:32:31.493 error at Socket.emit (events.js:198:13) mqtt.0 2020-02-02 16:32:31.493 error at Socket.ondata (_stream_readable.js:710:20) mqtt.0 2020-02-02 16:32:31.493 error at Writable.write (/opt/iobroker/node_modules/readable-stream/lib/_stream_writable.js:334:11) mqtt.0 2020-02-02 16:32:31.493 error at writeOrBuffer (/opt/iobroker/node_modules/readable-stream/lib/_stream_writable.js:417:5) mqtt.0 2020-02-02 16:32:31.493 error at doWrite (/opt/iobroker/node_modules/readable-stream/lib/_stream_writable.js:428:64) mqtt.0 2020-02-02 16:32:31.493 error at Writable.writable._write (/opt/iobroker/node_modules/mqtt/lib/client.js:302:5) mqtt.0 2020-02-02 16:32:31.493 error at work (/opt/iobroker/node_modules/mqtt/lib/client.js:292:12) mqtt.0 2020-02-02 16:32:31.493 error at MqttClient._handlePacket (/opt/iobroker/node_modules/mqtt/lib/client.js:350:12) mqtt.0 2020-02-02 16:32:31.493 error at MqttClient._handleConnack (/opt/iobroker/node_modules/mqtt/lib/client.js:920:15) mqtt.0 2020-02-02 16:32:31.493 error (29272) Error: Connection refused: Not authorized mqtt.0 2020-02-02 16:32:31.492 error (29272) uncaught exception: Connection refused: Not authorized
-
Das hatte ich auch schon beobachtet. Wenn man die Test Funktion nutzt crashed der Adapter. Vielleicht hat jemand hier eine Ahnung was es damit auf sich hat? Sobald ich den Apter neustarte verbindet er sich aber wieder und legt, wie gewünscht, das Abo für
instar/#
an:mqtt.0 2020-02-03 00:00:31.672 info (776) Subscribe on: "instar/#" mqtt.0 2020-02-03 00:00:31.671 info (776) Connected to 192.168.2.116 mqtt.0 2020-02-03 00:00:31.637 info (776) Try to connect to mqtt://admin:*******************@192.168.2.116:1883?clientId=iobroker mqtt.0 2020-02-03 00:00:31.558 info (776) starting. Version 2.0.4 in /opt/iobroker/node_modules/iobroker.mqtt, node: v10.18.1 host.13be02914684 2020-02-03 00:00:30.723 info instance system.adapter.mqtt.0 started with pid 776 host.13be02914684 2020-02-03 00:00:12.952 info Restart adapter system.adapter.mqtt.0 because enabled host.13be02914684 2020-02-03 00:00:12.951 info instance system.adapter.mqtt.0 terminated with code 0 (NO_ERROR) host.13be02914684 2020-02-03 00:00:12.951 error Caught by controller[0]: at addChunk (_stream_readable.js:288:12) code: 5 } host.13be02914684 2020-02-03 00:00:12.951 error Caught by controller[0]: at Socket.emit (events.js:198:13) host.13be02914684 2020-02-03 00:00:12.951 error Caught by controller[0]: at Socket.ondata (_stream_readable.js:710:20) host.13be02914684 2020-02-03 00:00:12.951 error Caught by controller[0]: at Writable.write (/opt/iobroker/node_modules/readable-stream/lib/_stream_writable.js:334:11) host.13be02914684 2020-02-03 00:00:12.951 error Caught by controller[0]: at writeOrBuffer (/opt/iobroker/node_modules/readable-stream/lib/_stream_writable.js:417:5) host.13be02914684 2020-02-03 00:00:12.951 error Caught by controller[0]: at doWrite (/opt/iobroker/node_modules/readable-stream/lib/_stream_writable.js:428:64) host.13be02914684 2020-02-03 00:00:12.951 error Caught by controller[0]: at Writable.writable._write (/opt/iobroker/node_modules/mqtt/lib/client.js:302:5) host.13be02914684 2020-02-03 00:00:12.951 error Caught by controller[0]: at work (/opt/iobroker/node_modules/mqtt/lib/client.js:292:12) host.13be02914684 2020-02-03 00:00:12.951 error Caught by controller[0]: at MqttClient._handlePacket (/opt/iobroker/node_modules/mqtt/lib/client.js:350:12) host.13be02914684 2020-02-03 00:00:12.951 error Caught by controller[0]: at MqttClient._handleConnack (/opt/iobroker/node_modules/mqtt/lib/client.js:920:15) host.13be02914684 2020-02-03 00:00:12.951 error Caught by controller[0]: { Error: Connection refused: Not authorized mqtt.0 2020-02-03 00:00:12.446 info (440) Terminated (NO_ERROR): Without reason mqtt.0 2020-02-03 00:00:12.445 info (440) terminating mqtt.0 2020-02-03 00:00:11.945 info (440) Disconnected from 192.168.2.116: undefined mqtt.0 2020-02-03 00:00:11.944 error (440) uncaughtException: Error: Connection refused: Not authorized mqtt.0 2020-02-03 00:00:11.943 error (440) Error: Connection refused: Not authorized at MqttClient._handleConnack (/opt/iobroker/node_modules/mqtt/lib/client.js:920:15) at MqttClient._handlePacket (/opt/iobroker/node_modules/mqtt mqtt.0 2020-02-03 00:00:11.943 error (440) uncaught exception: Connection refused: Not authorized
Das hindert also nicht die Funktion an sich.
Ich würde wirklich vorschlagen mal ein Debug Tool (Mqtt.fx, MQTT Explorer, usw.) zu installieren und mal zu schauen was da für Meldungen durchs MQTT Netz gehen. Und beim ioBroker Objekt Baum ab und zu mal auf "Baum neu erstellen" klicken - damit hatte ich auch schon mal Probleme... die Topics ware bereits da, ich konnte sie nur nicht sehen.
p.S. Screenshots hochladen geht mit dem Upload File Dialog oben in der Zeile mit den Text-Formatierungstools.
-
-
Bekanntgeben eigener Zustände beim Verbinden ist gefährlich. Das sollte man auf jeden Fall rausnehmen. Sobald man Befehls-Topics im Objektbaum hat, werden die beim Verbinden publiziert und man wird mit Updates zuge-spammed. Aber solange man noch nichts hinzugefügt hat, spielt es natürlich keine Rolle.
Ich sehe, dass Sie Node-RED als Adapter installiert haben. Das läßt sich genauso zum Debuggen verwenden wie MQTT.fx. Können Sie dort den INSTAR MQTT Broker hinzufügen? Kann man Befehle senden? Ein Wildcard Abo
#
in einem MQTT Eingangsknoten + Debug Node sollte Ihnen auch alle Status Updates der Kamera zeigen. Diese sind aufretained
gesetzt, werden also sofort beim Verbinden publiziert. -
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.