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

NEWS

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

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

Vorlage: Pulsecounter (stall.biz) per JSON auslesen

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascriptmonitoringtemplate
3 Beiträge 2 Kommentatoren 836 Aufrufe 2 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.
  • G Offline
    G Offline
    GrillKoenig
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    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 Abwesend
      crunchipC Abwesend
      crunchip
      Forum Testing Most Active
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 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

        781

        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