Hallo,
ich habe folgende Frage/Problem.
Ich habe ein Modul "SolarEdge" wo ich meinen Photovoltaikbezug bekomme -> ein Wert in watt.
Ich habe ein anderes Modul "youless" wo ich meinen Hausverbrauch in Watt bekomme.
Ich würde jetzt gerne einen Wert "EVU" berechnen -> SolarEdge-youless.
Dieser Wert soll alle 60sekunden errechnet werden und in ein device/dummy,.... geschrieben werden, dass ich abfragen und an eine andere app mittels url abfrage übergeben kann.
Was ich schon gefunden/geschafft habe ist ein dummy definieren und mittels { fhem("set dummy ".(Value("SolarEdge")-Value("youless"))) } den Wert berechnen. Das wird jedoch nur einmal gemacht und fertig.
Bitte um Hilfe.
Danke
Ich würde dir empfehlen erst mal die Einsteiger-Doko zu fhem zu lesen!
Wenn schon gemacht: noch mal lesen!
Du musst den Dummy nur einmal per FhemWeb "anlegen" definieren...
...danach "nur" noch (per "at": alle 60s) ein Reading deiner Wahl mit dem berechneten Wert setzen...
Anmerkung: fhem ist eigentlich Event-Basiert!
Daher gibt es Notify was auf Events reagiert und dann entsprechende Dinge tut...
Es gäbe für deine Aufgabenstellung (außer, dass es zyklisch alle 60s stattfindet) auch die Möglichkeit eines Notify auf Wertänderung von SolarEdge bzw. youless und dann entsprechend berechnen und setzen (wenn es denn ein Dummy sein soll/muss auch dort)...
defmod atTest at +*00:01:00 {my $WertSolarEdge=ReadingsNum("SolarEdge","PowerReading",0);;my $WertYouless=ReadingsNum("Youless","PowerReading",0);;my $Diff=$WertSolarEdge-$WertYouless;;fhem("setreading DummyName ReadingName $Diff");;}
ungetestet und ich kenne nat. weder die echten Namen deiner Devices noch die der Readings etc.
EDIT4: jetzt als rawDefinition und getestet, also zumindest so dass es sich als rawDefinition einfügen lässt... ;)
EDIT: ich würde allerdings sowas nicht direkt "ins" at schreiben, sondern in eine Sub in myUtils "auslagern" https://wiki.fhem.de/wiki/99_myUtils_anlegen
EDIT2: das ganze kann man wie erwähnt auch in ein Notify packen, dann wird "nur" berechnet und aktualisiert, wenn sich auch was ändert...
EDIT3: Value (wo immer das aufgeschnappt wird) nimmt "nur" den state (oder sogar STATE!? egal). Wenn du Werte eines bestimmten Readings eines Devices willst/brauchst: ReadingsVal bzw. ReadingsNum
Gruß, Joachim
ich hab die einsteiger doku leider schon durch :-(
ich hab dein at jetzt mal so eingesetzt
define atBerechnung at +*00:00:59 {my $WertSolarEdge=ReadingsNum("SolarEdge","AC-Power",0);my $WertYouless=ReadingsNum(,,youless","electricityPower",0);my $Diff=$WertSolarEdge-$WertYouless;fhem("setreading EVU state $Diff");}
die devices habe ich an meine geändert.
raus kommt folgende fehlermeldung
Can't find string terminator '"' anywhere before EOF at (eval 6159910) line 1.
Unknown command my, try help.
Unknown command my, try help.
Unknown command fhem("setreading, try help.
Unknown command }, try help.
danke fürs helfen!
Wie hast du das wo eingegeben?
Es sind doch nicht alle Anführungszeichen bei dir gleich!
"oben" vs. "unten"...
...das muss schon zusammenpassen...
Gruß, Joachim
ich hab jetzt einfach die zeile von meinem ersten post in ein at gepackt und so funktionierts auch.
danke
Dann poste doch bitte noch deine Lösung (habe festgestellt, dass 00:00:60 nat. 00:01:00 sein muss ;) )...
...und setze noch ein [gelöst] vor den ersten Post...
Gruß, Joachim
define evuberechnung at +*00:00:59 { fhem("set EVU ".(Value("SolarEdge")-Value("youless"))) }