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

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

Vorheriges Thema - Nächstes Thema

B.Stromberg

Zitat von: Otto123 am 31 Mai 2020, 00:44:11
Der Zähler liefert 1000 Impulse pro kWh
Wenn Du 3000 Impulse hast, hast Du 3 kWh verbraucht.
Wenn diese 3000 Impulse in einer Stunde gezählt wurden/werden, hättest Du momentan 3 kW Leistung eingeschaltet.

Hatte mein vorheriges Posting noch einmal editiert.

Oder ist das so einfach nicht anwendbar?
Aber wie dann, in einer Formel in FHEM?

B.Stromberg

Zitat von: pink99panther am 25 Mai 2020, 10:46:37
Hi,
habe bei mir den Pin auf Default stehen. Bei der stellung Input ist da glaube ich auch, ein Pullup aktiv.
Kleine Anmerkung: die Anzeige der Devices aktualisiert sich nicht alleine.
Um Zählergebnisse zu sehen Seite neu laden!

LG
p99p

So...
Ich glaube ich habe das alles soweit mit meinem ESPeasy am Laufen :)

Was mir allerdings aufgefallen ist, ist, dass mein ESP keinen Reset der Daten Count, Total und Time macht nach einem Reboot.
Diese bleiben erhalten.

Ist das bei euch anders?

Wie realisiere ich eine Anzeige mit "Verbrauch Vortag" ?

Um 0 Uhr wurde bei mir der Tagesverbrauch nicht auf "0" gestellt.

Woran könnte das liegen?

Otto123

Wollte nur noch sagen: Deine Rechnung stimmt so, ich hätte es immer mit Einheiten runtergebrochen.
1000 Impulse -> 1kWh -> 3600kWs -> 3600000 Ws
Also 1 Impuls -> 3600 Ws

Da müssen jetzt die Sekunden weg - also durch den Wert der Zeit zwischen zwei Impulsen teilen.

Bei Dir muss da also eine elektrische Leistung von ca 45 Watt aktiv gewesen sein ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

B.Stromberg

Zitat von: Otto123 am 31 Mai 2020, 15:39:31
Wollte nur noch sagen: Deine Rechnung stimmt so, ich hätte es immer mit Einheiten runtergebrochen.
1000 Impulse -> 1kWh -> 3600kWs -> 3600000 Ws
Also 1 Impuls -> 3600 Ws

Da müssen jetzt die Sekunden weg - also durch den Wert der Zeit zwischen zwei Impulsen teilen.

Bei Dir muss da also eine elektrische Leistung von ca 45 Watt aktiv gewesen sein ;)

Gruß Otto

Danke für die Bestätigung...
Sieht soweit eigentlich alles auch ganz gut aus.

Kannst du mir evtl. einen Tipp geben bezüglich des Verbrauchs vom Vortag?
Müsste ja eigentlich "nur" um 23:59h der aktuelle Tageswert kopiert werden...... Und am nächsten Tag das Gleiche, am Besten noch mit Datum.....

Otto123

Bei buienradar gab es das letzten mal, so in der Art:
defmod RegenGestern DOIF ([23:59:59])\
(setreading $SELF rain [RegenHeute:rain]) ##copy the value of today and keep it as our own value\
(setreading RegenHeute rain 0) ## set the rain value of today to 0 and start to count from there again
attr RegenGestern alias Regen Gestern 🌧
attr RegenGestern do always
attr RegenGestern event-on-update-reading .*
attr RegenGestern room Wetter
attr RegenGestern stateFormat { round(ReadingsNum($name, "rain", 0), 2)." l/m²"}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

B.Stromberg

#140
Also das Reading "StromverbrauchTag" wird um 0 Uhr nicht auf 0 zurückgesetzt.....

Ist das Problem bei mir nun, dass mein ESP die Daten nach einen Reboot nicht "vergißt" ?

Habe jetzt mal das "Reboot" in "ResetPulseCounter" geändert.

Damit wird "StromverbrauchTag" genullt

"zaehler_jetzt" zählt weiter hoch

B.Stromberg

Zitat von: Otto123 am 31 Mai 2020, 23:27:52
Bei buienradar gab es das letzten mal, so in der Art:
defmod RegenGestern DOIF ([23:59:59])\
(setreading $SELF rain [RegenHeute:rain]) ##copy the value of today and keep it as our own value\
(setreading RegenHeute rain 0) ## set the rain value of today to 0 and start to count from there again
attr RegenGestern alias Regen Gestern 🌧
attr RegenGestern do always
attr RegenGestern event-on-update-reading .*
attr RegenGestern room Wetter
attr RegenGestern stateFormat { round(ReadingsNum($name, "rain", 0), 2)." l/m²"}


Danke für den Denkanstoß.

Läßt sich leider nicht so einfach hier umsetzen.
setreading Strom StromverbrauchTag 0
funktioniert leider nicht. Das Reading wird nicht genullt.
Der Wert wird ja vom ESP gezogen, ergo müsste dieser auf dem ESP genullt werden.
Dies wäre mit einem
define ESP_reboot at *00:00:00 { system "wget -O /dev/null -q 192.168.2.70/?cmd=ResetPulseCounter";; }
machbar.

Dies geschieht dann aber eh um 0 Uhr bei mir. (habe den reset Befehl geändert, da der zumindest bei meinem ESP kein "Nullen" der Werte bringt.
Somit könnte doch normal auch der Code
setreading Strom StromverbrauchTag 0
wegfallen?

Allerdings bekomme ich bei
defmod StromGestern DOIF ([23:59:59])\(setreading $SELF StromVortag [StromverbrauchTag:StromVortag])
in FHEM einen Fehler:

Zitat
StromGestern DOIF: expected DOELSEIF or DOELSE: \(setreading StromGestern StromVortag [StromverbrauchTag:StromVortag])

Und da bin ich dann zur Zeit wieder mit meinem Latein am Ende :(
Oder einfach nur DOIF mit DOELSEIF ersetzen?

Allerdings aus der Übersetzung doch was ganz anderes oder?
DOIF = Mache - Wenn
DOELSEIF = Mache anders wenn

Ich werde das auf meine alten Tage nicht mehr in den Schädel bekommen...

Otto123

Moin,

das sind jetzt zwei Dinge:
1. Das DOIF, der Code war aus der Raw Definition kopiert, den darfst Du nicht einfach in die einzelne FHEM Kommandozeile werfen. -> https://wiki.fhem.de/wiki/Import_von_Code_Snippets
Das \ ist das Zeilenende-aber-es-geht-weiter Zeichen :)
2. Ich weiß nicht genau was Du machen willst?
Die täglichen Werte kannst Du ja loggen.
Du kannst Mitternacht:

  • den Zählerstand von gestern vom aktuellen Zählerstand abziehen - dann hast Du den Verbrauch vom Tag -speichern!
  • Den aktuellen Stand speicherst Du danach als den von gestern.
So hast Du immer den absoluten Stand aktueller Tag -1 und den Tagesverbrauch von Tag davor.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

B.Stromberg

Zitat von: Otto123 am 01 Juni 2020, 09:14:16
Moin,

Du kannst Mitternacht:

  • den Zählerstand von gestern vom aktuellen Zählerstand abziehen - dann hast Du den Verbrauch vom Tag -speichern!
  • Den aktuellen Stand speicherst Du danach als den von gestern.
So hast Du immer den absoluten Stand aktueller Tag -1 und den Tagesverbrauch von Tag davor.

Gruß Otto

Das hört sich soweit gut an... Und hätte ich die nötige Ahnung in FHEM würde ich das glatt so machen.
Im Dummy Strom sind die Werte die wir brauchen denke ich?

defmod Strom dummy
attr Strom event-on-change-reading StromverbrauchStd,StromverbrauchTag,zaehler_jetzt
attr Strom readingList StromverbrauchStd StromverbrauchTag zaehler_vortag zaehler_jetzt
attr Strom room Stromverbrauch
attr Strom userReadings zaehler_jetzt:StromverbrauchTag.* monotonic {ReadingsVal($name,'StromverbrauchTag',0)}

Zitat
setstate Strom 0
setstate Strom 2020-06-02 05:14:21 StromverbrauchStd 0.022
setstate Strom 2020-06-02 05:14:21 StromverbrauchTag 0.071
setstate Strom 2020-05-30 23:17:16 state 0
setstate Strom 2020-06-02 05:12:40 zaehler_jetzt 8.74099999999997

Zitat
den Zählerstand von gestern vom aktuellen Zählerstand abziehen - dann hast Du den Verbrauch vom Tag -speichern!

Wäre es nicht viel einfacher um 23:59h ein eigenes Reading "StromGestern" zu erzeugen vom Reading StromverbrauchTag ?

Wenn ich nur wüßte wie...
Weiß ja nicht einmal warum der Zählerstand dort drölfzig Nachkommastellen hat :(



Otto123

drölfzig kommt davon, dass es Gleitkomma Berechnungen sind :)
Mit sprintf behebst Du die Anzeige ;)
{sprintf("%.2f",ReadingsVal($name,'StromverbrauchTag',0))}

ZitatWäre es nicht viel einfacher um 23:59h ein eigenes Reading "StromGestern" zu erzeugen vom Reading StromverbrauchTag ?
Klar mach das doch. setreading Strom StromGestern [Strom:StromverbrauchTag]

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

B.Stromberg

#145
Zitat von: Otto123 am 02 Juni 2020, 09:40:51
drölfzig kommt davon, dass es Gleitkomma Berechnungen sind :)
Mit sprintf behebst Du die Anzeige ;)
{sprintf("%.2f",ReadingsVal($name,'StromverbrauchTag',0))}

Der Kandidat ist leider hartnäckig :(

defmod Strom dummy
attr Strom event-on-change-reading StromverbrauchStd,ag,zaehler_jetzt
attr Strom readingList StromverbrauchStd StromverbrauchTag zaehler_vortag zaehler_jetzt
attr Strom room Stromverbrauch
attr Strom userReadings zaehler_jetzt:StromverbrauchTag.* monotonic {sprintf("%.2f",ReadingsVal($name,'StromverbrauchTag',0))}

setstate Strom 0
setstate Strom 2020-06-02 13:08:00 StromverbrauchStd 0.045
setstate Strom 2020-06-02 13:08:00 StromverbrauchTag 0.755
setstate Strom 2020-05-30 23:17:16 state 0
setstate Strom 2020-06-02 13:02:10 zaehler_jetzt 9.4209999999999


Zitat
Klar mach das doch. setreading Strom StromGestern [Strom:StromverbrauchTag]

Dann wären wir wieder da:

defmod Strom DOIF ([23:59:59]) setreading $SELF StromVortag [Strom:StromverbrauchTag]

Das ging ja irgendwie nicht...

Ich verzweifle langsam....

Gibt es eigentlich gar kein Modul für FHEM, dass all diese Features schon implementiert hat?
Es wäre ja auch interessant nachsehen zu können, wieviel Strom z. B. letzte Woche Montag verbraucht wurde. (ja ich weiß, das steht alles im Log, aber ja nicht in "schön")

Nobbynews

#146
Zitat von: B.Stromberg am 02 Juni 2020, 13:09:02
Der Kandidat ist leider hartnäckig :(


attr Strom userReadings zaehler_jetzt:StromverbrauchTag.* monotonic {sprintf("%.2f",ReadingsVal($name,'StromverbrauchTag',0))}

Das funktioniert bezogen auf den Wert von ReadingsVal schon, nur durch das "monotonic" wird es wieder zunichte gemacht. Ist zwar nur eine Addition im Reading zaehler_jetzt, aber immer noch eine Gleitkommaberechnung.

Was natürlich geht, ist ein zusätzliches userReading zu definieren:

attr Strom userReadings ZwischenReading:StromverbrauchTag.* monotonic {ReadingsVal($name,'StromverbrauchTag',0)}, zaehler_jetzt {sprintf("%.2f",ReadingsVal($name,'ZwischenReading',0))}



Norbert

Otto123

Es gibt da sogar mehrere Module.
Statistics
ElectricityCalculator
Hourcounter

aber einfach sind die auch nicht. ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Eisbaeeer

Hallo zusammen
ist zwar schon ein älterer Thread, aber scheinbar immer noch aktiv. Ich wollte nur kurz eine Lösung vorstellen, die dem ein oder anderem hier weiterhelfen könnte.
Bei diesem Projekt kann man die älteren Ferraris Zähler oder auch einen S0-Impuls auswerten und per MQTT senden.
Grüße Eisbaeeer

Projekt: https://github.com/Eisbaeeer/Ferraris_MQTT_Energy_Counter_Meter_TCRT5000

hanswerner1

Zitat von: Eisbaeeer am 04 August 2020, 07:48:33
Hallo zusammen
ist zwar schon ein älterer Thread, aber scheinbar immer noch aktiv. Ich wollte nur kurz eine Lösung vorstellen, die dem ein oder anderem hier weiterhelfen könnte.
Bei diesem Projekt kann man die älteren Ferraris Zähler oder auch einen S0-Impuls auswerten und per MQTT senden.
Grüße Eisbaeeer

Projekt: https://github.com/Eisbaeeer/Ferraris_MQTT_Energy_Counter_Meter_TCRT5000

Hallo Eisbaeeer,

das sieht ja schon sehr interessant aus. Ich nutze bisher ESPEasy auf einen Wemos, bin damit aber nicht richtig zufrieden, da immer noch Berechnungen in Fhem laufen. Hab deinen Sketch mal auf einen Wemos geflasht. Was mir direkt aufgefallen ist, es wäre toll, wenn Du den Port für MQTT auch änderbar machst, da ich einen anderen Port als den Standard nutze. Ist es auch möglich die WLan Zugangsdaten zu ändern ohne den Sketch neu zu flashen ?
Kann man auch den Gaszähler anschließen ? Zähle dort mit einen Reedrelais.

Ich werde den Sketch die Tage mal auf dem Wemos am Stromzähler flashen und schauen wie es da funktioniert. Hab einen optischen Zähler mit S0 Ausgang

VG HW1