NEWS
Adapter "smartmeter"
-
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
-
-
Hi,
kann es sein das ein direktes Serielles Device nicht unterstütz wird?
Ich habe zum testen einen Seriellen D0 Tastkopf welcher scheinbar nicht erkannt wird wenn ich das Device im Adapter ändere.
-
@Homoran: serialport= Library … der genannte Fehler geht um den konkreten "Device" /dev/ttyUSB0 oder so ...
@a200: Scheinbar brauchst du spezielle Serieller-Port-EInstellungen ... Hab mit Google hier was gefunden:
Danke für die Info, und…
Dieser Artikel gat mich damals abgeschreckt da weiter zu machen, sinngemäß "an den hinteren port darf nur das EVU ran"
Gruß
Rainer
-
kann es sein das ein direktes Serielles Device nicht unterstütz wird?
Ich habe zum testen einen Seriellen D0 Tastkopf welcher scheinbar nicht erkannt wird wenn ich das Device im Adapter ändere. `
An sich sollte alles gehen was seriell vom entsprechenden Linux-System unterstützt wird. Also im Zweifelsfall mal "Low level per Linux" versuchen. Da hilft bestimmt (auch wenns ein anderer Kopf ist) die "Testmöglichkeiten unter Linux" von http://wiki.volkszaehler.org/hardware/c … sb-ausgang
-
sagt syslog irgendwas?
Gibts nen anderen Prozess der ggf den Seriellen port benutzt?
Gabs 13 Uhr irgendwas im Log?
Ingo F `
Ich glaube um die Uhrzeit habe ich den Adapter aktualisiert auf die 0.2.0
Kann es der Grund sein! Morgen müsste ich mal in den Logs schauen
Gruß
Adrian
-
Nach nem Update muss man den ggf neu starten … muss nochmal schauen wo die Einstellung war das er vorm update beendet wird ...
-
kann es sein das ein direktes Serielles Device nicht unterstütz wird?
Ich habe zum testen einen Seriellen D0 Tastkopf welcher scheinbar nicht erkannt wird wenn ich das Device im Adapter ändere. `
An sich sollte alles gehen was seriell vom entsprechenden Linux-System unterstützt wird. Also im Zweifelsfall mal "Low level per Linux" versuchen. Da hilft bestimmt (auch wenns ein anderer Kopf ist) die "Testmöglichkeiten unter Linux" von http://wiki.volkszaehler.org/hardware/c … sb-ausgang `
Hi,
habe den Seriellen Tastkopf jetzt mal per USB-Seriell Adapter angeschlossen.
Welche Einstellungen sollten denn gewählt werden?
Ist das richtig für D0 =
smartmeter.0 2017-02-03 09:42:58.156 debug smartmeter.0 SET MESSAGE TIMEOUT TIMER: 60000 smartmeter.0 2017-02-03 09:42:58.156 debug smartmeter.0 CURRENT PROCESS STEP 1 IN GETNEXTMESSAGE smartmeter.0 2017-02-03 09:42:58.156 debug smartmeter.0 CURRENT PROCESS STEP 0 IN GETNEXTMESSAGE smartmeter.0 2017-02-03 09:42:58.156 debug smartmeter.0 INITIAL MESSAGES TO SEND: 2 smartmeter.0 2017-02-03 09:42:58.156 debug smartmeter.0 SERIALPORT RESET BAUDRATE TO 300 smartmeter.0 2017-02-03 09:42:58.156 debug smartmeter.0 SERIALPORT OPEN smartmeter.0 2017-02-03 09:42:58.156 debug smartmeter.0 CREATE SERIALPORT: 300 7 1 even smartmeter.0 2017-02-03 09:42:58.155 debug smartmeter.0 SmartmeterObis options: {"debug":2,"protocol":"D0Protocol","transport":"SerialRequestResponseTransport","requestInterval":"300","transportSerialPort":"/dev/ttyUSB0","transportSerialBaudra
Bin jetzt verwirrt.
Habe gerade nochmal nach der Beschreibung des Zählers gesucht um zu sehen in welchem Format die Daten da rauskommen sollen.
In der Doku steht das:
5.2 Optische Schnittstelle Die Zähler vom Typ EM 214 haben eine optische Schnittstelle, welche die Anforderungen nach DIN EN 62056-21 erfüllt. Über die optische Schnittstelle überträgt der Zähler Messwerte an ein Handgerät (HHT) oder einen PC mit dem geeigneten Kommunikationsprogramm. Der Zähler lässt sich über diese Kommunikationsverbindung auch programmieren. Die optische Schnittstelle kann in Verbindung mit jedem beliebigen optischen Messfühler verwendet werden, der die Anforderungen nach DIN EN 62056-21 erfüllt.
Wenn ich jetzt nach der DIN suche kommen Ergebnisse mit D0 oder SML :shock:
Kann mir jemand sagen was der Zähler nun spricht?
Danke
-
Woran genau schliesst Du es gerade an?
Ist es die vordere Schnittstelle von einem Stromzähler? oder was anderes?
Wenn vordere Schnittstelle dann ist es nicht wirklich das "D0 protokoll". Dann mach die einstellungen wie oben im ersten Screenshot am Threadanfang.