NEWS
UNSOLVED MQTT >1.5 funktioniert bei mir nicht mehr
-
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.