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. Skripten / Logik
  4. Blockly
  5. MQTT Zahl in Variable ESP8266

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    828

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

MQTT Zahl in Variable ESP8266

Geplant Angeheftet Gesperrt Verschoben Blockly
26 Beiträge 5 Kommentatoren 2.1k Aufrufe 2 Watching
  • Ä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.
  • S Smallfeuer

    @homoran Die aktuelle gerundete Aussentemperatur :)

    HomoranH Nicht stören
    HomoranH Nicht stören
    Homoran
    Global Moderator Administrators
    schrieb am zuletzt editiert von Homoran
    #9

    @smallfeuer sagte in MQTT Zahl in Variable ESP8266:

    @homoran Die aktuelle gerundete Aussentemperatur :)

    mit 2 Kommata?

    btw: benötigt dein esp per mqtt number oder Text?
    komma oder Dezimalpunkt?

    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

    S 1 Antwort Letzte Antwort
    0
    • S Smallfeuer

      @homoran Die aktuelle gerundete Aussentemperatur :)

      S Offline
      S Offline
      Smallfeuer
      schrieb am zuletzt editiert von Smallfeuer
      #10

      Die Frage ist also, müsste hier die Funktion:

      T = atoi((char*)payload); 
      

      die Daten korrekt verarbeiten, oder muss man hier die länge des Payload manuell zerlegen?

      Die Varible T ist im Programm als int definiert. Sollte somit den Zahlenumfang und das (-)minus Zeichen abbilden können.

      S 1 Antwort Letzte Antwort
      0
      • HomoranH Homoran

        @smallfeuer sagte in MQTT Zahl in Variable ESP8266:

        @homoran Die aktuelle gerundete Aussentemperatur :)

        mit 2 Kommata?

        btw: benötigt dein esp per mqtt number oder Text?
        komma oder Dezimalpunkt?

        S Offline
        S Offline
        Smallfeuer
        schrieb am zuletzt editiert von Smallfeuer
        #11

        @homoran

        Nein, ich meinte die aktuellen Aussentemperaturen.
        Es wird immer nur eine - auf ein Ganzes - gerundete Zahl über mittelt.
        also
        -1
        0
        1
        dementsprechend rechnet jetzt der ESP +20 und es gehen bei 0 -> 20 LED's an -> was dann 0 Grad sind. bei -1 sollten es 19 sein, sind es aber leider nicht immer.

        HomoranH Dr. BakteriusD 2 Antworten Letzte Antwort
        0
        • S Smallfeuer

          @homoran

          Nein, ich meinte die aktuellen Aussentemperaturen.
          Es wird immer nur eine - auf ein Ganzes - gerundete Zahl über mittelt.
          also
          -1
          0
          1
          dementsprechend rechnet jetzt der ESP +20 und es gehen bei 0 -> 20 LED's an -> was dann 0 Grad sind. bei -1 sollten es 19 sein, sind es aber leider nicht immer.

          HomoranH Nicht stören
          HomoranH Nicht stören
          Homoran
          Global Moderator Administrators
          schrieb am zuletzt editiert von Homoran
          #12

          @smallfeuer sagte in MQTT Zahl in Variable ESP8266:

          dementsprechend rechnet jetzt der ESP +20 und es gehen bei 0 -> 20 LED's an -> was dann 0 Grad sind. bei -1 sollten es 19 sein, sind es aber leider nicht immer.

          ich vermute mal, dass du nicht weisst, ob der Wert nicht, oder falsch, v8n iobroker übermittelt wird, ob das WLAN in dem Moment spinnt, oder ob dein ESP daraus Mist baut.

          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          S 1 Antwort Letzte Antwort
          0
          • HomoranH Homoran

            @smallfeuer sagte in MQTT Zahl in Variable ESP8266:

            dementsprechend rechnet jetzt der ESP +20 und es gehen bei 0 -> 20 LED's an -> was dann 0 Grad sind. bei -1 sollten es 19 sein, sind es aber leider nicht immer.

            ich vermute mal, dass du nicht weisst, ob der Wert nicht, oder falsch, v8n iobroker übermittelt wird, ob das WLAN in dem Moment spinnt, oder ob dein ESP daraus Mist baut.

            S Offline
            S Offline
            Smallfeuer
            schrieb am zuletzt editiert von
            #13

            @homoran
            Im seriellen Monitor vom ESP sehe ich in dem Moment dann auch falsche Werte. Ob diese jetzt falsch konvertiert werden kann ich nicht sagen. Dazu müsste ich mir wahrscheinlich den unveränderten PAYLOAD anzeigen lassen?
            Ich würde jetzt mal probieren den ESP auszuschließen, wenn du sagt das es von der Programmierung her passt. Das WLAN ist stabil, meine Daten die ich von den anderen Sensoren (Garage) zum Iobroker sende kommen immer fehlerfrei an.
            Desweiteren habe ich QoS auf 2 gesetzt, somit sollte ein Datenverlust im WLAN eigentlich ausgeschlossen sein.

            WalW 1 Antwort Letzte Antwort
            0
            • S Smallfeuer

              Hallo zusammen,

              vielleicht könnt Ihr mir helfen. Ich habe ein ESP8266 wemos mini der via MQTT verbunden ist und je nach variable eine LED leuchten lässt (Thermometer - Min, Max Temp und aktuelle Temp).
              Ich setze im IOBROKER jetzt unter der Rubrik die Datenpunkte für Tmin, Tmax usw.
              Das Problem ist, das ich aus meinen Zahlen -20 bis 39 ( entspricht dann den LEDS 0-59 am Thermometer) nicht immer das richtige Ergebnis erhalte.

              Wie versendet IOBROKER hier die Werte? Wie muss ich den Payload verändern?

              Danke schon mal für Hinweise.

              Auf dem Arduino versuche ich jetzt die Payloads so umzuwandeln, aber das klappt nur bedingt. Habt Ihr eine bessere Lösung für mich?

              void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
                Serial.println("Publish received.");
                Serial.print("  topic: ");
                Serial.println(topic);
              
                if (strcmp(topic,"Thermometer/Aussentemperatur")==0){
                        if (atoi((char*)payload) > -20 and atoi((char*)payload) < 40){
                        T = atoi((char*)payload);
                        } 
                    T = atoi((char*)payload);
                    Serial.print("Variabel-T ");
                    Serial.println(T);
                   }
              
              WalW Offline
              WalW Offline
              Wal
              Developer
              schrieb am zuletzt editiert von Wal
              #14

              @smallfeuer sagte in MQTT Zahl in Variable ESP8266:

              Serial.println(T);

              Den Arduino mal mit dem PC verbinden und mit einem Terminal schauen was überhaupt übertragen wird.

              edit: Ok, du warst schneller

              Gruß
              Walter

              DoorIO-Adapter
              wioBrowser-Adapter und wioBrowser

              1 Antwort Letzte Antwort
              0
              • S Smallfeuer

                @homoran
                Im seriellen Monitor vom ESP sehe ich in dem Moment dann auch falsche Werte. Ob diese jetzt falsch konvertiert werden kann ich nicht sagen. Dazu müsste ich mir wahrscheinlich den unveränderten PAYLOAD anzeigen lassen?
                Ich würde jetzt mal probieren den ESP auszuschließen, wenn du sagt das es von der Programmierung her passt. Das WLAN ist stabil, meine Daten die ich von den anderen Sensoren (Garage) zum Iobroker sende kommen immer fehlerfrei an.
                Desweiteren habe ich QoS auf 2 gesetzt, somit sollte ein Datenverlust im WLAN eigentlich ausgeschlossen sein.

                WalW Offline
                WalW Offline
                Wal
                Developer
                schrieb am zuletzt editiert von
                #15

                @smallfeuer ,
                evtl. erst in String umwandeln ?

                   payload[length] = '\0'; 
                   int T = atoi((char *)payload);
                

                Gruß
                Walter

                DoorIO-Adapter
                wioBrowser-Adapter und wioBrowser

                HomoranH S 2 Antworten Letzte Antwort
                0
                • WalW Wal

                  @smallfeuer ,
                  evtl. erst in String umwandeln ?

                     payload[length] = '\0'; 
                     int T = atoi((char *)payload);
                  
                  HomoranH Nicht stören
                  HomoranH Nicht stören
                  Homoran
                  Global Moderator Administrators
                  schrieb am zuletzt editiert von
                  #16

                  @wal sagte in MQTT Zahl in Variable ESP8266:

                  evtl. erst in String umwandeln ?

                  da warte ich noch auf fie Antwort

                  @homoran sagte in MQTT Zahl in Variable ESP8266:

                  benötigt dein esp per mqtt number oder Text?

                  kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                  1 Antwort Letzte Antwort
                  1
                  • S Smallfeuer

                    Die Frage ist also, müsste hier die Funktion:

                    T = atoi((char*)payload); 
                    

                    die Daten korrekt verarbeiten, oder muss man hier die länge des Payload manuell zerlegen?

                    Die Varible T ist im Programm als int definiert. Sollte somit den Zahlenumfang und das (-)minus Zeichen abbilden können.

                    S Offline
                    S Offline
                    Smallfeuer
                    schrieb am zuletzt editiert von Smallfeuer
                    #17

                    @smallfeuer sagte in MQTT Zahl in Variable ESP8266:

                    Die Varible T ist im Programm als int definiert

                    Dementsprechend eine Zahl.
                    Ich habe jetzt das Thermometer am MAC hängen und wie es dann so ist werden alle Werte auf dem seriellen Monitor korrekt ausgegeben und auch angezeigt. Ich muss also jetzt warten bis der Fehler auch mal auftritt.

                    1 Antwort Letzte Antwort
                    0
                    • WalW Wal

                      @smallfeuer ,
                      evtl. erst in String umwandeln ?

                         payload[length] = '\0'; 
                         int T = atoi((char *)payload);
                      
                      S Offline
                      S Offline
                      Smallfeuer
                      schrieb am zuletzt editiert von
                      #18

                      @wal sagte in MQTT Zahl in Variable ESP8266:

                      wandeln

                      Für mich hier die Frage was erwartet die Funktion zu bekommen?

                      void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total)
                      

                      Also ich sende ja eine Zahl vom Iobroker, aber geht "char* payload" auch richtig damit um?

                      1 Antwort Letzte Antwort
                      0
                      • Marc BergM Offline
                        Marc BergM Offline
                        Marc Berg
                        Most Active
                        schrieb am zuletzt editiert von Marc Berg
                        #19

                        @smallfeuer sagte in MQTT Zahl in Variable ESP8266:

                        payload

                        In payload steht nicht zwingend das, was du erwartest, da es nur ein Pointer auf eine Zeichenkette ist und nicht "Null terminiert".

                        Versuch mal:

                        char payload2[len+1];
                        payload2[len] = '\0';
                        strncpy(payload2, payload, len); 
                        

                        und arbeite dann mit "payload2" weiter.

                        EDIT: das ist eine ähnliche Lösung wie die von @Wal, nur dass eine neue Variable angelegt wird. Entscheidend ist das "\0" zum sauberen Terminieren der Zeichenkette.

                        NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

                        Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

                        Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

                        WalW 1 Antwort Letzte Antwort
                        0
                        • Marc BergM Marc Berg

                          @smallfeuer sagte in MQTT Zahl in Variable ESP8266:

                          payload

                          In payload steht nicht zwingend das, was du erwartest, da es nur ein Pointer auf eine Zeichenkette ist und nicht "Null terminiert".

                          Versuch mal:

                          char payload2[len+1];
                          payload2[len] = '\0';
                          strncpy(payload2, payload, len); 
                          

                          und arbeite dann mit "payload2" weiter.

                          EDIT: das ist eine ähnliche Lösung wie die von @Wal, nur dass eine neue Variable angelegt wird. Entscheidend ist das "\0" zum sauberen Terminieren der Zeichenkette.

                          WalW Offline
                          WalW Offline
                          Wal
                          Developer
                          schrieb am zuletzt editiert von
                          #20

                          @marc-berg ,
                          das das Gleiche habe ich oben schon gepostet, schau es dir nochmal an.

                          Gruß
                          Walter

                          DoorIO-Adapter
                          wioBrowser-Adapter und wioBrowser

                          Marc BergM 1 Antwort Letzte Antwort
                          0
                          • WalW Wal

                            @marc-berg ,
                            das das Gleiche habe ich oben schon gepostet, schau es dir nochmal an.

                            Marc BergM Offline
                            Marc BergM Offline
                            Marc Berg
                            Most Active
                            schrieb am zuletzt editiert von
                            #21

                            @wal sagte in MQTT Zahl in Variable ESP8266:

                            @marc-berg ,
                            das das Gleiche habe ich oben schon gepostet, schau es dir nochmal an.

                            Sorry, ich habe nur bis "String umwandeln" gelesen. Du hast natürlich recht.

                            NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+EMQX+Grafana

                            Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

                            Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

                            S 1 Antwort Letzte Antwort
                            1
                            • Marc BergM Marc Berg

                              @wal sagte in MQTT Zahl in Variable ESP8266:

                              @marc-berg ,
                              das das Gleiche habe ich oben schon gepostet, schau es dir nochmal an.

                              Sorry, ich habe nur bis "String umwandeln" gelesen. Du hast natürlich recht.

                              S Offline
                              S Offline
                              Smallfeuer
                              schrieb am zuletzt editiert von
                              #22

                              Danke euch, ich werde das terminieren der Zeichenkette mal integrieren.

                              S 1 Antwort Letzte Antwort
                              0
                              • S Smallfeuer

                                Danke euch, ich werde das terminieren der Zeichenkette mal integrieren.

                                S Offline
                                S Offline
                                Smallfeuer
                                schrieb am zuletzt editiert von Smallfeuer
                                #23

                                Ich habe jetzt mal folgendes geladen:

                                void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
                                   int length
                                  if (strcmp(topic,"Thermometer/Aussentemperatur")==0)
                                      payload[length] = '\0';
                                      T = atoi((char*)payload);
                                      Serial.print("Variabel-T ");
                                      Serial.println(T);
                                     }
                                   }
                                

                                Hier kommt jetzt für alle Werte aber eine 0 als Ergebnis. Was fehlt da?

                                void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
                                  Serial.println("Publish received.");
                                  Serial.print("  topic: ");
                                  Serial.println(topic);
                                  if (strcmp(topic,"Thermometer/Aussentemperatur")==0){
                                          char payload2[len+1];
                                          payload2[len] = '\0';
                                          strncpy(payload2, payload, len);
                                          T = atoi((char*)payload2);
                                          Serial.print("Variabel-T ");
                                          Serial.println(T);
                                

                                So funktioniert es :) Danke, hoffe auch fehlerfrei - werde berichten...

                                1 Antwort Letzte Antwort
                                0
                                • S Smallfeuer

                                  @homoran

                                  Nein, ich meinte die aktuellen Aussentemperaturen.
                                  Es wird immer nur eine - auf ein Ganzes - gerundete Zahl über mittelt.
                                  also
                                  -1
                                  0
                                  1
                                  dementsprechend rechnet jetzt der ESP +20 und es gehen bei 0 -> 20 LED's an -> was dann 0 Grad sind. bei -1 sollten es 19 sein, sind es aber leider nicht immer.

                                  Dr. BakteriusD Online
                                  Dr. BakteriusD Online
                                  Dr. Bakterius
                                  Most Active
                                  schrieb am zuletzt editiert von
                                  #24

                                  @smallfeuer sagte in MQTT Zahl in Variable ESP8266:

                                  dementsprechend rechnet jetzt der ESP +20 und es gehen bei 0 -> 20 LED's an -> was dann 0 Grad sind. bei -1 sollten es 19 sein, sind es aber leider nicht immer.

                                  Und warum überträgst du nicht direkt die Anzahl der LED die leuchten sollen? Vielleicht macht ja auch der negative Wert Probleme?

                                  S 1 Antwort Letzte Antwort
                                  0
                                  • Dr. BakteriusD Dr. Bakterius

                                    @smallfeuer sagte in MQTT Zahl in Variable ESP8266:

                                    dementsprechend rechnet jetzt der ESP +20 und es gehen bei 0 -> 20 LED's an -> was dann 0 Grad sind. bei -1 sollten es 19 sein, sind es aber leider nicht immer.

                                    Und warum überträgst du nicht direkt die Anzahl der LED die leuchten sollen? Vielleicht macht ja auch der negative Wert Probleme?

                                    S Offline
                                    S Offline
                                    Smallfeuer
                                    schrieb am zuletzt editiert von
                                    #25

                                    @dr-bakterius Hi, ja der Hinweis ist berechtigt. Liegt aber im Aufbau der Programmierung.
                                    Ich definiere nur die Anzahl der LED's und den 0 Punkt. Für einen anderen Ort will man ja ggf. tiefere Temperaturen haben, oder höhere und dann muss man die Programmierung nicht ändern.
                                    Zumal es ja auch einen Partymodus gibt, sobald der Verstärker zu laut ist, fängt das Thermometer dann an an mit 120 Beats zu blinken und so... ;)

                                    Jetzt könnte man das alles umbauen, aber ich denke eine normale Subtraktion sollte kein Problem für einen ESP8622 sein, wenn man überlegt was andere LED-Projekte den Chips zumuten. Gestern Abend gab es auf jeden Fall keine Auffälligkeiten mehr, es schaut also erstmal gut aus :+1: Danke dafür.

                                    S 1 Antwort Letzte Antwort
                                    0
                                    • S Smallfeuer

                                      @dr-bakterius Hi, ja der Hinweis ist berechtigt. Liegt aber im Aufbau der Programmierung.
                                      Ich definiere nur die Anzahl der LED's und den 0 Punkt. Für einen anderen Ort will man ja ggf. tiefere Temperaturen haben, oder höhere und dann muss man die Programmierung nicht ändern.
                                      Zumal es ja auch einen Partymodus gibt, sobald der Verstärker zu laut ist, fängt das Thermometer dann an an mit 120 Beats zu blinken und so... ;)

                                      Jetzt könnte man das alles umbauen, aber ich denke eine normale Subtraktion sollte kein Problem für einen ESP8622 sein, wenn man überlegt was andere LED-Projekte den Chips zumuten. Gestern Abend gab es auf jeden Fall keine Auffälligkeiten mehr, es schaut also erstmal gut aus :+1: Danke dafür.

                                      S Offline
                                      S Offline
                                      Smallfeuer
                                      schrieb am zuletzt editiert von
                                      #26

                                      20240124_105619.jpg

                                      20240124_105633.jpg

                                      Also bisher läuft alles ohne BUG. Hier mal noch 2 Bilder wie das ganze aussieht. Alles mit dem 3D Drucker erstellt.
                                      MinTemp (blau), aktuelle Temp(je nach Temp - gelb) und Max Temp. (rot).

                                      Danke für Eure Unterstützung.

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


                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      683

                                      Online

                                      32.6k

                                      Benutzer

                                      82.0k

                                      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