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

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

Vorheriges Thema - Nächstes Thema

sash.sc

Werde dann erstmal die Hardware installieren. Den wemos habe ich schon vorbereitet. Auch mit den PIN s die ich benutzen werde.
Die Daten kommen über die bridge in fhem schon an......



Gesendet von meinem E6653 mit Tapatalk

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

majorshark

Ich habe das am Gaszähler mit einem Readkontakt und ESP8266. Auf dem ESP werkelt ein ESPEasy. Ich übergebe den Zählerstand an das Modul GasCalculator. Dieses Modul kann ich nur empfehlen. Statistische Werte ohne Ende! Auf keinen Fall würde ich ein ESP01 benutzen. Da geht durch den kleinen Flash kein OTA. Und übrigens - mein ESP am Gaszähler läuft schon seit 62 Tagen ohne Unterbrechung.

Grüße
Grüße aus Dewitz

VM auf Synology DS718+ mit FHEM 5.9 auf Debian 9.5/32-Bit (stretch)
Nächster Leipziger Stammtisch:

sash.sc

Kann man die ganze Berechnung aus den Notify´s nicht direkt im ESPEasy machen lassen ??

Habe heutre soweit alles installiert.

Habe da noch ein Paar Fragen. Zu den Readings


COUNT:      Werden wahrscheinlich die aktuell gezählten Impulse sein, die gerade anliegen
TIME:          Welche Zeit ist das ????
TOTAL:        Gesamt gezählte Impule seit dem Start des WEMOS/ESp8622

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

pink99panther

Ob man die Berechnungen im ESP machen weiss ich nicht.
Würd ich mir, wenn ich nicht noch genug andere Baustellen hätte, mal ansehen.

Zu COUNT, das sind die Pulse seit dem letzten Publish
Zu TIME,    das ist die Zeit zwischen den Pulsen
Zu TOTAL,  das ist wie Du oben geschrieben hast.

Gruß
p99p

sash.sc

#34
Zitat von: pink99panther am 05 Februar 2017, 20:42:34


Zu COUNT, das sind die Pulse seit dem letzten Publish
Zu TIME,    das ist die Zeit zwischen den Pulsen
Zu TOTAL,  das ist wie Du oben geschrieben hast.

Gruß
p99p

Mir ist aufgefallen, dass bei mir die Impulse weiter gezählt werden, jedoch die TIME zwischen den Impulsen wird nicht zurück gesetzt, wenn ein Impuls kommt.

Kennt das Jemand ???

Da hängt im Moment bei uns der Trockner und die Waschmaschine dran. Ein Gerät ist im Standby. Deswegen zwischendurch die Impulse.

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

pink99panther

Wieso soll die Zeit zurückgesetzt werden????
Wenn der Stromverbrauch gleichbleibend ist
ist auch die Zeit zwischen den Pulsen immer gleich.

sash.sc

Ich verstehe es so, dass die Zeit zurück gesetzt wird, wenn ein puls kommt.
Es sieht so aus, dass die pulse kommen, aber die Zeit zwischen den pulsen nicht zurück gesetzt wird. Also man hat keinen Zeitabstand zwischen den pulsen.

Gruß Sascha

Gesendet von meinem E6653 mit Tapatalk

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

pink99panther

Schau Dir mein notify nochmal an, was da mit "Time" gemacht wird!

sash.sc

Zitat von: p5k am 26 Januar 2017, 10:36:17
Hallo zusammen,

der Zählerstand wird jeden Tag um 0 Uhr nach fhem übertragen. Bei mir hat das allerdings dazu geführt, dass ich die delta-d Funktion nicht mehr benutzen konnte, ohne das ich die Datenbankeinträge manuell bearbeitet habe.

Ich habe das jetzt folgendermaßen angepasst:
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
attr userReadings zaehler_jetzt:StromverbrauchTag.* monotonic {ReadingsVal($name,'StromverbrauchTag',0)}

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;
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 {
system("/home/pi/reboot_ESP");;
}



Ich möchte das ganze ohne MQTT lösen.
Wie muss der 1. teil denn abgeändert werden, da wo der MQTT definiert wird ? Da Werden doch die Werte aus dem Verzeichniss geholt und in Variablen geschrieben, oder ?

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

p5k

Hallo Sascha,
da gibt es keine Verzeichnisse. Der ESP8266 schickt jede Minute eine Nachricht zu einem Thema.
Hier sind die Themen so aufgebaut: /Bezeichnung des ESP/Bezeichnung der Aufgabe/Inhalt eines Messwertes
Also zB. /Stromcount/Watt/Count.
Mit "subscribeReading_Count /Stromcount/Watt/Count" werden die Nachrichten die zu diesem Thema eintreffen an das Reading Count geleitet.





sash.sc

Zitat von: pink99panther am 30 November 2016, 23:33:50



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




Hallo Manfred.

Die 1000 impulse von deinem Zähler, sind das alle "1000" die in deinem Code stehen ?

Wenn nicht, wo müssen die Zählerimpulse angepasst werden ?

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

pink99panther

Lies mal weiter vorne in diesem thread.
Da hat das jemand angepasst.

sash.sc

Schon gefunden.

Danke

Gesendet von meinem E6653 mit Tapatalk

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

sash.sc

#43
Hallo zusammen.

So, jetzt läuft es soweit.
Habe da aber noch ne Frage. Kann man aus dem Momentanwert in KWh auf die aktuelle Leistung berechnen ?
Wenn ja, wie ?

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

accloginsell

#44
Servus,

na klar geht dies:

anbei mein notify.. Vielleicht manchmal etwas umständlich aber funktioniert super:

define StromverbrNoti notify ESPEasy_Stromcount_Watt:.* {\
my $StromUmlaufzeit = ReadingsVal("ESPEasy_Stromcount_Watt","Time","0") / 1000;;\
my $Stromwohnung = ReadingsVal("Strom1","StromverbrauchWatt1","0");;\
my $Stromwohnung1 = ReadingsVal("Strom","StromverbrauchWatt","0");;\
my $StromProStd=3.6/$StromUmlaufzeit;;\
my $StromProStdRounded=int(1000 * $StromProStd + 0.5) / 600;;\
my $Stromkeller1 = ($Stromwohnung1 - $Stromwohnung);;\
my $StromProTag = ReadingsVal("ESPEasy_Stromcount_Watt","Total","0") / 600;;\
my $StromKosten = $StromProTag * 0.29;;\
my $zaehler_vortag_kosten_e = ReadingsVal("Strom","zaehler_vortag_kosten","0") * 0.29;;\
my $StromKostenJahr= ($StromProTag * 0.29) * 360;;\
my $StromKostenMin= $StromProStdRounded * 0.29;;\
my $StromWatt = $StromProStdRounded * 1000;;\
my $Summe = ReadingsVal("Strom","zaehler_vortag","0") + (ReadingsVal("ESPEasy_Stromcount_Watt","Total","0") / 600);;\
fhem("set Strom zaehler_jetzt $Summe");;;;\
fhem("set Strom StromverbrauchStd $StromProStdRounded");;;;\
fhem("set Strom StromverbrauchTag $StromProTag");;;;\
fhem("set Strom StromverbrauchWatt $StromWatt");;;;\
fhem("set Strom StromverbrauchKosten $StromKosten");;;;\
fhem("set Strom StromkostenJahr $StromKostenJahr");;;;\
fhem("set Strom StromkostenMin $StromKostenMin");;;;\
fhem("set Strom Stromkostenkeller $Stromkeller1");;;;\
fhem("set Strom zaehler_vortag_kosten_euro $zaehler_vortag_kosten_e");;;;\
fhem("set Strom1 $Stromwohnung W");;;;\
fhem("set Strom $Stromwohnung1 W");;;;\
}



Leider habe ich glaube ein kleines Masseproblem..

Sporadisch kommt mal ein Wert von 30KW raus. Leider jeden Tag merhfach.
Neues Netzteil hat etwas abhilfe geschaft. Leider nicht komplett weg und macht jeden Graphen kaputt. Hat jemand eine Idee


EDIT: kleiner Tipp wer wie ich auf MQTT verzichten will... --> ESPEASY