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