NEWS
UNSOLVED MQTT >1.5 funktioniert bei mir nicht mehr
-
Hallo,
ich nutze den MQTT-Adapter seit längerem in Version 1.5
Darauf greifen Mikrocontroller 8266 per pubsub-Library und eine Webseite per Paho-Javascript Client zu.Das alles funktioniert wunderbar, bis ich den MQTT-Adapter auf Version >= 2 update.
Dann ist nur noch Chaos:- Webseite kann sich nicht anmelden:
client = new Paho.MQTT.Client("192.168.178.101", Number(1884), "/ws", "LABHTML");
erzeugt Fehlermeldungen wie: AMQJS0008I Socket closed" und "WebSocket connection to 'ws://192.168.178.101:1884/mqtt' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED"
- MQTT Adapter blinkt mal grün, mal gelb, mal rot. Hier die Fehlermeldung:
mqtt.0 2019-07-12 23:13:20.083 info Starting MQTT -WebSocket' server on port 1884 mqtt.0 2019-07-12 23:13:20.078 info Starting MQTT ' server on port 1883 mqtt.0 2019-07-12 23:13:17.442 info starting. Version 2.1.0 in /opt/iobroker/node_modules/iobroker.mqtt, node: v8.16.0 host.ioBroker-RasPi 2019-07-12 23:13:15.038 info instance system.adapter.mqtt.0 started with pid 30135 host.ioBroker-RasPi 2019-07-12 23:12:44.996 info Restart adapter system.adapter.mqtt.0 because enabled host.ioBroker-RasPi 2019-07-12 23:12:44.996 error instance system.adapter.mqtt.0 terminated with code 0 (OK) Caught 2019-07-12 23:12:44.996 error by controller[0]: at Connection.emit (events.js:211:7) Caught 2019-07-12 23:12:44.996 error by controller[0]: at emitOne (events.js:116:13) Caught 2019-07-12 23:12:44.996 error by controller[0]: at Object.onceWrapper (events.js:315:30) Caught 2019-07-12 23:12:44.995 error by controller[0]: at Connection.<anonymous> (/opt/iobroker/node_modules/iobroker.mqtt/node_modules/mqtt-connection/connection.js:53:12) Caught 2019-07-12 23:12:44.995 error by controller[0]: at Connection.emit (events.js:211:7) Caught 2019-07-12 23:12:44.995 error by controller[0]: at emitOne (events.js:116:13) Caught 2019-07-12 23:12:44.995 error by controller[0]: at Connection.emitPacket (/opt/iobroker/node_modules/iobroker.mqtt/node_modules/mqtt-connection/connection.js:10:8) Caught 2019-07-12 23:12:44.995 error by controller[0]: at Connection.emit (events.js:211:7) Caught 2019-07-12 23:12:44.995 error by controller[0]: at emitOne (events.js:116:13) Caught 2019-07-12 23:12:44.994 error by controller[0]: at Connection.client.on.options (/opt/iobroker/node_modules/iobroker.mqtt/lib/server.js:750:30) Caught 2019-07-12 23:12:44.994 error by controller[0]: TypeError: stream.setTimeout is not a function mqtt.0 2019-07-12 23:12:44.950 info terminating mqtt.0 2019-07-12 23:12:44.432 error at Connection.emit (events.js:211:7) mqtt.0 2019-07-12 23:12:44.432 error at emitOne (events.js:116:13) mqtt.0 2019-07-12 23:12:44.432 error at Object.onceWrapper (events.js:315:30) mqtt.0 2019-07-12 23:12:44.432 error at Connection.<anonymous> (/opt/iobroker/node_modules/iobroker.mqtt/node_modules/mqtt-connection/connection.js:53:12) mqtt.0 2019-07-12 23:12:44.432 error at Connection.emit (events.js:211:7) mqtt.0 2019-07-12 23:12:44.432 error at emitOne (events.js:116:13) mqtt.0 2019-07-12 23:12:44.432 error at Connection.emitPacket (/opt/iobroker/node_modules/iobroker.mqtt/node_modules/mqtt-connection/connection.js:10:8) mqtt.0 2019-07-12 23:12:44.432 error at Connection.emit (events.js:211:7) mqtt.0 2019-07-12 23:12:44.432 error at emitOne (events.js:116:13) mqtt.0 2019-07-12 23:12:44.432 error at Connection.client.on.options (/opt/iobroker/node_modules/iobroker.mqtt/lib/server.js:750:30) mqtt.0 2019-07-12 23:12:44.432 error TypeError: stream.setTimeout is not a function mqtt.0 2019-07-12 23:12:44.431 error uncaught exception: stream.setTimeout is not a function mqtt.0 2019-07-12 23:12:44.049 info Client [LABHTML] connected with secret 262996_851
- Und der 8266er stürzt ab.
Ich habe alles nach Standard-Beispielen programmiert.
Und sobald ich auf 1.5 zurückgehe, funktionieren 8266 und die Javascript-Webseite wieder tadellos und schnell.Deshalb meine Fragen:
Was hat sich geändert in diesem Update? Erkennt jemand meinen Fehler?
Und vor allem: Was muss ich tun, damit es mit dem Update wieder funktioniert?Alles läuft im lokalen Netzwerk auf einem RasPi mit aktuellen Updates(?)
node=8.16.0
npm=6.4.1
Paho=alte+neue Version getestet: https://www.eclipse.org/paho/clients/js/ -
Niemand? Funktioniert das bei allen? Oder habe ich was Wichtiges nicht geposted?
Ich zeig euch mal den Code:
Eigentlich nur das Muster-Beispiel, das bei paho-mqtt.js dabei ist:
(hier ist auch ein fiddle.js wo man nur bei ("broker.mqttdashboard.com", 8000 ") seine ("eigene MQTT-Broker-IP", 1884) eingeben muss:
http://jsfiddle.net/gLBsu/3/ )<script type="text/javascript" src="new paho-mqtt.js"> </script> <script type="text/javascript"> // Create a client instance var host = "192.168.178.101"; var port = 1884; client = new Paho.Client(host, port, "MQTTTEST"); // set callback handlers client.onConnectionLost = onConnectionLost; client.onMessageArrived = onMessageArrived; // connect the client client.connect({onSuccess:onConnect}); // called when the client connects function onConnect() { // Once a connection has been made, make a subscription and send a message. console.log("onConnect"); client.subscribe("World"); message = new Paho.Message("Hello"); message.destinationName = "World"; client.send(message); } // called when the client loses its connection function onConnectionLost(responseObject) { if (responseObject.errorCode !== 0) { console.log("onConnectionLost:"+responseObject.errorMessage); } } // called when a message arrives function onMessageArrived(message) { console.log("onMessageArrived:"+message.payloadString); } </script>
Entweder erhalte ich die Fehlermeldung:
MQTTTest2.html:48 onConnectionLost:AMQJS0008I Socket closed.
Oder
new paho-mqtt.js:1054 WebSocket connection to 'ws://192.168.178.101:1884/mqtt' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED LibraryFactory.ClientImpl._doConnect @ new paho-mqtt.js:1054 LibraryFactory.ClientImpl.connect @ new paho-mqtt.js:887 Client.connect @ new paho-mqtt.js:2028 (anonymous) @ MQTTTest2.html:35 new paho-mqtt.js:1052 WebSocket connection to 'ws://192.168.178.101:1884/mqtt' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED LibraryFactory.ClientImpl._doConnect @ new paho-mqtt.js:1052 LibraryFactory.ClientImpl._disconnected @ new paho-mqtt.js:1617 LibraryFactory.ClientImpl._on_socket_error @ new paho-mqtt.js:1453
iobroker Log gibt mir immer wieder diese Schleife als Fehlermeldung:
mqtt.0 2019-07-16 19:13:20.566 info Starting MQTT -WebSocket' server on port 1884 mqtt.0 2019-07-16 19:13:20.564 info Starting MQTT ' server on port 1883 mqtt.0 2019-07-16 19:13:19.588 info starting. Version 2.1.0 in /opt/iobroker/node_modules/iobroker.mqtt, node: v8.16.0 host.ioBroker-RasPi 2019-07-16 19:13:18.220 info instance system.adapter.mqtt.0 started with pid 2957 host.ioBroker-RasPi 2019-07-16 19:12:48.208 info Restart adapter system.adapter.mqtt.0 because enabled host.ioBroker-RasPi 2019-07-16 19:12:48.208 error instance system.adapter.mqtt.0 terminated with code 0 (OK) host.ioBroker-RasPi 2019-07-16 19:12:48.207 error Caught by controller[0]: at Connection.emit (events.js:211:7) host.ioBroker-RasPi 2019-07-16 19:12:48.207 error Caught by controller[0]: at emitOne (events.js:116:13) host.ioBroker-RasPi 2019-07-16 19:12:48.207 error Caught by controller[0]: at Object.onceWrapper (events.js:315:30) host.ioBroker-RasPi 2019-07-16 19:12:48.207 error Caught by controller[0]: at Connection.<anonymous> (/opt/iobroker/node_modules/iobroker.mqtt/node_modules/mqtt-connection/connection.js:53:12) host.ioBroker-RasPi 2019-07-16 19:12:48.206 error Caught by controller[0]: at Connection.emit (events.js:211:7) host.ioBroker-RasPi 2019-07-16 19:12:48.206 error Caught by controller[0]: at emitOne (events.js:116:13) host.ioBroker-RasPi 2019-07-16 19:12:48.206 error Caught by controller[0]: at Connection.emitPacket (/opt/iobroker/node_modules/iobroker.mqtt/node_modules/mqtt-connection/connection.js:10:8) host.ioBroker-RasPi 2019-07-16 19:12:48.206 error Caught by controller[0]: at Connection.emit (events.js:211:7) host.ioBroker-RasPi 2019-07-16 19:12:48.205 error Caught by controller[0]: at emitOne (events.js:116:13) host.ioBroker-RasPi 2019-07-16 19:12:48.204 error Caught by controller[0]: at Connection.client.on.options (/opt/iobroker/node_modules/iobroker.mqtt/lib/server.js:750:30) host.ioBroker-RasPi 2019-07-16 19:12:48.199 error Caught by controller[0]: TypeError: stream.setTimeout is not a function mqtt.0 2019-07-16 19:12:47.641 error TypeError: stream.setTimeout is not a function at Connection.client.on.options (/opt/iobroker/node_modules/iobroker.mqtt/lib/server.js:750:30) at emitOne (events.js:116:13) at Connection.e mqtt.0 2019-07-16 19:12:47.640 error uncaught exception: stream.setTimeout is not a function mqtt.0 2019-07-16 19:12:47.639 info Client [MQTTTEST] connected with secret 1563297167353_5931 mqtt.0 2019-07-16 19:12:20.580 info Starting MQTT -WebSocket' server on port 1884 mqtt.0 2019-07-16 19:12:20.578 info Starting MQTT ' server on port 1883 mqtt.0 2019-07-16 19:12:19.496 info starting. Version 2.1.0 in /opt/iobroker/node_modules/iobroker.mqtt, node: v8.16.0 host.ioBroker-RasPi 2019-07-16 19:12:18.236 info instance system.adapter.mqtt.0 started with pid 1758
Oder ist das ein Fehler der Paho.Mqtt-Library?
Aber mit
MQTT Adapter 1.5 war alles ok.
MQTT Adapter 2.0 ist auch ok. (obwohl es ab 2.0 anderes seltsames Verhalten gibt, aber das muss ich noch erforschen)
MQTT Adapter 2.0.1 auch ok.
MQTT Adapter 2.0.2 auch ok
MQTT Adapter 2.0.4 auch okAdapter 2.05 und 2.06 konnte ich nicht installieren.
Und erst mit MQTT Adapter Version 2.1.0 geht es eben NICHT mehr.
Das spricht doch dafür, dass in dieser Version was nicht stimmt, oder?
Aber die 8266er, die per pubsub.h an MQTT angebunden sind, funktionieren übrigens auch mit Version 2.1.
Nur der Javascript-Client scheint Probleme zu haben.
Also ist es doch Paho.mqtt?Ich weiß nicht ...
Wäre für jede Hilfe wirklich sehr dankbar. -
hallo habe mit esp8266 ähnliches problem schon sehr lange...!
issue auf gizhib ist auch offen !!Mit freundlichen Grüßen
mikwolf -
@Mikewolf Danke für die Antwort!
Meine ESP8266 funktionieren wie gesagt mit pubsub.h.
Ich musste aber seit 1.5 das Verhalten von MQTT ändern, damit die mitmachen:
Auf 1.5 hatte ich NUR Häkchen bei "Sende auch Zustände (ACK=true)". Alles andere war aus.Bei Versionen 2.+ habe ich umgestellt auf "Publish nur bei Änderung" und alles andere aus gemacht. QoS=0, default retain flag true. Dann funktionieren sie bei mir wieder. Hab ich aber auch erst gestern beim Testen rausgefunden. Noch nicht ausführlich geprüft.
Vielleicht hilfts ja.
Denke, dass MQTT ein absolut zentraler Baustein im IoT ist und auf jeden Fall funktionieren sollte.
Weiß halt nur nicht, ob es am Adapter oder an Paho liegt. -
Hm... Auch weitere Tests haben jetzt bestätigt: Irgendwas ist mit Version 2.1 des MQTT Adapters.
Hat denn jemand Erfahrung MQTT?
Ich plane das für ein Produktiv-System.
Wenn ich das nicht updaten kann und es dann evtl. irgendwann ausfällt oder unsicher wird, kann ich ioBroker nicht einsetzen.Sollte ich vielleicht einen eigenen Mosquitto-MQTT-Server aufsetzen, statt den von ioBroker zu nutzen?
Kann ich den auf dem Raspberry laufen lassen, auf dem auch ioBroker läuft? Oder brauche ich dafür extra einen zweiten?
Oder doch openHAB oder ein anderes System?
Hat jemand bei sich zuhause eine stabile MQTT-Umgebung? -
Habe MQTT 2.1 als Server schon länger ohne Probleme am laufen. Habe Temperatur-Sensoren und pi-mqtt-gpio daran gekoppelt.
pi-mqtt-gpio nutzt paho. -
@Wal hm... interessant. Das macht es noch seltsamer.
Und wenn du in das fiddle-Beispiel (http://jsfiddle.net/gLBsu/3/) oben deine lokale MQTT-Broker IP eingibst und auf Run und dann den Button "1. CONNECT" drückst... läuft es dann oder meldet der iobroker-Log Fehler und einen Neustart des Adapters?Das benutzt auch PAHO, genauer mqttws31.js.
-
@blumfisch
du hast Recht, über Websocket's funzt der Adapter nicht. Er steigt bei mir mit den gleichen Fehlermeldungen aus. -
@Wal Danke fürs Verifizieren!
Dann stimmt wohl was mit den Websockets nicht (wenn man das so sagen kann)
An wen wende ich mich denn jetzt am besten? Das kann ich selbst nicht reparieren.
-
habe nochmal getestet.
Wenn ich auf der Seite HiveMQ keepalive auf 0 stelle, funktioniert es. -
Ich nutze MQTT nur im internen Netzwerk, also kein HiveMQ.
Habs trotzdem mal getestet, denn das entspräche ja:var client = new Messaging.Client("localhost", 1884, "myclientid_", 0));
und/oder
var options = { timeout: 0,
Oder?
Fazit: Stürzt immer noch ab.Ich habe aber was Entscheidendes bemerkt: Das DEFAULT Repository ist erst bei MQTT Version 2.0.4. Ich hatte meinen ioBroker zuhause auf LATEST gestellt.
Vielleicht sollte ich das in einer Produktivumgebung auch sein lassen Gehe jetzt also definitiv zurück auf 2.0.4.
Hoffe, es hilft vielleicht trotzdem, Version 2.1 näher an DEFAULT zu bringen.