Hallo Fhem Gemeinde,
ich habe ein Problem mit der Formatierung / Darstellung einer Subtraktion von 2 readings.
Verbrauch heute {([MQTT2_DVES_363AC0:SGM_E_in]-[Tagesverbrauch:Zaehlerstand_0Uhr])} KWh
Ich möchte dass Ergebnis der Subtraktion auf 2 Stellen per sprintf formatieren. Das Ergebnis sollte so ausehen 2.34 KWh. Ich erhalte momentan 2.340000000000000001 KWh.
Mir ist auch nach Studium der Funktion sprintf die Syntax völlig unklar und ich komme nicht weiter. Einzelne Readings kann ich per sprintf formatieren, aber den Term der Subtraktion bekomme ich nicht hin!
Kann mir bitte jemand auf die Sprünge helfen?
Danke euch schon jetzt
"%.2f"
Hallo und danke für die Antwort,
kannst du mir bitte etwas genauer sagen wo ich das / was einfügen muss. Wie schon gesagt mir ist die Syntax absolut nicht klar.
)} Verbrauch heute {sprintf("%.2f"[MQTT2_DVES_363AC0:SGM_E_in]-[Tagesverbrauch:Zaehlerstand_0Uhr])}
liefert Verbrauch heute {sprintf("%.2f"53.083-51.086)} KWh
Verbrauch heute {sprintf("%.2f"([MQTT2_DVES_363AC0:SGM_E_in]-[Tagesverbrauch:Zaehlerstand_0Uhr]))}
liefert Verbrauch heute {sprintf("%.2f"(53.083-51.086))} KWh
Die Werte der Devices werden richtig ermittelt, aber die Subtraktion nicht ausgeführt. Ich tippe auf Klammersetzung, aber wie und welche?
Danke schon jetzt
Bitte nach dem "%.2f" ein Komma, also: "%.2f",
Man könnte auch einfach die FHEM-eigene Funktion round() verwenden, wenn man sich schon nicht die Mühe macht, zumindest die Syntaxbeschreibung der perl Funktion sprintf() zu lesen.
round(ReadingsNum('MQTT2_DVES_363AC0','SGM_E_in',0)-ReadingsNum('Tagesverbrauch','Zaehlerstand_0Uhr',0),2)
danke euch allen
habs so gelöst
{(sprintf ("%.3f",ReadingsNum("MQTT2_DVES_363AC0","SGM_E_in",0)-ReadingsNum("Tagesverbrauch","Zaehlerstand_0Uhr",0)))} KWh
und warum steckst Du das "kWh" nicht direkt mit in das sprintf()?
"%.3f kWh"
Außerdem hast m.E. zu viele Klammern verwendet...
hab das KWh jetzt in den sprintf gepackt
Verbrauch heute {(sprintf ("%.3f KWh",ReadingsNum("MQTT2_DVES_363AC0","SGM_E_in",0)-ReadingsNum("Tagesverbrauch","Zaehlerstand_0Uhr",0)))}
Das mit den Klammern muss ich noch kontrollieren, auf Anhieb kann ich nicht sagen welche überflüssig sind.
Die Lösung mit round probier ich auch noch. Will ja was lernen!
Danke
Zitat von: SHOFHEM am 10 Juli 2024, 11:47:44hab das KWh jetzt in den sprintf gepackt
Das große K ist und bleibt falsch 8)
Zitat von: SHOFHEM am 11 Juli 2024, 06:13:39Ich würde gerne einen Term in der Form x=a/1000-(b-c) berechnen. Ohne die Klammern rechnet fhem korekt einfach von links nach rechts.
Zitatsetzen, dass der Term (b-c) als solches berechnet wird und dann von Wert a/1000 abgezogen wird
x=a/1000-(b-c) = a/1000-b+c
ZitatEigenverbrauch heute {(sprintf ("%.3f kWh",ReadingsNum("PV_Anlage","heute",0)/1000-ReadingsNum("MQTT2_DVES_363AC0","SGM_E_out",0)+ReadingsNum("Tagesverbrauch","Einspeisung_PV_0Uhr",0)))}
danke,
habe den Wald vor lauter Bäumen nicht gesehen :'( :'( :'(