Hallo zusammen,
folgendes AT-Device funktioniert:
Internals:
COMMAND setreading SMATripower6 PVErtragDay [SMATripower6:SPOT_ETODAY]
DEF *23:59 setreading SMATripower6 PVErtragDay [SMATripower6:SPOT_ETODAY]
FUUID 61ae4e=)"/((/)()$/)/$)($d8d7d89cd7
NAME at_PVErtragDay
NR 174
PERIODIC yes
RELATIVE no
REP -1
STATE Next: 23:59:00
TIMESPEC 23:59
TRIGGERTIME 1639609140
TRIGGERTIME_FMT 2021-12-15 23:59:00
TYPE at
READINGS:
2021-12-14 23:59:00 state Next: 23:59:00
Attributes:
room Befehle,Photovoltaik
Das Ding setzt pünktlich vor Null Uhr einen Wert auf das definierte Reading, um dadurch einen Logeintrag zu erzeugen. Alles gut.
Nun möchte ich gern den Wert vorher / 1000 teilen (Wh --> kWh) und habe auch schon einige vergleichbare Rechenoperationen am laufen. Ein Beispiel zum Ableiten wäre aus diesem Forum hier ( https://forum.fhem.de/index.php/topic,74898.msg673695.html?PHPSESSID=60kn47asdjcak0kbv536v4nev0#msg673695 )
Zitatenergy { sprintf("%.1f",ReadingsNum("Verbrauch_aktuell","AVERAGE",0)/1000.0);}
was ich normalerweise als Vorlage nutzen würde.
Ich könnte mir behelfsweise ein weiteres Reading zum "zwischenspeichern" erstellen usw, aber es gibt doch bestimmt auch eine elegantere Methode, wie ich in meine obige Definition bestehend aus FHEM-Code noch diese Rechenoperation einfügen könnte, oder? Wie müsste das aussehen? Ich scheitere an der Syntax.
setreading SMATripower6 PVErtragDay {sprintf("%.2f",ReadingsNum("SMATripower6","SPOT_ETODAY",0)/1000.0);}
? ::)
Command könnte so aussehen (ungetestet):
{
my $val = sprintf("%.2f",ReadingsNum("SMATripower6","SPOT_ETODAY",0)/1000.0);
fhem("setreading SMATripower6 PVErtragDay $val");
}
Man kann es auch so umsetzen das man im FHEM-Befehl das Ergebnis von Perl anhängt.
Dazu muss man das sprintf auch Klammern und das Semikolon am Ende darf nicht sein.
setreading SMATripower6 PVErtragDay {(sprintf("%.2f",ReadingsNum("SMATripower6","SPOT_ETODAY",0)/1000.0))}