FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: istler am 22 Juli 2021, 00:27:02

Titel: [gelöst] Temperatur-Sensoren gruppieren und min. Ausgeben: wie?
Beitrag von: istler am 22 Juli 2021, 00:27:02
Hallo,

ich möchte gern eine Benachrichtigung haben, wenn die Außentemperatur höher ist als die innen Temperatur, damit ich dann die Fenster schließen kann. :-)
Dazu habe ich mir dieses THRESHOLD gebaut:

Internals:
   DEF        LaCrosse_Schlafzimmer:temperature:1:LaCrosse_03:temperature:  dum_window|set @ open| set @ close
   FUUID      60f74334-f33f-bde3-3c9d-fcc768f145cd501f
   NAME       th_temp_in_out_OG
   NR         74
   NTFY_ORDER 50-th_temp_in_out_OG
   STATE      external 18.2
   TYPE       THRESHOLD
   cmd1_gt    set dum_window open
   cmd2_lt    set dum_window close
   cmd_default 0
   hysteresis 1
   offset     8
   sensor     LaCrosse_Schlafzimmer
   sensor_reading temperature
   target_reading temperature
   target_sensor LaCrosse_03
   READINGS:
     2021-07-21 23:50:47   cmd             cmd2_lt
     2021-07-21 23:50:47   desired_value   18.2
     2021-07-21 23:50:42   mode            external
     2021-07-21 23:40:33   sensor_value    23.4
     2021-07-21 23:50:47   state           external 18.2
     2021-07-21 23:50:47   threshold_max   26.2
     2021-07-21 23:50:47   threshold_min   25.2
Attributes:
   number_format %.1f
   state_format _m _dv


Das funktioniert auch soweit erst Mal.

Nun habe ich aber im EG nicht nur ein Thermometer sondern mehrere. Und nun hätte ich gerne das das THRESHOLD auf den Min-Wert der Thermomenter-Gruppe EG triggert.
Soweit ich das verstanden habe, gibt es dafür die "structure". Oder?
Dazu habe ich folgendes structure definiert:

Internals:
   ATTR       temp_EG_s
   CHANGEDCNT 0
   DEF        temp_EG_s LaCrosse_Arbeitszimmer LaCrosse_08
   FUUID      60f5f552-f33f-bde3-2382-3becb3d38011d824
   NAME       s_temp_EG
   NOTIFYDEV  global,LaCrosse_08,LaCrosse_Arbeitszimmer
   NR         72
   NTFY_ORDER 50-s_temp_EG
   STATE      undefined
   TYPE       structure
   READINGS:
     2021-07-22 00:05:05   LastDevice      LaCrosse_Arbeitszimmer
     2021-07-22 00:05:05   LastDevice_Abs  LaCrosse_Arbeitszimmer
     2021-07-22 00:05:05   state           undefined
Attributes:


Das structure_map habe ich auch gemacht:

attr LaCrosse_Arbeitszimmer temp_EG_s_map temperature
attr LaCrosse_08 temp_EG_s_map temperature


Trotzdem ist der state undefined.... :-(
Leider liefert dieses Sturct nur einen Fehler:
-> no reading yet for s_temp_EG temperature
Und der State ist nur undefined

Was mache ich hier falsch? Ist ein Sturcture nicht die richtige Wahl?
Ich hätte jetzt das THREASHOLD mit dem structure so gemacht:

Internals:
   DEF        s_temp_EG:temperature:1:LaCrosse_03:temperature:8  dum_window_2|set @ open| set @ close
   FUUID      60f7e24c-f33f-bde3-6a2d-16cc8696c16ef86f
   NAME       th_temp_in_out_EG
   NR         84
   NTFY_ORDER 50-th_temp_in_out_OG_T
   STATE      initialized
   TYPE       THRESHOLD
   cmd1_gt    set dum_window_2 open
   cmd2_lt    set dum_window_2 close
   cmd_default 0
   hysteresis 1
   offset     8
   sensor     s_temp_EG
   sensor_reading temperature
   target_reading temperature
   target_sensor LaCrosse_03
   READINGS:
     2021-07-22 00:10:01   cmd             wait for next cmd
     2021-07-21 23:39:29   desired_value   15
     2021-07-22 00:10:01   mode            external
     2021-07-21 13:10:43   sensor_value    23.2
     2021-07-21 23:39:29   state           active 15
     2021-07-21 23:39:29   threshold_max   15
     2021-07-21 23:39:29   threshold_min   14
Attributes:
   number_format %.1f
   state_format _m _dv



Über hilfe würde ich mich freuen.

Danke!

Schöne Grüße
Maik

P.S.:
Hier noch die Ausgabe von einem Temperatursensor:
Internals:
   DEF        2E
   FUUID      5cf82691-f33f-bde3-4c74-e2067eeeacfc6d44
   IODev      myJeeLink
   LASTInputDev myJeeLink
   LaCrosse_lastRcv 2021-07-22 00:21:04
   MSGCNT     6
   NAME       LaCrosse_08
   NR         41
   STATE      T: 22.4 H: 63
   TYPE       LaCrosse
   addr       2E
   battery_new 0
   corr1      0
   corr2      0
   myJeeLink_MSGCNT 32
   myJeeLink_RAWMSG OK 9 46 1 4 200 63
   myJeeLink_TIME 2021-07-22 00:21:30
   previousH  63
   previousT  22.4
   sensorType 0=T(H)
   READINGS:
     2021-07-22 00:10:01   IODev           myJeeLink
     2021-07-22 00:21:04   battery         ok
     2021-07-22 00:21:04   humidity        63
     2021-07-21 23:51:43   state           T: 22.4 H: 63
     2021-07-22 00:21:04   temperature     22.4
Attributes:
   IODev      myJeeLink
   alias      Wohnzimmer
   doAverage  1
   event-min-interval temperature:300,humidity:300
   event-on-change-reading temperature:0.1,humidity:1
   room       LaCrosse
   temp_EG_s_map temperature
   userattr   struct_temp struct_temp_map structexclude temp_EG_s temp_EG_s_map temperature temperature_map

Titel: Antw:Temperatur-Sensoren gruppieren und min. Ausgeben: wie?
Beitrag von: Otto123 am 22 Juli 2021, 09:50:34
Hallo Maik,

Du kannst mit einer structure gleiche Werte zusammenfassen: Jedes Fenster closed -> structure closed | ein Fenster open -> structure undefined (oder open)

Du willst das Minimum der Temperaturwerte von mehren Sensoren haben, das musst Du in einem Device selbst berechnen: userReadings oder notify/dummy oder vielleicht noch was anderes.

Gruß Otto

Edit: Andre zieht natürlich den Joker aus dem Ärmel. ;) Ich habe derweil noch die "zu Fuß" Variante gestrickt und poste sie noch ...
Beispiel für die Kommandozeile, könnte man bei einem Sensor als userReadings einbauen (deswegen der kurze Umweg über $name).
Die erste zeile nur zur Kontrolle, damit man weiß man hat das Array richtig, die zweite gibt den kleinsten Wert aus.
{my $name = 'SensorAK';; my @arr = ( ReadingsNum($name,'temperature',0), ReadingsNum('SensorGZ_Climate','measured-temp',0), ReadingsNum('SensorR1_Climate','measured-temp',0), ReadingsNum('SensorR2_Climate','measured-temp',0) );; return join ',',@arr}
{my $name = 'SensorAK';; my @arr = ( ReadingsNum($name,'temperature',0), ReadingsNum('SensorGZ_Climate','measured-temp',0), ReadingsNum('SensorR1_Climate','measured-temp',0), ReadingsNum('SensorR2_Climate','measured-temp',0) );; return min(@arr)}
Titel: Antw:Temperatur-Sensoren gruppieren und min. Ausgeben: wie?
Beitrag von: justme1968 am 22 Juli 2021, 09:53:17
z.b. das hier: https://forum.fhem.de/index.php/topic,110165.msg1041882.html (https://forum.fhem.de/index.php/topic,110165.msg1041882.html) oder über rechnen mit readingsGroup. oder über DOIF.
Titel: Antw:Temperatur-Sensoren gruppieren und min. Ausgeben: wie?
Beitrag von: istler am 22 Juli 2021, 23:56:16
Hallo,

Danke für Infos. Dann ware ich mit den Structure doch auf dem Holzweg...
Aber mit dem "Joker" combine bin ich weiter gekommen!

Der Threshold funktioniert auch, das kann ich an den Zuständen meiner Dummy Fenster sehen.
Als nächstes soll die Aufforderung / Warnung dann per Signal raus gehen. Mal gucken wie weit ich da komme.

Schöne Grüße
Maik