Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. MQTT String generell aufteilen?

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

MQTT String generell aufteilen?

Scheduled Pinned Locked Moved Skripten / Logik
javascript
28 Posts 7 Posters 3.9k Views 8 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B butsch

    Ich bekomme vom Raspberry mit zigbee2mqtt folgenden String:

    {"battery":86,"voltage":2975,"temperature":28.47,"humidity":30.84,"pressure":993,"linkquality":36}
    

    Diesen würde ich jetzt gerne in einzelne Objekte aufteilen: Batterie, Volt, Temperatur usw...
    Ich weiß, dass ich das per Script für jedes Topic machen kann, aber genau das will ich nicht für 50 Geräte machen.

    Gibt es eine Möglichkeit, den String vom Raspi gleich sauber schicken zu lassen oder generell ankommende Topics auf dieser Broker Instanz aufzuteilen??

    Vielen Dank

    paul53P Offline
    paul53P Offline
    paul53
    wrote on last edited by
    #5

    @butsch sagte:

    das will ich nicht für 50 Geräte machen.

    Dann zeige uns mal die ID-Struktur.

    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 Reply Last reply
    0
    • B butsch

      @mickym Danke für deinen Post, aber ganz verstehen tue ich das nicht. So muss doch immer noch für jedes Gerät bzw das dazugehörige Topic ein Script angelegt werden?

      mickymM Offline
      mickymM Offline
      mickym
      Most Active
      wrote on last edited by mickym
      #6

      @butsch Nein dieses Stück Code steckst Du in eine Funktion, der Du Dein Objekt übergibst. Durch die Schleife kannst Du damit selbst die Datenpunkte unter einem Gerät einmalig anlegen und später, wenn sich das Objekt verändert hat die Werte darauf verteilen. Die Schleife macht nichts anderes als @bahnuhr im Code beschrieben hat, nur dass es eben generisch arbeitet und die Zuweisung über obj.x funktioniert und man nicht im Voraus wissen muss, wie ein Objekt heißt und deshalb die Variablen fixiert (also battery, voltage etc.). Das heißt Du erstellst das Script einmal und kannst es dann für jedes Gerät erneut verwenden.

      Nehmen wir also an Du nimmst die XIAOMI Temperatur/Feuchtigkeitssensoren. die schreiben das obige Objekt in einen bestimmten Datenpunkt. Der Datenpunkt spezifiziert das Gerät - Du überwachst mit einem Script alle 50 Geräte und bei der Änderung eines Datenpunktest fieselst Du das Objekt mit der Schleife auf und verteilst es mit der Schleife auf die Datenpunkte, die Du erstellt hast. Mit anderen Worten - statt der Zuweisung zu einer Variablen obj - in meinem Code schnipsel, über gibst Du es als Objekt mit der JSON.parse(obj); Funktion.

      Ich meine der Zigbee Adapter macht das auch alles bereits und der basiert ja meines Wissen auch auf dem zigbeemqtt.

      screen.png

      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

      B 1 Reply Last reply
      0
      • F Offline
        F Offline
        frostnatt
        wrote on last edited by frostnatt
        #7

        Ich nutze selber zigbee2mqtt seit langem, weil es einfach stabiler lief als der zigbee Adapter.
        Hier ist ein kleines Script von mir zum parsen der Json-Objekte vom zigbee2mqtt:

        const JSPath = "javascript.0"                              // JS- Pfad
        const parsedStatesPath   = JSPath + ".zigbee2mqtt"         // Pfad fuer geparste States
        const zigbee2mqttJsonPath = "mqtt.0.zigbee2mqtt"           //Pfad fuer zigbee2mqtt Json Objekte
        let IDs = [];
        
        
        $("[id=" + zigbee2mqttJsonPath + ".*]").each(function (id) {
            IDs.push(id)
        })
        on({id: IDs, change: "ne"}, function (obj) {
            let JsonObj = JSON.parse(obj.state.val)
            Object.keys(JsonObj).forEach(function(key){
                if (getState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath)).notExist){
                    createState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key], {read: true, write: true, type: typeof(JsonObj[key]), name: '' , desc: ''},function(){
                        setState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key])
                })
                }else {
                    setState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key])
                };
            })
        })
        

        Viel Spaß damit :)

        B 2 Replies Last reply
        0
        • F frostnatt

          Ich nutze selber zigbee2mqtt seit langem, weil es einfach stabiler lief als der zigbee Adapter.
          Hier ist ein kleines Script von mir zum parsen der Json-Objekte vom zigbee2mqtt:

          const JSPath = "javascript.0"                              // JS- Pfad
          const parsedStatesPath   = JSPath + ".zigbee2mqtt"         // Pfad fuer geparste States
          const zigbee2mqttJsonPath = "mqtt.0.zigbee2mqtt"           //Pfad fuer zigbee2mqtt Json Objekte
          let IDs = [];
          
          
          $("[id=" + zigbee2mqttJsonPath + ".*]").each(function (id) {
              IDs.push(id)
          })
          on({id: IDs, change: "ne"}, function (obj) {
              let JsonObj = JSON.parse(obj.state.val)
              Object.keys(JsonObj).forEach(function(key){
                  if (getState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath)).notExist){
                      createState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key], {read: true, write: true, type: typeof(JsonObj[key]), name: '' , desc: ''},function(){
                          setState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key])
                  })
                  }else {
                      setState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key])
                  };
              })
          })
          

          Viel Spaß damit :)

          B Offline
          B Offline
          butsch
          wrote on last edited by
          #8

          @frostnatt VIELEN DANK!

          1 Reply Last reply
          0
          • mickymM mickym

            @butsch Nein dieses Stück Code steckst Du in eine Funktion, der Du Dein Objekt übergibst. Durch die Schleife kannst Du damit selbst die Datenpunkte unter einem Gerät einmalig anlegen und später, wenn sich das Objekt verändert hat die Werte darauf verteilen. Die Schleife macht nichts anderes als @bahnuhr im Code beschrieben hat, nur dass es eben generisch arbeitet und die Zuweisung über obj.x funktioniert und man nicht im Voraus wissen muss, wie ein Objekt heißt und deshalb die Variablen fixiert (also battery, voltage etc.). Das heißt Du erstellst das Script einmal und kannst es dann für jedes Gerät erneut verwenden.

            Nehmen wir also an Du nimmst die XIAOMI Temperatur/Feuchtigkeitssensoren. die schreiben das obige Objekt in einen bestimmten Datenpunkt. Der Datenpunkt spezifiziert das Gerät - Du überwachst mit einem Script alle 50 Geräte und bei der Änderung eines Datenpunktest fieselst Du das Objekt mit der Schleife auf und verteilst es mit der Schleife auf die Datenpunkte, die Du erstellt hast. Mit anderen Worten - statt der Zuweisung zu einer Variablen obj - in meinem Code schnipsel, über gibst Du es als Objekt mit der JSON.parse(obj); Funktion.

            Ich meine der Zigbee Adapter macht das auch alles bereits und der basiert ja meines Wissen auch auf dem zigbeemqtt.

            screen.png

            B Offline
            B Offline
            butsch
            wrote on last edited by
            #9

            @mickym VIELEN DANK!

            1 Reply Last reply
            0
            • F frostnatt

              Ich nutze selber zigbee2mqtt seit langem, weil es einfach stabiler lief als der zigbee Adapter.
              Hier ist ein kleines Script von mir zum parsen der Json-Objekte vom zigbee2mqtt:

              const JSPath = "javascript.0"                              // JS- Pfad
              const parsedStatesPath   = JSPath + ".zigbee2mqtt"         // Pfad fuer geparste States
              const zigbee2mqttJsonPath = "mqtt.0.zigbee2mqtt"           //Pfad fuer zigbee2mqtt Json Objekte
              let IDs = [];
              
              
              $("[id=" + zigbee2mqttJsonPath + ".*]").each(function (id) {
                  IDs.push(id)
              })
              on({id: IDs, change: "ne"}, function (obj) {
                  let JsonObj = JSON.parse(obj.state.val)
                  Object.keys(JsonObj).forEach(function(key){
                      if (getState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath)).notExist){
                          createState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key], {read: true, write: true, type: typeof(JsonObj[key]), name: '' , desc: ''},function(){
                              setState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key])
                      })
                      }else {
                          setState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key])
                      };
                  })
              })
              

              Viel Spaß damit :)

              B Offline
              B Offline
              butsch
              wrote on last edited by
              #10

              @frostnatt sagte in MQTT String generell aufteilen?:

              Ich nutze selber zigbee2mqtt seit langem, weil es einfach stabiler lief als der zigbee Adapter.
              Hier ist ein kleines Script von mir zum parsen der Json-Objekte vom zigbee2mqtt:

              const JSPath = "javascript.0"                              // JS- Pfad
              const parsedStatesPath   = JSPath + ".zigbee2mqtt"         // Pfad fuer geparste States
              const zigbee2mqttJsonPath = "mqtt.0.zigbee2mqtt"           //Pfad fuer zigbee2mqtt Json Objekte
              let IDs = [];
              
              
              $("[id=" + zigbee2mqttJsonPath + ".*]").each(function (id) {
                  IDs.push(id)
              })
              on({id: IDs, change: "ne"}, function (obj) {
                  let JsonObj = JSON.parse(obj.state.val)
                  Object.keys(JsonObj).forEach(function(key){
                      if (getState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath)).notExist){
                          createState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key], {read: true, write: true, type: typeof(JsonObj[key]), name: '' , desc: ''},function(){
                              setState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key])
                      })
                      }else {
                          setState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key])
                      };
                  })
              })
              

              Viel Spaß damit :)

              ...ich habe das Script jetzt mal am Laufen, verstehe aber nicht genau was ich noch abändern muss, damit das ganze funktioniert?
              So direkt schein es nicht zu klappen

              F 1 Reply Last reply
              0
              • B butsch

                @frostnatt sagte in MQTT String generell aufteilen?:

                Ich nutze selber zigbee2mqtt seit langem, weil es einfach stabiler lief als der zigbee Adapter.
                Hier ist ein kleines Script von mir zum parsen der Json-Objekte vom zigbee2mqtt:

                const JSPath = "javascript.0"                              // JS- Pfad
                const parsedStatesPath   = JSPath + ".zigbee2mqtt"         // Pfad fuer geparste States
                const zigbee2mqttJsonPath = "mqtt.0.zigbee2mqtt"           //Pfad fuer zigbee2mqtt Json Objekte
                let IDs = [];
                
                
                $("[id=" + zigbee2mqttJsonPath + ".*]").each(function (id) {
                    IDs.push(id)
                })
                on({id: IDs, change: "ne"}, function (obj) {
                    let JsonObj = JSON.parse(obj.state.val)
                    Object.keys(JsonObj).forEach(function(key){
                        if (getState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath)).notExist){
                            createState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key], {read: true, write: true, type: typeof(JsonObj[key]), name: '' , desc: ''},function(){
                                setState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key])
                        })
                        }else {
                            setState(obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + '.' + key, JsonObj[key])
                        };
                    })
                })
                

                Viel Spaß damit :)

                ...ich habe das Script jetzt mal am Laufen, verstehe aber nicht genau was ich noch abändern muss, damit das ganze funktioniert?
                So direkt schein es nicht zu klappen

                F Offline
                F Offline
                frostnatt
                wrote on last edited by frostnatt
                #11

                @butsch

                const JSPath = "javascript.0"                              // JS- Pfad
                
                const parsedStatesPath   = JSPath + ".zigbee2mqtt"         // Pfad fuer geparste States
                
                const zigbee2mqttJsonPath = "mqtt.0.zigbee2mqtt"           //Pfad fuer zigbee2mqtt Json Objekte
                

                Man muss nur die o.g. Pfade anpassen.
                JSPath ist hierber der Pfad zu javascript Instanz, welche das Script ausführt.
                zigbee2mqttJsonPath ist der Pfad, wo Json Objekte von zigbee2mqtt landen.
                parsedStatesPath ist der Pfad für die geparsten Datenpunkte.
                Die Datenpunkte werden erst angelegt, wenn Json Objekte geändert werden - etwas Geduld ist hier also gefordert :)

                1 Reply Last reply
                0
                • B Offline
                  B Offline
                  butsch
                  wrote on last edited by
                  #12

                  Ok, dann müssten die Einstellungen so wie in deinem Script ja bei mir passen. Hier meine Objekte:
                  4cf269e7-2052-4161-a3d1-166da950e804-image.png

                  Oder mache ich sonst wo noch einen Fehler? OnOff und Temperatur sind die Topics vom zigbee2mqtt....

                  1 Reply Last reply
                  0
                  • B Offline
                    B Offline
                    butsch
                    wrote on last edited by
                    #13

                    Ok, ich habs! Danke noch mal!!!!
                    zigbee2mqttJsonPath musste ich anpassen

                    GEIL!

                    1 Reply Last reply
                    0
                    • B Offline
                      B Offline
                      butsch
                      wrote on last edited by butsch
                      #14

                      Soweit scheint jetzt alles zu funktionieren, die States sind da und werden auch aktualisiert, aber:

                      10:06:33.041	warn	javascript.0 (226402) at script.js.common.MQTT2OBJEKT.Parser:13:13
                      10:06:33.041	warn	javascript.0 (226402) at Object.<anonymous> (script.js.common.MQTT2OBJEKT.Parser:12:26)
                      
                      226402) getState "javascript.0.zigbee2mqtt.OnOff" not found (3)
                      

                      Was denn da los? ;-(

                      F 1 Reply Last reply
                      0
                      • B butsch

                        Soweit scheint jetzt alles zu funktionieren, die States sind da und werden auch aktualisiert, aber:

                        10:06:33.041	warn	javascript.0 (226402) at script.js.common.MQTT2OBJEKT.Parser:13:13
                        10:06:33.041	warn	javascript.0 (226402) at Object.<anonymous> (script.js.common.MQTT2OBJEKT.Parser:12:26)
                        
                        226402) getState "javascript.0.zigbee2mqtt.OnOff" not found (3)
                        

                        Was denn da los? ;-(

                        F Offline
                        F Offline
                        frostnatt
                        wrote on last edited by
                        #15

                        @butsch
                        Die Warnings bekomme ich auch seit einiger Zeit. Das Script funktioniert aber weiterhin ohne Probleme bei mir. Muss ich mal bei Gelegenheit debuggen, es fehlt leider im Moment die Zeit...

                        1 Reply Last reply
                        0
                        • F Offline
                          F Offline
                          frostnatt
                          wrote on last edited by
                          #16

                          @butsch
                          Habe das Problem gefixt, das Script wirft keine Warnings mehr bei mir.

                          const JSPath = "javascript.0"                              // JS- Pfad
                          const parsedStatesPath   = JSPath + ".zigbee2mqtt"         // Pfad fuer geparste States
                          const zigbee2mqttJsonPath = "mqtt.0.zigbee2mqtt"           //Pfad fuer zigbee2mqtt Json Objekte
                          let IDs = [];
                          
                          
                          $("[id=" + zigbee2mqttJsonPath + ".*]").each(function (id) {
                              IDs.push(id)
                          })
                          on({id: IDs, change: "ne"}, function (obj) {
                              let JsonObj = JSON.parse(obj.state.val)
                              Object.keys(JsonObj).forEach(function(key){
                                  let currState = obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + "." + key
                                  if (getState(currState).notExist){
                                      createState(currState, JsonObj[key], {read: true, write: true, type: typeof(JsonObj[key]), name: '' , desc: ''},function(){
                                          setState(currState, JsonObj[key]);
                                  })
                                  }else {
                                      setState(currState, JsonObj[key])
                                  };
                              })
                          })
                          
                          metaxaM 1 Reply Last reply
                          0
                          • B Offline
                            B Offline
                            butsch
                            wrote on last edited by
                            #17

                            @frostnatt sagte in MQTT String generell aufteilen?:

                                                                                                                                                        const JSPath = "javascript.0"                              // JS- Pfad                                                                                                                                                                            const parsedStatesPath   = JSPath + ".zigbee2mqtt"         // Pfad fuer geparste States                                                                                                                                                                            const zigbee2mqttJsonPath = "mqtt.0.zigbee2mqtt"           //Pfad fuer zigbee2mqtt Json Objekte                                                                                                                                                                            let IDs = [];                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      $("[id=" + zigbee2mqttJsonPath + ".*]").each(function (id) {                                                                                                                                                                                IDs.push(id)                                                                                                                                                                            })                                                                                                                                                                            on({id: IDs, change: "ne"}, function (obj) {                                                                                                                                                                                let JsonObj = JSON.parse(obj.state.val)                                                                                                                                                                                Object.keys(JsonObj).forEach(function(key){                                                                                                                                                                                    let currState = obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + "." + key                                                                                                                                                                                    if (getState(currState).notExist){                                                                                                                                                                                        createState(currState, JsonObj[key], {read: true, write: true, type: typeof(JsonObj[key]), name: '' , desc: ''},function(){                                                                                                                                                                                            setState(currState, JsonObj[key]);                                                                                                                                                                                    })                                                                                                                                                                                    }else {                                                                                                                                                                                        setState(currState, JsonObj[key])                                                                                                                                                                                    };                                                                                                                                                                                })                                                                                                                                                                            })                                            
                            

                            Vielen Dank, jetzt passt es!

                            1 Reply Last reply
                            0
                            • F frostnatt

                              @butsch
                              Habe das Problem gefixt, das Script wirft keine Warnings mehr bei mir.

                              const JSPath = "javascript.0"                              // JS- Pfad
                              const parsedStatesPath   = JSPath + ".zigbee2mqtt"         // Pfad fuer geparste States
                              const zigbee2mqttJsonPath = "mqtt.0.zigbee2mqtt"           //Pfad fuer zigbee2mqtt Json Objekte
                              let IDs = [];
                              
                              
                              $("[id=" + zigbee2mqttJsonPath + ".*]").each(function (id) {
                                  IDs.push(id)
                              })
                              on({id: IDs, change: "ne"}, function (obj) {
                                  let JsonObj = JSON.parse(obj.state.val)
                                  Object.keys(JsonObj).forEach(function(key){
                                      let currState = obj.id.replace(zigbee2mqttJsonPath, parsedStatesPath) + "." + key
                                      if (getState(currState).notExist){
                                          createState(currState, JsonObj[key], {read: true, write: true, type: typeof(JsonObj[key]), name: '' , desc: ''},function(){
                                              setState(currState, JsonObj[key]);
                                      })
                                      }else {
                                          setState(currState, JsonObj[key])
                                      };
                                  })
                              })
                              
                              metaxaM Offline
                              metaxaM Offline
                              metaxa
                              wrote on last edited by metaxa
                              #18

                              @frostnatt sagte in MQTT String generell aufteilen?:

                              @butsch
                              Habe das Problem gefixt, das Script wirft keine Warnings mehr bei mir.

                              Jetzt habe ich primitiv geglaubt, ich kann mir das Script stehlen, ein wenig anpassen und es läuft..... war ein Irrglaube. Kannst du mir vielleicht bitte helfen?

                              schedule("* * * * *", function (){       //alle Minuten
                              
                              const JSPath = "a_andreas.0.eigene_dp"					// JS- Pfad
                              const parsedStatesPath   = JSPath + ".Heizung"			// Pfad fuer geparste States
                              const JsonPath = "mqtt.0.ems-esp.sm_data"				// Pfad fuer Json Objekte
                              
                              let IDs = [];
                              
                              $("[id=" + JsonPath + ".*]").each(function (id) {
                                  IDs.push(id)
                              })
                              
                              on({id: IDs, change: "ne"}, function (obj) {
                                  let JsonObj = JSON.parse(obj.state.val)
                                  Object.keys(JsonObj).forEach(function(key){
                                      let currState = obj.id.replace(JsonPath, parsedStatesPath) + "." + key
                                     if (getState(currState).notExist){
                                          createState(currState, JsonObj[key], {read: true, write: true, type: typeof(JsonObj[key]), name: '' , desc: ''},function(){
                                              setState(currState, JsonObj[key]);
                                      })
                                      }else {
                                          setState(currState, JsonObj[key])
                                      };
                                  })
                              })
                              })
                              

                              fd4394d7-4b1e-448c-955b-8616c922e63c-grafik.png
                              57556ad1-405f-438e-89b7-12d95f228838-grafik.png

                              {"collectortemp":16,"bottomtemp":57.8,"pump":"off","pumpWorkMin":30500,"energylasthour":0}
                              

                              Leider tut sich nix ........ bitte um Unterstützung!

                              Finde deine Lösung mit dynamischen DP echt genial!!!!
                              LG, mxa

                              paul53P 1 Reply Last reply
                              0
                              • metaxaM metaxa

                                @frostnatt sagte in MQTT String generell aufteilen?:

                                @butsch
                                Habe das Problem gefixt, das Script wirft keine Warnings mehr bei mir.

                                Jetzt habe ich primitiv geglaubt, ich kann mir das Script stehlen, ein wenig anpassen und es läuft..... war ein Irrglaube. Kannst du mir vielleicht bitte helfen?

                                schedule("* * * * *", function (){       //alle Minuten
                                
                                const JSPath = "a_andreas.0.eigene_dp"					// JS- Pfad
                                const parsedStatesPath   = JSPath + ".Heizung"			// Pfad fuer geparste States
                                const JsonPath = "mqtt.0.ems-esp.sm_data"				// Pfad fuer Json Objekte
                                
                                let IDs = [];
                                
                                $("[id=" + JsonPath + ".*]").each(function (id) {
                                    IDs.push(id)
                                })
                                
                                on({id: IDs, change: "ne"}, function (obj) {
                                    let JsonObj = JSON.parse(obj.state.val)
                                    Object.keys(JsonObj).forEach(function(key){
                                        let currState = obj.id.replace(JsonPath, parsedStatesPath) + "." + key
                                       if (getState(currState).notExist){
                                            createState(currState, JsonObj[key], {read: true, write: true, type: typeof(JsonObj[key]), name: '' , desc: ''},function(){
                                                setState(currState, JsonObj[key]);
                                        })
                                        }else {
                                            setState(currState, JsonObj[key])
                                        };
                                    })
                                })
                                })
                                

                                fd4394d7-4b1e-448c-955b-8616c922e63c-grafik.png
                                57556ad1-405f-438e-89b7-12d95f228838-grafik.png

                                {"collectortemp":16,"bottomtemp":57.8,"pump":"off","pumpWorkMin":30500,"energylasthour":0}
                                

                                Leider tut sich nix ........ bitte um Unterstützung!

                                Finde deine Lösung mit dynamischen DP echt genial!!!!
                                LG, mxa

                                paul53P Offline
                                paul53P Offline
                                paul53
                                wrote on last edited by paul53
                                #19

                                @metaxa sagte:

                                Leider tut sich nix

                                Mit createState() kann man keine Datenpunkte unter "a_andreas.0.eigene_dp" erstellen.
                                Außerdem: Was soll das schedule() drumherum ? Damit wird jede Minute ein neuer Trigger erzeugt.

                                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

                                metaxaM 1 Reply Last reply
                                1
                                • paul53P paul53

                                  @metaxa sagte:

                                  Leider tut sich nix

                                  Mit createState() kann man keine Datenpunkte unter "a_andreas.0.eigene_dp" erstellen.
                                  Außerdem: Was soll das schedule() drumherum ? Damit wird jede Minute ein neuer Trigger erzeugt.

                                  metaxaM Offline
                                  metaxaM Offline
                                  metaxa
                                  wrote on last edited by metaxa
                                  #20

                                  @paul53 sagte in MQTT String generell aufteilen?:

                                  @metaxa sagte:

                                  Leider tut sich nix

                                  Mit createState() kann man keine Datenpunkte unter "a_andreas.0.eigene_dp" erstellen.

                                  Hi Paul,
                                  ich habs geändert ... aber es tut sich auch nix.

                                  // schedule("* * * * *", function (){       //alle Minuten
                                  
                                  const JSPath = "javascript.0"					// JS- Pfad
                                  const parsedStatesPath   = JSPath + ".Heizung"			// Pfad fuer geparste States
                                  const JsonPath = "mqtt.0.ems-esp.sm_data"				// Pfad fuer Json Objekte
                                  
                                  

                                  Hättest bitte noch eine Idee?

                                  Ups ...... hatte ich nicht gesehen: Ich will mit dem Shedule, dass das Script alle Minuten zum Testen ausgeführt wird.

                                  paul53P 1 Reply Last reply
                                  0
                                  • metaxaM metaxa

                                    @paul53 sagte in MQTT String generell aufteilen?:

                                    @metaxa sagte:

                                    Leider tut sich nix

                                    Mit createState() kann man keine Datenpunkte unter "a_andreas.0.eigene_dp" erstellen.

                                    Hi Paul,
                                    ich habs geändert ... aber es tut sich auch nix.

                                    // schedule("* * * * *", function (){       //alle Minuten
                                    
                                    const JSPath = "javascript.0"					// JS- Pfad
                                    const parsedStatesPath   = JSPath + ".Heizung"			// Pfad fuer geparste States
                                    const JsonPath = "mqtt.0.ems-esp.sm_data"				// Pfad fuer Json Objekte
                                    
                                    

                                    Hättest bitte noch eine Idee?

                                    Ups ...... hatte ich nicht gesehen: Ich will mit dem Shedule, dass das Script alle Minuten zum Testen ausgeführt wird.

                                    paul53P Offline
                                    paul53P Offline
                                    paul53
                                    wrote on last edited by paul53
                                    #21

                                    @metaxa sagte:

                                    Hättest bitte noch eine Idee?

                                    Du willst einen bestimmten Datenpunkt parsen. Dazu braucht man kein Array of IDs.

                                    const idJson = 'mqtt.0.ems-esp.sm_data';
                                    const path = 'Heizung.';
                                    const js = 'javascript.' + instance + '.';
                                    
                                    on(idJson, function(dp) { // triggert bei Wertänderung
                                       let obj = JSON.parse(dp.state.val);
                                       for(let prop in obj) {
                                          if(existsState(js + path + prop)) setState(path + prop, obj[prop], true);
                                          else createState(path + prop, obj[prop], {type: typeof obj[prop]});
                                       }
                                    });
                                    

                                    Bei den Datenpunkten mit Zahlenwerten solltest Du noch manuell die "unit" hinzufügen, denn das geht nicht automatisch.

                                    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

                                    metaxaM 1 Reply Last reply
                                    1
                                    • paul53P paul53

                                      @metaxa sagte:

                                      Hättest bitte noch eine Idee?

                                      Du willst einen bestimmten Datenpunkt parsen. Dazu braucht man kein Array of IDs.

                                      const idJson = 'mqtt.0.ems-esp.sm_data';
                                      const path = 'Heizung.';
                                      const js = 'javascript.' + instance + '.';
                                      
                                      on(idJson, function(dp) { // triggert bei Wertänderung
                                         let obj = JSON.parse(dp.state.val);
                                         for(let prop in obj) {
                                            if(existsState(js + path + prop)) setState(path + prop, obj[prop], true);
                                            else createState(path + prop, obj[prop], {type: typeof obj[prop]});
                                         }
                                      });
                                      

                                      Bei den Datenpunkten mit Zahlenwerten solltest Du noch manuell die "unit" hinzufügen, denn das geht nicht automatisch.

                                      metaxaM Offline
                                      metaxaM Offline
                                      metaxa
                                      wrote on last edited by
                                      #22

                                      @paul53 Ich werde es nie lernen und vestehen, danke Paul!
                                      Ich versuche es zu kapieren, aber ich komm nicht weit genug. Paar Fragen noch bitte

                                      1. wer oder was triggert das Script?
                                      2. habe ich Chance meine eigene Struktur zu verwenden ("a_andreas.0.eigene_dp")

                                      Ups, sehe gerade noch eine Änderung von dir, baue ich gleich ein - wird sicher Sinn machen, wenn ich auch nicht verstehe welchen :-)

                                      Danke Paul für deine Zeit!

                                      paul53P 1 Reply Last reply
                                      0
                                      • metaxaM metaxa

                                        @paul53 Ich werde es nie lernen und vestehen, danke Paul!
                                        Ich versuche es zu kapieren, aber ich komm nicht weit genug. Paar Fragen noch bitte

                                        1. wer oder was triggert das Script?
                                        2. habe ich Chance meine eigene Struktur zu verwenden ("a_andreas.0.eigene_dp")

                                        Ups, sehe gerade noch eine Änderung von dir, baue ich gleich ein - wird sicher Sinn machen, wenn ich auch nicht verstehe welchen :-)

                                        Danke Paul für deine Zeit!

                                        paul53P Offline
                                        paul53P Offline
                                        paul53
                                        wrote on last edited by
                                        #23

                                        @metaxa sagte:

                                        wer oder was triggert das Script?

                                        Getriggert wird bei einer Wertänderung des Datenpunktes 'mqtt.0.ems-esp.sm_data'.

                                        @metaxa sagte in MQTT String generell aufteilen?:

                                        habe ich Chance meine eigene Struktur zu verwenden ("a_andreas.0.eigene_dp")

                                        Ja, aber nicht mit createState() , sondern mit setObject() und setState() im Callback.

                                        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

                                        metaxaM 1 Reply Last reply
                                        1
                                        • paul53P paul53

                                          @metaxa sagte:

                                          wer oder was triggert das Script?

                                          Getriggert wird bei einer Wertänderung des Datenpunktes 'mqtt.0.ems-esp.sm_data'.

                                          @metaxa sagte in MQTT String generell aufteilen?:

                                          habe ich Chance meine eigene Struktur zu verwenden ("a_andreas.0.eigene_dp")

                                          Ja, aber nicht mit createState() , sondern mit setObject() und setState() im Callback.

                                          metaxaM Offline
                                          metaxaM Offline
                                          metaxa
                                          wrote on last edited by metaxa
                                          #24

                                          @paul53 :-) //

                                          Da hatte ich doch schon mal was gebastelt, jetzt ist es mir auch klar warum :-)

                                          createState("javascript.0.scriptDatenPunkte.Sprit_AT.Tankstelle_"+index+".Index", 0,{type: 'number', name: 'ID', read: true, write: true});
                                                  setState("javascript.0.scriptDatenPunkte.Sprit_AT.Tankstelle_"+index+".Index", gasStation[index].id);
                                          

                                          Muss mich nochmals reinfuchsen. Ahhh, is doch was anderes ....... ich fuchse .....

                                          Zum 27sten mal, danke dir Paul!
                                          mxa

                                          paul53P 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          316

                                          Online

                                          32.6k

                                          Users

                                          82.2k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe