Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Vorlage: Pulsecounter (stall.biz) per JSON auslesen

    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

    Vorlage: Pulsecounter (stall.biz) per JSON auslesen

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

      Moin!
      Da ich noch nichts vergleichbares hier im Forum gefunden habe aber andererseits schon viel herausziehen konnte, möchte ich Euch gern mein neustes JavaScript zur Verfügung stellen.

      Es ließt per JSON den von Eugen Stall entwickelten PulseCounter für Strom/Gas/Wasser aus und übernimmt die Werte nach iobroker.

      /**
       * Script arbeitet mit dem Pulscounter bezogen von stall.biz (Eugen Stall) zusammen. 
       * Dieser bietet unter der Adresse
       * http://<IP_DES_PULSECOUNTERS>/?json: 
       * die Möglichkeit, die Daten in selbst definierten Zeiträumen vom Counter abzuholen. 
       * 
       * Dieses Script übernimmt diese Daten in den iobroker objektbaum. Per history/flot/... 
       * können dann schöne Auswertungen gefahren werden. 
       */
      
      var request = require('request');
      
      //Hier die Adresse des PulseCounters eintragen: 
      var link = 'http://XXX.ZZZ.YYY.123/?json:';
      
      //Unter diesem Pfad werden die Datenpunkte abgelegt: 
      var prefix = 'javascript.0.import.PulseCounter.HAR.'; 
      
      //Initialer Aufruf beim Speichern des Scripts:
      read();
      
       
      /**
       * Function, welche das JSON abruft, die Inhalte ausließt und in den Objektbaum schreibt. 
       * Falls die Datenpunkte noch nicht angelegt sind, wird dies mit erledigt. 
       */
      function read() {
          request(link, function(error,response, body) {
              if(error) log('Fehler request: ' + error, 'error');
              else {
                  var result = JSON.parse(body);
                  
                  console.debug("JSON gelesen: " + JSON.stringify(result));
      
                  for(var v of result.vars){
      
                      var state = prefix + v.homematic_name;
                      for (let [key, value] of Object.entries(v)) {
                          console.debug("Detail: " + key +": " +value);
                      }
                      
                      var name = v.name;
                      var homematic_name = v.homematic_name;
                      var desc = v.desc;
                      var typ = v.type;
                      var unit = v.unit;
                      var value = v.value;
                      
      
                      createState(state, value, {name: name, unit: unit, type: typ, desc: desc})
                      console.debug("State created: " + state + " with initial value " + value);
      
                      setState(state, {val: value, ack: true});
                      console.debug("Updated state " + state + " with value " + value);
      
                  }
      
                  var systemInfo = prefix + "info.";
                  var jsonSysInf = result.Systeminfo;
                  console.debug("Detail sys: " + JSON.stringify(jsonSysInf));
      
                  for(let [key, value] of Object.entries(jsonSysInf)){
                      console.debug("Detail sys: " + key + " -> " + value);
                      var sysState = systemInfo + key;
                      createState(sysState, value, {name: key, type: 'string'})
                      setState(sysState, {val: value, ack: true});
                  }
                  
                  console.log("Update fuer PulseCounter in " + prefix + " geschrieben");
               
              }
          });
      }
       
      // schedule für alle 1 Minuten
      schedule('*/1 * * * *', read);  
      

      Im Ergebnis liefert das Script folgendes:

      2021-01-07_15-31_Auswahl_01.png

      Bis auf den Pfad werden die Bezeichner aus dem PulseCounter übernommen. Ihr müßt die also nur dort einmal konfigurieren und habt die gleichen Bezeichner auch in iobroker.

      Kritik, Anregungen, Hinweise sind gern willkommen. Wenn es einer brauchen kann, dann gerne!

      Grüße
      Kai

      crunchip 1 Reply Last reply Reply Quote 1
      • crunchip
        crunchip Forum Testing Most Active @GrillKoenig last edited by

        @GrillKoenig sagte in Vorlage: Pulsecounter (stall.biz) per JSON auslesen:

        Da ich noch nichts vergleichbares hier im Forum gefunden habe

        Was meinst du mit vergleichbares?
        Ich hol mir die Daten direkt mittels Adapter.

        G 1 Reply Last reply Reply Quote 0
        • G
          GrillKoenig @crunchip last edited by

          @crunchip

          @crunchip said in Vorlage: Pulsecounter (stall.biz) per JSON auslesen:

          @GrillKoenig sagte in Vorlage: Pulsecounter (stall.biz) per JSON auslesen:

          Da ich noch nichts vergleichbares hier im Forum gefunden habe

          Was meinst du mit vergleichbares?
          Ein universelles JavaScript, welches diese Daten 1:1 übernimmt, ohne das man die Datenpunkte manuell zuweisen muss

          Ich hol mir die Daten direkt mittels Adapter.
          Stimmt, den wiffi-wz gibt es ebenfalls. Der arbeitet aber nicht mit meinem "Gradmesser" zusammen. Das Script hier oben benötigt dafür nur die IP und eine Anpassung des Prefix.

          Ich hätte also vielleicht nicht konkret auf den Pulsecounter eingehen sollen, sondern auf das "allgemeine JSON Format" der Produkte von stall.biz. 😉

          Grüße
          Kai

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

          Support us

          ioBroker
          Community Adapters
          Donate

          762
          Online

          31.8k
          Users

          80.0k
          Topics

          1.3m
          Posts

          javascript monitoring template
          2
          3
          724
          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