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. Stromzähler auslesen Json-String

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    178

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.4k

Stromzähler auslesen Json-String

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 3 Kommentatoren 888 Aufrufe 1 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.
  • B Offline
    B Offline
    bodenpersonal
    schrieb am zuletzt editiert von
    #1

    Hallo liebes Forum,

    bin neuer Nutzer von ioBroker und stehe noch etwas auf dem Schlauch... Hoffe mir kann jemand helfen. Mit der Suchfunktion habe ich mich schon beschäftigt, dennoch bekomme ich es nicht hin. Sorry für den langen Post, der gleich kommt.

    Zur Situation:
    Ich möchte gerne meinen Stromzähler sowie einige Funksteckdosen (AVM) mit ioBroker überwachen und den Stromverbrauch aufzeichnen und visualisieren.

    Zum Auslesen habe ich mir den Hihi-Lesekopf mit WLan besorgt. Das klappt auch schonmal ganz gut, auf dem Webserver sehe ich alle Werte die ich auch erfassen möchte.

    f14493d5-176c-4e13-8179-bf1e619015d1-image.png

    Über mqtt werden die Daten zu ioBroker gesendet, hier kommt aber ein String an:

    0647717e-8e9a-419a-a4e2-8e123e552870-image.png

    {"Time":"2022-11-23T11:25:23","ENERGY":{"Total":8642.7194,"Power":229,"Voltage_L1":237.3,"Voltage_L2":238.1,"Voltage_L3":237.4,"Current_L1":0.21,"Current_L2":0.64,"Current_L3":0.48,"phase_angle_L2_L1":118,"phase_angle_L3_L1":238,"phase_angle_L1":300.0,"phase_angle_L2":323.0,"phase_angle_L3":325.0,"Freq":50.0}}
    

    Wenn ich auf den Stift neben dem String klicke dann bekomme ich einen Code angezeigt.

    {
      "_id": "mqtt.0.tele.Stromzaehler.SENSOR",
      "common": {
        "name": "tele/Stromzaehler/SENSOR",
        "write": true,
        "read": true,
        "role": "variable",
        "desc": "mqtt server variable",
        "type": "string"
      },
      "native": {
        "topic": "tele/Stromzaehler/SENSOR"
      },
      "type": "state",
      "from": "system.adapter.mqtt.0",
      "user": "system.user.admin",
      "ts": 1669196372566
    

    Jetzt habe ich hier im Forum gefunden, dass man diesen String wohl mit Javascript umwandeln kann, so dass ich Datenpunkte bekomme, welche ich weiter verwenden kann.

    Dabei fand ich dieses Thema: https://forum.iobroker.net/topic/35018/mqtt-string-generell-aufteilen

    Wenn ich es richtig verstanden habe, dann soll das Skript genau das machen, was ich suche. Habe nun versucht das Script anzupassen, schaffe es aber nicht, dass es läuft...

    const JSPath = "javascript.0"                              // JS- Pfad
     const parsedStatesPath   = JSPath + ".Stromzaehler"         // Pfad fuer geparste States
     const StromzaehlerJsonPath = "mqtt.0.tele.Stromzaehler.SENSOR"           //Pfad fuer Stromzaehler Json Objekte
     let IDs = [];
      
      
     $("[id=" + StromzaehlerJsonPath + ".*]").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(StromzaehlerJsonPath, 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])
             };
         })
     })
    
    

    Habe keine Erfahrung mit Javascript, hatte gehofft es gibt ein "Standard-Skript", dass einen Datenpunkt für jeden erfassten Wert erstellt, etwas idiotensicheres. Bin nämlich schon zu blöd eine Fehlermeldung zu finden, die mir zeigt wo mein Fehler liegt...

    Liebe Grüße
    Stefan

    paul53P Ralla66R 2 Antworten Letzte Antwort
    0
    • B bodenpersonal

      Hallo liebes Forum,

      bin neuer Nutzer von ioBroker und stehe noch etwas auf dem Schlauch... Hoffe mir kann jemand helfen. Mit der Suchfunktion habe ich mich schon beschäftigt, dennoch bekomme ich es nicht hin. Sorry für den langen Post, der gleich kommt.

      Zur Situation:
      Ich möchte gerne meinen Stromzähler sowie einige Funksteckdosen (AVM) mit ioBroker überwachen und den Stromverbrauch aufzeichnen und visualisieren.

      Zum Auslesen habe ich mir den Hihi-Lesekopf mit WLan besorgt. Das klappt auch schonmal ganz gut, auf dem Webserver sehe ich alle Werte die ich auch erfassen möchte.

      f14493d5-176c-4e13-8179-bf1e619015d1-image.png

      Über mqtt werden die Daten zu ioBroker gesendet, hier kommt aber ein String an:

      0647717e-8e9a-419a-a4e2-8e123e552870-image.png

      {"Time":"2022-11-23T11:25:23","ENERGY":{"Total":8642.7194,"Power":229,"Voltage_L1":237.3,"Voltage_L2":238.1,"Voltage_L3":237.4,"Current_L1":0.21,"Current_L2":0.64,"Current_L3":0.48,"phase_angle_L2_L1":118,"phase_angle_L3_L1":238,"phase_angle_L1":300.0,"phase_angle_L2":323.0,"phase_angle_L3":325.0,"Freq":50.0}}
      

      Wenn ich auf den Stift neben dem String klicke dann bekomme ich einen Code angezeigt.

      {
        "_id": "mqtt.0.tele.Stromzaehler.SENSOR",
        "common": {
          "name": "tele/Stromzaehler/SENSOR",
          "write": true,
          "read": true,
          "role": "variable",
          "desc": "mqtt server variable",
          "type": "string"
        },
        "native": {
          "topic": "tele/Stromzaehler/SENSOR"
        },
        "type": "state",
        "from": "system.adapter.mqtt.0",
        "user": "system.user.admin",
        "ts": 1669196372566
      

      Jetzt habe ich hier im Forum gefunden, dass man diesen String wohl mit Javascript umwandeln kann, so dass ich Datenpunkte bekomme, welche ich weiter verwenden kann.

      Dabei fand ich dieses Thema: https://forum.iobroker.net/topic/35018/mqtt-string-generell-aufteilen

      Wenn ich es richtig verstanden habe, dann soll das Skript genau das machen, was ich suche. Habe nun versucht das Script anzupassen, schaffe es aber nicht, dass es läuft...

      const JSPath = "javascript.0"                              // JS- Pfad
       const parsedStatesPath   = JSPath + ".Stromzaehler"         // Pfad fuer geparste States
       const StromzaehlerJsonPath = "mqtt.0.tele.Stromzaehler.SENSOR"           //Pfad fuer Stromzaehler Json Objekte
       let IDs = [];
        
        
       $("[id=" + StromzaehlerJsonPath + ".*]").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(StromzaehlerJsonPath, 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])
               };
           })
       })
      
      

      Habe keine Erfahrung mit Javascript, hatte gehofft es gibt ein "Standard-Skript", dass einen Datenpunkt für jeden erfassten Wert erstellt, etwas idiotensicheres. Bin nämlich schon zu blöd eine Fehlermeldung zu finden, die mir zeigt wo mein Fehler liegt...

      Liebe Grüße
      Stefan

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

      @bodenpersonal sagte: mqtt.0.tele.Stromzaehler.SENSOR

      Versuche es mal so:

      const pathDst = '0_userdata.0.Stromzaehler.'
      const idJson = 'mqtt.0.tele.Stromzaehler.SENSOR';
      
      const json = getState(idJson).val;
      var zaehler = JSON.parse(json).ENERGY;
      Object.keys(zaehler).forEach(function(key) { 
          let idDst = pathDst + key;
          if(!existsState(idDst)) createState(idDst, 0, {type: 'number', role: 'value', def: 0, name: key, read: true, write: false});
      });
      
      on(idJson, function(dp) {
          zaehler = JSON.parse(dp.state.val).ENERGY;
          Object.keys(zaehler).forEach(function(key) { 
              setState(pathDst + key, zaehler[key], 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

      B 1 Antwort Letzte Antwort
      1
      • B bodenpersonal

        Hallo liebes Forum,

        bin neuer Nutzer von ioBroker und stehe noch etwas auf dem Schlauch... Hoffe mir kann jemand helfen. Mit der Suchfunktion habe ich mich schon beschäftigt, dennoch bekomme ich es nicht hin. Sorry für den langen Post, der gleich kommt.

        Zur Situation:
        Ich möchte gerne meinen Stromzähler sowie einige Funksteckdosen (AVM) mit ioBroker überwachen und den Stromverbrauch aufzeichnen und visualisieren.

        Zum Auslesen habe ich mir den Hihi-Lesekopf mit WLan besorgt. Das klappt auch schonmal ganz gut, auf dem Webserver sehe ich alle Werte die ich auch erfassen möchte.

        f14493d5-176c-4e13-8179-bf1e619015d1-image.png

        Über mqtt werden die Daten zu ioBroker gesendet, hier kommt aber ein String an:

        0647717e-8e9a-419a-a4e2-8e123e552870-image.png

        {"Time":"2022-11-23T11:25:23","ENERGY":{"Total":8642.7194,"Power":229,"Voltage_L1":237.3,"Voltage_L2":238.1,"Voltage_L3":237.4,"Current_L1":0.21,"Current_L2":0.64,"Current_L3":0.48,"phase_angle_L2_L1":118,"phase_angle_L3_L1":238,"phase_angle_L1":300.0,"phase_angle_L2":323.0,"phase_angle_L3":325.0,"Freq":50.0}}
        

        Wenn ich auf den Stift neben dem String klicke dann bekomme ich einen Code angezeigt.

        {
          "_id": "mqtt.0.tele.Stromzaehler.SENSOR",
          "common": {
            "name": "tele/Stromzaehler/SENSOR",
            "write": true,
            "read": true,
            "role": "variable",
            "desc": "mqtt server variable",
            "type": "string"
          },
          "native": {
            "topic": "tele/Stromzaehler/SENSOR"
          },
          "type": "state",
          "from": "system.adapter.mqtt.0",
          "user": "system.user.admin",
          "ts": 1669196372566
        

        Jetzt habe ich hier im Forum gefunden, dass man diesen String wohl mit Javascript umwandeln kann, so dass ich Datenpunkte bekomme, welche ich weiter verwenden kann.

        Dabei fand ich dieses Thema: https://forum.iobroker.net/topic/35018/mqtt-string-generell-aufteilen

        Wenn ich es richtig verstanden habe, dann soll das Skript genau das machen, was ich suche. Habe nun versucht das Script anzupassen, schaffe es aber nicht, dass es läuft...

        const JSPath = "javascript.0"                              // JS- Pfad
         const parsedStatesPath   = JSPath + ".Stromzaehler"         // Pfad fuer geparste States
         const StromzaehlerJsonPath = "mqtt.0.tele.Stromzaehler.SENSOR"           //Pfad fuer Stromzaehler Json Objekte
         let IDs = [];
          
          
         $("[id=" + StromzaehlerJsonPath + ".*]").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(StromzaehlerJsonPath, 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])
                 };
             })
         })
        
        

        Habe keine Erfahrung mit Javascript, hatte gehofft es gibt ein "Standard-Skript", dass einen Datenpunkt für jeden erfassten Wert erstellt, etwas idiotensicheres. Bin nämlich schon zu blöd eine Fehlermeldung zu finden, die mir zeigt wo mein Fehler liegt...

        Liebe Grüße
        Stefan

        Ralla66R Offline
        Ralla66R Offline
        Ralla66
        Most Active
        schrieb am zuletzt editiert von Ralla66
        #3

        @bodenpersonal

        Schon das Smartmeterinterface von Tasmota für deinen Zähler probiert ?
        Da werden die Werte direkt in Datenpunkte per Mqtt geschrieben.

        B 1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @bodenpersonal sagte: mqtt.0.tele.Stromzaehler.SENSOR

          Versuche es mal so:

          const pathDst = '0_userdata.0.Stromzaehler.'
          const idJson = 'mqtt.0.tele.Stromzaehler.SENSOR';
          
          const json = getState(idJson).val;
          var zaehler = JSON.parse(json).ENERGY;
          Object.keys(zaehler).forEach(function(key) { 
              let idDst = pathDst + key;
              if(!existsState(idDst)) createState(idDst, 0, {type: 'number', role: 'value', def: 0, name: key, read: true, write: false});
          });
          
          on(idJson, function(dp) {
              zaehler = JSON.parse(dp.state.val).ENERGY;
              Object.keys(zaehler).forEach(function(key) { 
                  setState(pathDst + key, zaehler[key], true);
              });
          });
          
          B Offline
          B Offline
          bodenpersonal
          schrieb am zuletzt editiert von
          #4

          @paul53 Wow.... ich bin sprachlos! Es klappt!

          1 Antwort Letzte Antwort
          0
          • Ralla66R Ralla66

            @bodenpersonal

            Schon das Smartmeterinterface von Tasmota für deinen Zähler probiert ?
            Da werden die Werte direkt in Datenpunkte per Mqtt geschrieben.

            B Offline
            B Offline
            bodenpersonal
            schrieb am zuletzt editiert von
            #5

            @ralla66 Danke für den Tipp, das hatte ich versucht, hat aber immer irgendwie kryptische Bezeichnungen produziert.

            B 1 Antwort Letzte Antwort
            0
            • B bodenpersonal

              @ralla66 Danke für den Tipp, das hatte ich versucht, hat aber immer irgendwie kryptische Bezeichnungen produziert.

              B Offline
              B Offline
              bodenpersonal
              schrieb am zuletzt editiert von
              #6

              Vielen herzlichen Dank euch beiden, hätte nicht gedacht, dass ich so schnell Hilfe bekomme! Klasse Forum!

              LG Stefan

              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

              772

              Online

              32.5k

              Benutzer

              81.7k

              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