ReadingsChange rundet nicht

Begonnen von arminius, 15 Mai 2017, 21:54:36

Vorheriges Thema - Nächstes Thema

arminius

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

krikan

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

automatisierer

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

arminius

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

krikan

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.

arminius

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

rudolfkoenig

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.