Hallo zusammen,
ich lese schon lange erfolgreich im Forum mit und habe bereits einiges erfolgreich umsetzen können.
Nun habe ich ein Phänomen festgestellt, welches ich nicht gelöste bekomme.
Aus 3 Temperatursensoren möchte ich die Tiefsttemperatur ermitteln.
So lange alle Temperaturen die gleiche Zifferanzahl haben:
bspw.
- Temperatursensor_Schuppen 10.5
- Temperatursensor_Vordach 11.2
- netatmo_M02_00_00_17_87_e4 10.9
funktioniert alles wie es soll.
Habe ich allerdings unterschiedliche Zifferanzahlen
bspw.
- Temperatursensor_Schuppen 10.2
- Temperatursensor_Vordach 9.2
- netatmo_M02_00_00_17_87_e4 9.8
erhalte ich ein falsches Ergebnis. Hier ist die Tiefsttemperatur 10.2. Richtig wäre aber 9.2.
Hier ein List :
Internals:
DEF ##
MODEL FHEM
NAME Tiefsttemperatur
NR 393
NTFY_ORDER 50-Tiefsttemperatur
STATE 10.2 C
TYPE DOIF
READINGS:
2018-10-12 10:46:10 cmd 0
2018-10-12 10:46:10 mode enabled
2018-10-19 08:24:41 state 10.2 C
Regex:
STATE:
Temperatursensor_Schuppen:
STATE:
temperature ^Temperatursensor_Schuppen$:^temperature:
Temperatursensor_Vordach:
STATE:
temperature ^Temperatursensor_Vordach$:^temperature:
netatmo_M02_00_00_17_87_e4:
STATE:
temperature ^netatmo_M02_00_00_17_87_e4$:^temperature:
condition:
devices:
do:
0:
helper:
event temperature: 9.2,battery: ok,T: 9.2 BAT: ok
globalinit 1
last_timer 0
sleeptimer -1
triggerDev Temperatursensor_Vordach
DOIF_eventas:
state: 10.2 C
triggerEvents:
temperature: 9.2
battery: ok
T: 9.2 BAT: ok
triggerEventsState:
temperature: 9.2
battery: ok
state: T: 9.2 BAT: ok
itimer:
perlblock:
uiState:
uiTable:
Attributes:
room Haus
state {(sprintf("%.1f C",min([Temperatursensor_Schuppen:temperature],[Temperatursensor_Vordach:temperature],[netatmo_M02_00_00_17_87_e4:temperature])))}
Worin liegt mein Fehler?
Gruß Jörg
Das sieht mir danach aus, dass die Werte alphanumerisch verglichen werden und dann ist der mit "1" beginnende Wert halt kleiner als "9".
Lösung: ReadingsVal verwenden, z.B. ReadingsVal("Temperatursensor_Schuppen","temperature",0) statt "[Temperatursensor_Schuppen:temperature]"
Ich gebe zu ich kenne mich mit DOIF nicht so gut aus, aber wo genau steht das Du den kleinsten Wert der 3 ermittelten Werte haben möchtest?
Das DOIF hat glaube noch nicht mal ne Definition.
Es gibt eine Hilfsfunktion in 99_Utils.pm, nennt sich
Zitat
minNum(num1, num2, ...)</b><br>returns the lowest value from a given
list (sorted numeric)
Zitat von: CoolTux am 19 Oktober 2018, 10:44:04
Ich gebe zu ich kenne mich mit DOIF nicht so gut aus, aber wo genau steht das Du den kleinsten Wert der 3 ermittelten Werte haben möchtest?
Das DOIF hat glaube noch nicht mal ne Definition.
Zitat
Attributes:
state {(sprintf("%.1f C",min([Temperatursensor_Schuppen:temperature],[Temperatursensor_Vordach:temperature],[netatmo_M02_00_00_17_87_e4:temperature])))}
Ich hatte mich hieran orientiert: https://forum.fhem.de/index.php/topic,38913.msg310770.html#msg310770
Zitat von: dkreutz am 19 Oktober 2018, 10:33:01
Lösung: ReadingsVal verwenden, z.B. ReadingsVal("Temperatursensor_Schuppen","temperature",0) statt "[Temperatursensor_Schuppen:temperature]"
Danke. Das probier ich einmal aus.
Alles klar. Ich glaube ich sehe es.
Eigentlich hast du fast alles richtig gemacht.
Nimm einfach statt der Funktion min die Du da auf rufst die Funktion minNum wie ich erwähnt habe. Dann sollte es gehen.
Den Rest kannst du ja erstmal so lassen. Also kein ReadingsVal nehmen sondern erstmal so testen.
Zitat von: CoolTux am 19 Oktober 2018, 10:44:04
Das DOIF hat glaube noch nicht mal ne Definition.
https://fhem.de/commandref_DE.html#DOIF_aggregation
Hat Damian doch alles perfekt dokumentiert.
Ciao, -MN
Zitat von: Morgennebel am 19 Oktober 2018, 12:02:17
https://fhem.de/commandref_DE.html#DOIF_aggregation
Hat Damian doch alles perfekt dokumentiert.
Ciao, -MN
Danke für den Schubser. :)
Hab`s jetzt so gelöst.
Internals:
CFGFN
DEF ##
MODEL FHEM
NAME doif.Tiefsttemperatur
NR 731
NTFY_ORDER 50-doif.Tiefsttemperatur
STATE 13.7
TYPE DOIF
READINGS:
2018-10-19 13:03:39 cmd 0
2018-10-19 13:03:39 mode enabled
2018-10-19 13:16:44 state 13.7
Regex:
STATE:
:
STATE:
":temperature" :temperature
condition:
devices:
do:
0:
helper:
event temperature: 14.4,battery: ok,T: 14.4 BAT: ok
globalinit 1
last_timer 0
sleeptimer -1
triggerDev Temperatursensor_Schuppen
DOIF_eventas:
state: 13.7
triggerEvents:
temperature: 14.4
battery: ok
T: 14.4 BAT: ok
triggerEventsState:
temperature: 14.4
battery: ok
state: T: 14.4 BAT: ok
itimer:
uiState:
uiTable:
Attributes:
room Haus
state [#min:d1:":temperature":temperature:$group eq "Aussentemperatur"]
Schönes Wochenende.