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. JavaScript
  5. MQTT string Parsen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.4k

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

MQTT string Parsen

Geplant Angeheftet Gesperrt Verschoben JavaScript
14 Beiträge 5 Kommentatoren 3.5k Aufrufe 4 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.
  • R Offline
    R Offline
    root_
    schrieb am zuletzt editiert von root_
    #1

    Hi.
    Ich möchte Folgende Daten von meinem Wasserkocher Parsen:

     {"TuyaReceived":{"Data":"55AA030700086902000400000064E4","Cmnd":7,"CmndData":"6902000400000064","DpId":105,"DpIdType":2,"DpIdData":"00000064"}}
    

    und zwar müsste das so laufen, wenn "DpId":105 erkannt wird, soll von "DpIdData":"00000064" der Wert (hier "00000064" = Temperatur in hex ) erkannt werden und von hex to dec konvertiert und danach in einen Userdatenpunkt "Wasserkocher Temperatur" eingetragen werden.

    Das gleiche vom System her bräuchte ich noch für einige andere Daten.
    zb:

    {"TuyaReceived":{"Data":"55AA030700056A040001017E","Cmnd":7,"CmndData":"6A04000101","DpId":106,"DpIdType":4,"DpIdData":"01"}}
    

    "DpId":106,"DpIdType":4,"DpIdData":"01" = Wasserkocher entfernt
    "DpId":106,"DpIdType":4,"DpIdData":"02" = Wasserkocher auf Basis
    usw.

    Das bräuchte ich auch in einem Datenpunkt. Da reicht aber einfach der Wert 01/02/03 usw.

    Es handelt sie hierbei um einen ProfiCook PC-WKS 1167, den ich mit Tasmota geflasht habe.
    https://templates.blakadder.com/proficook_PC-WKS_1167.html

    paul53P 1 Antwort Letzte Antwort
    0
    • R root_

      Hi.
      Ich möchte Folgende Daten von meinem Wasserkocher Parsen:

       {"TuyaReceived":{"Data":"55AA030700086902000400000064E4","Cmnd":7,"CmndData":"6902000400000064","DpId":105,"DpIdType":2,"DpIdData":"00000064"}}
      

      und zwar müsste das so laufen, wenn "DpId":105 erkannt wird, soll von "DpIdData":"00000064" der Wert (hier "00000064" = Temperatur in hex ) erkannt werden und von hex to dec konvertiert und danach in einen Userdatenpunkt "Wasserkocher Temperatur" eingetragen werden.

      Das gleiche vom System her bräuchte ich noch für einige andere Daten.
      zb:

      {"TuyaReceived":{"Data":"55AA030700056A040001017E","Cmnd":7,"CmndData":"6A04000101","DpId":106,"DpIdType":4,"DpIdData":"01"}}
      

      "DpId":106,"DpIdType":4,"DpIdData":"01" = Wasserkocher entfernt
      "DpId":106,"DpIdType":4,"DpIdData":"02" = Wasserkocher auf Basis
      usw.

      Das bräuchte ich auch in einem Datenpunkt. Da reicht aber einfach der Wert 01/02/03 usw.

      Es handelt sie hierbei um einen ProfiCook PC-WKS 1167, den ich mit Tasmota geflasht habe.
      https://templates.blakadder.com/proficook_PC-WKS_1167.html

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @root_ sagte:

      wenn "DpId":105 erkannt wird, soll von "DpIdData":"00000064" der Wert (hier "00000064" = Temperatur in hex ) erkannt werden und von hex to dec konvertiert und danach in einen Userdatenpunkt "Wasserkocher Temperatur" eingetragen werden.

      let tuya = JSON.parse(json).TuyaReceived;
      let dpid = tuya.DpId;
      let val = parseInt(tuya.DpIdData, 16);
      if(dpid == 105) setState(Wasserkocher.Temperatur, val, true);
      if(dpid == 106) setState(Wasserkocher.Status, val, true);
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      1
      • R Offline
        R Offline
        root_
        schrieb am zuletzt editiert von root_
        #3

        Da ich in js ein noob bin muss ich noch mal nachfragen.
        Der Datenpunkt den ich parsen möchte ist:

        mqtt.0.tele.Wasserkocher.RESULT

        die Datenpunkte die geschrieben werden sollen heissen:

        0_userdata.0.Kueche.Wasserkocher.105_Temp
        0_userdata.0.Kueche.Wasserkocher.106_state

        Wie muss das script komplett aussehen? Bin sonst nur blockly user :face_with_rolling_eyes:

        paul53P 1 Antwort Letzte Antwort
        0
        • R root_

          Da ich in js ein noob bin muss ich noch mal nachfragen.
          Der Datenpunkt den ich parsen möchte ist:

          mqtt.0.tele.Wasserkocher.RESULT

          die Datenpunkte die geschrieben werden sollen heissen:

          0_userdata.0.Kueche.Wasserkocher.105_Temp
          0_userdata.0.Kueche.Wasserkocher.106_state

          Wie muss das script komplett aussehen? Bin sonst nur blockly user :face_with_rolling_eyes:

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @root_ sagte:

          mqtt.0.tele.Wasserkocher.RESULT
          die Datenpunkte die geschrieben werden sollen heissen:
          0_userdata.0.Kueche.Wasserkocher.105_Temp
          0_userdata.0.Kueche.Wasserkocher.106_state

          on('mqtt.0.tele.Wasserkocher.RESULT', function(dp) {
             let tuya = JSON.parse(dp.state.val).TuyaReceived;
             let dpid = tuya.DpId;
             let val = parseInt(tuya.DpIdData, 16);
             if(dpid == 105) setState('0_userdata.0.Kueche.Wasserkocher.105_Temp', val, true);
             if(dpid == 106) setState('0_userdata.0.Kueche.Wasserkocher.106_state', val, true);
          });
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • R Offline
            R Offline
            root_
            schrieb am zuletzt editiert von
            #5

            Mega. Danke dir!

            1 Antwort Letzte Antwort
            0
            • R Offline
              R Offline
              root_
              schrieb am zuletzt editiert von
              #6

              jetzt muss ich noch mal nerven.
              Irgendwie hat sich der string geändert (evtl liegt an der Tasmota 8.1.0.10)

              {"TuyaReceived":{"Data":"55AA030700056A040001017E","Cmnd":7,"CmndData":"6A04000101","DpId":106,"DpIdType":4,"DpIdData":"01"}}
              JETZT:
              {"TuyaReceived":{"Data":"55AA030700056A040001017E","Cmnd":7,"CmndData":"6A04000101","DpType4Id106":1,"106":{"DpId":106,"DpIdType":4,"DpIdData":"01"}}}
              
              {"TuyaReceived":{"Data":"55AA030700086902000400000064E4","Cmnd":7,"CmndData":"6902000400000064","DpId":105,"DpIdType":2,"DpIdData":"00000064"}}
              JETZT:
              {"TuyaReceived":{"Data":"55AA03070008690200040000001797","Cmnd":7,"CmndData":"6902000400000017","DpType2Id105":23,"105":{"DpId":105,"DpIdType":2,"DpIdData":"00000064"}}}
              

              jetzt funktioniert das parsing nicht mehr

              paul53P 1 Antwort Letzte Antwort
              0
              • R root_

                jetzt muss ich noch mal nerven.
                Irgendwie hat sich der string geändert (evtl liegt an der Tasmota 8.1.0.10)

                {"TuyaReceived":{"Data":"55AA030700056A040001017E","Cmnd":7,"CmndData":"6A04000101","DpId":106,"DpIdType":4,"DpIdData":"01"}}
                JETZT:
                {"TuyaReceived":{"Data":"55AA030700056A040001017E","Cmnd":7,"CmndData":"6A04000101","DpType4Id106":1,"106":{"DpId":106,"DpIdType":4,"DpIdData":"01"}}}
                
                {"TuyaReceived":{"Data":"55AA030700086902000400000064E4","Cmnd":7,"CmndData":"6902000400000064","DpId":105,"DpIdType":2,"DpIdData":"00000064"}}
                JETZT:
                {"TuyaReceived":{"Data":"55AA03070008690200040000001797","Cmnd":7,"CmndData":"6902000400000017","DpType2Id105":23,"105":{"DpId":105,"DpIdType":2,"DpIdData":"00000064"}}}
                

                jetzt funktioniert das parsing nicht mehr

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #7

                @root_ sagte:

                jetzt funktioniert das parsing nicht mehr

                on('mqtt.0.tele.Wasserkocher.RESULT', function(dp) {
                   let tuya = JSON.parse(dp.state.val).TuyaReceived;
                   if(tuya['105']) {
                      let val = parseInt(tuya['105'].DpIdData, 16);
                      setState('0_userdata.0.Kueche.Wasserkocher.105_Temp', val, true);
                   } else if(tuya['106']) {
                      let val = parseInt(tuya['106'].DpIdData);
                      setState('0_userdata.0.Kueche.Wasserkocher.106_state', val, true);
                   }
                });
                

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                M 2 Antworten Letzte Antwort
                0
                • R Offline
                  R Offline
                  root_
                  schrieb am zuletzt editiert von
                  #8

                  Super. Jetzt funktioniert der Wasserkocher 1a cloudfrei mit ioBroker.

                  Vielen Dank für deine tolle und schnelle Hilfe!

                  1 Antwort Letzte Antwort
                  0
                  • paul53P paul53

                    @root_ sagte:

                    jetzt funktioniert das parsing nicht mehr

                    on('mqtt.0.tele.Wasserkocher.RESULT', function(dp) {
                       let tuya = JSON.parse(dp.state.val).TuyaReceived;
                       if(tuya['105']) {
                          let val = parseInt(tuya['105'].DpIdData, 16);
                          setState('0_userdata.0.Kueche.Wasserkocher.105_Temp', val, true);
                       } else if(tuya['106']) {
                          let val = parseInt(tuya['106'].DpIdData);
                          setState('0_userdata.0.Kueche.Wasserkocher.106_state', val, true);
                       }
                    });
                    
                    M Offline
                    M Offline
                    manrum1
                    schrieb am zuletzt editiert von manrum1
                    #9

                    @paul53
                    Hallo, darf ich Dich um Hilfe bitten: Ich baue gerade auf Basis von Tasmota an einer Strommessung habe folgenden String, soweit läuft schon alles wunderbar. Per MQTT erhalte ich folgenden String:

                    {"Time":"2020-05-25T18:33:31","ENERGY":{"TotalStartTime":"2020-05-16T15:20:01","Total":14.129,"Yesterday":1.935,"Today":12.194,"Period":0,"Power":[100,301,145]," ":[102,324,231],"ReactivePower":[19,120,180],"Factor":[0.98,0.93,0.63],"Frequency":[50,50,50],"Voltage":[234,234,234],"Current":[0.436,1.386,0.986]}}

                    Dieser repräsentiert die Werte, die von der Messtelle erhalte:
                    eef296c4-1a1e-4e65-b76f-3cb510b60adc-grafik.png

                    Mit u.a. Beispiel schaffe ich es auch einiges zu Parsen und in eigene Datenpunkte zu speichern. Was ich nicht schaffe ist folgendes:

                    1. ich bekomme nur ganzzahlige Werte, wie bekomme ich die Nachkommastellen (also z.B. für Energy_Today erhalte ich 8 statt 8,752)?
                    2. Wie parse ich die Werte für die jeweilige Phasen, die heutige Abfrage (s.u.) liefert nur den ersten Wert? Also z.B. für Power erhalte ich nur 14, wie parse ich die 162 und die 142?

                    Wäre super, wenn Du mich unterstützen könntest.

                    paul53P 1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @root_ sagte:

                      jetzt funktioniert das parsing nicht mehr

                      on('mqtt.0.tele.Wasserkocher.RESULT', function(dp) {
                         let tuya = JSON.parse(dp.state.val).TuyaReceived;
                         if(tuya['105']) {
                            let val = parseInt(tuya['105'].DpIdData, 16);
                            setState('0_userdata.0.Kueche.Wasserkocher.105_Temp', val, true);
                         } else if(tuya['106']) {
                            let val = parseInt(tuya['106'].DpIdData);
                            setState('0_userdata.0.Kueche.Wasserkocher.106_state', val, true);
                         }
                      });
                      
                      M Offline
                      M Offline
                      manrum1
                      schrieb am zuletzt editiert von
                      #10
                      on('mqtt.0.tele.pzem.SENSOR', function(dp) {
                          let strom = JSON.parse(dp.state.val).ENERGY;
                          if(strom['Total']) {
                              let val = parseInt(strom['Total']);
                              setState('0_userdata.0.Visualisierung.Strom.Energy_Total', val, true);
                          } if(strom['Yesterday']) {
                              let val = parseInt(strom['Yesterday']);
                              setState('0_userdata.0.Visualisierung.Strom.Energy_Yesterday', val, true);
                          } if(strom['Today']) {
                              let val = parseInt(strom['Today']);
                              setState('0_userdata.0.Visualisierung.Strom.Energy_Today', val, true);
                          } if(strom['Period']) {
                              let val = parseInt(strom['Period']);
                              setState('0_userdata.0.Visualisierung.Strom.Period', val, true);
                          } if(strom['Power']) {
                              let val = parseInt(strom['Power']);
                              setState('0_userdata.0.Visualisierung.Strom.Power', val, true);
                          } if(strom['ApparentPower']) {
                              let val = parseInt(strom['ApparentPower']);
                              setState('0_userdata.0.Visualisierung.Strom.ApparentPower', val, true);
                          }
                        });
                      
                      1 Antwort Letzte Antwort
                      0
                      • M manrum1

                        @paul53
                        Hallo, darf ich Dich um Hilfe bitten: Ich baue gerade auf Basis von Tasmota an einer Strommessung habe folgenden String, soweit läuft schon alles wunderbar. Per MQTT erhalte ich folgenden String:

                        {"Time":"2020-05-25T18:33:31","ENERGY":{"TotalStartTime":"2020-05-16T15:20:01","Total":14.129,"Yesterday":1.935,"Today":12.194,"Period":0,"Power":[100,301,145]," ":[102,324,231],"ReactivePower":[19,120,180],"Factor":[0.98,0.93,0.63],"Frequency":[50,50,50],"Voltage":[234,234,234],"Current":[0.436,1.386,0.986]}}

                        Dieser repräsentiert die Werte, die von der Messtelle erhalte:
                        eef296c4-1a1e-4e65-b76f-3cb510b60adc-grafik.png

                        Mit u.a. Beispiel schaffe ich es auch einiges zu Parsen und in eigene Datenpunkte zu speichern. Was ich nicht schaffe ist folgendes:

                        1. ich bekomme nur ganzzahlige Werte, wie bekomme ich die Nachkommastellen (also z.B. für Energy_Today erhalte ich 8 statt 8,752)?
                        2. Wie parse ich die Werte für die jeweilige Phasen, die heutige Abfrage (s.u.) liefert nur den ersten Wert? Also z.B. für Power erhalte ich nur 14, wie parse ich die 162 und die 142?

                        Wäre super, wenn Du mich unterstützen könntest.

                        paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #11

                        @manrum1 sagte:

                        ich bekomme nur ganzzahlige Werte

                        Lasse parseInt() weg, denn das Objekt enthält bereits Zahlen.

                        @manrum1 sagte in MQTT string Parsen:

                        Wie parse ich die Werte für die jeweilige Phasen,

                        Power und die folgenden Werte im Objekt sind Arrays (3 Phasen).

                                let val = strom['Power'][0]; // Phase 1
                        

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        M 1 Antwort Letzte Antwort
                        0
                        • paul53P paul53

                          @manrum1 sagte:

                          ich bekomme nur ganzzahlige Werte

                          Lasse parseInt() weg, denn das Objekt enthält bereits Zahlen.

                          @manrum1 sagte in MQTT string Parsen:

                          Wie parse ich die Werte für die jeweilige Phasen,

                          Power und die folgenden Werte im Objekt sind Arrays (3 Phasen).

                                  let val = strom['Power'][0]; // Phase 1
                          
                          M Offline
                          M Offline
                          manrum1
                          schrieb am zuletzt editiert von manrum1
                          #12

                          @paul53 said in MQTT string Parsen:

                              let val = strom['Power'][0]; // Phase 1
                          

                          Hallo Paul, ich bin begeistert, danke für die schnelle Hilfe. Hab das Script noch nicht komplett, aber es funktioniert soweit. Was könnte ich noch optimieren?

                          on('mqtt.0.tele.pzem.SENSOR', function(dp) {
                              let strom = JSON.parse(dp.state.val).ENERGY;
                              if(strom['Total']) {
                                  let val = strom['Total'];
                                  setState('0_userdata.0.Visualisierung.Strom.Energy_Total', val, true);
                              } if(strom['Yesterday']) {
                                  let val = strom['Yesterday'];
                                  setState('0_userdata.0.Visualisierung.Strom.Energy_Yesterday', val, true);
                              } if(strom['Today']) {
                                  let val = strom['Today'];
                                  setState('0_userdata.0.Visualisierung.Strom.Energy_Today', val, true);
                              } if(strom['Period']) {
                                  let val = strom['Period'];
                                  setState('0_userdata.0.Visualisierung.Strom.Period', val, true);
                              } if(strom['Power']) {
                                  let val = strom['Power'][0];
                                  setState('0_userdata.0.Visualisierung.Strom.Power_Ph1', val, true);
                              } if(strom['Power']) {
                                  let val = strom['Power'][1];
                                  setState('0_userdata.0.Visualisierung.Strom.Power_Ph2', val, true);
                              } if(strom['Power']) {
                                  let val = strom['Power'][2];
                                  setState('0_userdata.0.Visualisierung.Strom.Power_Ph3', val, true);
                              } if(strom['ApparentPower']) {
                                  let val = strom['ApparentPower'][0];
                                  setState('0_userdata.0.Visualisierung.Strom.ApparentPower_Ph1', val, true);
                              } if(strom['ApparentPower']) {
                                  let val = strom['ApparentPower'][1];
                                  setState('0_userdata.0.Visualisierung.Strom.ApparentPower_Ph2', val, true);
                              } if(strom['ApparentPower']) {
                                  let val = strom['ApparentPower'][2];
                                  setState('0_userdata.0.Visualisierung.Strom.ApparentPower_Ph3', val, true);
                              }
                            });
                          
                          1 Antwort Letzte Antwort
                          0
                          • M Offline
                            M Offline
                            Maniac2002
                            schrieb am zuletzt editiert von
                            #13

                            Hello,

                            i have a problem and can not sole it.
                            Maybe someone can help me.

                            I have the following MQTT-String and like to parse alle Information of it.

                            {"StatusSNS":{"Time":"2022-08-22T01:03:00","ANALOG":{"A0":1024},"AM2301":{"Temperature":25.7,"Humidity":46.7,"DewPoint":13.4},"TempUnit":"C"}}

                            please can someone provide me a running JS-Script for IoBroker.

                            Thanks in advance and best regards
                            Maniac2002

                            AsgothianA 1 Antwort Letzte Antwort
                            0
                            • M Maniac2002

                              Hello,

                              i have a problem and can not sole it.
                              Maybe someone can help me.

                              I have the following MQTT-String and like to parse alle Information of it.

                              {"StatusSNS":{"Time":"2022-08-22T01:03:00","ANALOG":{"A0":1024},"AM2301":{"Temperature":25.7,"Humidity":46.7,"DewPoint":13.4},"TempUnit":"C"}}

                              please can someone provide me a running JS-Script for IoBroker.

                              Thanks in advance and best regards
                              Maniac2002

                              AsgothianA Offline
                              AsgothianA Offline
                              Asgothian
                              Developer
                              schrieb am zuletzt editiert von
                              #14

                              @maniac2002

                              const mqttStr = {"StatusSNS":{"Time":"2022-08-22T01:03:00","ANALOG":{"A0":1024},"AM2301":{"Temperature":25.7,"Humidity":46.7,"DewPoint":13.4},"TempUnit":"C"}};
                              const mqttObj = JSON.parse(mqttStr)
                              

                              Now you can access the respective properties from the object. The following properties should exist:

                              mqttObj.StatusSNS - Object
                              mqttObj.StatusSNS.Time - String
                              mqttObj.StatusSNS.Analog - Object
                              mqttObj.StatusSNS.Analog.A0 - number
                              mqttObj.StatusSNS.AM2301 - Object
                              mqttObj.StatusSNS.AM2301.Temperature - Number
                              mqttObj.StatusSNS.AM2301.Humidity - Number
                              mqttObj.StatusSNS.AM2301.DewPoint - Number
                              mqttObj.StatusSNS.TempUnit - String
                              

                              A.

                              ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                              "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

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


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              750

                              Online

                              32.6k

                              Benutzer

                              82.2k

                              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