Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. MQTT mit Arduino Mega

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    MQTT mit Arduino Mega

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

      Hallo,

      setze gerne die Arduinos ein und betreibe sie zur Zeit über Cux-D. Da ich auf Homegear umstellen möchte, würde ich diese gerne entkoppeln und MQTT einsetzen.

      Habe den Sketch von folgender Seite angepasst:

      http://blue-pc.net/2014/10/15/mqtt-nach … en-senden/

      Habe unter Instanzen folgende Einstellung gewählt:

      154_mqtt-einstellung.png

      Und erhalte folgende Fehlermeldung:

      154_mqtt.png

      Der Monitor der Ardunio-Entwicklungsumgebung meldet den gesamten Verkehr - auch von den Homematic Geräten - also schein die Kommunikation schon halbwegs zu funktionieren!?

      Hier ergeben sich einige Fragen:

      1. Ist MQTT mit ccu.io und iobroker schon einsatzfähig?

      2. Wie werden Variablen angelegt?

      3. Kann ich das Schlüsselwort beliebig wählen? Hier z.B. iobroker

      Gruß akamia

      ! ```
      `#include <spi.h>
      #include <ethernet.h>
      #include <pubsubclient.h> // http://knolleary.net/arduino-client-for-mqtt/

      #include <onewire.h> // http://www.arduino.cc/playground/Learning/OneWire
      #include <dallastemperature.h> // http://milesburton.com/index.php?title=Dallas_Temperature_Control_Library
      #define ONE_WIRE_BUS 7

      // MAC Adresse des Ethernet Shields
      byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };

      ! // IP des MQTT Servers
      byte server[] = { 192, 168, 1, 210 };
      ! // Ethernet Client zur Kommunikation des MQTT Clients
      EthernetClient ethClient;
      ! // MQTT Client zur Kommunikation mit dem Server
      // Server - Variable des Types byte mit Serveradresse
      // 1883 - Ist der Standard TCP Port
      // callback - Function wird aufgerufen wen MQTT Nachrichten eintreffen. Am ende des Sketches
      // ethClient - Angabe des Ethernet Clients
      PubSubClient mqttClient(server, 1883, callback, ethClient);

      // Einrichten des OneWire Bus um die Daten der Temperaturfühler abzurufen
      OneWire oneWire(ONE_WIRE_BUS);
      // Bindung der Sensoren an den OneWire Bus
      DallasTemperature TempSensors(&oneWire);
      // Variablen für die Temperatur
      float tempC;
      // Hilfsvariablen für die Convertierung der Temperatur in ein String
      char tempBuffer[100];

      void setup()
      {
      // Initialisierung der Seriellen Schnittstelle
      // zur Ausgabe der empfangenen Nachrichten
      Serial.begin(9600);
      // Initialisierung des Ethernets
      Ethernet.begin(mac);
      // Initialisierung der Temperaur Sensoren
      TempSensors.begin();
      }

      void loop()
      {
      // Aufbau der Verbindung mit MQTT falls diese nicht offen ist.
      if (!mqttClient.connected()) {
      mqttClient.connect("arduinoClient");
      // Abonieren von Nachrichten mit dem angegebenen Topic
      mqttClient.subscribe("/iobroker/Test_Switch1/#");
      }

      // Auslesen der Temperatur
      TempSensors.requestTemperatures();
      // Bei Änderungen zum vorherigen Wert Publizieren
      if (tempC != TempSensors.getTempCByIndex(0) ) {
      tempC = TempSensors.getTempCByIndex(0);
      // Publizierung des Wertes. Vorher Converierung vn float zu String.
      mqttClient.publish("/iobroker/Test_Temp1",dtostrf(tempC, 1, 2, tempBuffer));
      }
      mqttClient.loop(); // Schleife für MQTT
      }

      // ===========================================================
      // Callback Funktion von MQTT. Die Funktion wird aufgerufen
      // wenn ein Wert empfangen wurde.
      // ===========================================================
      void callback(char* topic, byte* payload, unsigned int length) {
      // Zähler
      int i = 0;
      // Hilfsvariablen für die Convertierung der Nachricht in ein String
      char message_buff[100];

      Serial.println("Message arrived: topic: " + String(topic));
      Serial.println("Length: " + String(length,DEC));

      // Kopieren der Nachricht und erstellen eines Bytes mit abschließender \0
      for(i=0; i<length; i++)/{/message_buff[i]="payload[i];" }/;/konvertierung/der/nachricht/in/ein/string/msgstring="String(message_buff);" serial.println("payload:/"/+/msgstring);/<e=""></length;></dallastemperature.h></onewire.h></pubsubclient.h></ethernet.h></spi.h>`[/i][/i][/i]

      1 Reply Last reply Reply Quote 0
      • Bluefox
        Bluefox last edited by

        @akamia:

        Hallo,

        setze gerne die Arduinos ein und betreibe sie zur Zeit über Cux-D. Da ich auf Homegear umstellen möchte, würde ich diese gerne entkoppeln und MQTT einsetzen.

        Habe den Sketch von folgender Seite angepasst:

        http://blue-pc.net/2014/10/15/mqtt-nach … en-senden/

        Habe unter Instanzen folgende Einstellung gewählt:

        filename="MQTT-Einstellung.PNG" index="0">~~

        Und erhalte folgende Fehlermeldung:

        filename="MQTT.PNG" index="1">~~

        Der Monitor der Ardunio-Entwicklungsumgebung meldet den gesamten Verkehr - auch von den Homematic Geräten - also schein die Kommunikation schon halbwegs zu funktionieren!?

        Hier ergeben sich einige Fragen:

        1. Ist MQTT mit ccu.io und iobroker schon einsatzfähig?

        2. Wie werden Variablen angelegt?

        3. Kann ich das Schlüsselwort beliebig wählen? Hier z.B. iobroker

        Gruß akamia

        ! ```
        `#include <spi.h>
        #include <ethernet.h>
        #include <pubsubclient.h> // http://knolleary.net/arduino-client-for-mqtt/

        #include <onewire.h> // http://www.arduino.cc/playground/Learning/OneWire
        #include <dallastemperature.h> // http://milesburton.com/index.php?title=Dallas_Temperature_Control_Library
        #define ONE_WIRE_BUS 7

        // MAC Adresse des Ethernet Shields
        byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };

        ! // IP des MQTT Servers
        byte server[] = { 192, 168, 1, 210 };
        ! // Ethernet Client zur Kommunikation des MQTT Clients
        EthernetClient ethClient;
        ! // MQTT Client zur Kommunikation mit dem Server
        // Server - Variable des Types byte mit Serveradresse
        // 1883 - Ist der Standard TCP Port
        // callback - Function wird aufgerufen wen MQTT Nachrichten eintreffen. Am ende des Sketches
        // ethClient - Angabe des Ethernet Clients
        PubSubClient mqttClient(server, 1883, callback, ethClient);

        // Einrichten des OneWire Bus um die Daten der Temperaturfühler abzurufen
        OneWire oneWire(ONE_WIRE_BUS);
        // Bindung der Sensoren an den OneWire Bus
        DallasTemperature TempSensors(&oneWire);
        // Variablen für die Temperatur
        float tempC;
        // Hilfsvariablen für die Convertierung der Temperatur in ein String
        char tempBuffer[100];

        void setup()
        {
        // Initialisierung der Seriellen Schnittstelle
        // zur Ausgabe der empfangenen Nachrichten
        Serial.begin(9600);
        // Initialisierung des Ethernets
        Ethernet.begin(mac);
        // Initialisierung der Temperaur Sensoren
        TempSensors.begin();
        }

        void loop()
        {
        // Aufbau der Verbindung mit MQTT falls diese nicht offen ist.
        if (!mqttClient.connected()) {
        mqttClient.connect("arduinoClient");
        // Abonieren von Nachrichten mit dem angegebenen Topic
        mqttClient.subscribe("/iobroker/Test_Switch1/#");
        }

        // Auslesen der Temperatur
        TempSensors.requestTemperatures();
        // Bei Änderungen zum vorherigen Wert Publizieren
        if (tempC != TempSensors.getTempCByIndex(0) ) {
        tempC = TempSensors.getTempCByIndex(0);
        // Publizierung des Wertes. Vorher Converierung vn float zu String.
        mqttClient.publish("/iobroker/Test_Temp1",dtostrf(tempC, 1, 2, tempBuffer));
        }
        mqttClient.loop(); // Schleife für MQTT
        }

        // ===========================================================
        // Callback Funktion von MQTT. Die Funktion wird aufgerufen
        // wenn ein Wert empfangen wurde.
        // ===========================================================
        void callback(char* topic, byte* payload, unsigned int length) {
        // Zähler
        int i = 0;
        // Hilfsvariablen für die Convertierung der Nachricht in ein String
        char message_buff[100];

        Serial.println("Message arrived: topic: " + String(topic));
        Serial.println("Length: " + String(length,DEC));

        // Kopieren der Nachricht und erstellen eines Bytes mit abschließender \0
        for(i=0; i<length; i++)/{/message_buff[i]="payload[i];" }/;/konvertierung/der/nachricht/in/ein/string/msgstring="String(message_buff);" serial.println("payload:/"/+/msgstring);/<e=""></length;></dallastemperature.h></onewire.h></pubsubclient.h></ethernet.h></spi.h>`
        Hm.. Schwer zu sagen. Gibt es die Möglichkeit eine Wireshark Aufzeichnung zu machen. Dann wird es einiges klar.

        ! Bin momentan ziemlich krank und kann nur partiell antworten.[/i][/i][/i]
        ``` `

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

          Jetzt eine gute Besserung von mir[emoji40]

          Gesendet von meinem Cynus T7 mit Tapatalk

          1 Reply Last reply Reply Quote 0
          • A
            akamia last edited by

            Hi BlueFox,

            Gesundheit geht vor. Ich wünsche Dir schnelle Genesung.

            Werde mal WireShark starten und hoffen, dass ich die richtigen Filtereinstellungen finde.

            Gruß

            akamia

            1 Reply Last reply Reply Quote 0
            • A
              akamia last edited by

              Hallo BlueFox,

              Entwarnung! Die erste Temperatur vom Ardunio 1-wire kann ich jetzt sehen. Allerdings noch nicht unter den Objekten.

              154_mqtt-egtemp1.png

              Habe den MQTT-Broker "mosquitto" auf dem Cubie installiert und mit der Java-App "mqtt-spy" die Verbindungen angeschaut. Hier wird Einiges klar. Nach dem die grundsätzliche Kommunikation steht, kann ich im nächsten Schritt die Inputs und Outputs in den Sketch einbauen. Bei mir kommen 10 Kabel mit jeweils 16 Adern aus der Wand. Diese Leitungen bildeten bisher eine Grundlage für die alte Alarmanlage. Neben den Reed-Kontakten für die Fenster- und Türsicherung sind dann noch viele Leitungen für Sensor- und Steuerungsaufgaben frei.

              Die Server-Option im MQTT-Adapter habe ich noch nicht ausprobiert. Ggf. kann ich dann auf den "Mosquitto" verzichten?

              Jetzt würde ich gerne VIS starten und mir das Ergebnis nicht nur in der Konsole anschauen. Leider ist das Update auf 0.2.2 schiefgegangen.

              Gruß akamia

              1 Reply Last reply Reply Quote 0
              • Bluefox
                Bluefox last edited by

                @akamia:

                Entwarnung! Die erste Temperatur vom Ardunio 1-wire kann ich jetzt sehen. `
                Hurra 🙂

                @akamia:

                Allerdings noch nicht unter den Objekten. `
                Heißt es, du sieht es unter Zustände, aber nicht unter Objekten? Auch nach dem Browser-Refresh?

                @akamia:

                Die Server-Option im MQTT-Adapter habe ich noch nicht ausprobiert. Ggf. kann ich dann auf den "Mosquitto" verzichten? `
                So ist der Plan. MQTT- Adapter ist auf MOSCA https://github.com/mcollina/mosca basiert.

                @akamia:

                Jetzt würde ich gerne VIS starten und mir das Ergebnis nicht nur in der Konsole anschauen. Leider ist das Update auf 0.2.2 schiefgegangen.

                Gruß akamia `
                Was genau hat nicht geklappt? Man kann immer noch manuell machen. Im ioBroker Verzeichnis:

                npm install iobroker.vis
                
                
                1 Reply Last reply Reply Quote 0
                • A
                  akamia last edited by

                  Hi Bluefox,

                  habe noch etwas weiter experimentiert:

                  • Der eingebaute mosca Mqtt-Server arbeitet gegenüber dem Mosquitto ebenfalls gut. Beim Starten gibt es noch Fehlermeldungen vom mosca (Error: write EPIPE), die aber mit der Zeit verschwinden. Diese deuten nach Durchsicht des mosca-Forums auf eine ältere Version hin ??? Egal es läuft erst einmal.

                  • Unter "Zustände" werden die fünf Temperaturen (von 1-Wire) sauber angezeigt - unter "Ereignisse" sind die Temperaturen in Anführungsstriche gesetzt, alle anderen Werte von anderen Sensoren nicht. Woher kommen die? Unter Objekten würde ich einen Ordner "mqtt.0" erwarten. Dieser wird nicht automatisch angelegt. Somit sehe ich die Werte in VIS auch nicht. Hier drei Screenshots:

                  154_mqtt-states.jpg

                  154_mqtt-ereignisse.jpg

                  154_mqtt-objekte.jpg

                  Hast Du noch eine Idee?

                  akamia

                  1 Reply Last reply Reply Quote 0
                  • X
                    xBit53 last edited by

                    Hi akamia,

                    bist du mit Arduino und MQTT weitergekommen?

                    Ich bin in der Konzeptphase für eine Ladepumpensteuerung des Warmwasserboilers und plane diese mit einem Arduino zu realisieren. Diesen möchte ich über MQTT mit Vis und IOBroker.JS konfigurieren und visualisieren. Details über Deine bisherigen Erfahrungen würden mir sehr weiterhelfen.

                    Gruß xBit53

                    1 Reply Last reply Reply Quote 0
                    • A
                      akamia last edited by

                      Hi xBit53,

                      hatte auch im russischen Forum gestöbert und die Temperaturen der 1-Wire Sensoren angezeigt bekommen. Dann bin ich auf die Idee gekommen, mir die zwei Erweiterungsplatinen von "funkleuchtturm" zu beschaffen. Super Sache. Endlich mal wieder etwas zu löten. Funktioniert ohne MQTT auch gut. Ich verstehe mittlerweile auch seinen Sketch, scheitere aber dran, diesem MQTT beizubringen.

                      Seit zwei Monaten sind wir in der Planungs- und Angebotsphase für unseren Hausumbau. Ab Montag haben wir die Handwerker im Hause, so dass ich erst wieder ab Oktober mich um dieses Thema kümmern kann.

                      akamia

                      PS: Wir wollten nur eine Wand versetzen - nun kommt eine neue Heizung, Umstellung auf Fußbodenheizung mit Fliesen in Holzoptik, Treppe wird neu geschnitten, Treppe aus Wohnzimmer, teils neue Elektrik und endlich die Rauhfaser raus. Ein integriertes Wandtablett ist jetzt auch mit eingeplant, wie auch elektrische Rollläden.

                      1 Reply Last reply Reply Quote 0
                      • X
                        xBit53 last edited by

                        Hi akamia

                        die Kommunikation via MQTT zwischen iobroker und einem test Arduino UNO läuft inzwischen in beiden Richtungen.

                        Auch ich habe 2 IO-Shields von Eugen (Funkleuchturm) im Einsatz. Die Idee Eugens Sketches MQTT beizubringen hatte ich auch schon da ich mich mittelfristig von der CCU2 trennen möchte ( läuft nicht so stabil wie ich es von einer Haussteuerung erwarte ).

                        Da die Kommunikation zwischen iobroker und arduino reibungslos und schnell funktioniert hat sich das Pflichtenheft für die Ladepumpensteuerung gewaltig erweitert. Neuer Plan ist die gesamte Steuerung der Solarthermie inklusive Zuschaltung des Heizkessels wenn die Sonne nicht scheint und er Speicher leer ist durch einen Arduino, Parametrierung desselben und Visualisierung der Zustände mit vis. Wenn ich damit fertig bin werde ich versuchen Eugens Sketches so abzuändern dass sie über MQTT kommunizieren und somit ohne CCU auskommen. Das wird aber etwas dauern da ich die zur Verfügung stehende Zeit auf Arbeit, die beste aller Ehefrauen, 2 Enkel und das Hobby aufteilen muss.

                        mfg,

                        xBit53

                        1 Reply Last reply Reply Quote 0
                        • E
                          enricoh831 last edited by

                          Würde in unserem neuen Haus auch gerne auf ccu und HM wired verzichten und alle io über den arduino und Koppel Relais machen. Die wichtigsten direktveknüpfungen könnte man im sketch verankern, wenn der sauber geschrieben ist kann man da auch schnell mal was ändern.

                          Io broker muss dann halt nur wissen welcher Ausgang wie geschaltet ist und halt mit kriegen wenn ein Taster gedrückt wurde bzw. Selber Kommandos an den arduino senden

                          1 Reply Last reply Reply Quote 0
                          • E
                            enricoh831 last edited by

                            Hallo akamia,

                            Könntest du mal bitte deinen Sketch Posten.

                            Ich habe gestern mal mit mqtt rumgespielt und immer den Adapter zum Absturz gebracht weil der arduino permanent den Wert geschickt hat.

                            Vielleicht habe ich ja auch nur nen kleinen Fehler drin war schon sehr müde.

                            Habe den Adapter als Server laufen.

                            Wo kann man eigentlich seine topics bestimmen

                            1 Reply Last reply Reply Quote 0
                            • E
                              enricoh831 last edited by

                              @enricoh831:

                              Hallo akamia,

                              Könntest du mal bitte deinen Sketch Posten.

                              Ich habe gestern mal mit mqtt rumgespielt und immer den Adapter zum Absturz gebracht weil der arduino permanent den Wert geschickt hat.

                              Vielleicht habe ich ja auch nur nen kleinen Fehler drin war schon sehr müde.

                              Habe den Adapter als Server laufen.

                              Wo kann man eigentlich seine topics bestimmen `
                              Sehe gerade das du ihn Damals schon gepostet hast. Sorry

                              1 Reply Last reply Reply Quote 0
                              • M
                                MaikB85 last edited by

                                Habe das auch mal alles soweit ausprobiert weil es für mich auch sehr interessant ist. Daten vom Arduino empfangen klappt auch wunderbar! Nur wie funktioniert es jetzt werte an den Arduino zu schicken? Ich möchte gerne mit der iobroker Visualisation arbeiten. Wie stelle ich jetzt z.B. bei einem Input Feld ein, dass der eingegebene Wert über MQTT publiziert wird?

                                1 Reply Last reply Reply Quote 0
                                • M
                                  mc-hollin last edited by

                                  Hallo,

                                  vielleicht hilft ja folgender Link http://blue-pc.net/2014/10/15/mqtt-nach … en-senden/.

                                  Überlege auch alle Tür und Fensterkontakte mit einem Arduino direkt zum MQTT-Server senden zu lassen und bin bei Google darauf gestossen.

                                  Gruß

                                  Holger

                                  1 Reply Last reply Reply Quote 0
                                  • M
                                    MaikB85 last edited by

                                    Leider bringt mich das nicht wirklich weiter, weil das Beispiel da mit OpenHab gezeigt wird. Arduinoseitig müsste bei mir alles funktionieren. Im Objektbaum von IOBroker werden mir ja die empfangenen Variablen der entsprechenden Topics angezeigt. Dort stehen aber nicht die Topics die der Arduino abonniert hat. Ich müsste die also erstmal im Objektbaum anlegen damit ich die einem Steuerelement der Visualisierung zuweisen kann. Nur wie?

                                    1 Reply Last reply Reply Quote 0
                                    • M
                                      MaikB85 last edited by

                                      Habs jetzt hinbekommen 😄

                                      Eigentlich total simpel man muss nur erstmal wissen wie das alles funktioniert mit iobroker.

                                      Habe einfach in der Objektbaumansicht ein neues Objekt hinzugefügt mit den entsprechenden Einstellungen und dieses Objekt dann dem Eingabefeld der Visualisierung zugewiesen.

                                      Gruß Maik

                                      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

                                      817
                                      Online

                                      31.8k
                                      Users

                                      80.0k
                                      Topics

                                      1.3m
                                      Posts

                                      7
                                      17
                                      6339
                                      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