FHEM > Codeschnipsel

Stromzähler S0 → ESP8266 mit ESPEasy → MQTT → FHEM

(1/36) > >>

pink99panther:
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!

--- Code: ---define MyBroker MQTT 127.0.0.1:1883

--- Ende Code ---

Jetzt kann der ESP wie auf den Bildern unten gezeigt eingerichtet werden.
!!!!!    IP-Adresse durch die des eigenen Brokers ersetzen     !!!!!


--- Code: ---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");;
}

--- Ende Code ---

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!

--- Code: ---#!/bin/bash

wget Stromcount/?cmd=reboot

--- Ende Code ---

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#msg569745
2. Dadurch kein Verlust des Tagesverbrauchs / aktuellen Zählerstands bei Absturz des ESP
3. Reboot des ESP ohne bash-Datei


--- Code: ---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";;
}

--- Ende Code ---

Skusi:
Super Klasse die Anleitung.

Ich hab das gerade nachgebaut, und wie es scheint läuft das einwandfrei.

Fettes Dankeschön für die Mühe die Du Dir gemacht hast um mir das zu ersparen :-) !!!
Genau so eine Lösung habe ich schon sooo lange gesucht. So muß sich Fhem nicht mit 1000 Impulsen / KWh beschäftigen. Nun kann ich über das Dealy im ESPEasy selbst entscheiden wieviele Events ich haben möchte, und wie aktuell die Auswertung sein soll. Und zur Krönung das ganze auch noch drahtlos und für sehr kleines Geld.

In deinem Sorglos Packet ist ja auch schon alles was man braucht enthalten, wirklich klasse.

Für mich schon ein tolles Weihnachtsgeschenk.

Also.... "Frohes Fest" schonmal

Gruß Skusi

pink99panther:
@Skusi
Danke für die Blumen :)

Octopus180:
Hallo pink99panther

ich beschäftige mich erst seit kurzem mit FHEM und was damit alles möglich ist. Jetzt bin ich auf dein Bericht gestossen und ich würde gerne meinen Strom- (S0) , Gas- und Wasserzähler an FHEM einbinden. Da ich mich aber mit den ganzen Platinen noch nicht so auskenne , wäre es nett wenn du mir eine Liste der genauen Hardware nennen könntest. (schon wäre mit Bilder vom Aufbau)

Danke

pink99panther:
Hallo Octopus180,

Für die ESP-Hardware hab ich ein Nodemcu https://www.amazon.de/gp/product/B019PVI4IY/ref=oh_aui_detailpage_o05_s00?ie=UTF8&psc=1 genommen.
Die sind beim flashen unproblematisch und zur Stromversorgung
kann man ein Handyladegerät nehmen. Ich hatte noch 5V Steckernetzteile vom Wühltisch.
Zum verbinden Zähler Nodemcu kann man Steckbrettkabel Buchse-Stift nehmen.
Der Widerstand sollte auf der Oberseite des Nodemcu angelötet werden.
Das ganze ist bei mir in einen Hutschienengehäuse untergebracht.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln