Hallo zusammen,
ich möchte in einem dummy, der 3 Helligkeitssensoren als readings hat ein weiteres reading anlegen, das mir immer den größten Wert der 3 Helligkeitswerte ausgibt. Allerdings scheitere ich hier schon am Grundsatz. Mit folgendem code wellte ich zunächst mal die readings einlesen und dann (ohne berechnung) direkt wieder ausgeben:
attr dummy_esszimmer_sensorbox userReadings temperatur {sprintf "%.1f", (ReadingsVal("dummy_esszimmer_sensorbox","temperatur1","0") + ReadingsVal("dummy_esszimmer_sensorbox","temperatur2","0"))/2;;}, maxhelligkeit{\
my $eins ReadingsVal("dummy_esszimmer_sensorbox","helligkeit1","0");;\
my $zwei ReadingsVal("dummy_esszimmer_sensorbox","helligkeit2","0");;\
my $drei ReadingsVal("dummy_esszimmer_sensorbox","helligkeit3","0");;\
return $drei}
Das userReadings temperatur funktioniert nach wie vor. Aber maxhelligkeit liefert mir nichts, obwohl helligkeit1-3 sich schon mehrfach geändert hat. Was mache ich hier falsch? Bevor dieser "basic" Ansatz nicht funktioniert, brauche ich ja gar nicht erst mit dem rechnen anfangen :(
also so nicht :
my $drei ReadingsVal("dummy_esszimmer_sensorbox","helligkeit3","0");;\
minimum
my $drei = ReadingsVal("dummy_esszimmer_sensorbox","helligkeit3","0");;\
aber da sind noch andere Baustellen : Trigger ? fehlt , wäre es meines sähe es in etwa so aus :
attr dummy_esszimmer_sensorbox userReadings temperatur:temperatur(1|2).* {\
sprintf ('%.1f', (ReadingsNum($NAME,'temperatur1',0) + ReadingsNum($NAME,'temperatur2',0)/2;;}, \
maxhelligkeit:maxhelligkeit(1|2|3).* {\
my @ar = (ReadingsNum($NAME,'helligkeit1',0) , ReadingsNum($NAME,'helligkeit2',0) , ReadingsNum($NAME,'helligkeit3',0));;\
return max('???', @ar);;}
Danke für die schnelle Antwort!
Leider klappt es damit nicht so ganz :( nachdem ich noch zwei fehlende Klammern ergänzt habe und den Namen der 3 helligkeitswerte, sieht der Code jetzt so aus:
attr dummy_esszimmer_sensorbox userReadings temperatur:temperatur(1|2).* {\\
sprintf ('%.1f', (ReadingsNum($NAME,'temperatur1',0) + ReadingsNum($NAME,'temperatur2',0))/2);;;;}, \\
maxhelligkeit:helligkeit(1|2|3).* {\\
my @ar = (ReadingsNum($NAME,'helligkeit1',0) , ReadingsNum($NAME,'helligkeit2',0) , ReadingsNum($NAME,'helligkeit3',0));;;;\\
return max('???', @ar);;;;}
Aber er liefert jetzt "temperatur SCALAR(0x6dfedd0)"
maxhelligkeit fehlt weiterhin in der Liste der readings
schau dir doch mal das hier an:
https://forum.fhem.de/index.php/topic,110165.msg1041882.html#msg1041882
entferne mal das leerzeichen zwischen den 2 userreadings.
nur ein komma.
Zitat von: justme1968 am 24 April 2020, 08:45:22
schau dir doch mal das hier an:
https://forum.fhem.de/index.php/topic,110165.msg1041882.html#msg1041882
Das sieht sehr gut aus, da schau ich direkt mal rein. Ich denke damit komme ich ans Ziel
Leerzeichen entfernen hat leider nichts gebracht.
Edit: Ja damit kommt man ans Ziel:
attr dummy_esszimmer_sensorbox userReadings temperatur {sprintf "%.1f", (ReadingsVal("dummy_esszimmer_sensorbox","temperatur1","0") + ReadingsVal("dummy_esszimmer_sensorbox","temperatur2","0"))/2;;;;}
defmod cmobine_dummy_esszimmer_sensorbox combine dummy_esszimmer_sensorbox:maxhelligkeit OR dummy_esszimmer_sensorbox:helligkeit1 OR dummy_esszimmer_sensorbox:helligkeit2 OR dummy_esszimmer_sensorbox:helligkeit3 = setreading dummy_esszimmer_sensorbox maxhelligkeit $RESULT