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

Begonnen von pink99panther, 30 November 2016, 23:33:50

Vorheriges Thema - Nächstes Thema

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!

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#msg569745
2. 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";;
}

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
RPI3B, SIGNALduino, NanoCul868 (a-culfw), JeeLink Clone (LaCrosse), Firmata  für FB Heizung,Wasser+Gas+Klingel+Lux, Somfy Rolladen, Pollin Steckd.,TX29DTH,ESPEasy an S0 Stromz., MAX Fensterkontakte, IButton, SonOff Tasmota, ESP LED Controler

pink99panther


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.

Octopus180

Erstmal Danke, wenn ich noch Fragen habe würde ich gerne nochmal melden.

Octopus180

Hallo pink99panther

da der Nodemcu (dein Link) leider nicht mehr verfügbar ist , habe ich ein wenig bei Amazon gesucht. Ist der von mir rausgesuchte Nodemcu
https://www.amazon.de/dp/B018E741G4/ref=sr_ph?ie=UTF8&qid=1482079674&sr=1&keywords=nodemcu auch nutzbar?

Für mich sieht er genauso aus.

Gruß

pink99panther

Du kannst eigentlich jedes Entwicklerboard mit einem ESP8266 nehmen.
Ausser dem Nodemcu gibt es auch noch einige andere.
Du könntest sogar einen einfachen ESP8266-01 nehemn, aber da braucht man das ganze drumherum
zum flashen und eine extra 3,3V Spannungsversorgung.

Gruß


Papaloewe

Hallo Pink99panther,

danke für die einfache Anleitung.

Kurze Frage zu dem täglichem Reboot des ESP:
ZitatJetzt 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

Wäre das nicht auch vielleicht sogar etwas eleganter über eine Rule direkt auf dem ESP möglich?
So vielleicht?
On Clock#Time=All,23:59 do // every day at 23:59 hours do ...
Reboot
endon


Quelle: http://www.letscontrolit.com/wiki/index.php/Tutorial_Rules

Gruß
Thomas

pink99panther

Hallo Papaloewe,

Für den reboot selbst wäre das super,
aber zeitnah wird auch die adition von
total zum zählerstand des Vortages gebraucht.
Deshalb habe ich das von FHEM aus gemacht.
Erst die Adition und dann sofort den Reboot.

Gruß

sash.sc

Super Arbeit.

Aber warum muss der esp immer wieder neu gebootet werden.  Ist das Vorsorge oder steckt da noch was anderes dahinter?

Gruß Sascha
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

pink99panther

Danke sash.sc für das Lob.
Mit den ESP's hatte ich in  der Anfangszeit so meine Probleme.
Sind öfter mal hängen geblieben.
Da bei einem Neustart der Total ( Zählerstand ) verloren geht
übertrage ich den Wert lieber um Mitternacht an FHEM und lasse den ESP
rebooten und setze damit auch den Total wieder auf Null.

Gruß
p99p

insane84

Hallo, danke für die Codezeilen.

Habe deinen Code angepasst, dass ich ihn über die Espbridge nutzen kann.
Ich hoffe die 1000 Impulse kann ich auch für meinen Gaszähler durch 100 Impulse ersetzen, indem ich ein 0 überall weglasse

ist es auch möglich, den ESP über die ESP Bridge neu zu starten?
Per URL Aufruf im Browser ist das möglich, nur habe bis jetzt nicht den richtigen Befehl in Fhem gefunden

Gruß Chris

dev0

Zitat von: insane84 am 12 Januar 2017, 07:56:32
ist es auch möglich, den ESP über die ESP Bridge neu zu starten?

In der nächsten Modulversion, hatte ich noch nicht implementiert.