Habe seit kurzer Zeit einen Shelly Pro 3EM im Einsatz. Habe dabei mit setReading das ein oder andere Reading definiert.
Da der Shelly ca 5% vom eigentlichen Zähler abweicht rechne ich in einem Reading "TagesVerbrauchKor" das Reading "TagesVerbrauch" *1,05.
Der Shelly gibt bereits seine Readings mit 4 Nachkommastellen aus. Das Berechnete hat >7 Nachkommastellen. Deshalb komme ich auf sprintf.
Habe es in vielen Versuchen geschafft das in die vielen Klammern zu integrieren das es funktioniert. Aber verstehen kann ich es nicht.
Der Ursprungscode
*07:59:50 setreading StromZaehler TagesVerbrauchKor {(ReadingsVal("StromZaehler","TagesVerbrauch",0)*1.05 ." kWh")}
habe ich so angepasst
*07:59:50 setreading StromZaehler TagesVerbrauchKor {(sprintf("%.2f",ReadingsVal("StromZaehler","TagesVerbrauch",0))*1.05 ." kWh")}
Was zu einer Reduzierung von >7 auf 4 Nachkommastellen führt. %.1f führt zu 3 Nachkommastellen ??
Dachte .2 = 2 Nachkommastellen ( so lese ich das auch in Forenbeiträgen)
Kann mir jemand das verständlich machen und wie kommt man zu 2 Nachkommastellen
Statt ReadingsVal einfach ReadingsNum verwenden.
Das kann runden (letzter Parameter)
Die Verwendung dieses unsäglichen Mischmaschs aus FHEM und perl mit der sinnlosen Klammersyntax finde ich immer noch zum
Kotzen Brechen.
- Setze die Klammern in den perl Funktionen richtig, dann funktioniert es auch.
- Wenn Du mit Werten aus readings rechnen willst, verwende ReadingsNum() anstatt ReadingsVal()
- Wenn Du schon mit sprintf() arbeitest, kannst Du auch das "kWh" gleich mit einbauen
{(sprintf("%.2f kWh",ReadingsNum("StromZaehler","TagesVerbrauch",0)*1.05))}
Zitat von: RalfRog am 02 September 2023, 10:44:02...
Hauptsache irgendwas geschrieben?
Ob es Sinn macht und zur Fragestellung
Zitatsprintf verstehen?
passt, ist Dir offenbar grundsätzlich in den meisten Deiner Antworten egal.
Alles klar
Aber warum gibt %.2 keine 2 Nachkommastellen ? Meine eigentliche Frage
Zur Schimpferei über die Klammersetzung nur soviel. Kann euch zwar verstehen, falls es da bessere Wege gibt, aber in allen Forenbeiträgen steht es ebenso. Was macht unsereiner Copy - Paste und dann anpassen.
Wieso. Ich verstehe sprintf nicht.
Soll heisen ich möchte die Syntax verstehen. %.2 ergibt schon mal keine 2 Nachkommastellen.
So hatte ich es aber in vielen Beiträgen verstanden
Wo an meiner Frage ist das Problem
Zitat von: betateilchen am 02 September 2023, 10:47:05.
...
Hauptsache irgendwas geschrieben?
...
Ob es Sinn macht und zur Fragestellung... passt
Ok werd mich zukünftig mehr raushalten :(
Zur Fragestellung passt es sicher nicht direkt aber zum Problem einfach einen Wert ohne 7 Nachkommastellen zu erhalten.
Deine Klammersetzung ist falsch. Erst machst Du ein sprintf des Readings mit 2 Nachkommastellen, danach multiplizierst Du mit 1.05. Das ergibt 4 Nachkommastellen.
Du möchtest aber das Reading erst mit 1.05 multiplizieren, und danach das sprintf anwenden, oder?
ZitatDeine Klammersetzung ist falsch. Erst machst Du ein sprintf des Readings mit 2 Nachkommastellen, danach multiplizierst Du mit 1.05. Das ergibt 4 Nachkommastellen.
Du möchtest aber das Reading erst mit 1.05 multiplizieren, und danach das sprintf anwenden, oder?
Genau richtig.
Habe ja schon geschrieben das ich zig Versuche hinter mir habe sprintf in mein Reading einzufügen. Klar ich probiere und verstehe vieles nicht. Durch deinen Ansatz werde ich aber nochmal gezielt nach der besseren Klammer suchen. Danke an Alle welche helfend antworten.
Den Herrn "betateilchen" provoziere ich mit meiner Art zu fragen. Weis aber nicht wieso. Wozu gibt es eigentlich Foren wenn man nicht einfach mal fragen kann
Zitat von: bajogger am 02 September 2023, 11:15:14Den Herrn "betateilchen" provoziere ich mit meiner Art zu fragen. Weis aber nicht wieso. Wozu gibt es eigentlich Foren wenn man nicht einfach mal fragen kann
Wie kommst Du darauf, dass Du mich provoziert hättest?
Das haben hier im Thread mal wieder andere Leute gemacht.
In meiner ersten Antwort hatte ich Dich auf Deinen Fehler hingewiesen
ZitatSetze die Klammern in den perl Funktionen richtig, dann funktioniert es auch.
und auch eine funktionierende Lösung - inklusive korrekt gesetzter Klammern! - als Codeschnipsel gepostet
Zitat{(sprintf("%.2f kWh",ReadingsNum("StromZaehler","TagesVerbrauch",0)*1.05))}
Das ist doch in Summe nicht schlecht für jemanden, von dem Du glaubst, ihn provoziert zu haben, oder?
Was erwartest Du denn noch mehr?
Habe keine weitere Erwartungen. Hatte deine kritische Antwort irrtümlich auf mich bezogen. Sorry
Danke für deine Hilfe.
Bitte nächstes Mal erst lesen, dann denken und dann schreiben (wenn es wirklich noch notwendig ist)