[gelöst]readingsNum mit Berechnung und round?

Begonnen von matze1999, 25 Juni 2022, 14:43:39

Vorheriges Thema - Nächstes Thema

matze1999

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

matze1999

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

matze1999

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

betateilchen

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

betateilchen

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

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

matze1999

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

betateilchen

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

matze1999

ja, das stimmt, aber man kann die richtige Syntax haben, wenn man den falschen Trigger anwendet, tut sich trotzdem nichts.

matze1999