Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Extraktion der MQTT Sensorwerte / Tasmota

    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

    Extraktion der MQTT Sensorwerte / Tasmota

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

      Hallo,

      ich brauche eure Hilfe.

      Per MQTT bekomme ich von meinem ESP8266, auf dem die Tasmota Firmware installiert ist, folgende Sensordaten an IOBRoker geliefert:

      Baum: mqtt.0.tele.Sensor_Garten.SENSOR

      Wert: {"Time":"2018-10-21T12:54:27","BME280":{"Temperature":18.5,"Humidity":34.6,"Pressure":992.2},"TempUnit":"C"}

      Wie bekomme ich die Werte nun relativ einfach extrahiert, und zwar als eigene States, die ich dann widerum weiterverarbeiten kann?

      Danke und Grüße, Ingo

      C 1 Reply Last reply Reply Quote 0
      • Chaot
        Chaot last edited by

        Vielleicht hilft dir das hier weiter:

        viewtopic.php?f=21&t=17738

        1 Reply Last reply Reply Quote 0
        • I
          Ingo1977 last edited by

          Hmm, habe den Code angepasst, geht aber leider noch nicht. Was mache ich falsch?

          var json = "mqtt.0.tele.Sensor_Garten.SENSOR";
          var Temp = "javascript.0.Garten.BME280.Values.Temperatur";
          var Druck = "javascript.0.Garten.BME280.Values.Luftdruck";
          var Luft = "javascript.0.Garten.BME280.Values.Luftfeuchtigkeit";
          
          on(json, function(dp) {
             var obj = JSON.parse(dp.state.val);
             setState(Temp(obj.Temperature));
             setState(Druck, parseFloat(obj.Humidity));
             setState(Luft, parseFloat(obj.Pressure));
          });
          
          
          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            Die 3 Datenpunkte vom Typ "Zahl" unter javascript.0 sind vorhanden ?

            on(json, function(dp) {
               var obj = JSON.parse(dp.state.val).BME280;
               setState(Temp, obj.Temperature);
               setState(Luft, obj.Humidity);
               setState(Druck, obj.Pressure);
            });
            
            1 Reply Last reply Reply Quote 0
            • I
              Ingo1977 last edited by

              Super, danke. Funktioniert jetzt.

              Ich habe allerdings einen zweiten String, den ich nicht zerlegen kann (wegen Daten mehrerer Sensoren).

              {"Time":"2018-10-22T11:30:05","ANALOG":{"A0":3},"DS18B20-1":{"Id":"02099177E423","Temperature":55.9},"DS18B20-2":{"Id":"02099177E689","Temperature":30.8},"DS18B20-3":{"Id":"020A91771717","Temperature":52.8},"DS18B20-4":{"Id":"020A9177F712","Temperature":29.4},"TempUnit":"C"}

              Kann mir jemand bitte den letzten Codeschnipsel so anpassen, das das auch funktioniert?

              Im Log finde ich immer nur folgenden Eintrag:

              Script.js.Scripts.Skript3: Temperatur: undefined

              Vielen Dank vorab.

              on(json, function(dp) {
                 var obj = JSON.parse(dp.state.val).D18B20-1;
                 setState(Wasser_mitte, obj.Temperature);
                 log('Temperatur: ' + obj.Temperature);
              });
              
              
              1 Reply Last reply Reply Quote 0
              • L
                Linedancer last edited by

                Hallo Ingo,

                ich kann dir dazu leider keinen Script bieten, aber vor diesem Problem stand ich vor einiger Zeit auch.

                Hab dann anstelle von Tasmota EasyESP genommen und kriege damit für jeden Sensor einen einzelnen Datenpunkt.

                Sieht dann so aus:
                1564_2018-10-22.png

                1 Reply Last reply Reply Quote 0
                • I
                  Ingo1977 last edited by

                  Ich würde gerne bei Tasmota bleiben. Bin aber leider nicht der große Programmierer und brauche daher Hilfe, wie ich die Einzelwerte der verschiedenen Sensoren extrahieren kann. Grüße …

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

                    Der Sensor heißt "DS18B20-1".

                    1 Reply Last reply Reply Quote 0
                    • I
                      Ingo1977 last edited by

                      Hab ich schon korrigiert. Geht leider trotzdem nicht, gleiches Ergebnis.

                      Und damit könnte ich ja auch nur den ersten Sensor auslesen…

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

                        Der Sensorname enthält unzulässige Zeichen (-). Dann muss man anders darauf zugreifen.

                           var obj = JSON.parse(dp.state.val);
                           setState(Wasser_mitte, obj['DS18B20-1'].Temperature);
                        
                        
                        1 Reply Last reply Reply Quote 0
                        • H
                          herman2000 last edited by herman2000

                          Gelöst habe ich das Probelm mit dem unzulässige Zeichen (-) in dem ich im JSON string das Minus Zeichen (-) durch ein Unterstrich (_) ersetzt habe.

                          var idJSON = 'mqtt.0.tele.wasser.SENSOR';  // Datenpunkt-ID mit JSON-String
                          var Temp1; 
                          var Temp2;
                          var Temp3;
                          var Temp4;
                          var Zeit;
                          
                          var idTemp1 = 'mqtt.0.tele.wasser.Temperature1';
                          var idTemp2 = 'mqtt.0.tele.wasser.Temperature2';
                          var idTemp3 = 'mqtt.0.tele.wasser.Temperature3';
                          var idTemp4 = 'mqtt.0.tele.wasser.Temperature4';
                          
                          function JSONtoTemp(json) {
                              json = json.replace(/DS18B20-/g, "DS18B20_" );
                              var obj = JSON.parse(json);
                          //    log('Wasser-json: ' + json);
                          
                              Zeit = obj.Time;
                              Temp1 = obj.DS18B20_1.Temperature;
                              Temp2 = obj.DS18B20_2.Temperature;
                              Temp3 = obj.DS18B20_3.Temperature;
                              Temp4 = obj.DS18B20_4.Temperature;
                          //    log('Temp1: ' + Temp1 + ' °C, Temp2: ' + Temp2 + '°C, Temp3: ' + Temp3 + ' °C, Temp4: ' + Temp4 + '°C');
                          
                              setState(idTemp1, Temp1);
                              setState(idTemp2, Temp2);
                              setState(idTemp3, Temp3);
                              setState(idTemp4, Temp4);
                          }
                          
                          JSONtoTemp(getState(idJSON).val);  // Script start
                          
                          on(idJSON, function(dp) {  // triggern bei Wertänderung
                              JSONtoTemp(dp.state.val);
                          });
                          
                          1 Reply Last reply Reply Quote 0
                          • E
                            Eggs last edited by

                            Moin,
                            wäre es nicht einfacher den Sonoff-Adapter zu verwenden? Der dröselt das normal auf und legt für jeden Sensor die Datenpunkte an.

                            Gruß aus der Mitte
                            Dirk

                            1 Reply Last reply Reply Quote 0
                            • C
                              chatt @Ingo1977 last edited by

                              @ingo1977 said in Extraktion der MQTT Sensorwerte / Tasmota:

                              Hallo,

                              ich brauche eure Hilfe.

                              Per MQTT bekomme ich von meinem ESP8266, auf dem die Tasmota Firmware installiert ist, folgende Sensordaten an IOBRoker geliefert:

                              Baum: mqtt.0.tele.Sensor_Garten.SENSOR

                              Wert: {"Time":"2018-10-21T12:54:27","BME280":{"Temperature":18.5,"Humidity":34.6,"Pressure":992.2},"TempUnit":"C"}

                              Wie bekomme ich die Werte nun relativ einfach extrahiert, und zwar als eigene States, die ich dann widerum weiterverarbeiten kann?

                              Danke und Grüße, Ingo

                              Ich stehe exakt vor der gleichen Hürde.
                              Ich bin allerdings noch so neu, ich weiß garnicht wie ihr an diese json Datei kommt,um dann die Bindestriche mit Unterstrichen zu ersetzen.

                              Ralla66 1 Reply Last reply Reply Quote 0
                              • Ralla66
                                Ralla66 Most Active @chatt last edited by Ralla66

                                @chatt

                                nicht so schwer machen, nimm den Sonoff Adapter als Broker anstatt Mqtt.
                                Port dann 1884 oder 1885 da ja Mqtt 1883 belegt.

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                478
                                Online

                                31.8k
                                Users

                                80.0k
                                Topics

                                1.3m
                                Posts

                                8
                                14
                                8903
                                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