Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. MQTT Zahl in Variable ESP8266

    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 Zahl in Variable ESP8266

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Smallfeuer @Smallfeuer last edited by 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 1 Reply Last reply Reply Quote 0
      • S
        Smallfeuer @Homoran last edited by 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.

        Homoran Dr. Bakterius 2 Replies Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators @Smallfeuer last edited by 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 1 Reply Last reply Reply Quote 0
          • S
            Smallfeuer @Homoran last edited by

            @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.

            Wal 1 Reply Last reply Reply Quote 0
            • Wal
              Wal Developer @Smallfeuer last edited by Wal

              @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

              1 Reply Last reply Reply Quote 0
              • Wal
                Wal Developer @Smallfeuer last edited by

                @smallfeuer ,
                evtl. erst in String umwandeln ?

                   payload[length] = '\0'; 
                   int T = atoi((char *)payload);
                
                Homoran S 2 Replies Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators @Wal last edited by

                  @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?

                  1 Reply Last reply Reply Quote 1
                  • S
                    Smallfeuer @Smallfeuer last edited by Smallfeuer

                    @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 Reply Last reply Reply Quote 0
                    • S
                      Smallfeuer @Wal last edited by

                      @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 Reply Last reply Reply Quote 0
                      • Marc Berg
                        Marc Berg Most Active last edited by 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.

                        Wal 1 Reply Last reply Reply Quote 0
                        • Wal
                          Wal Developer @Marc Berg last edited by

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

                          Marc Berg 1 Reply Last reply Reply Quote 0
                          • Marc Berg
                            Marc Berg Most Active @Wal last edited by

                            @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 1 Reply Last reply Reply Quote 1
                            • S
                              Smallfeuer @Marc Berg last edited by

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

                              S 1 Reply Last reply Reply Quote 0
                              • S
                                Smallfeuer @Smallfeuer last edited by Smallfeuer

                                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 Reply Last reply Reply Quote 0
                                • Dr. Bakterius
                                  Dr. Bakterius Most Active @Smallfeuer last edited by

                                  @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 Reply Last reply Reply Quote 0
                                  • S
                                    Smallfeuer @Dr. Bakterius last edited by

                                    @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 Reply Last reply Reply Quote 0
                                    • S
                                      Smallfeuer @Smallfeuer last edited by

                                      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 Reply Last reply Reply Quote 1
                                      • First post
                                        Last post

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      887
                                      Online

                                      31.9k
                                      Users

                                      80.2k
                                      Topics

                                      1.3m
                                      Posts

                                      5
                                      26
                                      965
                                      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