NEWS
MQTT-Adapter - Grundsatzfragen
-
Seit dem Vortrag von @hobbyquaker auf dem Usermeeting in Kassel vor zwei (?) Jahren wollte ich mich mal mit diesem Thema beschäftigen.
Ich hatte zwar kein Wort verstanden, er war aber so begeistert vom mqtt, da muss also was dran sein.
In der Zwischenzeit habe ich versucht mich da etwas hereinzuarbeiten, habe bereits etwas an der Oberfläche des Wissens gekratzt, einen MQTT-Broker auf einem Tinkerboard installiert und zwei (fertig vorkonfigurierte) TeensyLC mit Sensoren geschafft dorthin zu verbinden. Das klappt sehr gut!
Jetzt wollte ich etwas mehr an der Oberfläche kratzen und weitere Daten von einem Raspi mit ioBroker auf eben dieses Tinkerboard bringen.
Nur zur Erklärung: der Raspi ist als Slave in einem anderen Multihost System eingebunden.
Ich habe also auf dem RasPi einen mqtt Client installiert (so habe ich das Prinzip zumindest verstanden) und versucht zu konfigurieren.
Da hört es schon auf. Ich weiß nicht was ich in die Felder eingeben muss, die Github Hilfe hilft mir nicht wirklich weiter, insbesondere der Teil mit den einzubindenden states https://github.com/Pmant/ioBroker.mqtt- … e-settings ist für mich nicht nachvollziehbar. Diese Punkte finde ich nicht. (Vielleicht auch weil wegen Konfigurationsfehlern zum mqtt client noch gar keine Objekte angelegt wurden??)
Konfigurationsversuch:
log:
mqtt-client.0 2017-09-07 18:25:00.065 error TypeError: Cannot read property 'topic' of undefined at Socket. (/opt/iobroker/node_modules/iobroker.mqtt-client/client.js:119:92) at Socket.onack (/opt/iobroker/node_modules/socket mqtt-client.0 2017-09-07 18:25:00.063 error uncaught exception: Cannot read property 'topic' of undefined
Kann mir da bitte jemand virtuell unter die Arme greifen?
Im Endeffekt soll daraus auch eine Noob-fähige Anleitung für die Doku abfallen!
Gruß
Rainer
-
Lass erstmal die Felder subscriptions und publish prefix leer.
Wenn du States an den MQTT-Broker senden willst, dann konfigurierst du das wie bei History, also direkt bei den Objekten im Admin.
-
Mann bin ich blind.
Ich hatte da nachgesehen, aber das Zahnrad nicht angeklickt
Das ist doch nur für history :oops: :oops:
Ok, dann teste ich mal
Gruß
Rainer
-
Will nicht so ganz.
! ````
host.Keller-RasPi2 2017-09-07 19:14:49.850 info Restart adapter system.adapter.mqtt-client.0 because enabled
host.Keller-RasPi2 2017-09-07 19:14:49.850 error instance system.adapter.mqtt-client.0 terminated with code 0 (OK)
mqtt-client.0 2017-09-07 19:14:49.826 error TypeError: Cannot read property 'topic' of undefined at Socket. (/opt/iobroker/node_modules/iobroker.mqtt-client/client.js:119:92) at Socket.onack (/opt/iobroker/node_modules/socket
mqtt-client.0 2017-09-07 19:14:49.824 error uncaught exception: Cannot read property 'topic' of undefined
smartmeter.0 2017-09-07 19:14:47.702 info Received 10 values, 3 updated
mqtt-client.0 2017-09-07 19:14:47.175 info starting. Version 0.3.0 in /opt/iobroker/node_modules/iobroker.mqtt-client, node: v6.11.1
host.Keller-RasPi2 2017-09-07 19:14:43.065 info instance system.adapter.mqtt-client.0 started with pid 1495
smartmeter.0 2017-09-07 19:14:31.742 info Received 10 values, 3 updated
smartmeter.0 2017-09-07 19:14:15.707 info Received 10 values, 3 updated
host.Keller-RasPi2 2017-09-07 19:14:13.050 info Restart adapter system.adapter.mqtt-client.0 because enabled
host.Keller-RasPi2 2017-09-07 19:14:13.050 error instance system.adapter.mqtt-client.0 terminated with code 0 (OK)
mqtt-client.0 2017-09-07 19:14:13.018 error TypeError: Cannot read property 'topic' of undefined at Socket. (/opt/iobroker/node_modules/iobroker.mqtt-client/client.js:119:92) at Socket.onack (/opt/iobroker/node_modules/socket
mqtt-client.0 2017-09-07 19:14:13.015 error uncaught exception: Cannot read property 'topic' of undefined
mqtt-client.0 2017-09-07 19:14:12.457 info starting. Version 0.3.0 in /opt/iobroker/node_modules/iobroker.mqtt-client, node: v6.11.1
host.Keller-RasPi2 2017-09-07 19:14:08.297 info instance system.adapter.mqtt-client.0 started with pid 1434
smartmeter.0 2017-09-07 19:13:59.716 info Received 10 values, 3 updated
smartmeter.0 2017-09-07 19:13:43.752 info Received 10 values, 3 updated
host.Keller-RasPi2 2017-09-07 19:13:38.280 info Restart adapter system.adapter.mqtt-client.0 because enabled
host.Keller-RasPi2 2017-09-07 19:13:38.279 error instance system.adapter.mqtt-client.0 terminated with code 0 (OK)
mqtt-client.0 2017-09-07 19:13:38.260 info terminating
mqtt-client.0 2017-09-07 19:13:38.244 error at Manager.ondata (/opt/iobroker/node_modules/socket.io-client/lib/manager.js:322:16)
mqtt-client.0 2017-09-07 19:13:38.244 error at Decoder.add (/opt/iobroker/node_modules/socket.io-parser/index.js:246:12)
mqtt-client.0 2017-09-07 19:13:38.244 error at Decoder.Emitter.emit (/opt/iobroker/node_modules/component-emitter/index.js:134:20)
mqtt-client.0 2017-09-07 19:13:38.244 error at Decoder. (/opt/iobroker/node_modules/component-bind/index.js:21:15)
mqtt-client.0 2017-09-07 19:13:38.244 error at Manager.ondecoded (/opt/iobroker/node_modules/socket.io-client/lib/manager.js:332:8)
mqtt-client.0 2017-09-07 19:13:38.244 error at Manager.Emitter.emit (/opt/iobroker/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20)
mqtt-client.0 2017-09-07 19:13:38.244 error at Manager. (/opt/iobroker/node_modules/component-bind/index.js:21:15)
mqtt-client.0 2017-09-07 19:13:38.244 error at Socket.onpacket (/opt/iobroker/node_modules/socket.io-client/lib/socket.js:236:12)
mqtt-client.0 2017-09-07 19:13:38.244 error at Socket.onack (/opt/iobroker/node_modules/socket.io-client/lib/socket.js:312:9)
mqtt-client.0 2017-09-07 19:13:38.244 error at Socket. (/opt/iobroker/node_modules/iobroker.mqtt-client/client.js:119:92)
mqtt-client.0 2017-09-07 19:13:38.244 error TypeError: Cannot read property 'topic' of undefined
mqtt-client.0 2017-09-07 19:13:38.242 error uncaught exception: Cannot read property 'topic' of undefinedHabe einen State aktiviert und die subscriptions und den prefix aus der Konfig herausgenommen.  Muss ssl eingeschaltet sein, oder kann ich das erst mal ohne versuchen? Bei Zugriff auf "nicht localhost"? Gruß Rainer
-
Puh, das Topic, zu dem publishen willst hat sehr viele Sonderzeichen, änder dies doch mal in etwas einfaches, was nur aus Buchstaben und den Trennern "/" besteht. Vielleicht geht da etwas kaputt.
-
Auch damit noch:
! ````
host.Keller-RasPi2 2017-09-07 19:44:13.175 error instance system.adapter.mqtt-client.0 terminated with code 0 (OK)
mqtt-client.0 2017-09-07 19:44:13.155 info terminating
mqtt-client.0 2017-09-07 19:44:13.136 error at Manager.ondata (/opt/iobroker/node_modules/socket.io-client/lib/manager.js:322:16)
mqtt-client.0 2017-09-07 19:44:13.136 error at Decoder.add (/opt/iobroker/node_modules/socket.io-parser/index.js:246:12)
mqtt-client.0 2017-09-07 19:44:13.136 error at Decoder.Emitter.emit (/opt/iobroker/node_modules/component-emitter/index.js:134:20)
mqtt-client.0 2017-09-07 19:44:13.136 error at Decoder. (/opt/iobroker/node_modules/component-bind/index.js:21:15)
mqtt-client.0 2017-09-07 19:44:13.136 error at Manager.ondecoded (/opt/iobroker/node_modules/socket.io-client/lib/manager.js:332:8)
mqtt-client.0 2017-09-07 19:44:13.136 error at Manager.Emitter.emit (/opt/iobroker/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20)
mqtt-client.0 2017-09-07 19:44:13.136 error at Manager. (/opt/iobroker/node_modules/component-bind/index.js:21:15)
mqtt-client.0 2017-09-07 19:44:13.136 error at Socket.onpacket (/opt/iobroker/node_modules/socket.io-client/lib/socket.js:236:12)
mqtt-client.0 2017-09-07 19:44:13.136 error at Socket.onack (/opt/iobroker/node_modules/socket.io-client/lib/socket.js:312:9)
mqtt-client.0 2017-09-07 19:44:13.136 error at Socket. (/opt/iobroker/node_modules/iobroker.mqtt-client/client.js:119:92)
mqtt-client.0 2017-09-07 19:44:13.136 error TypeError: Cannot read property 'topic' of undefined
mqtt-client.0 2017-09-07 19:44:13.134 error uncaught exception: Cannot read property 'topic' of undefinedGruß Rainer
-
Ich sehe grad, dass auf npm nur Version 0.3.0 ist, auf Github schon 0.3.2 und da gibt es genau für diesen Fehler einen Fix.
-
Danke!
Installation läuft.
Bis gleich
Rainer
-
Danke soweit!
jetzt wird die Ampel grün und es kommt (von unten nach oben!):
mqtt-client.0 2017-09-07 19:58:25.685 info connected to broker mqtt-client.0 2017-09-07 19:58:25.549 info Try to connect to mqtt://192.168.138.74:1883?clientId=KellerPi mqtt-client.0 2017-09-07 19:58:25.468 info starting. Version 0.3.2 in /opt/iobroker/node_modules/iobroker.mqtt-client, node: v6.11.1 mqtt-client.0 2017-09-07 19:58:25.186 info States connected to redis: 192.168.138.53:6379 host.Keller-RasPi2 2017-09-07 19:58:21.229 info instance system.adapter.mqtt-client.0 started with pid 5389
Dann habe ich es wohl falsch verstanden mit broker und client.
im broker habe ich den Smartmeter-Verbrauch (noch) nicht.
Aber alle mqtt-Werte, die sich bereits auf dem broker tummeln jetzt auch im client.
Gruß
Rainer
-
Irgendwie bin ich doch noch nicht bereit für mqtt
Unmittelbar nach meinem letzten post ging die Ampel beim client auf gelb und die Daten wurden nicht aktualisiert, nur bei einem restart des mqtt-client.
Nachdem ich dann den mqtt-client ungerechtfertigterweise des Unheils schuldigen verdächtigte, hatte ich den mqtt-Adapter, konfiguriert als client, installiert, dort das selbe. (Nur zusätzlich noch mehr ungewolltes).
Also wieder den client installiert, aber keine Spontanheilung.
Zusätzlich noch die on connect und last will Daten eingegeben, und siehe da, das funktioniert, im Broker wird der client, auch bei gelber Ampel als verbunden angezeigt.
Bei deaktivierung erscheint im Broker beim Status jedoch [object][object], nach reaktivierung steht dort [KellerPi][online].
Bleiben für mich noch zwei Hauptfragen:
-
Was kann ich noch testen, damit die Verbindung konstant bestehen bleibt, und die Daten fließen
-
Wie kann ich die topics festlegen, die gesendet werden sollen, sowie die Richtung?
Gruß
Rainer
-
-
Also das mit der gelben Ampel ist normal.. Hatte nun tagelang einen Wemos mit den Temperatursensoren aktiv und trotz gelb alles lief.
korrigiert mich wenn ich falsch liege bin ja auch noch anfänger
Glaube der Client muss als erstes ein Topic erstellen sonst wird das nix. Das geht auch unter Windows (hatte einen Beitrag für den Sonoff POW geschrieben wie).
Das der Client alle bekannten Topics empfängt ist normal meine ich. Glaube aber das könnte man auch einschränken?!
MQTT ist für Anfänger echt schwer zu verstehen ich leide mit dir :lol:
Zu der ersten Hauptfrage ich hatte ja die Temperaturen vom Wemos geloggt und einen Flot erstellt die Daten wurden ja per MQTT übertragen und ich hatte im Flot viele Datenpunke. Es scheint zumindest stabil zu arbeiten selbst wenn der Adapter gelb ist.
Zum Testen hatte ich mal https://shiftr.io/ benutzt kam da aber nicht weiter. Das war noch gaaanz an meinem Anfang. Probier es ggf mal.
-
Also ich kann jetzt erstmal nur für den mqtt-client sprechen.
Der sollte von sich aus eigentlich gar nichts empfangen vom Broker, wenn man in der Adapter-Konfig keine allgemeinen Subscribes erstellt hat.
Nun kann man bei Objekten im Admin eine Synchronisation mit dem Broker herstellen. Dies geht nur in Senderichtung zum Broker (publish) oder auch in Empfangsrichtung vom Broker (subscribe).
"als Objekt" senden solltest du erstmal nicht verwenden. Dabei wird nicht nur der Wert, sondern der gesamte State (timestamp usw.) als JSON gesendet.
-
Ich habe jetzt nochmal mit Version 0.3.2 des mqtt-client Adapters getestet. Dazu habe ich am Rechner ein mosquitto Broker gestartet, ohne jede Konfiguration, kein SSL.
Im MQTT-Client nur IP und Client-ID konfiguriert.
Adapter verbindet und springt sofort auf Grün.
Verbindung mit SSL zu einem Broker bei cloudmqtt.com ist auch kein Problem und die Ampel wird auch grün.
Es scheint bei euch also noch ein grundsätzlicheres Problem zu geben mit dem Adapter.
-
Kann die Ursache auch im mqtt Adapter auf dem Tinkerboard liegen, der hier ja als Broker dient?
Dort trägt sich der client ordnungsgemäß ein, sendet die Daten einmalig.
ich denke dass bei dem ersten connect die Ampel auch längere Zeit auf grün war. Damals hatte der client auch alle mqtt.0 Daten des Brokers gezogen.
Daher noch einmal die allgemeine Frage.
Wie und wo muss ein client ind oder broker konfiguriert werden um Daten von einem Raspi zu einem Tinker zu schicken?
Gruß
Rainer
-
Du brauchst dafür nur den MQTT-Client.
Ich habe noch einen Verdacht. Kannst du mal den Adapter komplett deinstallieren und dann nochmal 0.3.2 neu installieren? Ist jetzt auch auf npm.
-
Kannst du mal den Adapter komplett deinstallieren und dann nochmal 0.3.2 neu installieren? `
Das hatte ich gestern sowieso gemacht, allerdings zwischenzeitlich den mqtt Adapter installiert.Werde ich trotzdem heute nochmal machen.
Gruß
Rainer
-
Ich habe noch einen Verdacht `
Was hast du getan?ich habe alles gleich gemacht, wie bei meinen ersten Gehversuchen.
Jetzt läuft es (fast) so, wie es sein soll.
client ist grün und auf dem broker kommt der ausgewählte State an, und wird aktualisiert.
lediglich werden auch States vom broker-Tinkerboard auf dem client subscribed, wohl weil ich im MQTT-Adapter unter
MQTT Einstellungen
Maske für Bekanntgeben von eigenen States:
mqtt.0.*
eingeben musste, weil sonst dort irgendetwas mit States aus dem Tankerkönig Adapter kollidierte.
Dann kann ich ja weiter forschen
Gruß
Rainer
-
Wofür nutzt du den MQTT-Adapter?
-
Wofür nutzt du den MQTT-Adapter? `
Damit ich die Doku schreiben kannDer UseCase:
Im Moment habe ich eine produktive ioBroker Umgebung bestehend aus einem Cubietruck als Master und einem Pi2 als Slave im Keller, auf dem der Smartmeter-Adapter meinen Stromzähler ausliest. Diese Werte konnte ich bisher nur in der Produktivumgebung verwenden. In allen Testumgebungen hatte ich keinen Zugriff auf die Smartmeter-Werte. Die Werte vom Solar-Wechselrichter hingegen konnte ich auf beliebig vielen Testsystemen auch gleichzeitig auswerten.
Wie gesagt war ich von dem Vortrag von hobbyquaker dermaßen fasziniert, dass ich es immer schon mal probieren wollte. Der erste Schritt kam dann, dass ich (ebenfalls ohne Ahnung davon) über den LuftgüteThread zu zwei Teensy-LC kam, die Raumdaten per MQTT an eine Testinstallation schickten.
Genau an diese Installation wollte ich jetzt auch weitere Daten senden, und durch die Limitierung der smartmeter-Werte auf einen RasPi bot sich das an. Das Ergebnis ist SUPER!!!
Seit eben habe ich alle möglichen Werte zur Verfügung. Außerdem Werte, die auf dem Raspi per js gerechnet werden, müssen auf dem Tinker nicht nochmal gerechnet werden, sondern werden einfach mit ausgelesen.
Außerdem wächst die Non-Homematic-Gemeinde bei ioBroker, da bin ich gerade dabei nach Möglichkeiten zu suchen ein Einsteigertutorial für non-HM User zu schreiben.
Arduino / WeMos und Co. sind da oft verbreitet, und da bietet sich auch MQTT als Thema an.
Gruß
Rainer
-
Sieht super aus, musst natürlich irgendwie die beiden Adapter trennen in der Doku, da man in der Regel eher nur einen von beiden benötigt.