S0-Counter-ESP8266-ESPEasy
Dies ist ein einfacher S0 Counter zum "Digitalisieren" von Stromzählern mit S0 Schnittstelle auf Basis von Wemos D1 mini pro ESP8266 mit ESPEasy. Die ausgelesenen Werte werden an eine Homematic übertragen. Dort bzw. in Node-red erfolgt dann die Auswertung und auch die Sicherung des alten Zählerstandes bei einem Stromausfall am ESP8266, da dort die Werte nicht persistent gespeichert werden.
Achtung: Dies ist KEINE "revisionssichere" Digitalisierung des Zählerstandes! Es können Pulse verloren gehen, der Zählerstand kann bei Stromausfall am ESP8266 verloren gehen, usw.
Dies ist work in progress!
D1 mini Pro
Für dieses Projekt verwende ich eine D1 mini Pro, da an diesen eine externe WLAN Antenne angeschlossen werden kann. Das Gerät soll schließlich im Stromzählerkasten mit vielen Kabeln, Metallschienen etc. hängen. Da ist das WLAN Signal nicht mehr wirklich gut. Mit einer externen Antenne kann ich diese außen an den Stromzählerkasten anbringen.
Layout
externe Antenne
Um die externe Antenne nutzen zu können, ist der SMD 0 Ohm Widerstand umzulöten:
Schaltplan
Konfiguration ESPEasy
Hardware
Devices
Rules
// -------------------------------------------------------
// Setzen der Pulse pro kWh pro Zählereinheit
// -------------------------------------------------------
//
On System#Boot do
let,11,101 // Stromzähler 1: 100 Pulse pro kWh
let,12,1001 // Stromzähler 2: 1000 Pulse pro kWh
let,13,1001 // Stromzähler 3: 1000 Pulse pro kWh
endon
// -------------------------------------------------------
// Upload der Divisoren zur Homematic
// -------------------------------------------------------
//
On WiFi#Connected do
SendToHTTP 192.168.178.160,8181,/egal.exe?ret=dom.GetObject(%22StromCounter1Divisor%22).State([var#11])
SendToHTTP 192.168.178.160,8181,/egal.exe?ret=dom.GetObject(%22StromCounter2Divisor%22).State([var#12])
SendToHTTP 192.168.178.160,8181,/egal.exe?ret=dom.GetObject(%22StromCounter3Divisor%22).State([var#13])
endon
// -------------------------------------------------------
// aktuelles Total geteilt durch Pulse pro kWh = Zählerstand
// -------------------------------------------------------
//
on StromCounter1#* do
let,1,%eventvalue2%/[var#11]
SendToHTTP 192.168.178.160,8181,/egal.exe?ret=dom.GetObject(%22StromCounter1TotalAkt%22).State(%eventvalue2%)
SendToHTTP 192.168.178.160,8181,/egal.exe?ret=dom.GetObject(%22StromCounter1Stand%22).State([var#1])
endon
on StromCounter2#* do
let,2,%eventvalue2%/[var#12]
SendToHTTP 192.168.178.160,8181,/egal.exe?ret=dom.GetObject(%22StromCounter2TotalAkt%22).State(%eventvalue2%)
SendToHTTP 192.168.178.160,8181,/egal.exe?ret=dom.GetObject(%22StromCounter2Stand%22).State([var#2])
endon
on StromCounter3#* do
let,3,%eventvalue2%/[var#13]
SendToHTTP 192.168.178.160,8181,/egal.exe?ret=dom.GetObject(%22StromCounter3TotalAkt%22).State(%eventvalue2%)
SendToHTTP 192.168.178.160,8181,/egal.exe?ret=dom.GetObject(%22StromCounter3Stand%22).State([var#3])
endon
Stromzähler Eltako
Auswerten möchte ich Stromzähler von Eltako des Typs DSZ12 und DSZ15. Über die S0 Schnittstelle wird folgendes beschrieben:
-
Impulsausgang S0 nach DIN EN 62053-31
-
potenzialfrei durch einen Optokoppler
-
max. 30VDC/2OmA u. min.5VDC
-
Impedanz100 Ohm
-
Impulslänge 50ms
-
100 Imp./kWh (DSZ12) bzw. 1000 Imp./KWH (DSZ15)
Laut Datenblatt soll die Ansteuerung also mit mindestens 5 Volt erfolgen. Viele andere Projekte zeigen, dass die 3V3 der GPIO Pins auch ausreichen sollten.
Verarbeitung in Homematic und node red
Die Variablen eines D1 mini (Pro) devices überleben einen Neustart nicht. Nach einem Neustart beginnen also alle Zähler wieder bei 0. Damit muss ein Neustart erkannt und in den Daten abgefangen werden.
Ich sende die Daten über Rules an Systemvariable der Homematic. Die Veränderung derselben frage ich über node red ab. Stelle ich dort fest, dass ein neuer Wert kleiner ist, als der davor gemeldete Wert, gehe ich von einem Neustart des ESP aus. Dann addiere ich alten und neuen Wert und setze diese als neue Basis. Außerdem warne ich über eine E-Mail, so dass die Zählerstände noch manuell kontrolliert und ggf. korrigiert werden können.
Display Steuerung
Das Display wird über node red ein- und ausgeschaltet. Wenn das Garagentor geöffnet wird, wird das Kommando
http://192.168.178.146/tools?cmd=OLEDCMD%2Con
abgesetzt. Wird es geschlossen, wird das Kommando
http://192.168.178.146/tools?cmd=OLEDCMD%2Con
abgesetzt.
Um das Display manuell aktivieren zu können, wird ein Taster angebracht. Dieser wird über ein Device gesteuert und über Rules wird das Display ein- bzw. ausgeschaltet:
// --------------------------------------------------------
// Display On Taster
// --------------------------------------------------------
on DisplayOn#State=0 do
OLEDCMD,on
endon
on DisplayOn#State=1 do
OLEDCMD,off
endon
Kommandos
Übertragung per HTTP
Setzen eines Zählerstandes: http://192.168.178.146/control?cmd=ESP8266GStromPuls1.SetPulseCounterTotal,10000
Umgang mit internen Variablen
Internal variables A really great feature to use is the internal variables. You set them like this:
Let,, Where n must be a positive integer (type uint32_t) and the value a floating point value. To use the values in strings you can either use the %v7% syntax or [var#7]. BUT for formulas you need to use the square brackets in order for it to compute, i.e. [var#12].
If you need to make sure the stored value is an integer value, use the [int#n] syntax. (i.e. [int#12]) The index n is shared among [var#n] and [int#n].
On the “System Variables” page of the web interface all set values can be inspected including their values. If none is set, “No variables set” will be shown.
If a specific system variable was never set (using the Let command), its value will be considered to be 0.0. Quelle: https://espeasy.readthedocs.io/en/latest/Rules/Rules.html
Quellen
ESPEasy Command Reference: https://www.letscontrolit.com/wiki/index.php/ESPEasy_Command_Reference https://espeasy.readthedocs.io/en/latest/Reference/Command.html
ESPEasy Pulse Counter: https://espeasy.readthedocs.io/en/latest/Plugin/P003.html
ESPEasy Kommandos von remote: https://nerdiy.de/howto-espeasy-befehle-ausfuehren/ ESPEasy Node-red: https://nerdiy.de/howto-node-red-gpio-eines-espeasy-geraets-steuern/