Hallo,
nach meiner Ansicht ist die Einheit bei energy: Wh (Watt Stunde)
Im fhem-Wiki findet man nix. Könnte "man" ergänzen.
In https://shelly-api-docs.shelly.cloud/#shelly1-1pm-mqtt (https://shelly-api-docs.shelly.cloud/#shelly1-1pm-mqtt) heisst es :
Zitatenergy counter in Watt-minute
Das ist falsch.
Nur zur Info.
Andreas
Zitat von: Andi.Riese am 08 Dezember 2020, 11:03:31
Das ist falsch.
Nur zur Info.
Andreas
Hi Andreas,
für meinen Shelly plugS kann ich das nicht bestätigen und ich denke nicht, dass die alle anders gestrickt sind:
Zitat2020-12-08_12:02:59 MQTT2_shellyplug_s_040E41 relay_0_energy: 129809
2020-12-08_12:02:59 MQTT2_shellyplug_s_040E41 relay_0_energy_total: 659727
2020-12-08_12:03:09 MQTT2_shellyplug_s_040E41 relay_0_power: 3.74
2020-12-08_21:50:00 MQTT2_shellyplug_s_040E41 relay_0_energy: 131997
2020-12-08_21:50:00 MQTT2_shellyplug_s_040E41 relay_0_energy_total: 661915
2020-12-08_21:50:12 MQTT2_shellyplug_s_040E41 relay_0_power: 3.68
relay_0_power: 3.68 -> ist in Watt
(131997-129809)/(9*60+48)=3,72 (2188
Watt (Edit) Watt-minute in 9 Stunden und 48 Minuten)
Für die FHEM Kommandozeile:
{(131997-129809)/(9*60+48)}
Energy ist in WattMinute :)
Gruß Otto
Shelly Plug und Plug S liefern von Haus aus den Verbrauch in Wattminuten.
Im Modul 36_Shelly erfolgt eine Umrechnung in die "üblichen" Wattstunden.
MQTT liefert, wie Otto geschrieben hat, Wattminuten.
@Otto: Müsste es nicht heißen: 2188 Wmin in 9h und 48min??
Hi Otto,
wir haben beide recht.
Ich habe allerdings nicht das MQTT-Protokoll genommen, sondern das FHEM-Modul Shelly.
Ich hab Deine Zahlen nachgerechnet und es sind tatsächlich Wmin wie in der Dokumentation.
Ich habe noch einmal bei mir gemessen und auch ein Energiekostenmessgerät dazwischen geschaltet
und die Angaben des Shelly-Moduls sind offensichtlich Wh.
Ich dachte, dass es vielleicht vom Polling-Interval abhängt (was ein Witz wäre), aber die Zahlen sind die gleichen.
Vielleicht binde ich es ein anderes Mal über MQTT ein, aber pah schreibt ja in seinem (übrigens sehr hilfreichen) Buch, dass die Einbindung in FHEM möglichst einfach erfolgen sollte. Das sehe ich auch so.
Gruß
Andreas
Zitat von: Nobbynews am 09 Dezember 2020, 05:01:48
@Otto: Müsste es nicht heißen: 2188 Wmin in 9h und 48min??
Klar muss es :D
ZitatIch dachte, dass es vielleicht vom Polling-Interval abhängt (was ein Witz wäre), aber die Zahlen sind die gleichen.
Das nicht. Aber das API ist hier nicht konsistent, wie oben schon bemerkt wurde.
in 36_Shelly.pm wird der Datenwert aus dem Device durch 60 geteilt, also Wmin in Wh umgerechnet
LG
pah
Ich hänge mich mal hier in den Verlauf rein.
Ich habe den Shelly 1PM angeschlossen zur Messung des Solarertrags meiner kleinen Balkon-Anlage.
Da das Energie-Reading bei Stromverlust ja reseted wird, dachte ich mir, dass ich einfach für mich relevante Werte in separate Readings schreibe (Gesamt-Ertrag und Tagesertrag - jeweils als Wh und kWh).
Mit oberer Diskussion verstehe ich, dass das energy-Reading bereits Wattstunden ausgibt.
Meine Reading-"Auslagerung" realisiere ich über folgendes DOIF. Habe ich einen Denkfehler? Weil 10kWh am Morgen mit 60 Watt Momentan-Leistung kann ich nicht wirklich glauben...
defmod Doif_Solarertrag DOIF ([EG_Shelly_Solaranlage:energy])\
(\
## update the total counter\
{fhem('setreading EG_Shelly_Solaranlage energyTotal_Wh '.(ReadingsVal("EG_Shelly_Solaranlage", "energyTotal_Wh", 0) + ReadingsVal("EG_Shelly_Solaranlage", "energy", 0)));;;; }\
{fhem('setreading EG_Shelly_Solaranlage energyTotal_kWh '.(ReadingsVal("EG_Shelly_Solaranlage", "energyTotal_Wh", 0)/1000));;;; }\
\
## update daily counter\
{fhem('setreading EG_Shelly_Solaranlage energyToday_Wh '.(ReadingsVal("EG_Shelly_Solaranlage", "energyToday_Wh", 0) + ReadingsVal("EG_Shelly_Solaranlage", "energy", 0)));;;; }\
{fhem('setreading EG_Shelly_Solaranlage energyToday_kWh '.(ReadingsVal("EG_Shelly_Solaranlage", "energyToday_Wh", 0)/1000));;;; }\
\
## reset Shelly's counter\
setreading EG_Shelly_Solaranlage energy 0, \
)\
DOELSEIF ([00:00])\
(\
setreading EG_Shelly_Solaranlage energyToday_Wh 0, \
setreading EG_Shelly_Solaranlage energyToday_kWh 0, \
)\
DOELSE\
()
attr Doif_Solarertrag do always
attr Doif_Solarertrag group Automatisch
attr Doif_Solarertrag room Automatisierung
Das ist übrigens auch noch der Shelly:
Internals:
CFGFN
DEF 192.168.178.166
DURATION 0
FUUID 60623dcf-f33f-bfba-f6c9-563522d2bd6c083d
INTERVAL 30
NAME EG_Shelly_Solaranlage
NR 43104
STATE on<br>
Momentan: 105.49 W<br>
Heute: 11.9905 kWh<br>
Gesamt: 11.9905 kWh
TCPIP 192.168.178.166
TYPE Shelly
OLDREADINGS:
READINGS:
2021-04-01 09:00:05 cloud disabled
2021-04-01 10:17:20 energy 0
2021-04-01 10:17:20 energyToday_Wh 11990.5
2021-04-01 10:17:20 energyToday_kWh 11.9905
2021-04-01 10:17:20 energyTotal_Wh 11990.5
2021-04-01 10:17:20 energyTotal_kWh 11.9905
2021-04-01 09:00:05 network <html>connected to <a href="http://192.168.178.166">192.168.178.166</a></html>
2021-04-01 09:00:05 overpower 0
2021-04-01 10:17:20 power 105.49
2021-04-01 09:00:05 relay on
2021-04-01 09:00:05 state on
helper:
_98_statistics myStatDevice
Attributes:
alias Solaranlage
cmdIcon on:general_an off:general_aus
group Außen
interval 30
mode relay
model shelly1pm
room Steuerung
shellyuser admin
stateFormat state<br>
Momentan: power W<br>
Heute: energyToday_kWh kWh<br>
Gesamt: energyTotal_kWh kWh
Update: wenn ich die rund 12.000 Wattstunden durch 100 teile, dann passt es wieder?! habe ich einen Denkfehler?
Also oben war mW die Erkenntnis: Reading energy ist in WattMin - Du gehst in Deiner Rechnung von WattStunde aus?
Ja, ich nutze aber auch das Shelly Modul und pah hat explizit geschrieben:
Zitatin 36_Shelly.pm wird der Datenwert aus dem Device durch 60 geteilt, also Wmin in Wh umgerechnet
Ich glaube das Problem liegt am Aufaddieren.
Ich nehme ja quasi den Wh Wert aus dem Shelly, addiere ihn zu meinem eigenen Reading (energyTotal, bzw. energyToday) und lösche anschließend das energy-Reading aus dem Shelly.
Vermutlich addiere ich dann mehrfach die gleiche Energiemenge, aber mein Physikunterricht ist schon sooo lange her :-(
Jetzt hab ich den Denkfehler...
Ich addiere immer das energy Reading (was durchaus Wh sind) zu meinem eigenen Reading.
Danach lösche ich es.
Beim nächsten Update fängt er aber nicht bei 0 an, sondern holt sich den Shelly-Wert - der hat natürlich noch den "alten" Wert gespeichert...
Damit hab ich exponentielle Erträge! Wenn es so einfach wäre...
Das ist mitnichten ein exponentielles Wachstum. Nur weil gewisse $)(//&(/)((-Politiker mit diesem Begriff um sich werfen, sollte man dem nicht anhängen.
Allerding ist diese Vorgehensweise ein starkes Argument gegen das Löschen von Readings aus aktiven Devices.
Ich verstehe immer noch nicht so ganz den Sinn dahinter.
LG
pah
Der Shelly resettet ja den Zählstand bei FW-Update oder Reboot.
Ich würde Dir meine Vorgehensweise empfehlen:
- Du hast ein Dummy-Device mit angehängtem FileLog, um die Werte zu archivieren
- In das Dummy-Device werden der letzte Zählerstand bei der Ablesung und die errechneten Deltas geschrieben. Ich logge z.B. lieber die "Durchschnittwatts", also Wh / 24h bei Tageswerten.
Das kannst Du so umsetzen:
define powerday dummy
define FileLog_Verbrauch_day FileLog ./log/stromverbrauchday-%Y.log powerday
Jetzt der "Ablesejob":
Erst mal grob einrichten:
define powerdayjob at *00:01:00 {}
Und dann das schöne Frontend nutzen, um das Perl auszuweiten:
{
my $wertneu=ReadingsVal("solarshelly","energy","0");
my $wertalt=ReadingsVal("powerday","wh_last","0");
my $werttotal=ReadingsVal("powerday","wh_total","0");
$wertalt = 0 if ($wertalt > $wertneu);
$werttotal += $wertneu-$wertalt;
my $delta=($wertneu-$wertalt)/24;
fhem("setreading powerday wh_last $wertneu");
fhem("setreading powerday watt_avg $delta");
fhem("setreading powerday wh_total $werttotal");
}
Damit "merkst" Du Dir den letzten Stand für den Fall des Reset (verlierst dann allerdings die Erzeugung bis zum Reset für den Tag). Und erhälst als "Logfile" täglich die Durchschnittserzeugungsleistung auf 24 h sowie die Gesamtzahl Deiner erzeugten Wh als "ewig fortgeschriebenen" Wert. Achtung, der Code ist ungetestet - da könnte ein Typo drin sein.
Alternativ kannst Du das natürlich auch auf Stunden- oder 10-Minuten-Basis machen.
Und einfach ein userReadings mit monotonic? Mach ich bei verschiedenen "Zählern" so, das läuft sehr gut.
Wenn man es in kWh haben will kann man gleich noch rechnen:
Zaehler:energy.* monotonic {ReadingsNum($name,'energy','')/1000}
Mit setreading <device> Zaehler 123456 kann man einmalig den gewünschten Anfangswert des Zählers setzen.
Was um Himmels Willen spricht denn gegen ein userReading? Auf diese Weise bestimme ich auch in meiner Solarthermieanlage bei jeder Änderung des Readings flow den Zuwachs und die Gesamtenergie:
delta-E:.*flow.* {HKSOLV_deltaE()},energy:.*flow.* {HKSOLV_energy()},vol {ReadingsVal("HK.SOL.V","volume",0)}
Die aufgerufenen Perl-Funktionen sind natürlich sehr viel komplizierter, als es es hier nötig wäre - weil darin die physikalischen Eigenschaften der Solarflüssigkeit Tyfocor LS verwendet werden (siehe hier: https://wiki.fhem.de/wiki/Ertragsmessung_Solarthermie). Ich bin jetzt aber ehrich gesagt zu faul, um das für den hier gesuchten Anwendungsfall zu vereinfachen, und poste nachstehend einfach mal kommentarlos diese Perl-Funktionen. Übrigens wird darin auch das monatliche und jährliche Logging gemacht.
LG
pah
sub HKSOLV_deltaE()
{
#-- properties of TYFOCOR LS
# delta-E [in Wh/l] = C11 +
# (C21 + C22*(TR-20)+C23*(TR-20)^2)*(TV-TR) +
# C31 * (TV-TR)^2
# wobei
# C11 = -0.00064
# C21 = 1.03392
# C22 = 0.00055
# C23 = 0.000002
# C31 = 0.00057
#
my $tv = ReadingsVal("HK.SOL.Flow.T","temperature",0);
my $tr = ReadingsVal("HK.SOL.Return.T","temperature",0);
my $e = -0.00064 + (1.03392 + 0.00055*($tr-20) + 0.000002*($tr-20)*($tr-20))*($tv-$tr) + 0.00057*($tv-$tr)*($tv-$tr);
#-- transported volume = rate (l/h) * interval (s) * 1/3600
my $t = (AttrVal("HK.SOL.V","interval",undef))?AttrVal("HK.SOL.V","interval",undef):300;
#-- BUT only if interval has been kept ! What if the interval has been longer due to some delay ??
# TODO
my $v = ReadingsVal("HK.SOL.V","flow",0)*$t/3600.;
#Log 1,"solarTHy called. tv=$tv tr=$tr e=$e t=$t v=$v";
#-- transported energy in Wh
$e = $e*$v;
return($e)
}
sub HKSOLV_energy()
{
#-- zero the energy at the start of the day ist done by a FHEM routine Solar.N.morning
return sprintf('%5.2f',(ReadingsVal("HK.SOL.V","energy",0)+ReadingsVal("HK.SOL.V","delta-E",0)/1000))
}
sub HKSOLV_month()
{
my ($str,$line,$day);
my $lf = $defs{'SolarTHM'}{currentlogfile};
if( !(defined($lf))){
Log 1,"[HKSOLV_month] logfile of SolarTHM is missing";
}
my @linarr = ();
my @month = ();
#-- current date
my ($csec,$cmin,$chour,$cday,$cmonth,$cyear,$cwday,$cyday,$cisdst) = localtime(time);
my $ret = open(SOLFILE, "< $lf" );
my $nolines=0;
if( $ret) {
while( <SOLFILE> ){
#-- line looks as
# 2015-06-13_21:13:37 HK.SOL.V D 13 Wd 2.77 kWh 70.77 kWh
$line = $_;
$nolines++;
chomp($line);
if ( $line =~ m/.*HK.SOL.V.*/i){
@linarr = split(' ',$line);
if( int(@linarr)==9 ){
$day = $linarr[3];
$day =~ s/0+//;
push(@month,$linarr[5]);
}
}
}
if( int(@month)==0 ){
Log 1,"[HKSOLV_month] invalid logfile format"
if( $cday!=1 );
}
} else {
Log 1,"[HKSOLV_month] cannot open logfile";
}
Log 1,"[HKSOLV_month] $nolines lines read, ".int(@month)." have the proper format";
#-- sum and average
my $total = 0.0;
for (my $j=0;$j<int(@month);$j++){
$total += $month[$j];
}
#-- add data from current day
$total = int($total*100)/100;
my $total2 = int(100*($total+ ReadingsVal('HK.SOL.V','energy',0)))/100;
#-- number of days so far, including the present day
my $deltim = int(@month)+($chour+$cmin/60.0 + $csec/3600.0)/24.0;
my $av = $deltim>0 ? int(100*$total2/$deltim)/100 : -1;
#-- assemble string for HK.SOL
$str = sprintf('trigger HK.SOL d %02d Wd %5.2f kWh %6.2f kWh Pump %s',
$cday,
substr(ReadingsVal('HK.SOL','Wd',0),0,-4),
(substr(ReadingsVal('HK.SOL','Wm',0),0,-4) + substr(ReadingsVal('HK.SOL','Wd',0),0,-4)),
ReadingsVal('HK.SOL','Pump.time',0));
fhem($str);
#-- assemble string for HK.SOL.V monthly statistics
$str = sprintf('trigger HK.SOL.V D %02d Wd %5.2f kWh %6.2f kWh',
$cday,
ReadingsVal('HK.SOL.V','energy',0),
$total2);
fhem($str);
$str = "\nWm ".$total2." kWh (monthly sum until now)\n";
$str .= "Wa ".$av." kWh/d (average until yesterday)\n";
return $str;
}
sub HKSOLV_year()
{
my ($str,$line,$month);
my $lf = $defs{'SolarTHY'}{currentlogfile};
if( !(defined($lf))){
Log 1,"[HKSOLV_year] logfile of SolarTHY is missing";
}
my @linarr = ();
my @year = ();
#-- current date
my ($csec,$cmin,$chour,$cday,$cmonth,$cyear,$cwday,$cyday,$cisdst) = localtime(time);
my $ret = open(SOLFILE, "< $lf" );
my $nolines = 0;
if( $ret) {
while( <SOLFILE> ){
#-- line looks as
# 2015-06-13_21:13:37 HK.SOL.V D 13 Wd 2.77 kWh 70.77 kWh
$line = $_;
$nolines++;
chomp($line);
if ( $line =~ m/.*HK.SOL.V.*/i){
@linarr = split(' ',$line);
if( int(@linarr)==9 ){
$month = $linarr[3];
$month =~ s/0+//;
push(@year,$linarr[5]);
}
}
}
if( int(@year)==0 ){
Log 1,"[HKSOLV_year] invalid logfile format"
if( $cday!=1 );
}
} else {
Log 1,"[HKSOLV_year] cannot open logfile";
}
Log 1,"[HKSOLV_year] $nolines lines read, ".int(@year)." have the proper format";
#-- sum and average
my $total = 0.0;
for (my $j=0;$j<int(@year);$j++){
$total += $year[$j];
}
#-- add data from current day
$total = int($total*100)/100;
#my $total2 = int(100*($total+ ReadingsVal('HK.SOL.V','energy',0)))/100;
#-- number of days so far, including the present day
#my $deltim = int(@month)+($chour+$cmin/60.0 + $csec/3600.0)/24.0;
#my $av = $deltim>0 ? int(100*$total2/$deltim)/100 : -1;
#-- assemble string for HK.SOL
#$str = sprintf('trigger HK.SOL d %02d Wd %5.2f kWh %6.2f kWh Pump %s',
# $cday,
# substr(ReadingsVal('HK.SOL','Wd',0),0,-4),
# (substr(ReadingsVal('HK.SOL','Wm',0),0,-4) + substr(ReadingsVal('HK.SOL','Wd',0),0,-4)),
# ReadingsVal('HK.SOL','Pump.time',0));
#fhem($str);
#-- assemble string for HK.SOL.V
#$str = sprintf('trigger HK.SOL.V D %02d Wd %5.2f kWh %6.2f kWh',
# $cday,
# ReadingsVal('HK.SOL.V','energy',0),
# $total2);
#fhem($str);
$str = "\nWy ".$total." kWh (yearly sum until now)\n";
#$str .= "Wa ".$av." kWh/d (average until yesterday)\n";
return $str;
}
Gegen ein userreading und für "meinen" Ansatz spricht m.E., dass das Logging einfacher wird (ein physikalisches Device, ein "Datenspeicher"-Device mit angeschlossenem Logfile, das auch nur im gewünschten Intervall auf die SD-Karte plärrt).
Außerdem habe ich meine Hard- und Software schon so oft umgebaut (von Shelly Plug S auf 1pm, von MQTT auf Mod_Shelly), dass ich Devices gerne möglichst basic lasse, und die Mehrwertdienste außerhalb halte.
Da wirfst Du aber Dinge durcheinander. Dass ich das Logging da gleich mit erledige, hat mit dem speziellen Format des Logfiles zu tun - das könnte ich mit dem FileLog-Device nicht hinbekommen. Hier gehtes zunächst nur darum, zwei userReadings zu bekommen, die den gewünschten Zahlenwert enthalten.
Das eine hat mit dem anderen also nichts zu tun und ist nur ein Nebeneffekt.
LG
pah
Sorry, dass ich hier jetzt so eine Diskussion angefacht habe.
Ich habe zwischenzeitlich meine Version auch hinbekommen.
Otto's Vorschlag ist aber bedeutend einfacher und simpler! Ich kannte monotonic noch gar nicht...
Hallo Zusammen und schönen Abend
Hatte mir kürzlich auch ne "Balkonsolaranlage" zugelegt und bin auf den Shelly gekommen, weil die Homematic HM-ES-PMSW1-PL nicht in Einspeiserichtung misst und es für den Shelly schon ein Modul gibt.
Für den Gesamtertrag in Wattstunden hab ich mir heute in der Test- und Spielphase auch mal schnell über ein userreading mit dem Modifier "monotonic" erstellt um dem Startwert 0 bei Boot etc. zu umgehen.
Mein Problem:
Die Readings werden im Dunkeln nicht aktualisiert --> also die Zeitstempel.
Um im Plot den Graphen nicht abreissen zu lassen hatte ich vor per Attribut "event-min-interval.*:900" alle 15 Minuten ins Log zu schreiben (so funktioniert es beim Homematic HM-ES-PMSW1-PL).
Hier passiert aber leider nix.
Internals:
CFGFN
DEF 10.xx.xx.xx
DURATION 0
FUUID 6067011b-f33f-a8ec-ddca-8eec145532613fd5
INTERVAL 300
NAME shelly_plug_s_df2674
NR 3071
SHELLYID shellyplug-s-DF2674
STATE on
TCPIP 10.xx.xx.xx
TYPE Shelly
READINGS:
2021-04-02 13:33:48 cloud disabled
2021-04-02 22:24:27 config default_state=on [channel 0]
2021-04-02 18:53:58 energy 192.2
2021-04-02 21:04:12 energyCum 3104.5
2021-04-02 13:33:48 firmware v1.10.1
2021-04-02 13:33:47 network <html>connected to <a href="http://10.20.30.90">10.20.30.90</a></html>
2021-04-02 15:27:28 overpower 0
2021-04-02 18:57:08 power 0
2021-04-02 15:27:28 relay on
2021-04-02 15:27:28 state on
Attributes:
devStateIcon {my $lderr = ReadingsVal($name,"network","-") !~ /^.*>connected.*/?"10px-kreis-rot":"10px-kreis-gruen"; my $light = ReadingsVal($name,"relay","off"); my $cons = ReadingsVal($name,"power","unknown");my $kwh = sprintf("%.2f kWh", ReadingsVal($name,"energy",0)/1000.0);FW_makeImage($lderr)."<a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a><div>$cons W / $kwh</div>"}
event-min-interval .*:900
interval 300
model shellyplug
room Unsorted
userReadings energyCum:energy.* monotonic {ReadingsVal("shelly_plug_s_df2674","energy",0)}
verbose 5
Wenn ich wie gerade eben --> OFF --> ON ausführe werden lediglich "overpower" "relay" und "stae" aktualisiert und der Rest verharrt auf den alten Zeitstempeln.
2021-04-02_23:27:41 shelly_plug_s_df2674 off
2021-04-02_23:27:41 shelly_plug_s_df2674 off
2021-04-02_23:27:41 shelly_plug_s_df2674 relay: off
2021-04-02_23:27:41 shelly_plug_s_df2674 overpower: 0
2021-04-02_23:27:43 shelly_plug_s_df2674 on
2021-04-02_23:27:50 shelly_plug_s_df2674 on
Mod_Shelly und MQTT haben da unterschiedliche Ansätze:
- Mod_Shelly löst nur ein Event aus, wenn sich ein Reading ändert
- MQTT triggert immer ein Event, was man allenfalls dann wieder mit event-aggregator etc. "einfangen" kann
Ich bin eher ein Anhänger der Vorgehensweise von Mod_Shelly, weil sie weniger Datenmüll erzeugt und FHEM flotter hält. Daher würde ich eher das Problem beim Graphen lösen. Du kannst Dir natürlich einen "zurechtmogeln", indem Du z.B. stündlich per "at" das Reading power ausliest und den Wert mit "setreading" zurückschreibst. Das sollte ein Event triggern.
Hallo
Danke für die Erklärung. Ich hatte anfangs einfach zuviel gleichzeitig aktiv (Das Modul & den Monitor) für einen klaren Erkenntnisgewinn.
Wie verhält sich der Monitor bei (nächtlich eintreffenden) coIoT-Nachrichen ohne das die Werte sich verändert haben.
Aktualisiert er die Readings (Zeitstempel) im Device und löst ein Event aus?
Zitat
Ich bin eher ein Anhänger der Vorgehensweise von Mod_Shelly, weil sie weniger Datenmüll erzeugt
Könnte man eventuell im Device mit einem "event-on-change-reading energy:<Schwelle>,power:<Schwelle>,.*" umgehen (für PlugS & 1PM).
ZitatDu kannst Dir natürlich einen "zurechtmogeln"
ist natürlich auch ne interessante und einfache Möglichkeit
Hi, nein, ich habe ShellyMonitor nach der Philosophie von Shelly gehalten: Keine Änderung, kein Event.
Wenn Du Dir das liebevoll per Hand umbasteln möchtest, kannst Du in 36_ShellyMonitor.pm alle "readingsBulkUpdateIfChanged" durch "readingsBulkUpdate" ersetzen. Aber das ist beim nächsten Update natürlich pardü...
Hallo
Anbei ne Rückmeldung für die Energiemessung meiner Balkon-PV da ich gefragt hatte.
- Der Vorschlag in
Zitat von: gvzdus date=1617439303
......Du kannst Dir natürlich einen "zurechtmogeln", indem Du z.B. stündlich per "at" das Reading power ausliest und den Wert mit "setreading" zurückschreibst. Das sollte ein Event triggern.
die Lücken im Plot mit "at" zu füllen funktioniert prima und ist nicht aufwändig und erzeugt ein Event.
--> Habe ihn allerdings zugunsten des Attributs "addlog" im FileLog für den Plot verworfen - ist auch schick, da ein Event nicht nötig ist.
- Ich wollte unbedingt mit dem Shelly-Monitor die CoIoT Nachrichten des Shelly auswerten - fand ich einfach sympatisch.
Ich habe die häufigen Events im Modul mit "event-min-interval .*:300" auf 5 Minuten begrenzt.
Ja, am Ende ist die Netzlast und Menge der Nachrichten mit abeschaltetem CoIoT (insbesondere da der PlugS bei sich ändernden Werten gern alle paar Sekunden sendet) geringer.
Die erste Idee: "Wollte halt den HTTP-Request mit User/Passwort nicht so häufig schicken" ist vielleicht nicht die Beste.
Zitat von: gvzdus date=1617439303
...weil sie weniger Datenmüll erzeugt und FHEM flotter hält..
Vermutlich werde ich es daher tatsäch ohne Shelly-Monitor machen.
Um Netzwerktraffic mache ich mir wenig Gedanken - ich habe da eine Flat im LAN :-)
Wenn Du nur alle 5 Minuten den Messwert haben möchtest, dann ist es laut Allterco am sinnvollsten, die "Wattminuten" auszuwerten, anstatt selber Mittelwerte aus "power" zu bilden. Also z.B. das Originalreading per at-Job auszulesen und das Delta durch 5 zu teilen. Allerdings aktualisiert der Shelly das Reading nur minütlich - Du kannst also Pech haben und mal den 4, mal den 6-Minuten-Wert alle 5 Minuten auslesen.
Hi
Netzlast eher im Sinne Last für FHEM. Ich habe kein Gefühl dafür was das Horchen an der MCAST-Adresse für FHEM bedeutet.
Die Auswertung vom Modul in Wattstunden über enegy passt schon für ne SVG Kurve.
Ich habe aus Neugier mit tcpdump am Pi mal eine Stunde die mcast auf IP 224.0.1.187.5683 mitgeschrieben (bei 300 Sekunden "coiot update_period").
Da sind 114 mal Werte geschickt worden - im Schnitt also alle 30 sec. Mal sehen ob rauszukriegen ist bei welchem PowerDelta ein neues Paket rausgeht.
Aber ich glaube das wird jetzt zu sehr OffTopic....
Gruß Ralf
Time 14:00:12 Leistung 78.68 Watt Energie 106630 Wattminuten Temperatur 18.80 - CoIoT Paket Ende
Time 14:00:43 Leistung 74.79 Watt Energie 106630 Wattminuten Temperatur 18.76 - CoIoT Paket Ende
Time 14:01:09 Leistung 70.93 Watt Energie 106707 Wattminuten Temperatur 18.97 - CoIoT Paket Ende
Time 14:02:13 Leistung 67.51 Watt Energie 106777 Wattminuten Temperatur 18.85 - CoIoT Paket Ende
Time 14:04:27 Leistung 64.27 Watt Energie 106910 Wattminuten Temperatur 18.89 - CoIoT Paket Ende
Time 14:06:55 Leistung 61.12 Watt Energie 107039 Wattminuten Temperatur 18.97 - CoIoT Paket Ende
Time 14:11:22 Leistung 58.07 Watt Energie 107343 Wattminuten Temperatur 18.97 - CoIoT Paket Ende
Time 14:11:43 Leistung 54.92 Watt Energie 107343 Wattminuten Temperatur 18.97 - CoIoT Paket Ende
Time 14:12:01 Leistung 51.81 Watt Energie 107400 Wattminuten Temperatur 18.93 - CoIoT Paket Ende
Time 14:12:09 Leistung 49.00 Watt Energie 107400 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:12:16 Leistung 46.64 Watt Energie 107400 Wattminuten Temperatur 18.80 - CoIoT Paket Ende
Time 14:12:22 Leistung 43.85 Watt Energie 107400 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:12:30 Leistung 41.27 Watt Energie 107400 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:12:36 Leistung 39.21 Watt Energie 107400 Wattminuten Temperatur 18.97 - CoIoT Paket Ende
Time 14:12:42 Leistung 36.85 Watt Energie 107400 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:12:49 Leistung 35.09 Watt Energie 107400 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:13:33 Leistung 37.22 Watt Energie 107442 Wattminuten Temperatur 18.93 - CoIoT Paket Ende
Time 14:13:45 Leistung 39.32 Watt Energie 107442 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:13:57 Leistung 41.41 Watt Energie 107442 Wattminuten Temperatur 19.01 - CoIoT Paket Ende
Time 14:14:12 Leistung 43.59 Watt Energie 107479 Wattminuten Temperatur 18.97 - CoIoT Paket Ende
Time 14:14:25 Leistung 46.55 Watt Energie 107479 Wattminuten Temperatur 19.01 - CoIoT Paket Ende
Time 14:14:40 Leistung 49.37 Watt Energie 107479 Wattminuten Temperatur 18.97 - CoIoT Paket Ende
Time 14:15:09 Leistung 45.90 Watt Energie 107525 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:15:16 Leistung 43.63 Watt Energie 107525 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:15:31 Leistung 41.42 Watt Energie 107525 Wattminuten Temperatur 18.51 - CoIoT Paket Ende
Time 14:15:40 Leistung 38.62 Watt Energie 107525 Wattminuten Temperatur 19.01 - CoIoT Paket Ende
Time 14:15:48 Leistung 36.47 Watt Energie 107525 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:16:03 Leistung 34.59 Watt Energie 107567 Wattminuten Temperatur 19.22 - CoIoT Paket Ende
Time 14:16:54 Leistung 36.92 Watt Energie 107567 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:17:12 Leistung 38.89 Watt Energie 107602 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:17:27 Leistung 41.40 Watt Energie 107602 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:17:36 Leistung 44.02 Watt Energie 107602 Wattminuten Temperatur 19.22 - CoIoT Paket Ende
Time 14:17:39 Leistung 47.15 Watt Energie 107602 Wattminuten Temperatur 19.22 - CoIoT Paket Ende
Time 14:17:42 Leistung 50.50 Watt Energie 107602 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:17:43 Leistung 53.44 Watt Energie 107602 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:17:49 Leistung 56.54 Watt Energie 107602 Wattminuten Temperatur 19.01 - CoIoT Paket Ende
Time 14:17:51 Leistung 52.70 Watt Energie 107602 Wattminuten Temperatur 19.01 - CoIoT Paket Ende
Time 14:17:54 Leistung 48.99 Watt Energie 107602 Wattminuten Temperatur 19.01 - CoIoT Paket Ende
Time 14:17:57 Leistung 46.29 Watt Energie 107602 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:18:03 Leistung 43.91 Watt Energie 107645 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:18:13 Leistung 41.57 Watt Energie 107645 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:18:25 Leistung 38.92 Watt Energie 107645 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:18:39 Leistung 37.01 Watt Energie 107645 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:18:46 Leistung 35.06 Watt Energie 107645 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:18:58 Leistung 33.33 Watt Energie 107645 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:19:27 Leistung 35.16 Watt Energie 107684 Wattminuten Temperatur 18.97 - CoIoT Paket Ende
Time 14:19:40 Leistung 37.50 Watt Energie 107684 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:19:49 Leistung 39.92 Watt Energie 107684 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:19:58 Leistung 42.46 Watt Energie 107684 Wattminuten Temperatur 19.31 - CoIoT Paket Ende
Time 14:20:10 Leistung 44.81 Watt Energie 107720 Wattminuten Temperatur 19.01 - CoIoT Paket Ende
Time 14:20:25 Leistung 47.36 Watt Energie 107720 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:21:10 Leistung 45.03 Watt Energie 107767 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:21:19 Leistung 42.70 Watt Energie 107767 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:21:27 Leistung 40.49 Watt Energie 107767 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:21:33 Leistung 38.43 Watt Energie 107767 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:21:39 Leistung 36.16 Watt Energie 107767 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:21:45 Leistung 34.10 Watt Energie 107767 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:21:51 Leistung 31.89 Watt Energie 107767 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:21:55 Leistung 30.01 Watt Energie 107767 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:21:58 Leistung 28.54 Watt Energie 107767 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:22:03 Leistung 26.61 Watt Energie 107806 Wattminuten Temperatur 19.26 - CoIoT Paket Ende
Time 14:22:09 Leistung 25.03 Watt Energie 107806 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:22:13 Leistung 23.82 Watt Energie 107806 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:22:16 Leistung 22.40 Watt Energie 107806 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:22:21 Leistung 21.15 Watt Energie 107806 Wattminuten Temperatur 19.31 - CoIoT Paket Ende
Time 14:22:27 Leistung 19.56 Watt Energie 107806 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:22:30 Leistung 23.14 Watt Energie 107806 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:22:31 Leistung 25.45 Watt Energie 107806 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:22:33 Leistung 22.01 Watt Energie 107806 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:22:34 Leistung 19.38 Watt Energie 107806 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:22:36 Leistung 17.52 Watt Energie 107806 Wattminuten Temperatur 19.22 - CoIoT Paket Ende
Time 14:22:39 Leistung 16.50 Watt Energie 107806 Wattminuten Temperatur 19.22 - CoIoT Paket Ende
Time 14:22:42 Leistung 15.48 Watt Energie 107806 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:22:46 Leistung 13.78 Watt Energie 107806 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:22:48 Leistung 24.32 Watt Energie 107806 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:22:49 Leistung 20.91 Watt Energie 107806 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:22:51 Leistung 17.96 Watt Energie 107806 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:22:52 Leistung 15.62 Watt Energie 107806 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:22:54 Leistung 18.05 Watt Energie 107806 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:22:55 Leistung 20.23 Watt Energie 107806 Wattminuten Temperatur 18.93 - CoIoT Paket Ende
Time 14:22:57 Leistung 17.24 Watt Energie 107806 Wattminuten Temperatur 18.93 - CoIoT Paket Ende
Time 14:22:58 Leistung 15.31 Watt Energie 107806 Wattminuten Temperatur 18.93 - CoIoT Paket Ende
Time 14:23:00 Leistung 20.44 Watt Energie 107827 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:23:01 Leistung 17.00 Watt Energie 107827 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:23:03 Leistung 15.55 Watt Energie 107827 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:23:04 Leistung 20.72 Watt Energie 107827 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:23:16 Leistung 19.57 Watt Energie 107827 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:23:27 Leistung 18.31 Watt Energie 107827 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:23:36 Leistung 17.22 Watt Energie 107827 Wattminuten Temperatur 19.22 - CoIoT Paket Ende
Time 14:23:48 Leistung 16.17 Watt Energie 107827 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:24:01 Leistung 15.07 Watt Energie 107845 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:24:18 Leistung 13.93 Watt Energie 107845 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:24:39 Leistung 12.80 Watt Energie 107845 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:24:57 Leistung 11.68 Watt Energie 107845 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:25:06 Leistung 10.62 Watt Energie 107858 Wattminuten Temperatur 19.01 - CoIoT Paket Ende
Time 14:25:07 Leistung 9.59 Watt Energie 107858 Wattminuten Temperatur 19.01 - CoIoT Paket Ende
Time 14:25:19 Leistung 8.56 Watt Energie 107858 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:25:46 Leistung 7.42 Watt Energie 107858 Wattminuten Temperatur 19.06 - CoIoT Paket Ende
Time 14:26:25 Leistung 6.18 Watt Energie 107867 Wattminuten Temperatur 19.22 - CoIoT Paket Ende
Time 14:26:58 Leistung 7.25 Watt Energie 107867 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:27:25 Leistung 8.32 Watt Energie 107873 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:27:45 Leistung 9.46 Watt Energie 107873 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:27:58 Leistung 10.55 Watt Energie 107873 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:28:03 Leistung 11.64 Watt Energie 107882 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:28:06 Leistung 12.83 Watt Energie 107882 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:28:09 Leistung 13.88 Watt Energie 107882 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:28:13 Leistung 14.96 Watt Energie 107882 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:28:21 Leistung 16.05 Watt Energie 107882 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:28:28 Leistung 17.18 Watt Energie 107882 Wattminuten Temperatur 19.14 - CoIoT Paket Ende
Time 14:28:36 Leistung 18.23 Watt Energie 107882 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:28:46 Leistung 19.30 Watt Energie 107882 Wattminuten Temperatur 19.31 - CoIoT Paket Ende
Time 14:29:01 Leistung 20.35 Watt Energie 107898 Wattminuten Temperatur 19.10 - CoIoT Paket Ende
Time 14:29:33 Leistung 19.23 Watt Energie 107898 Wattminuten Temperatur 19.31 - CoIoT Paket Ende
Time 14:29:48 Leistung 18.23 Watt Energie 107898 Wattminuten Temperatur 19.26 - CoIoT Paket Ende
Zitat
Da sind 114 mal Werte geschickt worden - im Schnitt also alle 30 sec. Mal sehen ob rauszukriegen ist bei welchem PowerDelta ein neues Paket rausgeht.
Aber ich glaube das wird jetzt zu sehr OffTopic....
Auch wenn OffTopic -auf Nachfrage habe ich die Info erhalten:
Hi Ralf,
The power values are updated on a threshold of 1W or a difference of 5% with the last measured power.
Best Regards,
Shelly Developers
Zitat von: Nogga am 01 April 2021, 10:16:07
Ich hänge mich mal hier in den Verlauf rein.
Ich habe den Shelly 1PM angeschlossen zur Messung des Solarertrags meiner kleinen Balkon-Anlage.
Da das Energie-Reading bei Stromverlust ja reseted wird, dachte ich mir, dass ich einfach für mich relevante Werte in separate Readings schreibe (Gesamt-Ertrag und Tagesertrag - jeweils als Wh und kWh).
Mit oberer Diskussion verstehe ich, dass das energy-Reading bereits Wattstunden ausgibt.
Meine Reading-"Auslagerung" realisiere ich über folgendes DOIF. Habe ich einen Denkfehler? Weil 10kWh am Morgen mit 60 Watt Momentan-Leistung kann ich nicht wirklich glauben...
defmod Doif_Solarertrag DOIF ([EG_Shelly_Solaranlage:energy])\
(\
## update the total counter\
{fhem('setreading EG_Shelly_Solaranlage energyTotal_Wh '.(ReadingsVal("EG_Shelly_Solaranlage", "energyTotal_Wh", 0) + ReadingsVal("EG_Shelly_Solaranlage", "energy", 0)));;;; }\
{fhem('setreading EG_Shelly_Solaranlage energyTotal_kWh '.(ReadingsVal("EG_Shelly_Solaranlage", "energyTotal_Wh", 0)/1000));;;; }\
\
## update daily counter\
{fhem('setreading EG_Shelly_Solaranlage energyToday_Wh '.(ReadingsVal("EG_Shelly_Solaranlage", "energyToday_Wh", 0) + ReadingsVal("EG_Shelly_Solaranlage", "energy", 0)));;;; }\
{fhem('setreading EG_Shelly_Solaranlage energyToday_kWh '.(ReadingsVal("EG_Shelly_Solaranlage", "energyToday_Wh", 0)/1000));;;; }\
\
## reset Shelly's counter\
setreading EG_Shelly_Solaranlage energy 0, \
)\
DOELSEIF ([00:00])\
(\
setreading EG_Shelly_Solaranlage energyToday_Wh 0, \
setreading EG_Shelly_Solaranlage energyToday_kWh 0, \
)\
DOELSE\
()
attr Doif_Solarertrag do always
attr Doif_Solarertrag group Automatisch
attr Doif_Solarertrag room Automatisierung
Das ist übrigens auch noch der Shelly:
Internals:
CFGFN
DEF 192.168.178.166
DURATION 0
FUUID 60623dcf-f33f-bfba-f6c9-563522d2bd6c083d
INTERVAL 30
NAME EG_Shelly_Solaranlage
NR 43104
STATE on<br>
Momentan: 105.49 W<br>
Heute: 11.9905 kWh<br>
Gesamt: 11.9905 kWh
TCPIP 192.168.178.166
TYPE Shelly
OLDREADINGS:
READINGS:
2021-04-01 09:00:05 cloud disabled
2021-04-01 10:17:20 energy 0
2021-04-01 10:17:20 energyToday_Wh 11990.5
2021-04-01 10:17:20 energyToday_kWh 11.9905
2021-04-01 10:17:20 energyTotal_Wh 11990.5
2021-04-01 10:17:20 energyTotal_kWh 11.9905
2021-04-01 09:00:05 network <html>connected to <a href="http://192.168.178.166">192.168.178.166</a></html>
2021-04-01 09:00:05 overpower 0
2021-04-01 10:17:20 power 105.49
2021-04-01 09:00:05 relay on
2021-04-01 09:00:05 state on
helper:
_98_statistics myStatDevice
Attributes:
alias Solaranlage
cmdIcon on:general_an off:general_aus
group Außen
interval 30
mode relay
model shelly1pm
room Steuerung
shellyuser admin
stateFormat state<br>
Momentan: power W<br>
Heute: energyToday_kWh kWh<br>
Gesamt: energyTotal_kWh kWh
Update: wenn ich die rund 12.000 Wattstunden durch 100 teile, dann passt es wieder?! habe ich einen Denkfehler?
Moin,
ich schreibe mir morgens (05:00) über ein AT den Wert von "energy" in ein Reading -> "energy_morgens" . Über ein Userreading ziehe ich dann den aktuellen Wert des Readings "energy_morgens" vom Reading "energy" ab, und erhalte so immer den Tagesertrag.
Das Problem mit dem gelöschten Energycounter ist auch bei den Modul https://forum.fhem.de/index.php?topic=103863.0 (https://forum.fhem.de/index.php?topic=103863.0) präsent. Eine Modifikation des shelly-Moduls wäre sicherlich eine Lösung. Ich kann aber nicht beurteilen ob dies so einfach möglich ist.
So ein Unsinn. >:(
Dass der Counter zurückgesetzt wird, ist doch keine Frage des Moduls.
ZitatIch kann aber nicht beurteilen ob dies so einfach möglich ist.
Stimmt.
pah