[gelöst] UserReading um den max-wert aus 3 weiteren Readings auszugeben

Begonnen von Thomas41587, 24 April 2020, 07:29:29

Vorheriges Thema - Nächstes Thema

Thomas41587

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  :(

Wzut

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

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Thomas41587

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

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

frank

entferne mal das leerzeichen zwischen den 2 userreadings.
nur ein komma.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Thomas41587

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