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. JavaScript
  5. Vorlage: Pulsecounter (stall.biz) per JSON auslesen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Vorlage: Pulsecounter (stall.biz) per JSON auslesen

Scheduled Pinned Locked Moved JavaScript
javascriptmonitoringtemplate
3 Posts 2 Posters 860 Views 2 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.
  • G Offline
    G Offline
    GrillKoenig
    wrote on last edited by
    #1

    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

    crunchipC 1 Reply Last reply
    1
    • G GrillKoenig

      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

      crunchipC Away
      crunchipC Away
      crunchip
      Forum Testing Most Active
      wrote on last edited by
      #2

      @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.

      umgestiegen von Proxmox auf Unraid

      G 1 Reply Last reply
      0
      • crunchipC crunchip

        @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 Offline
        G Offline
        GrillKoenig
        wrote on last edited by
        #3

        @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
        0
        Reply
        • Reply as topic
        Log in to reply
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes


        Support us

        ioBroker
        Community Adapters
        Donate

        640

        Online

        32.6k

        Users

        82.3k

        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