Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. Verbindung mit dem Mqtt_Server via iobroker

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Verbindung mit dem Mqtt_Server via iobroker

    This topic has been deleted. Only users with topic management privileges can see it.
    • G
      gillian45 last edited by Homoran

      Hiii zusammen !!!!!
      Ich habe vor ein paar Tagen mit ioBroker angefangen. Ich habe den ioBroker auf ein Virtuelles Linux-Rechner installiert und habe da den mqtt_Adapter als Broker konfiguriert. Daneben wollte ich mit einem Microcontroller auf dem mqtt_server zugreifen aber leider klappt es nocht nicht. Ich habe wie folgt mein Server konfiguriert. Hat jemand schon Erfahrung damit ?? Vielleicht liegt es bei der mqtt_server IP_Address ? Ich habe ja schon Vieles versucht ohne Erfolg.

      VirtualBox_IoT Machine_01_04_2023_00_28_47.png

      Allerdings könnt ihr euch noch mein kleines Code anschauen

      #include <Arduino.h>
      # include <WiFi.h>
      # include <PubSubClient.h>
      
      
      
      
      
      
      /*#include <Adafruit_Sensor.h>
      #include <DHT.h> 
      #include <DHT_U.h>
      
      
      #define LED_PIN 12
      #define DHTPIN 32
      #define DHTTYPE DHT11 */
      
      const char* ssid = "WiFI_ID" ; 
      const char* password = "Wifi_passwd" ; 
      WiFiClient WifiClient ; 
      
      // MQTT Broker_Daten
      const char* mqttServer = "10.0.2.15" ;  // Broker_Ip add  
      PubSubClient mqttClient( WifiClient) ; 
      long ZeitAlt = -9999; 
      
      
      //Callback Nachrichten-Empfang (Subscribe)
      void callback( char* topic, byte* message, unsigned int length)
      {
      String str ; 
      for (int i =0 ; i< length ; i++)
        {
          str += (char)message[i]; 
        }
      Serial.print( "Nachrichtenempfang für topic: ");
      Serial.print(topic);
      Serial.print("Nachricht :"); 
      Serial.println(str);  
      }
      
      //Verbindung mit dem Broker herstellen
      void mqttConnect()
      {
        Serial.print("Verbindung zum MQTT_Server"); 
        Serial.print( mqttServer); 
        while(!mqttClient.connected())
        {
          Serial.print("."); 
          if (mqttClient.connect("ESP32Client"))
          {
            Serial.print("MQTT-VErbunden"); 
          }
          else
          {
            Serial.print("Fehlgeschlagen, rc="); 
            Serial.print(mqttClient.state()); 
            Serial.println("erneuter Versuch in 5 Sec"); 
          delay(5000); 
          }
      
        }
       mqttClient.subscribe("test/esp32"); 
      } 
      
      void setup() {
        // put your setup code here, to run once:
      
        Serial.begin(115200); 
        Serial.println(); 
        Serial.print("Verbingsaufbaun zu") ; 
        Serial.print(ssid); 
        WiFi.begin(ssid,password); 
        while(WiFi.status() != WL_CONNECTED)
        {
          delay(500);
          Serial.print("."); 
        }
        Serial.print(""); 
        Serial.println("Wifi connected"); 
        Serial.print("IP Add:");
        Serial.print(WiFi.localIP());
      
      // Verbindung mit MQTT-Server
      mqttClient.setServer(mqttServer, 1883); 
      mqttClient.setCallback(callback); 
      mqttConnect(); 
      }
      
      
      void loop() {
        // put your main code here, to run repeatedly:
        if(!mqttClient.connected())
        {
          mqttConnect();
        }
        mqttClient.loop();
      
        if(millis()-ZeitAlt> 3000)
        {
          char txtString[20];
          ZeitAlt= millis(); 
          sprintf( txtString, "Zeitstempel %", millis()/1000); 
          Serial.println(String("Versand MQTT-NAchricht:") + txtString);
          mqttClient.publish("test/esp32", txtString); 
        }
        delay(200); 
      
      }
      

      MOD-EDIT: Code in code-tags gesetzt!

      Marc Berg Codierknecht M 3 Replies Last reply Reply Quote 0
      • Marc Berg
        Marc Berg Most Active @gillian45 last edited by Marc Berg

        @gillian45 sagte in Verbindung mit dem Mqtt_Server via iobroker:

        if(millis()-ZeitAlt> 3000)

        nach einem kurzen Blick auf den Code, wie soll die Bedingung "if(millis()-ZeitAlt> 3000)" jemals erreicht werden?

        Ziehe am besten den "publish" block mit in Setup, ohne Bedingung. Damit der code so einfach wie möglich ist und man ein paar Fehlerquellen ausschließen kann.

        1 Reply Last reply Reply Quote 0
        • Codierknecht
          Codierknecht Developer Most Active @gillian45 last edited by

          @gillian45
          Was macht Dein ESP32?
          Kann man das evtl. auch mit Tasmoty erreichen? Würde Dir das Leben deutlich einfacher machen.

          G 1 Reply Last reply Reply Quote 0
          • M
            MyioBroker @gillian45 last edited by MyioBroker

            @gillian45 Wenn man sich allein im stillen Kämmerlein mit all den tollen Dingen befasst, ist es am besten erst mal mit fertigen Beispielen das eine oder andere zu erproben, wobei ich hier im Forum aber auch schon sehr gute Unterstützung gefunden habe 🙂
            Der Vorschlag von Codierknecht sich erst mal mit "Tasmota" auf dem ESP xxxx zu beschäftigen ist sicher nicht der schlechteste! Es ist einfach fantastisch wieviele Möglichkeiten man plötzlich hat in relativ kurzer Zeit und mit vergleichbar wenig Aufwand sich viele Sensoren und mehr im Smarthome realsieren lassen. Die MQTT Anbindung an den ioBroker ist darin schon enthalten und somit hat man relativ schnell auch in diesem Punkt ein Erfolgserlebnis.
            Ist zwar wieder eine Baustelle mehr aber es lohnt sich weil vieles damit sehr viel einfacher wird und die Erfolgserlebnisse nicht lange auf sich warten lassen, so war es zumindest bei mir 🙂
            Man sollte allerdings darauf achten, dass das ioBrokersystem in allen Punkten aktuell ist, habe wochenlang mit dem Mqtt-Adapter experimentiert und es lief nie so richtig bis ich mich endlich mal entschlossen habe alles auf den aktuellen Stand zu bringen und kaum macht man es richtig, schon funtioniert es 🙂

            Thomas Braun 1 Reply Last reply Reply Quote 0
            • Thomas Braun
              Thomas Braun Most Active @MyioBroker last edited by Thomas Braun

              @myiobroker sagte in Verbindung mit dem Mqtt_Server via iobroker:

              bis ich mich endlich mal entschlossen habe alles auf den aktuellen Stand zu bringen

              Das predige ich immer wieder und wieder. Und dann kommen da immer die erzkonservativen Anhänger der 'Never-change-a-running-System'-Sekte mit ihren versumpften Systemen aus der frühen Kreidezeit an.

              'Als ich das neulich (vor 3 Jahren...) gemacht hab hat mir der böse Programmierer da alles gelöscht'

              1 Reply Last reply Reply Quote 1
              • G
                gillian45 @Codierknecht last edited by

                @codierknecht
                Okay vielen Dank für deinen Vorschlag. Das ist nämlich eine Projektaufgabe von der Hochschule deswegen muss ich es leider nur so machen. Allerdings werde ich mir mal Tasmota anschauen, ob es mir dabei hilft alles besser zu verstehen ?? Weiß ich nicht ....

                BananaJoe M 2 Replies Last reply Reply Quote 0
                • BananaJoe
                  BananaJoe Most Active @gillian45 last edited by

                  @gillian45 wenn ich deinen Code kurz überfliege vermisse ich die genaue definition wohin sich MQTT verbinden soll.

                  Wobei den Quellcode den gängigen Beispielen ähnlich sieht.
                  Hier: https://docs.arduino.cc/tutorials/uno-wifi-rev2/uno-wifi-r2-mqtt-device-to-device wird aber auch der Server und Port mit angegeben:

                  if (!mqttClient.connect(broker, port)) {
                  

                  das fehlt bei dir ganz, zumindest den mqttserver müsstest du doch mitgeben

                  1 Reply Last reply Reply Quote 0
                  • M
                    MyioBroker @gillian45 last edited by MyioBroker

                    @gillian45 Ich wollte damit auch nicht sagen, dass man das Programmieren sein lassen und sich auf vorgefertigte Lösungen beschränken soll, zumal es bei dir wohl so vorgegeben ist. Mir hat es im langjährigen technischen Service oft geholfen Fehler durch ein Ausschlußverfahren zu finden wenn ich mir nicht sicher war auf welcher Seite das Problem liegt. Für ESP32 und 8266 gibt es viele Codebeispiele die zum testen taugen ob die eine oder andere Grundfunktion gegeben ist. Habe dazu neben den üblichen "Bastel-"Quellen und in der Arduino-Programmierumgebung selbst (Samples) viele Beispiele gefunden aber inzwischen auch mit Chat-GPT gute Erfahrung gemacht. Man muss das "Problem" möglichst "genau" beschreiben und die Antworten natürlich kritisch bewerten, kann dann aber fast wie im Dialog das Thema "verfeinern". Manchmal liegt es ja nur an der Syntax wie man einen Wert bekommt oder verändern kann 🤔
                    Wenn es damit klappt, weiß man zumindest wo man nicht weiter suchen muss und kann ggf. auch aus diesen Codeschnipseln etwas für den eigenen Code mitnehmen.
                    Vielleicht nicht immer die sauberste Sache wenn man ein Konzept beibehalten möchte/muss oder es gar vorgegeben ist, aber bestimmt besser als am Ende die Verbindungsleitungen im Verdacht zu haben was allerdings bei USB-Kabeln, aber auch bei den einfachen Steckbrettern/ -brücken durchaus eine Rolle spielen kann 😞

                    1 Reply Last reply Reply Quote 0
                    • BananaJoe
                      BananaJoe Most Active last edited by

                      Um mich meinem Vorredner anzuschließen:

                      Ich baue mir immer "Prototypen" beim Programmieren.
                      Ja, da gibt es das große Hauptprogramm das ich entwickle - und dann brauche ich etwas was xyz tut.

                      Da baue ich mir dann ein Miniprogramm was nur genau das tut. Wenn ich gerade schlau bin verwende ich dort dann schon passende Variablen- und Funktionsnamen.

                      Und wenn der Prototyp / das Testprogramm das tut was es soll kommt es in das Hauptprogramm.

                      Beim letzten Kundenprojekt (Überwachung von Fahrplananzeigen) gibt es das Programm/Skript was das alles macht. Und ein duzend Einzelprogramme die einen Teilaspekt abbilden.

                      In allen Programmen baue ich von Anfang an ein umfangreiches Debugging ein.
                      Das starte ich entweder über eine Variable gleich am Anfang - wenn die auf True ist wird alles ausgegeben, bzw. über einen Kommandozeileparameter (ich schreibe oft solche Programme).

                      Grund ist das das Debugging während der Entwicklung und später bei Fehlersuchen cool ist, aber sonst nur stört.
                      So kann ich es nach belieben Ein- und ausschalten.
                      Im Quellcode nutze ich eine Funktion dafür welche mit dem entsprechenden Text aufgerufen wird.
                      Die Funktion prüft erst ob die Variable auf True steht und gibt dann den Text aus (oder eben nicht).
                      So muss ich das nicht dauernd im weiteren Verlauf prüfen sondern haue einfach fast jede 2 Zeile eine Meldung raus.

                      G 1 Reply Last reply Reply Quote 0
                      • G
                        gillian45 @BananaJoe last edited by

                        @bananajoe @MyioBroker Danke auf jeden Fall für all eure Tipps, die werde ich mir im Kopf behalten. Ich habe mein Problem mittlerweile schon lösen können.

                        DJMarc75 1 Reply Last reply Reply Quote 0
                        • DJMarc75
                          DJMarc75 @gillian45 last edited by

                          @gillian45 sagte in Verbindung mit dem Mqtt_Server via iobroker:

                          Ich habe mein Problem mittlerweile schon lösen können.

                          Dann lass uns mal teilhaben wie genau ?!

                          G 1 Reply Last reply Reply Quote 0
                          • G
                            gillian45 @DJMarc75 last edited by

                            @djmarc75 Naja dadurch dass mein Board und mein Broker nicht im selben Netz waren haben sie sich nicht verbinden können. Warum ??? weiß ich noch nicht. Mir würde einfach vorgeschlagen mein Virtual_machine auf "Bridged mode" umzustellen damit die Beide im selben Netz läufen und das war's.

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            1.2k
                            Online

                            31.7k
                            Users

                            79.7k
                            Topics

                            1.3m
                            Posts

                            7
                            12
                            404
                            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