Mein SmartHome-Projekt Wasseruhr
Beim letzten turnusmäßigen Austausch der Wasseruhr habe ich eine mit Impulsausgang einbauen lassen. Ähnlich wie bei der Gasuhr wird mit einem ESP6266-ESP01 jeder Impuls gezählt und damit der aktuelle Zählerstand erfasst.
Der ESP8266-ESP01 wird über einen Spannungswandler AMS117-3.3 mit konstant 3,3 VDC versorgt. Ein kleiner Kondensator hinter dem AMS1117 stabilisiert die Spannung zusätzlich. Über GPIO2 wird der Impulsausgang der Wasseruhr angeschlossen. Der Impuls wird über einen Interrupt hochgezählt.
Ein Impuls dauuert ca. 46 ms und zieht die Spannung von 3.3 auf 0 0V:
Beim Start holt der ESP8266 sich den letzten Wert aus der Datenbank (MariaDB) über eine PHP-Skript. Alternativ dazu kann der aktuelle Zählerstand dem ESP8266 über folgenden Befehl mitgeteilt werden: 192.168.X.Y/Set?value=xx.yy
. Beim aller ersten Mal muss natürlich der aktuelle Stand der Wasseruhr dem ESP8266 so mitgeteilt werden.
Der folgende Code wird über die Arduino-IDE auf dem ESP8266-ESP01 aufgespielt. Danach kann der Code bei Bedarf via OTA upgedated werden:
Nach dem Aufruf via 192.168.X.Y erhält man vom dem ESP8266 zum Beispiel folgende Antwort:
<MyHome>
<data name="Device" value="ESP8266_ESP01_WaterMeter" valueunit="text"/>
<data name="MAC" value="dc:ää:öö:üü:4b:cb" valueunit="AA:BB:CC:DD:EE:FF"/>
<data name="Version" value="V2.00 from 2020-02-20" valueunit="text"/>
<data name="SSID" value="YourSSID" valueunit="text"/>
<data name="IP" value="192.168.X.Y" valueunit="xxx.xxx.xxx.xxx"/>
<data name="StartTime" value="2020-02-28 19:09:08" valueunit="YYYY-MM-DD hh:mm:ss"/>
<data name="RunTime" value="170.0" valueunit="hours"/>
<data name="WIFIConnectCounter" value="2" valueunit=""/>
<data name="help" value="use /Set?Value=xx to set new value" valueunit="text"/>
<data name="WaterMeter" value="71.119" valueunit="m^3"/>
</MyHome>