Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Stromzähler auslesen Json-String

    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

    Stromzähler auslesen Json-String

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

      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

      paul53 Ralla66 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @bodenpersonal last edited by 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 1 Reply Last reply Reply Quote 1
        • Ralla66
          Ralla66 Most Active @bodenpersonal last edited by Ralla66

          @bodenpersonal

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

          B 1 Reply Last reply Reply Quote 0
          • B
            bodenpersonal @paul53 last edited by

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

            1 Reply Last reply Reply Quote 0
            • B
              bodenpersonal @Ralla66 last edited by

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

              B 1 Reply Last reply Reply Quote 0
              • B
                bodenpersonal @bodenpersonal last edited by

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

                LG Stefan

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

                Support us

                ioBroker
                Community Adapters
                Donate

                850
                Online

                31.8k
                Users

                80.0k
                Topics

                1.3m
                Posts

                3
                6
                792
                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