NEWS
Adapter "smartmeter"
-
Serieller Tastkopf geht doch auch, oder?
Eventuell mit Adapter am Pi zum testen ob der Zähler die Schnittstelle aktiv hat.
Gesendet von iPhone mit Tapatalk Pro
-
Was soll ich denn sagen, Adapter installiert, Lesekopf innerhalb der ESXi durch geschliefen und die Daten werden sofort eingelesen! Dafür einfach Daumen hoch [emoji1303][emoji1303][emoji1303][emoji1303]
Welcher Lesekopf ist mit der bidirektionalen Schnittstelle gemeint!? Oder kann der Lesekopf von Udo auch Daten senden?
Tolle Arbeit [emoji6]
Gruß
Adrian
Gesendet von iPad mit Tapatalk Pro
-
Der Kopf von Udo kann Lesen und Schreiben.
Mein Wärmezähler sendet beispielsweise nicht von sich aus Daten raus. Er ist über dieses "D0-Protokoll" Ansprechbar. Man weckt Ihn zuerst auf, dann kommt eine SignOn-Message die gesendet wird, dann Antwortet er, dann muss pot.die Baudrate angepasst werden bevor er seine Daten sendet.
-
Hallo apollon,
Jetzt hast du es geschafft und mich neugierig gemacht.
Nachdem der homematic zählersensor nicht für meinen Zähler geeignet sind hatte ich das thema eigentlich abgeschrieben, da man dort angeblich nur über einen rückseitigen bus an dievDaten rankommt.
Ich bin jetzt schon im bett und gehe nicht nochmal in den keller zum Nachsehen, aber das müsste mein zähler sein:
https://www.hager.de/zaehlerplatzsystem … Properties
Besteht die Hoffnung dass der mit deinem Adapter funktioniert?
Was kostet denn der Kopf?
Was mich noch stutzig macht, bei dem zähler stand etwas, dass er 24h nur noch blinkt wenn er durch ein magnetfeld gestört wurde, und bei dem Kopf stand eine Warnung vor dem Magnetfeld :?
Gruß
Rainer
-
Kopf bei Udo 25 EUR + Versand.
Was "magnetische Störung "bei Deinem Zähler angeht kann ich nix sagen. Bei mir alles super. Der Lesekopf kommt oben rechts hin da wo diese zwei "rechteckigen Löcher" sind.
-
Update 0.2.0 available …
Removed Debugging, Enhanced Adapter Config
-
Hallo apollon,
Jetzt hast du es geschafft und mich neugierig gemacht.
Nachdem der homematic zählersensor nicht für meinen Zähler geeignet sind hatte ich das thema eigentlich abgeschrieben, da man dort angeblich nur über einen rückseitigen bus an dievDaten rankommt.
Ich bin jetzt schon im bett und gehe nicht nochmal in den keller zum Nachsehen, aber das müsste mein zähler sein:
https://www.hager.de/zaehlerplatzsystem … Properties
Besteht die Hoffnung dass der mit deinem Adapter funktioniert?
Was kostet denn der Kopf?
Was mich noch stutzig macht, bei dem zähler stand etwas, dass er 24h nur noch blinkt wenn er durch ein magnetfeld gestört wurde, und bei dem Kopf stand eine Warnung vor dem Magnetfeld :?
Gruß
Rainer `
ich habe den Hager ehz363W5https://www.hager.de/sonderprodukte/ehz … Properties und lese ihn im Moment noch über den Lesekopf von Udo (volkszaehler). Gestern habe ich den hinteren Anschluss angeschlossen aber ich bekam nur Nullen rein. Da muss ich mich noch informieren.
In der Beschreibung von deinem Zähler steht:
"Datenschnittstellen
Die Datenschnittstellen des Zählers sind Infrarot-Kommunikationsschnittstellen nach DIN EN 62056-21. Alle Telegramme sind mit SML-Transportprotokoll (Version 1) kodiert.
Der Zähler sendet alle 1s - 4s einen Datensatz, welcher neben den Inhalten des/der Energieregister(s) weitere Informationen enthält..:"
Die gleiche Beschreibung steht bei mir. Also kannst du den Kopf benutzen.
-
Ich habe ein paar Scripte geschrieben, die ein paar einfache Statistiken erstellen. Ich werde Sie auf deine Datenpunkte anpassen und sie dann hier posten.
Danke dir und nen schönen Abend noch! `
Wäre es möglich das du diese postest!? Wäre nämlich an diesen sehr interessiert
Danke schon mal
Gruß
Adrian
Gesendet von iPhone mit Tapatalk Pro
-
Mach ich heute Abend! Aber erwartet nicht zu viel. Ich erstelle einfach regelmäßig neue Datenpunkte mit den Verbrauch Minute/Stunde/Tag/Woche/Monat. Delta zu Vorwert. Diese können in der DB gespeichert werden. An Durchschnittswerten bin ich dran.
-
Mal ne Frage zu ner Featureidee für den Adapter die ich noch hatte:
Wenn man beim Stromzähler als "Request Timeout" die 0 nimmt liesst er jedes Telegram was reinkommt - also eins alle 1-4s. Das heisst aktuell werden alle sich ändernden Werte 8also alles was Zähler bzw aktueller Verbrauch ist) gespeichert weil haben sich ja geändert. Wer da sein System nicht per Redis betreibt sondern das states-File nimmt (wie Standard) hat einen Haufen I/O. Im History/SQL/Influxd-Adapter kann man je nach Datenpunkt eine "minimale abweichung" festlegen zum Logging der historischen Daten … das ist super - ändert aber nix an der Grundlast.
Wäre es in Eurer Augen sinnvoll hier im Adapter noch ein "erst bei minimaler Abweichung von X Datenpunkt updaten" einzubauen?
Wenn ja müsste man aber die Werte "normalisieren" weil hier pot. "W", "kW" und "MW" gemischt vorkommen können (und 1MW ist ne andere Nummer als 1W :-)) ) und auf Adapterebene einfacherhalber nur eine Einstellung sinn macht
Meine Idee wäre da zu sagen das man mit dem ersten Buchstaben der Einheit eine Umrechnung vornimmt und damit alle Werte auf die gleiche Einheit und dann dort eine Mindest-Änderung angeben zu können.
Oder muss jeder der dauerhaft lesen will einfach mit der Last Leben und ggf per History-dapter dann die geloggten Historischen Werte selbst auf Datenpunktebene aussortieren?
Sagt mal Eure Meinung?
Macht das Feature Sinn oder nicht?
-
Hi,
wie kann ich den Adapter in einer Multihost Umgebung installieren?
Ich habe mir einen Testrechner mit iobroker aufgesetzt, diesen sehe ich auf meinem Hauptsystem auch unter "Hosts"
Dann habe ich auf der Adapter Seite den neuen "Host" ausgewählt:
Und über eigene URL versucht den Adapter zu installieren:
Hauptsystem: 192.168.178.18
Weiterer Host: 192.168.178.66
Passt das hier überhaupt oder besser ein neues Thema aufmachen?
Kann ich den Adapter auf dem neuen Host auch per commandline installieren?
Egal wie und wo ich es aus dem Admin Adapter versuche stürzt der Admin immer ab.
Gruß
Mirko
-
Kannst Du andere Adapter auf dem anderen Host installieren?
Ich wollte genau das in den nächsten 2-3 Tagen machen (Multihost und so) … aktuell hab ich mein Entwicklungs-Cubietruck im Keller stehen ... jetzt sollen die Daten an Live dran ...
-
wie kann ich den Adapter in einer Multihost Umgebung installieren? `
Ich benutzte multihost (Anleitung: http://www.iobroker.net/?page_id=3068&lang=de)
Ich hatte etwas Probleme mit den unterschiedlichen IPs, aber im Grunde läuft das.
-
hm,
gerade mal deinen Adapter aus der Konsole installiert:
root@debian:~# cd /opt/iobroker/ root@debian:/opt/iobroker# npm install iobroker.smartmeter / > serialport@4.0.7 install /opt/iobroker/node_modules/iobroker.smartmeter/node_modules/smartmeter-obis/node_modules/serialport > node-pre-gyp install --fallback-to-build [serialport] Success: "/opt/iobroker/node_modules/iobroker.smartmeter/node_modules/smartmeter-obis/node_modules/serialport/build/Release/serialport.node" is installed via remote iobroker.smartmeter@0.2.0 node_modules/iobroker.smartmeter └── smartmeter-obis@0.2.5 (open-sml@0.3.1, request@2.79.0, serialport@4.0.7) root@debian:/opt/iobroker#
Sieht jetzt nicht so schlecht aus….
aber der Admin ist wieder weg.
Könnte auch an der "alten" HW liegen.
-
Hier die Sammlung meiner Scripte
Ich gehe davon aus, dass der Smartmeter den Gesamtverbrauch in dem Datenpunkt: "smartmeter.0.1-0:1_8_0*255.value" ablegt. Sollte das nicht der Fall sein, so müsst Ihr die Variable idHAGTotal in allen Skripten anpassen.
******* ALT ******* - Unten steht die neue Version.
01-Hour - Stündlich wird der Verbrauch der vergangenen Stunde im Datenpunkt Stromzähler.Hager.Verbrauch.Hour gespeichert.
!
// NEU - Zählerstand vom Anfang der akt. Stunde wird ermittelt // ! var cronStr = "0 * * * *"; ! var idHAGVorwert = "javascript.0.Stromzähler.Hager.tmp.Total-h"; var idHAGTotal = "smartmeter.0.1-0:1_8_0*255.value"; /*Stromverbrauch insgesamt*/ var idHAGZiel = "javascript.0.Stromzähler.Hager.Verbrauch.Hour"; var debug = false; ! createState(idHAGZiel, 0, { name: 'Stromverbrauch Stündlich', desc: 'Stromverbrauch Stündlich', type: 'number', unit: 'Wh', role: 'value' }); ! createState(idHAGVorwert, 0, { name: 'Stromverbrauch Gesamt Stündlich', desc: 'Stromverbrauch Gesamt Stündlich', type: 'number', unit: 'kWh', role: 'value' }); ! function haupt () { var nVorwert = getState(idHAGVorwert).val; var nAktuell = getState(idHAGTotal).val; var nDiff = ((nAktuell * 10) - (nVorwert * 10)) * 100; setState(idHAGZiel, nDiff, true); if(debug) log("Aus: " + nAktuell +" - "+ nVorwert + " = " + nDiff); var shandler = on ({id: idHAGZiel, change: 'any'}, function(data) { setState(idHAGVorwert, (nAktuell*10)/10, true); unsubscribe(shandler); }); } ! // regelmässige Wiederholungen // ----------------------------------------------------------------------------- schedule(cronStr, haupt); !
02-Day - Täglich um 23:59 wird der Verbrauch des vergangenen Tages im Datenpunkt Stromzähler.Hager.Verbrauch.Day gespeichert.
!
// NEU - Zählerstand vom Anfang des Tages wird ermittelt // ! var cronStr = "59 23 * * *"; ! var idHAGVorwert = "javascript.0.Stromzähler.Hager.tmp.Total-d"; var idHAGTotal = "smartmeter.0.1-0:1_8_0*255.value"; /*Stromverbrauch insgesamt*/ var idHAGZiel = "javascript.0.Stromzähler.Hager.Verbrauch.Day"; var debug = false; ! createState(idHAGZiel, 0, { name: 'Stromverbrauch Täglich', desc: 'Stromverbrauch Täglich', type: 'number', unit: 'kWh', role: 'value' }); ! createState(idHAGVorwert, 0, { name: 'Stromverbrauch Gesamt Tag', desc: 'Stromverbrauch Gesamt Tag', type: 'number', unit: 'kWh', role: 'value' }); ! function haupt () { var nVorwert = getState(idHAGVorwert).val; var nAktuell = getState(idHAGTotal).val; var nDiff = ((nAktuell * 10) - (nVorwert * 10) ) / 10; setState(idHAGZiel, nDiff, true); if(debug) log("Aus: " + nAktuell +" - "+ nVorwert + " = " + nDiff); var handler = on ({id: idHAGZiel, change: 'any'}, function(data) { setState(idHAGVorwert, (nAktuell*10)/10, true); unsubscribe(handler); }); } ! // regelmässige Wiederholungen // ----------------------------------------------------------------------------- schedule(cronStr, haupt); !
03-Week - Montags um 00:00 wird der Verbrauch der vergangenen Wocheim Datenpunkt Stromzähler.Hager.Verbrauch.Week gespeichert.
!
// NEU - Zählerstand vom Anfang der Woche wird ermittelt // ! var cronStr = "0 0 * * 1"; ! var idHAGVorwert = "javascript.0.Stromzähler.Hager.tmp.Total-w"; var idHAGTotal = "smartmeter.0.1-0:1_8_0*255.value"; /*Stromverbrauch insgesamt*/ var idHAGZiel = "javascript.0.Stromzähler.Hager.Verbrauch.Week"; var debug = false; ! createState(idHAGZiel, 0, { name: 'Stromverbrauch Wöchentlich', desc: 'Stromverbrauch Wöchentlich', type: 'number', unit: 'kWh', role: 'value' }); ! createState(idHAGVorwert, 0, { name: 'Stromverbrauch Gesamt Wöchentlich', desc: 'Stromverbrauch Gesamt Wöchentlich', type: 'number', unit: 'kWh', role: 'value' }); ! function haupt () { var nVorwert = getState(idHAGVorwert).val; var nAktuell = getState(idHAGTotal).val; var nDiff = ((nAktuell * 10) - (nVorwert * 10) ) / 10; setState(idHAGZiel, nDiff, true); if(debug) log("Aus: " + nAktuell +" - "+ nVorwert + " = " + nDiff); var handler = on ({id: idHAGZiel, change: 'any'}, function(data) { setState(idHAGVorwert, (nAktuell*10)/10, true); unsubscribe(handler); }); } ! // regelmässige Wiederholungen // ----------------------------------------------------------------------------- schedule(cronStr, haupt); !
04-Month - am 1. eines Monats wird der Verbrauch des Vormonats im Datenpunkt Stromzähler.Hager.Verbrauch.Month gespeichert.
! ````
// NEU - Zählerstand vom Anfang des Monats wird ermittelt
//
! var cronStr = "0 0 1 * ";
! var idHAGVorwert = "javascript.0.Stromzähler.Hager.Total-m";
var idHAGTotal = "smartmeter.0.1-0:1_8_0255.value"; /Stromverbrauch insgesamt/
var idHAGZiel = "javascript.0.Stromzähler.Hager.Verbrauch.Month";
var debug = true;
! createState(idHAGZiel, 0, {
name: 'Stromverbrauch Monatlich',
desc: 'Stromverbrauch Monatlich',
type: 'number',
unit: 'kWh',
role: 'value'
});
! createState(idHAGVorwert, 0, {
name: 'Stromverbrauch Gesamt Monatlich',
desc: 'Stromverbrauch Gesamt Monatlich',
type: 'number',
unit: 'kWh',
role: 'value'
});
! function haupt () {
var nVorwert = getState(idHAGVorwert).val;
var nAktuell = getState(idHAGTotal).val;
var nDiff = ((nAktuell * 10) - (nVorwert * 10) ) / 10;
setState(idHAGZiel, nDiff, true);
if(debug) log("Aus: " + nAktuell +" - "+ nVorwert + " = " + nDiff);
var handler = on ({id: idHAGZiel, change: 'any'}, function(data) {
setState(idHAGVorwert, (nAktuell*10)/10, true);
unsubscribe(handler);
});
}
! // regelmässige Wiederholungen
// -----------------------------------------------------------------------------
schedule(cronStr, haupt);******* NEU ******* >! ```` // NEU - Zählerstand vom Anfang der akt. Stunde wird ermittelt // >! var cronH = "0 * * * *"; var cronD = "59 23 * * *"; var cronW = "0 0 * * 1"; var cronM = "0 0 1 * *"; >! var idHAGTotH = "javascript.0.Stromzähler.Hager.tmp.Total-h"; var idHAGTotD = "javascript.0.Stromzähler.Hager.tmp.Total-d"; var idHAGTotW = "javascript.0.Stromzähler.Hager.tmp.Total-w"; var idHAGTotM = "javascript.0.Stromzähler.Hager.tmp.Total-m"; var idHAGTotal = "smartmeter.0.1-0:1_8_0*255.value"; /*Stromverbrauch insgesammt*/ var idHAGZielH = "javascript.0.Stromzähler.Hager.Hour"; var idHAGZielD = "javascript.0.Stromzähler.Hager.Day"; var idHAGZielW = "javascript.0.Stromzähler.Hager.Week"; var idHAGZielM = "javascript.0.Stromzähler.Hager.Month"; var debug = false; >! var DPArray = [idHAGTotH, idHAGTotD , idHAGTotW, idHAGTotM, idHAGZielH, idHAGZielD, idHAGZielW, idHAGZielM]; var DPUnit = "kWh"; >! DPArray.forEach(function(wert, index, array) { var DPType = wert.split("."); var DPDescr = "Power consumption of " + (DPType[DPType.length - 1]); if(index > 3) DPUnit = "Wh"; createState(wert, 0, { name: DPDescr, desc: DPDescr, type: 'number', unit: DPUnit, role: 'value' }); }); >! function haupt (VorId, ZielId) { var nVorwert = getState(VorId).val; var nAktuell = getState(idHAGTotal).val; var nDiff = ((nAktuell * 10) - (nVorwert * 10)) * 100; setState(ZielId, nDiff, true); if(debug) log("Aus: " + nAktuell +" - "+ nVorwert + " = " + nDiff); var shandler = on ({id: ZielId, change: 'any'}, function(data) { setState(VorId, (nAktuell*10)/10, true); unsubscribe(shandler); }); } >! // regelmässige Wiederholungen // ----------------------------------------------------------------------------- >! schedule(cronH, function () { haupt(idHAGTotH, idHAGZielH); }); schedule(cronD, function () { haupt(idHAGTotD, idHAGZielD); }); schedule(cronW, function () { haupt(idHAGTotW, idHAGZielW); }); schedule(cronM, function () { haupt(idHAGTotM, idHAGZielM); }); >! ```` Wie ihr sieht, sind das fast identische Skripte, die zu unterschiedlichen Zeitpunkten aufgerufen werden. Denkt daran, die Werte in der DB zu speichern. Ich empfehle die Option "nur bei Änderung" einzuschalten. Die minütlichen Werte werden eh aus dem Datenpunkt des Smartmeters: Momentanwert Gesamtwirkleistung (Total) gespeichert. <u>TODO:</u> Alles zum einen Skript zusammenfassen. ******* Siehe NEU ******* Durchschnittswerte berechnen. Kommentare und Kritik sind sehr willkommen.
-
Ich erhielt heute die folgende Meldung. ich habe gerade festgestellt das seit 13 Uhr keine Daten historisiert wurden. Hab die Ubuntu Maschine rebootet und jetzt geht es wieder der restart des Adapters hat nicht geholfen. Die Ampel des Adapters war rot
smartmeter.0 2017-02-02 20:34:37.125 info SERIALPORT ERROR: Error: Error Resource temporarily unavailable Cannot lock port smartmeter.0 2017-02-02 20:34:37.084 info starting. Version 0.2.0 in /opt/iobroker/node_modules/iobroker.smartmeter, node: v4.7.0
Woran könnte das liegen?
-
sagt syslog irgendwas?
Gibts nen anderen Prozess der ggf den Seriellen port benutzt?
Gabs 13 Uhr irgendwas im Log?
Ingo F
-
Gibts nen anderen Prozess der ggf den Seriellen port benutzt? `
Andere Baustelle, aber gibt es dann Probleme?RFLink und CUL verwenden beide den serialport.
Gruß
Rainer
-
ich versuche über die BKE-Datenschnittstelle - EHZ001 (Rückseitig) meines Hager Stromzählers ehz363W5 die Werte auszulesen. Von seriel gehe ich auf USB und bekomme folgende Daten rein:
0000000 fe ff ff ff ff ff ff ff f9 fc fb ff fe fe fe ff 0000020 ff ff fe ff fc ff ff ff fe ff ff fe ff fe ff ff 0000040 ff fc ff fe fe ff ff ff fe fe fe f0 fc ff fe 7e 0000060 ff fe ff ff f9 fa f2 ff ff ff ff ff fe ff ff fe 0000100 ff fb fe ff ff ff fe fe fe fe ff ff fe fe fe fe 0000120 fe ff fe ff fe fe fe fe ff fe fe ff fe ff fe ff 0000140 fe ff ff ff f2 fe f6 fc ff fc ff fe fe ff ff fe 0000160 fe fe 7f ff ff fe fe ff fe ff fe ff fe f7 fe fe 0000200 fe fc ff fc fe fa ff fe ff ff fe fe ff ff ff fe 0000220 f2 ff ff ff fe ed ff fe fe fe ff fe fe f6 fe ff 0000240 fe ff fc ff fe ff ff f7 ff fe ff ff ff fe ff ff 0000260 fe fe ff fe f9 ff fe fe ff fe ff fe ff ff ff fe 0000300 e0 fe fe fe ff f3 fe fe fe fb fe ff ff ff ff fe 0000320 ff fe ff fe fe ff fe f7 fe ff fa ff fe ff ff ff 0000340 ff ff fe fe ff fe ff fe e4 ff ff fe fe ff e4 ff 0000360 c0 fc ff fe ff ff dc ff fa fe f3 fe ff ff fe fe 0000400 80 fe f9 ff ff fa fe fe ff ff fe fe ff fe fe ff 0000420 fe fe f9 ff ff fc ff de ff ff fe ff fe f2 ff ff
Hat jemand eine Idee, wieso das so ist und ich nicht einfach den SML code erhalte? BTW mit dem Lesekopf von Udo kann ich vorne alles einwandfrei einlesen.
Danke
-