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