FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: matze1999 am 25 Juni 2022, 14:43:39

Titel: [gelöst]readingsNum mit Berechnung und round?
Beitrag von: matze1999 am 25 Juni 2022, 14:43:39
Hallo,

ich versuche gerade in userreadings eine Berechnung mit ReadingsNum zu runden:

defmod CN.Regenmenge HourCounter HUESensor40:closed
attr CN.Regenmenge devStateStyle style=";;font-size:20px;;;;;;;;"
attr CN.Regenmenge group Bewässerung
attr CN.Regenmenge icon weather_rain_meter
attr CN.Regenmenge room Bewässerung,Garten,Schalter
attr CN.Regenmenge sortby 4
attr CN.Regenmenge stateFormat letzte Stunde regenstunde l/m² | \
gestern regentag l/m² | \
lfd. Woche regenwoche l/m²
attr CN.Regenmenge userReadings regenstunde:appCountsPerHour.* {round ( (ReadingsNum($name,'appCountsPerHour',0)*0.50505),0)},\
regentag:appCountsPerDay.* {round ( (ReadingsNum($name,'appCountsPerDay',0)*0.50505),0)},\
regenwoche:appCountsPerWeekTemp.* {round ( (ReadingsNum($name,'appCountsPerWeekTemp',0)*0.50505),0)}

setstate CN.Regenmenge letzte Stunde Error evaluating CN.Regenmenge userReading regenstunde: Not enough arguments for main::round at (eval 2081086) line 1, near "))"\
l/m² | \
gestern Error evaluating CN.Regenmenge userReading regentag: Not enough arguments for main::round at (eval 1667100) line 1, near "))"\
l/m² | \
lfd. Woche Error evaluating CN.Regenmenge userReading regenwoche: Not enough arguments for main::round at (eval 1478924) line 1, near "0.50505) "\
l/m²


erhalte aber iimmer die angegebene Fehlermeldug.

geht round nicht so:

{round  ( (ReadingsNum($name,'appCountsPerDay',0)*0.505053),0)}

matze1999
Titel: Antw:readingsNum mit Berechnung und round?
Beitrag von: matze1999 am 25 Juni 2022, 15:19:23
ich hab jetzt mal etwas geändert, damit geht der erste Wert aber nicht die beiden anderen, wobei der Fehler auf  "near .." etwas hinweist, was gar nicht mehr da ist. Oder muss das erst getriggert werden, damit die Berechnung neu ausgeführt wird?

attr CN.Regenmenge userReadings regenstunde:appCountsPerHour.* {round ( (ReadingsNum($name,'appCountsPerHour',0)*0.50505,0)},\
regentag:appCountsPerDay.* {round ( (ReadingsNum($name,'appCountsPerDay',0)*0.50505,0)},\
regenwoche:appCountsPerWeekTemp.* {round ( (ReadingsNum($name,'appCountsPerWeekTemp',0)*0.50505,0)}

setstate CN.Regenmenge letzte Stunde 0 l/m² | \
gestern Error evaluating CN.Regenmenge userReading regentag: Not enough arguments for main::round at (eval 1667100) line 1, near "))"\
l/m² | \
lfd. Woche Error evaluating CN.Regenmenge userReading regenwoche: Not enough arguments for main::round at (eval 1478924) line 1, near "0.50505) "\
l/m²


near "))" und near "0.50505) gibt es gar nicht mehr?

matze1999
Titel: Antw:readingsNum mit Berechnung und round?
Beitrag von: matze1999 am 25 Juni 2022, 15:49:17
Jetzt habe ich den Zustand vor dem "round" wieder hergestellt, und immer noch die Fehlermeldung vom "round"?

defmod CN.Regenmenge HourCounter HUESensor40:closed
attr CN.Regenmenge devStateStyle style=";;font-size:20px;;;;;;;;"
attr CN.Regenmenge group Bewässerung
attr CN.Regenmenge icon weather_rain_meter
attr CN.Regenmenge room Bewässerung,Garten,Schalter
attr CN.Regenmenge sortby 4
attr CN.Regenmenge stateFormat letzte Stunde regenstunde l/m² | \
gestern regentag l/m² | \
lfd. Woche regenwoche l/m²
attr CN.Regenmenge userReadings regenstunde:appCountsPerHourTemp.* {ReadingsNum($name,'appCountsPerHour',0)*0.50505 },\
regentag:appCountsPerDayTemp.* {ReadingsNum($name,'appCountsPerDay',0)*0.50505 },\
regenwoche:appCountsPerWeekTemp.* {ReadingsNum($name,'appCountsPerMonthTemp',0)*0.50505 },

setstate CN.Regenmenge letzte Stunde 0 l/m² | \
gestern Error evaluating CN.Regenmenge userReading regentag: Not enough arguments for main::round at (eval 1667100) line 1, near "))"\
l/m² | \
lfd. Woche 3.0303 l/m²


matze1999
Titel: Antw:readingsNum mit Berechnung und round?
Beitrag von: betateilchen am 25 Juni 2022, 15:49:40
Gefühlt sind da viel zu viele Klammern im Einsatz.

Außerdem kann ReadingsNum() von Haus aus selbst runden:

Zitat
ReadingsNum(<devicename>,<reading>, <defaultvalue>,<round>)
Returns the first number from a reading value. Round it to <round> decimal places (optional parameter). If <round> exeeds the length of the factional part, 0's will be padded.

Ok - Du willst mit ReadingsNum weiterrechnen und dann das Ergbenis runden, da hilft die eingebaute Rundung natürlich nichts.
Titel: Antw:readingsNum mit Berechnung und round?
Beitrag von: betateilchen am 25 Juni 2022, 15:53:21
Das hier ist definitiv falsch:


{round ( (ReadingsNum($name,'appCountsPerDay',0)*0.50505,0)}


Zähl doch einfach mal die Klammern, die aufgemacht werden und dann die, die geschlossen werden - da steht es 3:2 - es fehlt also eine.
Außerdem ist das schon in sich falsch - falsche Klammersetzung.

Probier mal so:


{ round( ReadingsNum($name,'appCountsPerDay',0) * 0.50505, 0 ) }

Titel: Antw:readingsNum mit Berechnung und round?
Beitrag von: matze1999 am 25 Juni 2022, 16:15:19
ja, scheinen die Klammern gewesen zu sein, jetzt geht round.

und auch die Fehlermeldung habe ich jetzt weg bekommen:

CN.Regenmenge userReadings regenstunde:appCountsPerHourTemp.* {ReadingsNum($name,'appCountsPerHour',0)*0.50505 },\

man muss natürlich den richtigen Trigger einsetzen  >:(

hier jetzt richtig:

defmod CN.Regenmenge HourCounter HUESensor40:closed
attr CN.Regenmenge devStateStyle style=";;font-size:20px;;;;;;;;"
attr CN.Regenmenge group Bewässerung
attr CN.Regenmenge icon weather_rain_meter
attr CN.Regenmenge room Bewässerung,Garten,Schalter
attr CN.Regenmenge sortby 4
attr CN.Regenmenge stateFormat letzte Stunde regenstunde l/m² | \
gestern regentag l/m² | \
lfd. Woche regenwoche l/m²
attr CN.Regenmenge userReadings regenstunde:appCountsPerHour.* {round( ReadingsNum($name,'appCountsPerHour',0)*0.50505, 0 ) },\
regentag:appCountsPerDay.* {round( ReadingsNum($name,'appCountsPerDay',0) * 0.50505, 0 ) },\
regenwoche:appCountsPerWeekTemp.* {round( ReadingsNum($name,'appCountsPerWeekTemp',0)*0.50505,0 ) },


matze1999
Titel: Antw:readingsNum mit Berechnung und round?
Beitrag von: betateilchen am 25 Juni 2022, 16:27:40
Zitat von: matze1999 am 25 Juni 2022, 16:15:19
man muss natürlich den richtigen Trigger einsetzen

Das ist aber lediglich ein Logikfehler, der keinen Einfluß auf den ursprünglichen Syntaxfehler im perl Code hat  ;)
Titel: Antw:[gelöst]readingsNum mit Berechnung und round?
Beitrag von: matze1999 am 26 Juni 2022, 16:15:16
ja, das stimmt, aber man kann die richtige Syntax haben, wenn man den falschen Trigger anwendet, tut sich trotzdem nichts.

matze1999