Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [gelöst] MQTT Server Restart?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] MQTT Server Restart?

    This topic has been deleted. Only users with topic management privileges can see it.
    • ?
      A Former User last edited by

      Hallo,

      ich benutze den iobroker MQTT Adapter als Server, um damit Nachrichten von mehreren Webseiten (die mit Javascript Paho-MQTT Clients verbunden sind) und einigen ESP12 8266 Mikrocontrollern zu senden und empfangen.

      Das klappt so weit ganz gut.

      Mein Problem ist nur, dass alle paar Stunden/Tage der MQTT-Adapter plötlzich rot ist und das komplette System nicht mehr funktioniert.

      Im Log steht dann nichts weiter als "MQTT Error".

      Mehr nicht.

      Ein simpler Neustart des Adapters behebt das Problem und alle Webseiten und Mikrocontroller melden sich innerhalb von Sekunden brav wieder an und sprechen miteinander.

      Bis zum nächsten roten Punkt.

      Hat jemand eine Ahnung, was da vor sich geht?

      Und vor allem: Gibt es eine Möglichkeit, den Adapter automatisch neu starten zu lassen?

      –-------- Infos:

      • Bei den MQTT-Einstellungen habe ich alle Häkchen deaktiviert, außer "Sende auch Zustände (ack=true):".

      • Abonniert ist mqtt.0.lab.*

      • Außerdem habe ich bei Verbindung "Benutze auch Websockets" aktiviert.

      Weiß nicht, was sonst noch relevant sein könnte.

      Im Log habe ich wie gesagt nichts gefunden.

      1 Reply Last reply Reply Quote 0
      • ?
        A Former User last edited by

        Für ein bisschen mehr Info:

        Das hier hab ich heute morgen im Log gefunden. So sieht das immer aus:

        • mqtt.0 2017-12-03 09:42:59.999 info Client [labspinnen8266] subscribes on "mqtt.0.lab.labspinnen8266"
        mqtt.0 2017-12-03 09:42:59.979 info Client [labspinnen8266] connected
        
        mqtt.0 2017-12-03 09:42:55.014 info Client [labrobot8266] subscribes on "mqtt.0.lab.labrobot8266"
        
        mqtt.0 2017-12-03 09:42:54.999 info Client [labrobot8266] connected
        
        mqtt.0 2017-12-03 09:32:20.851 info Client [labspinnen8266] closed
        
        mqtt.0 2017-12-03 09:32:20.851 error Closed because of error
        
        mqtt.0 2017-12-03 09:32:20.850 warn Client error [labspinnen8266]: Error: read ECONNRESET
        
        mqtt.0 2017-12-03 09:32:20.849 info Client [labrobot8266] closed
        
        mqtt.0 2017-12-03 09:32:20.849 error Closed because of error
        
        mqtt.0 2017-12-03 09:32:20.847 warn Client error [labrobot8266]: Error: read ECONNRESET
        
        mqtt.0 2017-12-03 09:32:01.012 info Client [Countdown_Lab] subscribes on "mqtt.0.lab.*" with regex /^mqtt\.0\.lab\..*/
        
        mqtt.0 2017-12-03 09:32:01.012 info Client [Countdown_Lab] subscribes on "mqtt.0.lab.*" with regex /^lab\..*/
        
        mqtt.0 2017-12-03 09:32:00.960 info Client [Countdown_Lab] connected 
        

        Nach 10 Minuten scheint sich MQTT selbst zu starten (oder einer meiner Mitarbeiter hat das getan, bin nicht sicher)

        Vielleicht hilft es ja?

        1 Reply Last reply Reply Quote 0
        • ?
          A Former User last edited by

          Habe grad das hier gefunden:

          http://forum.iobroker.net/viewtopic.php?t=2747

          Chunking Option aktivieren.

          Hatte ich vorher nicht gesehen.

          Ich werde es ausprobieren und berichten.

          1 Reply Last reply Reply Quote 0
          • ?
            A Former User last edited by

            Hm, gar nicht gut. Mit Chunking Patch aktiviert wird alles rot und nix geht mehr:

            • host.TARDIS 2017-12-03 10:31:27.674 info Restart adapter system.adapter.mqtt.0 because enabled
            host.TARDIS 2017-12-03 10:31:27.674 error instance system.adapter.mqtt.0 terminated with code 0 (OK)
            
            Caught 2017-12-03 10:31:27.673 error by controller[2]: at Connection.Writable.write (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\readable-stream\lib\_stream_writable.js:322:11)
            
            Caught 2017-12-03 10:31:27.673 error by controller[2]: at writeOrBuffer (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\readable-stream\lib\_stream_writable.js:395:5)
            
            Caught 2017-12-03 10:31:27.673 error by controller[2]: at doWrite (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\readable-stream\lib\_stream_writable.js:406:64)
            
            Caught 2017-12-03 10:31:27.673 error by controller[2]: at Connection.Duplexify._write (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\duplexify\index.js:201:22)
            
            Caught 2017-12-03 10:31:27.673 error by controller[2]: at Writable.write (_stream_writable.js:243:11)
            
            Caught 2017-12-03 10:31:27.673 error by controller[2]: at writeOrBuffer (_stream_writable.js:317:5)
            
            Caught 2017-12-03 10:31:27.673 error by controller[2]: at doWrite (_stream_writable.js:331:12)
            
            Caught 2017-12-03 10:31:27.673 error by controller[2]: at Writable.write [as _write] (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\mqtt-connection\lib\writeToStream.js:10:9)
            
            Caught 2017-12-03 10:31:27.673 error by controller[2]: at publish (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\mqtt-packet\writeToStream.js:248:23)
            
            Caught 2017-12-03 10:31:27.673 error by controller[2]: at Function.Buffer.concat (buffer.js:304:24)
            
            Caught 2017-12-03 10:31:27.672 error by controller[2]: 2017-12-03 10:31:27.154 - mqtt.0 TypeError: Cannot read property 'length' of undefined
            
            Caught 2017-12-03 10:31:27.672 error by controller[1]: 2017-12-03 10:31:27.154 - mqtt.0 uncaught exception: Cannot read property 'length' of undefined
            
            Caught 2017-12-03 10:31:27.672 error by controller[0]: at Connection.Writable.write (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\readable-stream\lib\_stream_writable.js:322:11)
            
            Caught 2017-12-03 10:31:27.672 error by controller[0]: at writeOrBuffer (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\readable-stream\lib\_stream_writable.js:395:5)
            
            Caught 2017-12-03 10:31:27.672 error by controller[0]: at doWrite (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\readable-stream\lib\_stream_writable.js:406:64)
            
            Caught 2017-12-03 10:31:27.672 error by controller[0]: at Connection.Duplexify._write (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\duplexify\index.js:201:22)
            
            Caught 2017-12-03 10:31:27.672 error by controller[0]: at Writable.write (_stream_writable.js:243:11)
            
            Caught 2017-12-03 10:31:27.672 error by controller[0]: at writeOrBuffer (_stream_writable.js:317:5)
            
            Caught 2017-12-03 10:31:27.671 error by controller[0]: at doWrite (_stream_writable.js:331:12)
            
            Caught 2017-12-03 10:31:27.671 error by controller[0]: at Writable.write [as _write] (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\mqtt-connection\lib\writeToStream.js:10:9)
            
            Caught 2017-12-03 10:31:27.671 error by controller[0]: at publish (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\mqtt-packet\writeToStream.js:248:23)
            
            Caught 2017-12-03 10:31:27.671 error by controller[0]: at Function.Buffer.concat (buffer.js:304:24)
            
            Caught 2017-12-03 10:31:27.671 error by controller[0]: TypeError: Cannot read property 'length' of undefined
            
            mqtt.0 2017-12-03 10:31:27.658 info terminating
            
            mqtt.0 2017-12-03 10:31:27.169 info Client [Countdown_Lab] closed
            
            mqtt.0 2017-12-03 10:31:27.167 warn Client error [Countdown_Lab]: Error: not opened
            
            mqtt.0 2017-12-03 10:31:27.163 info Client [Countdown_Lab] connected
            
            mqtt.0 2017-12-03 10:31:27.158 info Client [labspinnen8266] closed
            
            mqtt.0 2017-12-03 10:31:27.154 error at Connection.Writable.write (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\readable-stream\lib\_stream_writable.js:322:11)
            
            mqtt.0 2017-12-03 10:31:27.154 error at writeOrBuffer (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\readable-stream\lib\_stream_writable.js:395:5)
            
            mqtt.0 2017-12-03 10:31:27.154 error at doWrite (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\readable-stream\lib\_stream_writable.js:406:64)
            
            mqtt.0 2017-12-03 10:31:27.154 error at Connection.Duplexify._write (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\duplexify\index.js:201:22)
            
            mqtt.0 2017-12-03 10:31:27.154 error at Writable.write (_stream_writable.js:243:11)
            
            mqtt.0 2017-12-03 10:31:27.154 error at writeOrBuffer (_stream_writable.js:317:5)
            
            mqtt.0 2017-12-03 10:31:27.154 error at doWrite (_stream_writable.js:331:12)
            
            mqtt.0 2017-12-03 10:31:27.154 error at Writable.write [as _write] (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\mqtt-connection\lib\writeToStream.js:10:9)
            
            mqtt.0 2017-12-03 10:31:27.154 error at publish (C:\ioBroker\node_modules\iobroker.mqtt\node_modules\mqtt-packet\writeToStream.js:248:23)
            
            mqtt.0 2017-12-03 10:31:27.154 error at Function.Buffer.concat (buffer.js:304:24)
            
            mqtt.0 2017-12-03 10:31:27.154 error TypeError: Cannot read property 'length' of undefined
            
            mqtt.0 2017-12-03 10:31:27.154 error uncaught exception: Cannot read property 'length' of undefined
            
            mqtt.0 2017-12-03 10:31:27.116 info Client [labspinnen8266] connected
            
            mqtt.0 2017-12-03 10:31:26.979 info Starting MQTT-WebSocket server on port 1884
            
            mqtt.0 2017-12-03 10:31:26.978 info Starting MQTT server on port 1883
            
            mqtt.0 2017-12-03 10:31:26.756 info Patch applied
            
            mqtt.0 2017-12-03 10:31:26.742 info starting. Version 1.3.2 in C:/ioBroker/node_modules/iobroker.mqtt, node: v6.10.3
            
            host.TARDIS 2017-12-03 10:31:26.085 info instance system.adapter.mqtt.0 started with pid 13632
            1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators last edited by

              @meome:

              C:\ioBroker\node_modules\iobroker.mqtt\node_modules\readable-stream\lib_stream_writable.js:322:11 `
              Also windoof??

              Da bin ich leider raus 😞

              Aber hast du mal an den automatischen restart gefacht?

              http://www.iobroker.net/docu/?page_id=5 … #6_restart

              Gruß Rainer

              1 Reply Last reply Reply Quote 0
              • ?
                A Former User last edited by

                Ja, ein automatischer Restart würde das Problem auf jeden Fall lösen machen, denke ich.

                Es startet aber nicht automatisch neu. Zumindest nicht sofort.

                Dein Link hat mir da grad leider nicht weiter geholfen.

                Da steht nur, das ich resarten kann? Das tue ich ja auch schon. Das funktioniert.

                Aber wie geht das automatisch?

                1 Reply Last reply Reply Quote 0
                • ?
                  A Former User last edited by

                  Und ja, alles Windows 10, in der Tat.

                  Ich überlege grad Umzug auf RasPi, aber mit Linux kenne ich mich noch so gut wie gar nicht aus.

                  1 Reply Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators last edited by

                    @meome:

                    Aber wie geht das automatisch? `
                    Indem du dort im Admin unter Instanzen einen cron eingibst (Expertenmodus vorher aktivieren!).

                    Den stellst du entsprechend deiner wünsche nach dem restartintervall ein.

                    Gruß

                    Rainer

                    1 Reply Last reply Reply Quote 0
                    • ?
                      A Former User last edited by

                      Hm. Danke für die Anregung.

                      Unter Windows 10 gibts wohl nur die Taskplanung. Habe auch das Programm Z-Cron gefunden, das anscheinend gut ist.

                      Ist es denn echt ok, wenn ich den MQTT-Adapter jede Minute neu starte?

                      Besser wäre ja eigentlich, wenn ich jede Minute ein Programm ausführen lassen würde, das prüft, ob MQTT läuft.

                      Wenn ja: Alle sgut und nix tun.

                      Wenn nein: Neustart MQTT-Adapter per Kommandozeilenbefehl.

                      Gibt es eine Möglichkeit, mit einem Kommandozeilen-Befehl zu prüfen, ob MQTT läuft?

                      Ich glaube, ich mus smir auch noch mal das mit dem Chunking Patch durchlesen, das hat im anderen Thread ja funktioniert.

                      Eine dritte alternative wäre natürlich noch auf Mosquitto umzusteigen und zu hoffen, das es da besser läuft.

                      Würde aber am liebsten alles im iobroker-Universum lassen.

                      1 Reply Last reply Reply Quote 0
                      • ?
                        A Former User last edited by

                        Oh nein, war mal wieder zu schnell.

                        Habe die Cron-Experten-Einstellungen gefunden.

                        Frage bleibt: Ist das ok, jede Minute neu zu starten? Verliere ich dann evtl. Daten?

                        1 Reply Last reply Reply Quote 0
                        • Dutchman
                          Dutchman Developer Most Active Administrators last edited by

                          @meome:

                          Frage bleibt: Ist das ok, jede Minute neu zu starten? Verliere ich dann evtl. Daten? `

                          Ich wuerde ihn auf keinen falll jede minute neu starten 😕

                          Pruefe doch mal bitten ob der status alive auf false schlaegt wen der adapter abschmiert

                          (vorher bei den objecten experten modus einschalten sonst siehst du diese variable nicht)

                          system.adapter.mqtt.0.alive
                          

                          wen ja kan man mit javascript dafuer sorgen "wenn alive = false dann adapter neustart"

                          1 Reply Last reply Reply Quote 0
                          • ?
                            A Former User last edited by

                            Das wäre eine gute Lösung.

                            So weit ich weiß, ist es false (die oberen 2 von 3 Punkten sind rot), aber ich werd das morgen prüfen und berichten.

                            Wie ich die Systemnachricht system.adapter.mqtt.0.alive per Websockets in meine Webseite kriege, weiß ich (glaube ich).

                            Aber wie kann ich mit Javascript aus einer Webseite heraus den Adapter neu starten?

                            1 Reply Last reply Reply Quote 0
                            • Dutchman
                              Dutchman Developer Most Active Administrators last edited by

                              @meome:

                              Aber wie kann ich mit Javascript aus einer Webseite heraus den Adapter neu starten? `

                              Schau mal hier für ein Script Beispiel.

                              Die Frage ist ob du es von der Webseite aus machen möchtest, Dan musst du da einen Button mit Trigger erstellen, oder einfach nen Adapter reboot machst wen de Werte alive = false wird:

                              http://forum.iobroker.net/viewtopic.php?t=9190

                              –-----------------------

                              Send from mobile device

                              1 Reply Last reply Reply Quote 0
                              • ?
                                A Former User last edited by

                                Hatte endlich Zeit:

                                Per iobroker Javascript-Adapter ein Blocky-Script erstellt

                                (ich wollte es eigentlich per DOS-Batch-Befehl machen a la "iobroker restart mqtt.0" , Blocky ist glaub ich viel besser 🙂 Da hatte ich kompliziert gedacht und wusste nichts vom Javascript-Adapter. iobroker ist immer wieder eindrucksvoll 😄 ).

                                Das Skript läuft und sieht folgendermaßen aus:

                                on({id: "system.adapter.mqtt.0.alive"/*mqtt.0.alive*/, val: false}, function (obj) {
                                  var value = obj.state.val;
                                  var oldValue = obj.oldState.val;
                                  console.log('MQTT RESTART');
                                  setState("system.adapter.mqtt.0.alive"/*mqtt.0.alive*/, true);
                                  setState("system.adapter.mqtt.0.connected"/*mqtt.0.connected*/, true);
                                });
                                
                                

                                Die Frage ist jetzt: Ist das richtig so?

                                Ich setze ja nur die Werte alive und connected auf true.

                                Einen wirklichen Adapter-Restart mache ich damit nicht?

                                Oder doch?

                                Wenn nicht, was wäre denn der Befehl dafür? Finde in Blocky nichts.

                                Leider kann ich es nicht testen, da der mqtt-Ausfall nur äußerst sporadisch auftritt und ich immer noch keinen Anhaltspunkt habe, warum es passiert.

                                Ich habe das gleiche Problem letztens sogar bei socket.io gehabt. War einfach rot und wurde durch manuellen Neustart sofort wieder funktional.

                                Dafür würde ich dann gleich ein zweites Skript anlegen.

                                Müsste nur wissen, ob das so wirklich funkional ist oder ob ich einen anderes Kommando für Adapter-Restart brauche.

                                Habe in der Suche nichts gefunden.

                                1 Reply Last reply Reply Quote 0
                                • Homoran
                                  Homoran Global Moderator Administrators last edited by

                                  Das geht viel einfacher (per cron):

                                  http://www.iobroker.net/docu/?page_id=5 … #6_restart

                                  bitte vorher Expertenmodus aktivieren.

                                  Gruß

                                  Rainer

                                  1 Reply Last reply Reply Quote 0
                                  • Dutchman
                                    Dutchman Developer Most Active Administrators last edited by

                                    Warum setzt Nu Werte alive und connected das ist der Status!

                                    Du musst den Adapter enabled Werte auf FALSE und dann zB 30sec später auf true setzen.

                                    Der alive/connected gibt für den Status ob er abgeschmiert ist

                                    @Homoran

                                    Die Frage war nicht cyclisch zu rebooten was mit cron geht sondern nur wenn er abgeschmiert ist

                                    –-----------------------

                                    Send from mobile device

                                    1 Reply Last reply Reply Quote 0
                                    • ?
                                      A Former User last edited by

                                      Ich glaub, ich habs!

                                      Hab das Script von Blocky in Javascript kopiert und dann folgendermaßen abgeändert:

                                      on({id: "system.adapter.mqtt.0.alive"/*mqtt.0.alive*/, val: false}, function (obj) {
                                        var value = obj.state.val;
                                        var oldValue = obj.oldState.val;
                                        console.log('MQTT RESTART');
                                      
                                        var obj2 = getObject("system.adapter.mqtt.0");
                                        obj2.common.enabled = true;  // Adapter einschalten
                                        setObject("system.adapter.mqtt.0", obj2);
                                      });
                                      
                                      

                                      Jetzt startet der MQTT-Adapter jedes mal neu, wenn ich ihn zum Beispiel manuell deaktiviere!

                                      Denke, wenn irgendwas anderes ihn aus der Fassung bringt, passiert das auch.

                                      Jetzt bastel ich das gleich noch für Socket.io.

                                      Damit kann man den Adapter zwar nicht mehr deaktivieren, solange das Skript läuft, aber das ist bei MQTT und Socket.io ja herzlich egal.

                                      Damit sollten meine Panikattacken endlich vorüber sein 🙂 🙂 🙂

                                      Hoffentlich ist das jetzt richtig so.

                                      1 Reply Last reply Reply Quote 0
                                      • Dutchman
                                        Dutchman Developer Most Active Administrators last edited by

                                        Man könnte das noch verfeinern durch nur auf alive zu überprüfen und eine Aktion aus zu lösen wen der Adapter enabled ist. Dann könntest du ihn auch manuell wieder ausschalten

                                        –-----------------------

                                        Send from mobile device

                                        1 Reply Last reply Reply Quote 0
                                        • ?
                                          A Former User last edited by

                                          @Dutchman: Das wäre cool. Ja.

                                          Ich fände es auch toll, wenn es da sowas wie eine Sicherheitssperre von 10-15 Sekunden gäbe, damit bei einem richtig fiesen Absturz nicht 1000 Neustartanforderungen pro Sekunde gesendet werden und evtl. das gesamte System blockieren.

                                          Ich weiß nicht, ob das so passieren kann. Aber damit würde ich mich sicherer fühlen.

                                          Leider übersteigt das aber meine Fähigkeiten.

                                          Vielleicht spiele ich mal in Blocky rum, um zu sehen, wie so eine Zeitsteuerung funktioniert.

                                          Ich bin leider totaler Noob.

                                          Ich brauche immer vorgegebene Codeschnipsel, die ich dann per try&error zusammensetze.

                                          Freu mich schon, wenn jetzt keiner mehr sagt: Das geht so nicht, das darfst du nicht tun, weil gefährlich und alles kann abschmieren oder so 🙂

                                          1 Reply Last reply Reply Quote 0
                                          • Dutchman
                                            Dutchman Developer Most Active Administrators last edited by

                                            Ich verstehe deine Sicherheitsperre logic nicht 😉 was meinst du damit

                                            –-----------------------

                                            Send from mobile device

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            788
                                            Online

                                            32.0k
                                            Users

                                            80.5k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            41
                                            5674
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo