Möchte hier meine Lösung zur Erfassung meines S0-Zählers vorstellen.
Das Ganze ist auf 1000 Pulse pro kWh ausgelegt.
MQTT-Server Mosquitto installieren Wenn der Broker nicht auf dem FHEM-Server installiert wurde muss die IP-Adresse angepasst werden!
define MyBroker MQTT 127.0.0.1:1883
Jetzt kann der ESP wie auf den Bildern unten gezeigt eingerichtet werden.
!!!!! IP-Adresse durch die des eigenen Brokers ersetzen !!!!!
define PulsStrom MQTT_DEVICE
attr PulsStrom IODev MyBroker
attr PulsStrom stateFormat transmission-state
attr PulsStrom subscribeReading_Count /Stromcount/Watt/Count
attr PulsStrom subscribeReading_Time /Stromcount/Watt/Time
attr PulsStrom subscribeReading_Total /Stromcount/Watt/Total
define Strom dummy
attr Strom event-on-change-reading StromverbrauchStd,StromverbrauchTag,zaehler_jetzt
attr Strom readingList StromverbrauchStd StromverbrauchTag zaehler_vortag zaehler_jetzt
define StromverbrNoti notify PulsStrom {
my $StromUmlaufzeit = ReadingsVal("PulsStrom","Time","0") / 1000;
my $StromProStd=3.6/$StromUmlaufzeit;
my $StromProStdRounded=int(1000 * $StromProStd + 0.5) / 1000;
my $StromProTag = ReadingsVal("PulsStrom","Total","0") / 1000;
my $Summe = ReadingsVal("Strom","zaehler_vortag","0") + (ReadingsVal("PulsStrom","Total","0") / 1000);
fhem("set Strom zaehler_jetzt $Summe");;
fhem("set Strom StromverbrauchStd $StromProStdRounded");;
fhem("set Strom StromverbrauchTag $StromProTag");;
}
define FileLog_Stromverbrauch FileLog ./log/Stromverbrauch-%Y-%m.log Strom:StromverbrauchStd:.*|Strom:StromverbrauchTag:.*|Strom:zaehler_jetzt:.*
define Stromvervbauch readingsGroup Strom:zaehler_jetzt Strom:StromverbrauchStd
attr Stromvervbauch mapping {"zaehler_jetzt" => "Zählerstand", "StromverbrauchStd" => "Momentanverbrauch"}
attr Stromvervbauch nameStyle style="font-weight:bold"
attr Stromvervbauch notime 1
attr Stromvervbauch style style="font-size:20px"
attr Stromvervbauch valueFormat {zaehler_jetzt => "%.3f KW/h", StromverbrauchStd => "%.3f KW/h"}
attr Stromvervbauch valueStyle style="text-align:right"
define ESP_reboot at *00:00:00 {
my $ValTag = ReadingsVal("PulsStrom","Total","0") / 1000;
my $ValVT = ReadingsVal("Strom","zaehler_vortag","0");
my $zaehlerNeu = $ValVT + $ValTag;
fhem ("set Strom zaehler_vortag $zaehlerNeu");;
system("/home/pi/reboot_ESP");;
}
Jetzt wird noch ein Script mit dem Namen reboot_ESP im Verzeichnis /home/pi gebraucht das den ESP rebootet.
Nicht vergessen die Datei mit „chmod 755“ ausführbar zu machen!
#!/bin/bash
wget Stromcount/?cmd=reboot
Der Ausgang S0+ wird mit den 3,3V (VCC) des ESP verbunden.
Der S0- wird mit dem GPIO der als Zähleingang definiert wurde verbunden.
Außerdem wird ein Widerstand 1 bis 5 kOhm von diesem GPIO gegen GND angebracht.
Vielleicht hilft es ja jemand

Manfred
EDIT: Hab ein paar Änderungen vorgenommen.
1. monotonic wie p6k hier
https://forum.fhem.de/index.php/topic,61731.msg569745/topicseen.html#msg5697452. Dadurch kein Verlust des Tagesverbrauchs / aktuellen Zählerstands bei Absturz des ESP
3. Reboot des ESP ohne bash-Datei
define Strom dummy
attr Strom event-on-change-reading StromverbrauchStd,StromverbrauchTag,zaehler_jetzt
attr Strom readingList StromverbrauchStd StromverbrauchTag zaehler_jetzt
attr Strom room Technik
attr Strom userReadings zaehler_jetzt:StromverbrauchTag.* monotonic {ReadingsVal($name,'StromverbrauchTag',0)}
define StromverbrNoti notify PulsStrom {
my $StromUmlaufzeit = ReadingsVal("PulsStrom","Time","0") / 1000;
my $count = ReadingsVal("PulsStrom","Count","0");
my $StromProStd=0;
if ($StromUmlaufzeit > 0){
$StromProStd=3.6/$StromUmlaufzeit;
}
my $StromProStdRounded=0;
if($count > 0){
$StromProStdRounded=int(1000 * $StromProStd + 0.5) / 1000;
}
my $StromProTag = ReadingsVal("PulsStrom","Total","0") / 1000;
fhem("set Strom StromverbrauchStd $StromProStdRounded");;
fhem("set Strom StromverbrauchTag $StromProTag");;
}
define ESP_reboot at *00:00:00 {
system "wget -O /dev/null -q <IP Deines Stromcount>/?cmd=reboot";;
}