[Gelöst] Ermittlung Tiefsttemperatur

Begonnen von mobiljoe123, 19 Oktober 2018, 08:59:08

Vorheriges Thema - Nächstes Thema

mobiljoe123

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
Raspi 2; HM; MAX!; RFXtrx

dkreutz

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]"
Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai

CoolTux

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)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

mobiljoe123

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.
Raspi 2; HM; MAX!; RFXtrx

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Morgennebel

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
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

mobiljoe123

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.
Raspi 2; HM; MAX!; RFXtrx