NEWS
Energieerfassung mittels Weidmann emlog Script (JSON)
-
Hallo Zusammen,
ich habe mir das Weidmann Gerät emlog vor einiger Zeit gekauft um meine Stromzähler (1x Solar) (1x Bezug + Verbrauch) auszulesen.
Im Gerät ist intern ein Raspberry verbaut und über die USB Schnittstellen werden Leseköpfe von Weimann angesteckt.
Es lassen sich bis zu 3 Zähler mit einem Gerät auslesen.Das Gerät hat neben einer lokalen Auswertung über ein Windows Programm eine Webauswertung und eine JSON Seite über die man die Werte in IOBroker bekommt. Auch verschickt das Gerät auf Wunsch täglich eine eMail mit einer Verbrauchsdarstellung.
Auf der SDKarte können noch dazu historische Verbrauchsdaten gespeichert werden (Tag, Monat, Jahr).Mittlerweile bin ich aber von der Lösung Weidmann zu einer Raspberry & IOBroker installation mit Smartmeter Adapter von Ingo umgestiegen. Die Leseköpfe
von Weidmann funktionieren auch dort. Besten Dank nochmal an Ingo für den tollen Adapter.
Warum? Bei der Lösung mit Weidmann habe ich nach 1-2 Wochen Betrieb leider immer wieder Probleme gehabt und musste das Gerät vor Ort neu starten.
An was das liegt habe ich leider nicht herausgefunden und bin daher auf die einfachere Lösung mit Smartmeter und PI umgestiegen.PS: ich lese damit einem Itron ICE 3000 aus.
Die Einstellung die ich hier im Forum gefunden habe hat am Anfang nicht geklappt, mit dieser Einstellung funktioniert aber der Zähler nun:Falls aber jemand das Weidmann emlog Gerät noch hat, nachfolgende mein altes Script, bitte beachtet:
- 192.168.xxx.xxx natürlich mit der Webadresse Eures Gerätes ersetzen!
- Wenn Ihr kein Telegram habt die Zeile 78 aus kommentieren
/* Abfrage per JSON Quelle: keine Die Ergebnisse kann man im JSON Viewer anschauen http://www.jsoneditoronline.org/ Die Auswertung erfolgt dann mit dem folgende Script: **** Weidmann EmLog **** */ var logging = false; var request = require("request"); var myJson = {}; var instanz = 'javascript.0'; instanz = instanz + '.'; var pfad = "EmLog_EnergieZaehler."; var idEmLogBezugZaehler180 = pfad + "BezugZaehler_180"; var idEmLogLieferungZaehler280 = pfad + "LieferungZaehler_280"; var idEmLogWirkleistung270 = pfad + "Wirkleistung_270"; var idEmLogWLieferung280 = pfad + "WLieferung_280"; createState(idEmLogBezugZaehler180, 0, { name: 'EmLog Strombezugszähler 180', desc: 'Bezugsmenge in KWh', type: 'number', role: 'value', unit: 'KWh' }); createState(idEmLogLieferungZaehler280, 0, { name: 'EmLog StromLieferungzähler 280', desc: 'Lieferung Einspeisungsmenge in KWh', type: 'number', role: 'value', unit: 'KWh' }); createState(idEmLogWirkleistung270, 0, { name: 'EmLog Wirkleistung 270', desc: 'Wirkleistung in W', type: 'number', role: 'value', unit: 'W' }); createState(idEmLogWLieferung280, 0, { name: 'EmLog Leistung Lieferung 280', desc: 'Leistung in W', type: 'number', role: 'value', unit: 'W' }); function parseJson(text) { if (text === "") return {}; if (logging) log("readJson-text: " + text); try { json = JSON.parse(text); } catch (ex) { json = {}; } if(!json) json = {}; return json; } function readJson(url, callback) { request(url, function (err, state, body){ if (logging) log("readJSon-url: " + url); if (body) { if (logging) log("readJSon-body: " + body); var json = parseJson(body); callback(null, json); } else { var error = "(" + err + ") ERROR bei Abfrage von: " + url; log(error, "error"); setState("telegram.1.communicate.response", "!!!EmLog Energiezähler: Fehler beim Auslesen: " + err + " " + url); callback(error, null); } }); } function main() { // erst mal die Allgemeinen Gesamtdaten des Zaehlers auslesen var url = 'http://192.168.xxx.xxx/pages/getinformation.php?export&meterindex=1'; readJson(url, function(err,json) { if(!err) { myJson = json; //if (logging) log("Json: " + json); if (logging) log("BezugZaehler_1.8.0: " + parseFloat(myJson.Zaehlerstand_Bezug.Stand180),"info"); // Zähler KWh if (logging) log("LieferungZaehler_2.8.0: " + parseFloat(myJson.Zaehlerstand_Lieferung.Stand280),"info"); // Zähler KWh if (logging) log("Wirkleistung_2.7.0: " + parseFloat(myJson.Wirkleistung_Lieferung.Leistung270),"info"); // Leistung W if (logging) log("WLieferung_2.8.0: " + parseFloat(myJson.Kwh_Lieferung.Kwh280+1000),"info"); // Leistung W setState(instanz+idEmLogBezugZaehler180 ,parseFloat(myJson.Zaehlerstand_Bezug.Stand180)); if (logging) log("setstate schreibe in Tag: " + instanz+idEmLogBezugZaehler180 + " den Wert:" + parseFloat(myJson.Zaehlerstand_Bezug.Stand180)) setState(instanz+idEmLogLieferungZaehler280 ,parseFloat(myJson.Zaehlerstand_Lieferung.Stand280)); if (logging) log("setstate schreibe in Tag: " + instanz+idEmLogLieferungZaehler280 + " den Wert:" + parseFloat(myJson.Zaehlerstand_Lieferung.Stand280)) setState(instanz+idEmLogWirkleistung270 ,parseFloat(myJson.Wirkleistung_Lieferung.Leistung270)); if (logging) log("setstate schreibe in Tag: " + instanz+idEmLogWirkleistung270 + " den Wert:" + parseFloat(myJson.Wirkleistung_Lieferung.Leistung270)) setState(instanz+idEmLogWLieferung280 ,parseFloat(myJson.Kwh_Lieferung.Kwh280)*1000); if (logging) log("setstate schreibe in Tag: " + instanz+idEmLogWLieferung280 + " den Wert:" + parseFloat(myJson.Kwh_Lieferung.Kwh280)*1000) } else { if (logging) log("Fehler beim Auslesen des EmLog Zählers über JSON. Keine Daten erhalten.","warn"); myJson = {}; } }); } schedule("0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58 * * * *", function () { // alle 2 Minute die Werte abfragen main(); }); // Beim Skriptstart die Werte abfragen setTimeout(main,1500);
Gruss
Thomas