FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Dracolein am 15 Dezember 2021, 13:18:09

Titel: im AT-Device rechnen
Beitrag von: Dracolein am 15 Dezember 2021, 13:18:09
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);}
?  ::)


Titel: Antw:im AT-Device rechnen
Beitrag von: yersinia am 15 Dezember 2021, 13:28:12
Command könnte so aussehen (ungetestet):
{
my $val = sprintf("%.2f",ReadingsNum("SMATripower6","SPOT_ETODAY",0)/1000.0);
fhem("setreading SMATripower6 PVErtragDay $val");
}
Titel: Antw:im AT-Device rechnen
Beitrag von: TomLee am 15 Dezember 2021, 13:45:39
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))}