Formatierung eines Terms mit sprintf (gelöst)

Begonnen von SHOFHEM, 10 Juli 2024, 07:04:16

Vorheriges Thema - Nächstes Thema

SHOFHEM

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


mumpitzstuff


SHOFHEM

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

carlos

Bitte nach dem "%.2f" ein Komma, also: "%.2f",
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

betateilchen

#4
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)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

SHOFHEM


SHOFHEM

habs so gelöst

{(sprintf ("%.3f",ReadingsNum("MQTT2_DVES_363AC0","SGM_E_in",0)-ReadingsNum("Tagesverbrauch","Zaehlerstand_0Uhr",0)))} KWh

betateilchen

und warum steckst Du das "kWh" nicht direkt mit in das sprintf()?

"%.3f kWh"
Außerdem hast m.E. zu viele Klammern verwendet...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

SHOFHEM

#8
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

betateilchen

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)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Nobbynews

#10
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)))}

SHOFHEM

danke,

habe den Wald vor lauter Bäumen nicht gesehen  :'(  :'(  :'(