Hallo zusammen,
ich möchte readingschange verwenden, um einen Wert in Euro auf 2 Stellen zu runden.
Dafür habe ich ein Notify benutzt:
DEF:
Keller.TrocknerBetrieb:standby {my $euro=ReadingsVal("Keller.Trockner_Power","energy","0") /1000 * ReadingsVal("Strompreis.EuroProKWH","state","") ;;fhem ("setreading Keller.TrocknerBetrieb Gesamteuro $euro")}
Wenn ich nun folgendes readingchange auf Keller.TrocknerBetrieb anwende, dann wird der Wert für Gesamter nicht gerundet.
DEF:
Keller.TrocknerBetrieb Gesamteuro (\d+\.\d+) {sprintf("%0.2f", $1)}
Ich habe in meinem "Testlabor" ein Dummydevice angelegt und darauf ein readingchange.
Wenn ich dort ein setreading absetze und den Wert ändere, dann funktioniert das runden auf 2 Dezimalstellen.
Was übersehe ich hier.
Vielen Dank für eure Hilfe.
MfG
Arminius
Hallo!
Baue mal ein sleep 0.1 vor dem setreading ein, nach meinem Verständnis von:
https://fhem.de/commandref.html#setreading
ZitatNote: setreading won't generate an event for device X, if it is called from a notify for device X. Use "sleep 0.1; setreading X Y Z" in this case.
sollte das helfen.
Warum rundest Du eigentlich nicht direkt in der Berechnung, statt über den readingsChange Umweg zu gehen?
Gruß, Christian
Keller.TrocknerBetrieb:standby {my $euro=sprintf("%.2f",(ReadingsVal("Keller.Trockner_Power","energy","0") /1000 * ReadingsVal("Strompreis.EuroProKWH","state",""))) ;;fhem ("setreading Keller.TrocknerBetrieb Gesamteuro $euro")}
... quasi so
... readingsChange, ist das wieder so ein neumodischer Kram? oder hab ich das Konsequent übersehen?? :o :o
Hallo zusammen,
danke für eure Antworten.
Ich habe die Berechnung vorher auch mit round versucht, aber das hat nicht funktioniert.
Aus diesem Grund habe ich im Forum gesucht und bin auf das readingschange gekommen.
Ich probiere die Codingänderungen gleich mal aus.
Danke euch.
Gruß
Arminius
Zitat von: automatisierer am 15 Mai 2017, 22:39:46
... readingsChange, ist das wieder so ein neumodischer Kram? oder hab ich das Konsequent übersehen?? :o :o
Fortschritt eben :) : https://forum.fhem.de/index.php/topic,60226.0.html
Hilft dabei von Modulen erzeugte bzw. existierende Readings anzupassen und damit beispielsweise modulübergreifend zu vereinheitlichen. Hier mMn nicht wirklich passend.
Hi,
die Sprintf Anweisung hat erfolgreich gerundet.
Danke.
Mir ist aber noch nicht klar, warum readingschange dieses in meinem Zusammenhang nicht gemacht hat.
Ich habe aber eine Lösung und das ist die Hauptsache.
Gruß
Arminius
ZitatMir ist aber noch nicht klar, warum readingschange dieses in meinem Zusammenhang nicht gemacht hat.
Weil readingsChange so gebaut ist, dass bei der Event-Abarbeitung vor notify drankommt, siehe "list .* NTFY_ORDER" (ohne "). Und es gibt keine (einfache) Methode, diese Reihenfolge vom Benutzer anzupassen.