Um den Gasverbrauch in FHEM zu erfassen und darzustellen habe ich den Gaszähler mit einen Impulsnehmer ausgestattet. Da ich kein Freund von Provisorien bin, habe ich gleich den Originalen Impulsnehmer IN-Z62 für den Haushaltsbalgengaszähler BK-Gx gekauft. Diesen habe ich direkt von der Firma Elster bezogen. Dort war er zum Zeitpunkt des Kaufes auch um ein Vielfaches günstiger als bei den einschlägigen Elektronikversendern. Im Impulsnehmer selbst ist nicht viel mehr als ein Reedkontakt und eine zweipolige Anschlussklemme verbaut, die auf einer kleinen Platine untergebracht sind. Genügend Platz also um die zusätzliche Elektronik darin zu verstauen.
1. Aufbau der Hardware
Die Hardware besteht aus dem besagtem Impulsnehmer, einem DC-DC Spannungswandler und einem ESP07 oder ESP12. Ich würde auf jeden Fall ein ESP-Modul mit mindestens 1MB Flash Speicher und Antenne (PCB oder Keramik) benutzen, da man damit auch ein Firmware Update via OTA (OverTheAir) einspielen kann und die Signalstärke der WLAN-Verbindung etwas verbessert wird. Bei mir zeigt der ESP einen RSSI um die -77 an. Den ESP07 und den Spannungsregler habe ich zusammen mit einer Einbau-Klinkenbuchse zur Stomversorgung direkt in das Gehäuse des Impulsnehmers eingebaut.
Benötigte Teile:
1x | Impulsnehmer IN-Z62 (Datenblatt) | ca. 15,00 € | |
1x | ESP8266 ESP07 | ca. 5,00 € | Shop |
1x | DC-DC Konverter | ca. 1,60 € | Shop |
Schaltdraht, Lötkolben |
Wenn alles fertig im Impulsnehmer verstaut ist, sieht man von der Elektronik nicht mehr als den Stromversorgungsanschluss auf der linken Seite. Damit es keine Probleme mit der Funkverbindung gibt, sollte man beim Zusammenbau darauf achten, dass die Antenne des ESP nicht von den Kabeln und dem Spannungswandler verdeckt wird. |
2. Installation und Einrichtung in der Software ESPEasy
Auf dem ESP werkelt ein ESPEasy, Build 142. Da ich wegen der Größe hier nur einen "nackten" ESP07 benutze ist das flashen des ESP etwas aufwändiger als zum Beispiel bei einem Wemos D1 oder einer NodeMCU. Die haben den USB-Seriell Wandler und den Spannungsregler gleich mit Onboard.
Wie der ESP mit ESPEasy geflasht wird habe ich hier kurz zusammengefasst. Im Netz gibt es viele Seiten die sich mit diesem Thema beschäftigen. Deshalb werde ich hier nicht näher darauf eingehen.
Die Konfiguration des ESPEasy ist relativ einfach und übersichtlich.
In den Einstellungen des entsprechenden Task richtet man folgendes ein.
- Device: Aus dem Dropdown wählt man den Pulse Counter aus. Danach werden alle Eingabefelder für den Pulse Counter angezeigt.
- Der Name kann leer bleiben. Der ESP wird mit dem Namen aus den Main Settings in FHEM definiert.
- Bei Delay habe ich 300 Sekunden (5 Minuten) gewählt. Das heißt, das aller 300 Sekunden die Werte aus den Values gesendet werden und die Zeit im Counter zurückgesetzt wird. Darauf komme ich später noch zurück.
- Unter 1st GPIO wählt man den Port des ESP aus der mit dem Reedkontakt verbunden ist. Bei mir GPIO-4 (D2).
- Die Prellzeit des Reedkontaktes in Millisekunden wird in Debounce Time (mSec) eingetragen. Standard Reedkontakte besitzen eine mittlere Prellzeit von 0,1 bis 0,5ms. Die maximal einstellbare Prellzeit richtet sich nach der Durchflussmenge des Balkenzählers. Diese ist bei GK4 mit 6m³/h angegeben was maximal 6 Impulse pro Sekunde oder 166ms zwischen den Impulsen bedeutet. Die Prellzeit sollte also zwischen den 0,5ms und diesen 166ms liegen. Demnach kann man die Entprellzeit hier auf eine Millisekunde einstellen.
- Jetzt den Countertyp Delta/Total/Time auswählen.
Delta bedeutet, das der Counter die Impulse zählt und diese dann nach Ablauf des eingestellten Delay auf Null zurücksetzt und von vorn beginnt.
Total braucht man nicht weiter zu erläutern. Der Zähler, der alle Impulse kumuliert. Den Hinweis Total count is not persistent! sollte man beachten und meint, dass dieser Zähler nicht auf dem ESP gespeichert wird. Das heißt, Strom weg - Zähler auch Null. Man muss also in FHEM Sorge dafür Tragen, dass der Zählerstand dort entsprechend gespeichert wird.
Time ist die Zeit zwischen den einzelnen Impulsen am Zählereingang. - Als letzten Punkt der Task Settings gibt man noch an, dass die Daten dieses Task an den Host gesendet werden.
In den Optional Settings richtet man die Namen der drei Variablen (Delta/Total/Time) ein und stellt die Decimals auf 0. Die Counter brauchen keine Nachkommastellen.
3. Definitionen in FHEM und die Weiterverarbeitung
Zuerst muss, falls nicht schon eingerichtet, in FHEM die ESPEasy Bridge definiert werden. Der Port 8383 sollte dabei der gleiche sein, den man im ESPEasy unter 'Config' -> 'Controller Port' gewählt hat. Die 'Controller IP' in der Config des ESP muss die IP-Adresse der FHEM Installation sein.
define ESP_Bridge ESPEasy bridge 8383
Wenn alles richtig eingerichtet ist, wird der ESP als neues Device automatisch im Room ESPEasy in FHEM mit allen Readings angelegt.
Da der Zählerstand in der Variablen Absolut im ESPEasy bei einem Stromausfall verloren geht und dieser Null Zählerstand dann auch im Reading des Device, fügt man noch ein zusätzliches UserReading mit dem Zusatz monotonic ein.
Total monotonic {ReadingsVal("ESPEasy_IN_Z62","Absolut",0)
Dieses UserReading "Total " ist dann das, welches den endgültigen Zählerstand enthält. Mit dieser Option Zählt der Zähler in FHEM einfach mit jeder Änderung des Zählerstandes des ESP weiter hoch.
defmod ESPEasy_IN_Z62 ESPEasy 192.168.3.205 80 ESP_Bridge IN_Z62
attr ESPEasy_IN_Z62 DbLogInclude Count_m3per5min
attr ESPEasy_IN_Z62 IODev ESP_Bridge
attr ESPEasy_IN_Z62 Interval 0
attr ESPEasy_IN_Z62 event-min-interval .*:290
attr ESPEasy_IN_Z62 group ESPEasy Device
attr ESPEasy_IN_Z62 presenceCheck 1
attr ESPEasy_IN_Z62 readingSwitchText 1
attr ESPEasy_IN_Z62 room 9.7_ESPEasy
attr ESPEasy_IN_Z62 setState 0
attr ESPEasy_IN_Z62 stateFormat Total
attr ESPEasy_IN_Z62 userReadings Count_m3per5min {sprintf("%.2f",ReadingsVal("ESPEasy_IN_Z62","Differenz",0)/100*12)},\
Total monotonic {ReadingsVal("ESPEasy_IN_Z62","Absolut",0)}
Update vom 15.02.2018:
Bis hier habe ich nur erklärt, wie die Impulse von der Gasuhr abgenommen werden und vom Modul ESPEasy angezeigt werden. Viel schicker ist es aber die Daten dann auch Statistisch aufzubereiten. Das geht sehr gut mit dem Modul "GasCalculator". Dieses Modul bereitet die Zählerimpulse in kWh und Euro pro Tag, Monat und Jahr auf und stellt diese dann in Readings bereit. Das einzige, was man dafür tun muss, ist den GasCalculator mit den richtigen Parametern zu definieren. Ausgehend von dem oberen Beispiel des ESPEasy_IN_Z62 Device sieht es dann folgendermaßen aus:
defmod Gaszaehler GasCalculator ESPEasy_IN_Z62:Total.*
Dabei ist das Reading "Total" des Device ESPEasy_IN_Z62 das Reading, in dem die Zählerdaten auflaufen. Nach einer kurzen Zeit werden dann vom Modul alle Readings automatisch angelegt. Natürlich nur, sofern sich das Reading "Total" auch ändert.
Das sieht dann in etwa so aus:
ESPEasy_IN_Z62_Total_CostMonthLast 67.717 2016-12-01 00:01:30
ESPEasy_IN_Z62_Total_EnergyCostDay 2.008 2018-02-15 16:38:36
ESPEasy_IN_Z62_Total_EnergyCostDayLast 3.688 2018-02-15 00:02:41
ESPEasy_IN_Z62_Total_EnergyCostMeter 326.923 2018-02-15 16:38:36
ESPEasy_IN_Z62_Total_EnergyCostMeterLast 483.464 2017-06-01 00:02:13
ESPEasy_IN_Z62_Total_EnergyCostMonth 43.566 2018-02-15 16:38:36
ESPEasy_IN_Z62_Total_EnergyCostMonthLast 80.818 2018-02-01 00:00:42
ESPEasy_IN_Z62_Total_EnergyCostYear 124.384 2018-02-15 16:38:36
ESPEasy_IN_Z62_Total_EnergyCostYearLast 535.976 2018-01-01 00:02:18
ESPEasy_IN_Z62_Total_EnergyDay 35.532 2018-02-15 16:38:36
ESPEasy_IN_Z62_Total_EnergyDayLast 65.267 2018-02-15 00:02:41
ESPEasy_IN_Z62_Total_EnergyMeter 5786.249 2018-02-15 16:38:36
ESPEasy_IN_Z62_Total_EnergyMeterLast 8556.889 2017-06-01 00:02:13
ESPEasy_IN_Z62_Total_EnergyMonth 771.078 2018-02-15 16:38:36
ESPEasy_IN_Z62_Total_EnergyMonthLast 1430.406 2018-02-01 00:00:42
ESPEasy_IN_Z62_Total_EnergyYear 2201.484 2018-02-15 16:38:36
ESPEasy_IN_Z62_Total_EnergyYearLast 9486.305 2018-01-01 00:02:18
ESPEasy_IN_Z62_Total_FinanceReserve 480.467 2018-02-15 16:38:36
ESPEasy_IN_Z62_Total_Meter 8252.890 2018-02-15 16:38:36
ESPEasy_IN_Z62_Total_MonthMeterReading 9 2018-02-15 16:38:36
ESPEasy_IN_Z62_Total_PowerCurrent 0.000 2018-02-15 16:38:36
ESPEasy_IN_Z62_Total_PowerCurrent_Round 0 2018-02-15 16:38:36
ESPEasy_IN_Z62_Total_PowerDayAver 2.436 2018-02-15 16:38:36
ESPEasy_IN_Z62_Total_PowerDayMax 53.674 2018-02-15 07:49:44
ESPEasy_IN_Z62_Total_PowerDayMin 0.000 2018-02-15 00:02:42
ESPEasy_IN_Z62_Total_Vol1stDay 8249.58 2018-02-15 00:02:42
ESPEasy_IN_Z62_Total_Vol1stMeter 7713.870 2017-06-01 00:02:14
ESPEasy_IN_Z62_Total_Vol1stMonth 8181.060 2018-02-01 00:00:42
ESPEasy_IN_Z62_Total_Vol1stYear 8047.810 2018-01-01 00:02:18
ESPEasy_IN_Z62_Total_VolLastDay 8249.580 2018-02-15 00:02:42
ESPEasy_IN_Z62_Total_VolLastMeter 7713.870 2017-06-01 00:02:14
ESPEasy_IN_Z62_Total_VolLastMonth 8181.060 2018-02-01 00:00:42
ESPEasy_IN_Z62_Total_VolLastYear 8047.810 2018-01-01 00:02:18
Kommentare powered by CComment