Shelly Energy Reading: Tages und Monatszähler?

Begonnen von Tobias, 02 Mai 2022, 14:25:59

Vorheriges Thema - Nächstes Thema

Tobias

Hi,
an meinem Wechselrichter habe ich einen ShellyPM dran. Verbunden mit FHEM via MQTT. Funktioniert auch gut.
Das energy Reading ist ein stetig hochlaufender Zähler der die Wattminuten angibt. Wie bekomme ich jetzt ein Reading hin das mir den Solarertrag pro Tag und Monat errechnet?
Ich habe mir schon "event-aggegator" angesehen, komme damit aber auch nicht weiter....
Hat jemand Ideen oder Links?
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

ch.eick

Zitat von: Tobias am 02 Mai 2022, 14:25:59
Hi,
an meinem Wechselrichter habe ich einen ShellyPM dran. Verbunden mit FHEM via MQTT. Funktioniert auch gut.
Das energy Reading ist ein stetig hochlaufender Zähler der die Wattminuten angibt. Wie bekomme ich jetzt ein Reading hin das mir den Solarertrag pro Tag und Monat errechnet?
Ich habe mir schon "event-aggegator" angesehen, komme damit aber auch nicht weiter....
Hat jemand Ideen oder Links?
Hallo Tobias,
als erstes solltest Du userreading mit monotonic einrichten, denn bei einem Reset gehen die Zähler vom Shelly immer wieder auf null.
Hier mal mein Shelly2.5 als Muster

defmod shelly02 Shelly 192.168.178.52
attr shelly02 DbLogExclude .*
attr shelly02 DbLogInclude relay.*,power.*,energy.*
attr shelly02 alias Pool
attr shelly02 comment Version 2020.10.19 18:28\
relais_0 => Pool limit 1000 W\
relail_1 => Terrasse Lichterkette limit 100 W
attr shelly02 event-on-change-reading relay.*,energy.*,state,network
attr shelly02 event-on-update-reading power.*
attr shelly02 group PV Eigenverbrauch-Steuerung
attr shelly02 icon taster_ch_1
attr shelly02 mode relay
attr shelly02 model shelly2.5
attr shelly02 room Shelly,Strom->Photovoltaik
attr shelly02 sortby 422
attr shelly02 stateFormat {sprintf("\
<TABLE>\
\
<TR>\
  <TD VALIGN=\"TOP\" ALIGN=\"LEFT\" WIDTH=\"50\">\
    Status: %s<br>\
    WebLink: %s\
  </TD>\
\
  <TD VALIGN=\"TOP\" ALIGN=\"RIGHT\" WIDTH=\"100\">\
    Pool Gesamt 0: %08.2f KWh<br>\
    JEL Gesamt 1: %08.2f KWh\
  </TD>\
\
  <TD VALIGN=\"TOP\" ALIGN=\"RIGHT\" WIDTH=\"70\">\
    Relais 0: %s %06.1f Watt<br>\
    Relais 1: %s %06.1f Watt<br>\
  </TD>\
</TR>\
\
</TABLE>\
" ,\
(ReadingsVal($name,"state","none") eq "OK") ? "<span style='color:#00FF00'>OK</span>":"<span style='color:#FF0000'>Error</span>",\
ReadingsVal($name,"WebLink","none") ,\
ReadingsVal($name,"energy_0_Total",0)/1000,\
ReadingsVal($name,"energy_1_Total",0)/1000,\
(ReadingsVal($name,"relay_0","") eq "off") ? "<span style='color:#FF0000'>off</span>":"<span style='color:#00FF00'>on</span>",\
    ReadingsVal($name,"power_0",0),\
(ReadingsVal($name,"relay_1","") eq "off") ? "<span style='color:#FF0000'>off</span>":"<span style='color:#00FF00'>on</span>",\
    ReadingsVal($name,"power_1",0)\
)}
attr shelly02 userReadings WebLink:network { my $ip=ReadingsVal($name,"network","");; $ip =~ s/connected to //gs;; $ip =~ s/<[^>]*>//gs;; return("<html><a href='http://".$ip."/'>WEB</a></html>") },\
\
energy_0_Total:energy_0.* monotonic { ReadingsVal($name,"energy_0",0) },\
energy_1_Total:energy_1.* monotonic { ReadingsVal($name,"energy_1",0) }\

attr shelly02 verbose 0
attr shelly02 webCmd |


Und hier mal ein Muster in einem DOIF, allerdings für andere Zähler.
Dort wird der aktuelle Zählerstand in einem reading gespeichert und die Differenz zum laufenden Zählerstand wäre dann der Tages-, Monats- bzw. Jahres Verbrauch.
Die Merke haben bei mir "_init_" im reading Namen.

< snip >
################################################################################################################
## 5 Jeden Morgen die Zählerstände aktualisieren, damit im Schwarm die Statistiken berechnet werden können
##
DOELSEIF
([00:01])

  (setreading WR_1_API SW_Meter_init_FeedInGrid_Day [WR_0_KSEM:Active_energy-])   ## 6172
  (setreading WR_1_API SW_Meter_init_Grid_Day [WR_0_KSEM:Active_energy+])         ## 4727

({if ($mday eq 1)
     {
      fhem("setreading WR_1_API SW_Meter_init_FeedInGrid_Month [WR_0_KSEM:Active_energy-]");   ## 5707
      fhem("setreading WR_1_API SW_Meter_init_Grid_Month [WR_0_KSEM:Active_energy+]");         ## 4717

      if ($yday eq 0)
        {
         fhem("setreading WR_1_API SW_Meter_init_FeedInGrid_Year [WR_0_KSEM:Active_energy-]");   ## 5241
         fhem("setreading WR_1_API SW_Meter_init_Grid_Year [WR_0_KSEM:Active_energy+]");         ## 3517
        }
     }
  }
)


Bei Verwendung der DbLog kannst Du mit DbRep auch jeweils die Differenzen zwischen zwei Zeitpunkten abfragen, da gibt es auch ein Perl Kommando mit dem man geziehlt Werte aus der Datenbank lesen kann.

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick


ch.eick

#3
Zitat von: gestein am 02 Mai 2022, 15:08:59
Hallo,

hilft Dir das vielleicht weiter?
https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler

lg, Gerhard
Okay, das verwendet auch einfach die setreading() in DOIF subs, was man auch in einem userreading positionieren könnte.
Aber es hat noch den Vorteil der schönen Anzeige.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Tobias

Zitat von: gestein am 02 Mai 2022, 15:08:59
Hallo,

hilft Dir das vielleicht weiter?
https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler

lg, Gerhard

Hi Gerhard,
das Beispiel sieht vielversprechend aus.
Kann das sein das die gesammelten Readings alle futsch sind sobald man die DEF anpasst oder FHEM neu startet?
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

gestein

Hallo,

die Readings sollte wie alle anderen auch bei einem Neustart wiederhergestellt werden.
Bei einer Änderung der Definition des DOIFs bin ich mir jetzt nicht sicher.
Muss ich mir heute abend anschauen.

lg, Gerhard

sash.sc

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

ch.eick

Zitat von: gestein am 02 Mai 2022, 16:37:34
Hallo,

die Readings sollte wie alle anderen auch bei einem Neustart wiederhergestellt werden.
Bei einer Änderung der Definition des DOIFs bin ich mir jetzt nicht sicher.
Muss ich mir heute abend anschauen.
Wenn man sich das DOIF im RAW Editor anschaut, dann sind dort doch die setstate am Ende aufgelistet.
Bisher habe ich da noch nichts verloren, es wäre dann aber auch noch in der DbLog zu finden.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Tobias

Die Grafiken vom uiTable sehen wirklich gut aus.
Bekomme ich die Grafiken irgendwie in TabletUI eingebettet?

Hintergrund: ich greife grundsätzlich nicht direkt in FHEM rein. Zugriff ist nur im lokalen LAN zugelassen. Alles Visuelle habe ich über TabletUI zusammengefasst welches Passwortgesichert auch über Internet erreichbar ist und bei mir im Haus überall via FullyKioskBrowser angezeigt wird. 
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

ch.eick

Zitat von: Tobias am 03 Mai 2022, 09:25:47
Die Grafiken vom uiTable sehen wirklich gut aus.
Bekomme ich die Grafiken irgendwie in TabletUI eingebettet?

Hintergrund: ich greife grundsätzlich nicht direkt in FHEM rein. Zugriff ist nur im lokalen LAN zugelassen. Alles Visuelle habe ich über TabletUI zusammengefasst welches Passwortgesichert auch über Internet erreichbar ist und bei mir im Haus überall via FullyKioskBrowser angezeigt wird.
Dann wirst Du die widgets vom TabletUI verwenden müssen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Tobias

Ok,
ganz aufgegeben habe ich es noch nicht.  ;)
Ich habe gesehen das man mit folgendem Code den HTML-Code für ein PopUp erstellen kann.
{DOIF_tablePopUp('DOIF_counter','DOIF_counter','rc_PLUS\@orange')}

Ist es dann auch möglich über ein iframe direkt eine fhem-URL die NUR die uiTable aufrufet?
zb: <iframe src="https://192.168.178.10/fhem?detail=DOIF_counter&<was-auch-immer>" width="1000" height="658"></iframe>
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

networker

Ich verwende das Modul ElectricityCalculator und bin zufrieden

ch.eick

Zitat von: Tobias am 03 Mai 2022, 12:01:15
Ok,
ganz aufgegeben habe ich es noch nicht.  ;)
Ich habe gesehen das man mit folgendem Code den HTML-Code für ein PopUp erstellen kann.
{DOIF_tablePopUp('DOIF_counter','DOIF_counter','rc_PLUS\@orange')}

Ist es dann auch möglich über ein iframe direkt eine fhem-URL die NUR die uiTable aufrufet?
zb: <iframe src="https://192.168.178.10/fhem?detail=DOIF_counter&<was-auch-immer>" width="1000" height="658"></iframe>
Eventuell könntest Du das Device im FhemWeb in einen eigenen Raum legen und dann diese URL verwenden, dann wäre aber sicher das Menü an der linken Seite auch mit im iFrame.
Der bessere Weg wäre aber das mit den TabletUI widgets abzubilden, dafür verwendest Du das doch letztendlich :-)
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

mcchina

Seit gestern läuft bei mir die PV Anlage (Balkonkraftwerk, aber auf dem Dach installiert). Auch ein zweiter Shelly ist dafür in Betrieb, ein ShellyEM. Der erste (ShellyEM3) tickert bereits seit einiger Zeit im Keller und nimmt meinen Hausstromverbrauch auf.

Während der EM3 das 'energy' Reading nach oben zählt, bleibt das beim EM auf 0 stehen. Wenn ich mir das Device auf der ShellyCloud zum Vergleich ansehe, scheint es korrekte Daten zur Einspeisung zu liefern. Warum triggert FHEM dazu nicht, auch im EventLog passiert nichts? Hat der Firmware Upgrade auf 1.11.8 hier etwas verbogen? Oder kann das nicht mit negativen Werten (wg Einspeisung) rechnen??

/Dank ans Forum schon mal im Voraus.

---------------------------------------------------
raspi mit FHEM & Teslalogger, HTTPMod für Resol Datenlogger, diverse 433Mhz Funker, ShellyEM3, ShellyEM

ch.eick

#14
Zitat von: mcchina am 17 August 2022, 15:34:21
Seit gestern läuft bei mir die PV Anlage (Balkonkraftwerk, aber auf dem Dach installiert). Auch ein zweiter Shelly ist dafür in Betrieb, ein ShellyEM. Der erste (ShellyEM3) tickert bereits seit einiger Zeit im Keller und nimmt meinen Hausstromverbrauch auf.

Während der EM3 das 'energy' Reading nach oben zählt, bleibt das beim EM auf 0 stehen. Wenn ich mir das Device auf der ShellyCloud zum Vergleich ansehe, scheint es korrekte Daten zur Einspeisung zu liefern. Warum triggert FHEM dazu nicht, auch im EventLog passiert nichts? Hat der Firmware Upgrade auf 1.11.8 hier etwas verbogen? Oder kann das nicht mit negativen Werten (wg Einspeisung) rechnen??

/Dank ans Forum schon mal im Voraus.
Merkwürdig ist, dass Dein Relay auf off steht, das würde ich mal auf on setzen, damit auch Strom ins Haus fließen kann.
Warum dann aber Power angezeigt wird verstehe ich jetzt auch nicht.
Dein Shelly Device zeigt auch zwei Power und Energy an, aber nur ein Relay. Eventuell passt das Model nicht so richtig???

Ich habe es mit im Shop mal angesehen und eine oder zwei Messzangen gesehen. Wie ist das bei Dir angeschlossen?
Bisher kannte ich nur den Shelly 1PM in Verbindung mit Balkonmodulen.

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

mcchina

Zitat von: ch.eick am 17 August 2022, 15:47:07
Merkwürdig ist, dass Dein Relay auf off steht, das würde ich mal auf on setzen, damit auch Strom ins Haus fließen kann.
Warum dann aber Power angezeigt wird verstehe ich jetzt auch nicht.
Dein Shelly Device zeigt auch zwei Power und Energy an, aber nur ein Relay. Eventuell passt das Model nicht so richtig???

Ich habe es mit im Shop mal angesehen und eine oder zwei Messzangen gesehen. Wie ist das bei Dir angeschlossen?
Bisher kannte ich nur den Shelly 1PM in Verbindung mit Balkonmodulen.

VG
   Christian


Ich nutze den Schaltausgang des EM nicht, sondern betreibe das Gerät lediglich als Strommesseinrichtung. Von den zwei möglichen Zangen, habe ich nur eine direkt an die Zuleitungsphase vom Wechselrichter angeschlossen.

Und ich kann auf dem EM3 im Hausanschlussraum sehen, dass die PV in der Tat auf der einen Phase Strom einspeist.
---------------------------------------------------
raspi mit FHEM & Teslalogger, HTTPMod für Resol Datenlogger, diverse 433Mhz Funker, ShellyEM3, ShellyEM

ch.eick

Zitat von: mcchina am 17 August 2022, 16:13:00

Ich nutze den Schaltausgang des EM nicht, sondern betreibe das Gerät lediglich als Strommesseinrichtung. Von den zwei möglichen Zangen, habe ich nur eine direkt an die Zuleitungsphase vom Wechselrichter angeschlossen.

Und ich kann auf dem EM3 im Hausanschlussraum sehen, dass die PV in der Tat auf der einen Phase Strom einspeist.
Okay, dann bin ich da raus, das kenne ich noch nicht :-)
Bei dem Shelly 1PM kann man das Balkonmodul mit einem Relay noch abschalten und der misst auch in beide Richtungen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

mcchina

merkwürdig .. auch mit dem 2. Kanal keine Readings von energy_0/1 auf dem ShellyEM.
Beide Kanäle erscheinen trotzdem auf der Shelly Cloud Seite mit vernünftigen Werten.

Und der Use Case ist auch auf den Shelly Support Seiten beschrieben. Wo steckt der Denkfehler??
---------------------------------------------------
raspi mit FHEM & Teslalogger, HTTPMod für Resol Datenlogger, diverse 433Mhz Funker, ShellyEM3, ShellyEM

DetlefR

Dein Shelly hat getrennte Readings. Energy und Returned_Energy.
WEnn nichts verbraucht wird wird bein Energy auch nichts angezeigt. Warum Returned_Energy in deinem Modul nicht angezeigt wird kann ich dir leider nicht sagen.
Ich benutze die templates nicht.

mcchina

Zitat von: DetlefR am 17 August 2022, 19:22:57
Dein Shelly hat getrennte Readings. Energy und Returned_Energy.
WEnn nichts verbraucht wird wird bein Energy auch nichts angezeigt. Warum Returned_Energy in deinem Modul nicht angezeigt wird kann ich dir leider nicht sagen.
Ich benutze die templates nicht.


Danke Detlef! Das ist des Pudels Kern. das 36_Shelly.pm sieht keine ReturnedEnergy vor.
Wie kann ich herausfinden, wie das Feld heisst, das vom ShellyEM übertragen wird?
Mal sehen, ob ich das von Shelly selbst aus der API Doko ersehen kann.

---------------------------------------------------
raspi mit FHEM & Teslalogger, HTTPMod für Resol Datenlogger, diverse 433Mhz Funker, ShellyEM3, ShellyEM

mcchina

Zitat von: mcchina am 17 August 2022, 20:11:26

Danke Detlef! Das ist des Pudels Kern. das 36_Shelly.pm sieht keine ReturnedEnergy vor.
Wie kann ich herausfinden, wie das Feld heisst, das vom ShellyEM übertragen wird?
Mal sehen, ob ich das von Shelly selbst aus der API Doko ersehen kann.

aha: shellies/shellyem-<deviceid>/emeter/<i>/returned_energy energy returned to the grid in Watt-minute

ich baue das mal in eine Testversion ein.
---------------------------------------------------
raspi mit FHEM & Teslalogger, HTTPMod für Resol Datenlogger, diverse 433Mhz Funker, ShellyEM3, ShellyEM

DetlefR

Sorry,

ich habe erst später mitbekommen, dass Du die HTTP Version benutzt.
Bei mir läuft das alles über MQTT.
Es gibt da noch "reactive_power" und "total_returned". Vielleicht ist das noch hilfreich.

mcchina

Zitat von: DetlefR am 17 August 2022, 20:42:07
Sorry,

ich habe erst später mitbekommen, dass Du die HTTP Version benutzt.
Bei mir läuft das alles über MQTT.
Es gibt da noch "reactive_power" und "total_returned". Vielleicht ist das noch hilfreich.

für die Shellies nutze ich auch MQTT. Im verbose Logfile finde ich auch die Readings, die ich suche:

"emeters":[{"power":0.00,"reactive":0.00,"pf":0.00,"voltage":230.41,"is_valid":true,"total":0.0,"total_returned":613.8},{"power":0.00,"reactive":0.00,"pf":0.00,"voltage":230.41,"is_valid":true,"total":0.0,"total_returned":2.5}

Wie kann ich das in das Device bekommen, ein UserReading hat nicht funktioniert?
Ich denke, entweder das 36_Shelly.pm ändern oder direkt mit MQTT arbeiten. Letzeres habe ich noch nicht gemacht. Hast Du einen Tipp?
---------------------------------------------------
raspi mit FHEM & Teslalogger, HTTPMod für Resol Datenlogger, diverse 433Mhz Funker, ShellyEM3, ShellyEM

DetlefR

ZitatIch denke, entweder das 36_Shelly.pm ändern oder direkt mit MQTT arbeiten. Letzeres habe ich noch nicht gemacht. Hast Du einen Tipp?
Also entweder fragst Du den Professor (Modulautor Prof. Dr. Peter A. Henning), ob er das einbaut oder Du nutzt MQTT.
Wenn Du sowieso schon MQTT im Einsatz hast, ist das sicher der einfachere Weg.