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