Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. [gelöst, mit Umweg] MQTT Adapter - connect, disconnect, connect, dicsconnet

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.2k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

[gelöst, mit Umweg] MQTT Adapter - connect, disconnect, connect, dicsconnet

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
15 Beiträge 3 Kommentatoren 4.6k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • ? Offline
    ? Offline
    Ein ehemaliger Benutzer
    schrieb am zuletzt editiert von
    #4

    Ich schlage mich gerade mit sehr ähnlichen Problemen rum.

    Schau mal hier: http://forum.iobroker.net/viewtopic.php?f=20&t=9450

    Am Ende haben wir 2 Skripts für den iobroker Javascript-Adapter , die evtl. helfen könnten.

    Sie starten den Adapter einfach neu.

    Ich konnte mit dem Chunking Patch übrigens auch nicht arbeiten, da kamen bei mir auch Fehlermeldungen und MQTT lief gar nicht mehr.

    Arbeite ebenfalls mit ESP12 8266 und der pubsub-library.

    1 Antwort Letzte Antwort
    0
    • ? Offline
      ? Offline
      Ein ehemaliger Benutzer
      schrieb am zuletzt editiert von
      #5

      Ich habe mal deinen Arduino Code angeschaut.

      Du benutzt da leider eine andere Library.

      Wie gesagt nutze ich PubSubClient.h.

      Die erscheint mir wesentlich übersichtlicher im Code.

      Ob das wirklich besser ist und deinen Fehler behebt, weiß ich allerdings auch nicht.

      Es gibt in denen aber auch sowas wie einen automatischen Reconnect bei Verbindungsabbruch.

      Würde ich mir also mal anschauen.

      Hast du deine MQTT-Library für Arduino selbst geschrieben?

      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        milo
        schrieb am zuletzt editiert von
        #6

        @meome:

        Ich schlage mich gerade mit sehr ähnlichen Problemen rum.

        Schau mal hier: http://forum.iobroker.net/viewtopic.php?f=20&t=9450

        Am Ende haben wir 2 Skripts für den iobroker Javascript-Adapter , die evtl. helfen könnten.

        Sie starten den Adapter einfach neu.

        Ich konnte mit dem Chunking Patch übrigens auch nicht arbeiten, da kamen bei mir auch Fehlermeldungen und MQTT lief gar nicht mehr.

        Arbeite ebenfalls mit ESP12 8266 und der pubsub-library. `

        Das reconnecten löst leider mein Problem nicht, weil ich noch nicht einmal verbinden kann. Bei mir läuft alles, bis man den Raspi neustartet. Dann geht gar nichts mehr..

        > Hast du deine MQTT-Library für Arduino selbst geschrieben?

        Ich habe mir zwar eine eigene Library geschrieben, damit ich bei den verschiedenste Chips die Verbindungskomponenten nur einmal ändern muss, nutze aber dahinter den PubSubClient. Hab meine Version mal angebunden. Finde da keine Funktion reconnect?

        Kannst du mir mal den Code von dir Posten?
        4334_pubsubclient.h
        4334_pubsubclient.cpp

        1 Antwort Letzte Antwort
        0
        • ? Offline
          ? Offline
          Ein ehemaliger Benutzer
          schrieb am zuletzt editiert von
          #7

          Hier ist der reconnect code im void loop():

            // ============== RE-CONNECT WIFI IF NOT CONNECTED (alle 10 Sekunden für NOT-Betrieb ohne WLAN)
            if (WiFi.status() != WL_CONNECTED) {  // Ob das funktioniert? Oder in Schleifen resultiert? Oder eingebaut in normales wificonnect?
              EVERY_N_MILLISECONDS(30000) {
                Serial.println("NO WIFI. TRY RECONNECT EVERY 30 SECONDS");
                setup_wifi();
          
              }
            }
            client.loop();    //??? Keine Ahnung
          
            // ============== MQTT Reconnect (alle 10 Sekunden versuchen, für reibungslosen Betrieb, nur wenn WLAN CONNECTED.)
            if ((!client.connected()) && (WiFi.status() == WL_CONNECTED)) { 
              EVERY_N_MILLISECONDS(30000) {
                Serial.println("NO MQTT. TRY RECONNECT EVERY 30 SECONDS");
                reconnect(); 
              }
            }
          
          
          void reconnect() {                             // ============= (RE)CONNECT TO MQTT
            // Loop until we're reconnected
            //while (!client.connected() && WiFi.status() == WL_CONNECTED) {   // Hier schauen ob WLAN connected UND MQTT weg
              Serial.print("Attempting MQTT connection...");
              // Attempt to connect
              if (client.connect("labspinnen8266")) {                         //NAME des Boards im MQTT-Frame
                Serial.println("labspinnen8266 connected with MQTT");
                // Once connected, publish an announcement...
                client.publish("lab/labspinnen8266", "labspinnen8266 connected with MQTT");
                // ... and resubscribe
                client.subscribe("lab/labspinnen8266");
              } else {
                Serial.print("failed, rc=");
                Serial.print(client.state());
                Serial.println(" try again in 5 seconds");
                // Wait 5 seconds before retrying
              }
            //}
          }
          
          

          Prüft WLAN und MQTT. Und dann in Endlosschleife reconnect versuchen.

          Das klappt bei mir eigentlich sehr gut.

          Ach so: Dazu gehört noch #include <fastled.h>// LEDs and also to include command for every_n_milisecs

          So habe ich den Befehl EVERY_N_MILLISECOND() integriert.

          Warum das nicht zu Endlosschleifen führt, sobald der reconnect stattfindet, ist mir übrigens ein Rätsel, aber EVERY_N_MILLISECONDS scheint zu stoppen, sobald connect stattfindet.

          Sorry, ich hacke mich irgendwie so durch.</fastled.h>

          1 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            milo
            schrieb am zuletzt editiert von
            #8

            Mhh, ist leider genau das was ich auch mache :(

            Ich hab jetzt mal den MQTT Mosquitto Broker installiert, damit ich mal ein paar logs habe.

            Also der ESP verbindet sich ordnungsgemäß. Verliert dann aber die Verbindung und schmiert ab.

            Folgende Fehler Codes:

            Initiere MQDaten
            Init von: Relay1 erfolgt.
            Init von: Relay2 erfolgt.
            Init von: Relay3 erfolgt.
            Init von: Relay4 erfolgt.
            Init von: Relay5 erfolgt.
            Init von: Relay6 erfolgt.
            Init von: Relay7 erfolgt.
            Init von: Relay8 erfolgt.
            Initierung MQDaten abgeschlossen
            Empfangen: TestRelay/Relay1
             -> 1
            Schalte PortD0 auf: 0
            Empfangen: TestRelay/Relay2
             -> 0
            Schalte PortD1 auf: 1
            Empfangen: TestRelay/Relay3
             -> 0
            Schalte PortD2 auf: 1
            Empfangen: TestRelay/Relay4
             -> 0
            Schalte PortD3 auf: 1
            MQTT Fehlercode: -3
            WLAN Status: 3
            MQTT Client verbunden: RC: 0
            MQTT Fehlercode: -4
            WLAN Status: 3
            MQTT Client verbunden: RC: 0
            MQTT Fehlercode: -4
            WLAN Status: 3
            MQTT Client verbunden: RC: 0
            MQTT Fehlercode: -4
            WLAN Status: 3
            MQTT Client verbunden: RC: 0
            MQTT Fehlercode: -4
            WLAN Status: 3
            
            

            Mosquitto Logfile

            1513167749: New client connected from 192.168.22.170 as TestRelay (c1, k15, u'esp').
            1513167750: Socket error on client TestRelay, disconnecting.
            1513167804: Saving in-memory database to /var/lib/mosquitto/mosquitto.db.
            1513167818: New connection from 192.168.22.170 on port 1900.
            1513167818: New client connected from 192.168.22.170 as TestRelay (c1, k15, u'esp').
            1513167839: Client TestRelay has exceeded timeout, disconnecting.
            1513167839: Socket error on client TestRelay, disconnecting.
            1513167839: New connection from 192.168.22.170 on port 1900.
            1513167839: New client connected from 192.168.22.170 as TestRelay (c1, k15, u'esp').
            1513167848: Socket error on client TestRelay, disconnecting.
            1513167848: New connection from 192.168.22.170 on port 1900.
            1513167848: New client connected from 192.168.22.170 as TestRelay (c1, k15, u'esp').
            1513167848: Socket error on client TestRelay, disconnecting.
            1513167848: New connection from 192.168.22.170 on port 1900.
            1513167848: New client connected from 192.168.22.170 as TestRelay (c1, k15, u'esp').
            1513167848: Socket error on client TestRelay, disconnecting.
            1513167848: New connection from 192.168.22.170 on port 1900.
            1513167848: New client connected from 192.168.22.170 as TestRelay (c1, k15, u'esp').
            1513167848: Socket error on client TestRelay, disconnecting.
            1513167848: New connection from 192.168.22.170 on port 1900.
            1513167848: New client connected from 192.168.22.170 as TestRelay (c1, k15, u'esp').
            1513167848: Socket error on client TestRelay, disconnecting.
            1513167848: New connection from 192.168.22.170 on port 1900.
            1513167848: New client connected from 192.168.22.170 as TestRelay (c1, k15, u'esp').
            1513167848: Socket error on client TestRelay, disconnecting.
            1513167848: New connection from 192.168.22.170 on port 1900.
            1513167848: New client connected from 192.168.22.170 as TestRelay (c1, k15, u'esp').
            1513167848: Socket error on client TestRelay, disconnecting.
            

            Auffällig ist auch, dass der bis Relay4 funktioniert. Wenn ich das Init beobachte, dann scheint iwas zwischen Relay4 und 5 zu passieren. Weil hier braucht die Ausgabe deutlich länger….

            1 Antwort Letzte Antwort
            0
            • M Offline
              M Offline
              milo
              schrieb am zuletzt editiert von
              #9

              Es ist tatsächlich so. Wenn ich bis Relay4 nur gehe, dann kommen keine Verbindungsabbrüche :cry: :cry:

              1 Antwort Letzte Antwort
              0
              • M Offline
                M Offline
                milo
                schrieb am zuletzt editiert von
                #10

                Soooooooo,

                > Es ist tatsächlich so. Wenn ich bis Relay4 nur gehe, dann kommen keine Verbindungsabbrüche :cry: :cry:
                des Rätsels Lösung heißt:

                _client.loop();
                

                Hinter den Aktionen (publish & subscribe) muss ein loop ausgeführt werden. Sonst scheint ein Puffer oder dergleichen voll zu laufen.


                ` > ich habe einen Fehler bei meinen ESP8266 Controllern, den ich leider nicht gelöst bekomme.

                Die Controller programmiert mittels Arduino IDE sollen mittels des MQTT Clients an den IOBroker angebunden werden.

                Dies funktioniert soweit auch super. Einziges Problem ist, dass diese folgenden Fehler verursachen, sollte der MQTT Client mal z.B. durch neustart offline gehen: `

                Das Rätsel mit Chunk Patch konnte ich zwar nicht lösen, aber wenn man den MQTT Adapter von IO Broker als Client laufen lässt und dazu den Mosquitto benutzt, so funktioniert alles. Auch nach einem Systemneustart, meldet sich mein ESP wieder an und es kommt nicht zu Verbindungsabbrüchen. Werde das mal ne Zeitlang testen und jetzt erstmal so in den Hauptbetrieb geben.

                Vielen Dank an allen die geholfen haben!

                1 Antwort Letzte Antwort
                0
                • ? Offline
                  ? Offline
                  Ein ehemaliger Benutzer
                  schrieb am zuletzt editiert von
                  #11

                  Leider sagen mir die Fehlercodes gar nichts.

                  Ist schon seltsam. Ich denke aber, du solltest dir den Arduino Code nochmal angucken.

                  MQTT ist es ja egal, wie viel gesendet wird? Oder vlt. wird zu schnell hintereinander gesendet und irgendein Puffer wird zu voll?

                  Mir ist noch aufgefallen, dass du ganz andere MQTT-Server Einstellungen hast als ich:

                  Ich habe im MQTT Adaper Einstellungen ALLES deaktiviert, außer: Sende auch Zustände (ack=true).

                  und ich verwende kein SSL-Passwort.

                  Vielleicht hat's auch was damit zu tun?

                  Ansonsten ist mir dein Arduino Code leider schon zu hoch :oops: Sorry. Ich steig da nicht ganz durch.

                  Ich habe einfach immer das genommen, was in den Beispielen vorgegeben wird, und dann nur ein bisschen abgeändert :)

                  1 Antwort Letzte Antwort
                  0
                  • ? Offline
                    ? Offline
                    Ein ehemaliger Benutzer
                    schrieb am zuletzt editiert von
                    #12

                    Ah ja, den client.loop() hatte ich ja auch in meinem Code drin.

                    Ich wusste/weiß nicht, was der macht.

                    Meinst du, ich muss ihn ein zweites Mal einbauen? An einer bestimmten Stelle?

                    Vielleicht würden dann ja auch meine Abbrüche endlich aufhören.

                    Wo genau hast du ihn hingesetzt?

                    1 Antwort Letzte Antwort
                    0
                    • M Offline
                      M Offline
                      milo
                      schrieb am zuletzt editiert von
                      #13

                      @meome:

                      Ah ja, den client.loop() hatte ich ja auch in meinem Code drin.

                      Ich wusste/weiß nicht, was der macht.

                      Meinst du, ich muss ihn ein zweites Mal einbauen? An einer bestimmten Stelle?

                      Vielleicht würden dann ja auch meine Abbrüche endlich aufhören.

                      Wo genau hast du ihn hingesetzt? `

                      Ich habe den jetzt einfach mal großzügig hinter jede Publish und Subscribe Aktion gesetzt. Dadurch wird der ESP auf einmal mega schnell und sendet und empfängt ohne Probleme.

                      
                      void MiloEspApi::initMQData(String var, String preset) {
                      
                      	if (_client.connected() ) {	
                      
                      	_client.publish( String(_mq_name + "/" + var).c_str(), preset.c_str());
                      	_client.subscribe( String(_mq_name + "/" + var).c_str());
                      	_client.loop();
                      	log ("Init von: " + var + " erfolgt.");
                      
                      	}
                      
                      	}
                      }
                      
                      void MiloEspApi::sendeMQ(String var, String msg) {
                      
                      	if (_client.connected() ) {	
                      		_client.publish( String(_mq_name  + "/" + var).c_str(), msg.c_str());
                      		log("Gesendet: " + var + " --> " + msg);
                      		//delay(500);
                      		_client.loop();
                      
                      	}
                      }
                      
                      

                      Zur Erklärung: sendeMQ und initMQDaten sind einfache Funktionen. Du kannst das ganze MiloEspApi:: weglassen, wenn du alles in der Arduino IDE programmierst und dir da eigene Sendefunktionen bauen.

                      Hier nochmal Auszug aus der Api

                      ` > boolean loop ()

                      This should be called regularly to allow the client to process incoming messages and maintain its connection to the server.

                      Returns

                      false - the client is no longer connected

                      true - the client is still connected `

                      1 Antwort Letzte Antwort
                      0
                      • ? Offline
                        ? Offline
                        Ein ehemaliger Benutzer
                        schrieb am zuletzt editiert von
                        #14

                        Danke für's Feedback.

                        Hab mal in Api reingeschaut. Ich denke, den client.loop ein Mal mitten im loop void zu haben dürfte reichen.

                        Aber mehr schadet sicher auch nicht :-)

                        Dann herzlichen Glückwunsch und noch viel Erfolg.

                        Und wenn dein iobroker-MQTT-Server-Adapter manchmal einfach so abstürzt (rot wird) und nicht zurück kommt - und du dafür den Grund rausfindest, dann melde dich gern nochmal :-)

                        1 Antwort Letzte Antwort
                        0
                        • M Offline
                          M Offline
                          milo
                          schrieb am zuletzt editiert von
                          #15

                          @meome:

                          Danke für's Feedback.

                          Hab mal in Api reingeschaut. Ich denke, den client.loop ein Mal mitten im loop void zu haben dürfte reichen.

                          Aber mehr schadet sicher auch nicht :-)

                          Dann herzlichen Glückwunsch und noch viel Erfolg.

                          Und wenn dein iobroker-MQTT-Server-Adapter manchmal einfach so abstürzt (rot wird) und nicht zurück kommt - und du dafür den Grund rausfindest, dann melde dich gern nochmal :-) `

                          So werde ich mich melden ;)

                          1 Antwort Letzte Antwort
                          0
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

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

                          356

                          Online

                          32.7k

                          Benutzer

                          82.4k

                          Themen

                          1.3m

                          Beiträge
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          logo
                          • Anmelden

                          • Du hast noch kein Konto? Registrieren

                          • Anmelden oder registrieren, um zu suchen
                          • Erster Beitrag
                            Letzter Beitrag
                          0
                          • Home
                          • Aktuell
                          • Tags
                          • Ungelesen 0
                          • Kategorien
                          • Unreplied
                          • Beliebt
                          • GitHub
                          • Docu
                          • Hilfe