Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    314

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    9
    1
    290

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    922

MQTT Zahl in Variable ESP8266

Geplant Angeheftet Gesperrt Verschoben Blockly
26 Beiträge 5 Kommentatoren 2.4k Aufrufe 2 Beobachtet
  • Ä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.
  • 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 -
    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
    Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
    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 Online
          Marc BergM Online
          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 Online
              Marc BergM Online
              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 Offline
                    Dr. BakteriusD Offline
                    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 👍 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 👍 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

                        Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                        Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                        Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                        Registrieren Anmelden
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        399

                        Online

                        32.8k

                        Benutzer

                        82.8k

                        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