Hallo zusammen,
ich verwende zwei MAX! Fensterkontakte. Einen an der Terrassentür und einen an der Dachluke. Beide sollen signalisieren, wenn Sie geöffnet oder geschlossen werden. Sofern die Aussentemperatur < die Raumtemperatur (Wohnzimmer, kleines Bad) ist sollte für 15 Minuten alle fünf Minuten eine Warnung ausgegeben werden und die Heizung abgeschaltet werden ;-). Danach Alle Stunde 1 Minute nach der vollen Stunde. Ich habe auch schon ein wenig etwas, aber das arbeitet leider fehlerhaft wie mich @Wzut schon im anderen Bereich (https://forum.fhem.de/index.php/topic,109985.0.htm) l hingewiesen hat.
Was ich bisher habe sind die Kontakte:
Kontakt_Garten
Internals:
DEF ShutterContact 0e45e3
FUUID 5c500794-f33f-a44f-790c-6bf05a1b5e2d8a88
IODev cm
LASTInputDev cm
MSGCNT 82
NAME Kontakt_Garten
NR 39
RSSI -64.5
STATE opened
TYPE MAX
addr 0e45e3
cm_MSGCNT 82
cm_TIME 2020-04-27 09:18:57
devtype 4
rferror 0
type ShutterContact
READINGS:
2020-04-27 09:18:57 RSSI -64.5
2020-04-27 09:18:57 battery ok
2020-04-27 09:18:57 batteryState ok
2019-11-16 13:19:19 firmware 1.0
2019-11-16 13:19:18 groupid 0
2019-11-16 13:19:19 msgcnt 1
2020-04-27 09:18:57 onoff 1
2020-04-27 09:18:57 rferror 0
2020-04-27 09:18:57 state opened
2019-11-16 13:19:19 testresult 0
helper:
io:
CUL868:
raw Z0B6000300E45E30000000002
rssi -64.5
time 1587971937.58594
internals:
interfaces switch_active;battery
Attributes:
IODev cm
devStateIcon opened:fts_door_open closed:fts_door:FS20.off
icon control_building_modern_s_2og_eg
model ShutterContact
room Wohnzimmer
Kontakt_Dachluke
Internals:
DEF ShutterContact 0f4f03
FUUID 5c500794-f33f-a44f-ef7b-102db6dabd1913b5
IODev cm
LASTInputDev cm
MSGCNT 165
NAME Kontakt_Dachluke
NR 43
RSSI -68.5
STATE opened
TYPE MAX
addr 0f4f03
backend cm
cm_MSGCNT 165
cm_TIME 2020-04-27 11:24:19
devtype 4
rferror 0
serial LEQ0432777
type ShutterContact
READINGS:
2020-04-27 11:24:19 RSSI -68.5
2020-04-27 11:24:19 battery ok
2020-04-27 11:24:19 batteryState ok
2020-04-23 17:56:26 firmware 1.0
2020-04-23 17:56:26 groupid 0
2020-04-23 17:56:26 msgcnt 185
2020-04-27 11:24:19 onoff 1
2020-04-27 11:24:19 rferror 0
2020-04-27 11:24:19 state opened
2020-04-23 17:56:26 testresult 0
helper:
io:
CUL868:
raw Z0B0106300F4F031234560012
rssi -68.5
time 1587979459.45797
internals:
interfaces switch_active;battery
Attributes:
IODev cm
devStateIcon opened:fts_light_dome_open closed:fts_light_dome:FS20.off
model ShutterContact
room Bad_klein
Temperatur Sender
Garten:
Internals:
CODE 68
CUL433_MSGCNT 9898
CUL433_RAWMSG TXAE89430436
CUL433_RSSI -50.5
CUL433_TIME 2020-04-27 12:32:29
DEF 68
FUUID 5c5007a1-f33f-a44f-5003-03d521ef649e7933
LASTInputDev CUL433
MSGCNT 9898
NAME TFA08
NR 255
STATE T: 21.4 H: 43.0
TYPE CUL_TX
corr 0
lastH 1587983549
lastT 1587982794
minsecs 0
READINGS:
2020-04-27 12:32:29 humidity 43.0
2020-04-27 12:32:29 state T: 21.4 H: 43.0
2020-04-27 12:19:54 temperature 21.4
Attributes:
group Temperatur
icon control_building_outside
room Garten
Wohnzimmer:
Internals:
CODE 20
CUL433_MSGCNT 13089
CUL433_RAWMSG TXAE2940040A
CUL433_RSSI -62.5
CUL433_TIME 2020-04-27 12:35:24
DEF 20
FUUID 5c50079a-f33f-a44f-9cc8-5aa8199b81afba98
LASTInputDev CUL433
MSGCNT 13089
NAME TFA07
NR 168
STATE T: 21.4 H: 40.0
TYPE CUL_TX
corr 0
lastH 1587983724
lastT 1587983309
minsecs 0
READINGS:
2020-04-27 12:35:24 humidity 40.0
2020-04-27 12:35:24 state T: 21.4 H: 40.0
2020-04-27 12:28:29 temperature 21.4
Attributes:
group Temperatur
icon control_building_modern_s_2og_eg
room Wohnzimmer
kleines Bad
Internals:
CODE 75
CUL433_MSGCNT 12579
CUL433_RAWMSG TXA09771271C
CUL433_RSSI -51
CUL433_TIME 2020-04-27 12:35:19
DEF 75
FUUID 5c500794-f33f-a44f-ac44-6e898ac7a55b2c10
LASTInputDev CUL433
MSGCNT 12579
NAME TFA01
NR 49
STATE T: 21.2 H: 40.0
TYPE CUL_TX
corr 0
lastH 1587983541
lastT 1587983719
minsecs 0
READINGS:
2020-04-27 12:32:21 humidity 40.0
2020-04-27 12:35:19 state T: 21.2 H: 40.0
2020-04-27 12:35:19 temperature 21.2
Attributes:
group Temperatur
icon control_building_modern_s_2og_og2
room Bad_klein
Folgende DOIF´s habe ich schon:
Warnung_Dachluke_doif
Internals:
DEF ([TFA01:temperature] > [TFA08:temperature] and [Kontakt_Dachluke] eq "opened") (set Warnung_Dachluke on) (set gong_MP3 playTone 012) DOELSE (set Warnung_Dachluke off, set gong_MP3 playTone 013)
FUUID 5c5007a6-f33f-a44f-ff5b-778240baf9017edc
MODEL FHEM
NAME Warnung_Dachluke_doif
NOTIFYDEV TFA08,Kontakt_Dachluke,global,TFA01
NR 401
NTFY_ORDER 50-Warnung_Dachluke_doif
STATE cmd_2
TYPE DOIF
VERSION 21224 2020-02-18 18:45:49
READINGS:
2020-04-27 12:38:21 Device TFA01
2020-04-27 10:16:53 cmd 2
2020-04-27 10:16:53 cmd_event TFA01
2020-04-27 10:16:53 cmd_nr 2
2020-04-27 12:22:34 e_Kontakt_Dachluke_STATE opened
2020-04-27 12:38:21 e_TFA01_temperature 21.2
2020-04-27 12:34:25 e_TFA08_temperature 21.3
2020-04-27 10:16:53 state cmd_2
2020-04-27 10:15:52 wait_timer no timer
Regex:
accu:
cond:
Kontakt_Dachluke:
0:
&STATE ^Kontakt_Dachluke$
TFA01:
0:
temperature ^TFA01$:^temperature:
TFA08:
0:
temperature ^TFA08$:^temperature:
attr:
cmdState:
repeatsame:
3
0
wait:
0:
0
60
1:
0
waitdel:
condition:
0 ::ReadingValDoIf($hash,'TFA01','temperature') > ::ReadingValDoIf($hash,'TFA08','temperature') and ::InternalDoIf($hash,'Kontakt_Dachluke','STATE') eq "opened"
do:
0:
0 set Warnung_Dachluke on
1 set gong_MP3 playTone 012
1:
0 set Warnung_Dachluke off, set gong_MP3 playTone 013
helper:
DEVFILTER ^global$|^TFA08$|^Kontakt_Dachluke$|^TFA01$
NOTIFYDEV global|TFA08|Kontakt_Dachluke|TFA01
event T: 21.2 H: 39.0,temperature: 21.2
globalinit 1
last_timer 0
sleepdevice TFA01
sleepsubtimer -1
sleeptimer -1
timerdev TFA01
timerevent T: 21.2 H: 39.0,temperature: 21.2
triggerDev TFA01
timerevents:
T: 21.2 H: 39.0
temperature: 21.2
timereventsState:
state: T: 21.2 H: 39.0
temperature: 21.2
triggerEvents:
T: 21.2 H: 39.0
temperature: 21.2
triggerEventsState:
state: T: 21.2 H: 39.0
temperature: 21.2
internals:
all Kontakt_Dachluke:STATE
perlblock:
readings:
all TFA01:temperature TFA08:temperature
trigger:
uiState:
uiTable:
Attributes:
repeatsame 3:0
room Bad_klein
wait 0,60:0
Warnung_Gartentuer_doif
Internals:
DEF ([TFA07:temperature] > [TFA08:temperature] and [Kontakt_Garten] eq "opened") (set Warnung_Gartentuer on) (set gong_MP3 playTone 010) DOELSE (set Warnung_Gartentuer off, set gong_MP3 playTone 011)
FUUID 5c5007a6-f33f-a44f-e048-8c3e7799b6298d4f
MODEL FHEM
NAME Warnung_Gartentuer_doif
NOTIFYDEV TFA08,Kontakt_Garten,global,TFA07
NR 399
NTFY_ORDER 50-Warnung_Gartentuer_doif
STATE cmd_1
TYPE DOIF
VERSION 21224 2020-02-18 18:45:49
READINGS:
2020-04-27 12:39:21 Device TFA07
2020-04-27 12:40:26 cmd 1.2
2020-04-27 12:39:21 cmd_count 3
2020-04-27 12:40:26 cmd_event TFA07
2020-04-27 12:40:26 cmd_nr 1
2020-04-27 12:40:26 cmd_seqnr 2
2020-04-27 09:18:58 e_Kontakt_Garten_STATE opened
2020-04-27 12:39:21 e_TFA07_temperature 21.5
2020-04-27 12:34:25 e_TFA08_temperature 21.3
2020-04-27 12:40:26 state cmd_1
2020-04-27 12:40:26 wait_timer no timer
Regex:
accu:
cond:
Kontakt_Garten:
0:
&STATE ^Kontakt_Garten$
TFA07:
0:
temperature ^TFA07$:^temperature:
TFA08:
0:
temperature ^TFA08$:^temperature:
attr:
cmdState:
repeatsame:
3
0
wait:
0:
0
60
1:
0
waitdel:
condition:
0 ::ReadingValDoIf($hash,'TFA07','temperature') > ::ReadingValDoIf($hash,'TFA08','temperature') and ::InternalDoIf($hash,'Kontakt_Garten','STATE') eq "opened"
do:
0:
0 set Warnung_Gartentuer on
1 set gong_MP3 playTone 010
1:
0 set Warnung_Gartentuer off, set gong_MP3 playTone 011
helper:
DEVFILTER ^global$|^Kontakt_Garten$|^TFA08$|^TFA07$
NOTIFYDEV global|Kontakt_Garten|TFA08|TFA07
event T: 21.5 H: 40.0,temperature: 21.5
globalinit 1
last_timer 0
sleepdevice TFA07
sleepsubtimer -1
sleeptimer -1
timerdev TFA07
timerevent T: 21.5 H: 40.0,temperature: 21.5
triggerDev TFA07
DOIF_eventa:
cmd_nr: 1
cmd_seqnr: 2
cmd_event: TFA07
cmd_1
DOIF_eventas:
cmd_nr: 1
cmd_seqnr: 2
cmd_event: TFA07
state: cmd_1
timerevents:
T: 21.5 H: 40.0
temperature: 21.5
timereventsState:
state: T: 21.5 H: 40.0
temperature: 21.5
triggerEvents:
T: 21.5 H: 40.0
temperature: 21.5
triggerEventsState:
state: T: 21.5 H: 40.0
temperature: 21.5
internals:
all Kontakt_Garten:STATE
perlblock:
readings:
all TFA07:temperature TFA08:temperature
trigger:
uiState:
uiTable:
Attributes:
repeatsame 3:0
room Wohnzimmer
wait 0,60:0
In diesen DOIF´s stecken halt die ersten Probleme mit den Temperaturen.
Vielleicht könntet Ihr mir hier schon auf das Pferd helfen.
Ich schalte die Heizung auch in Kombination mit An- Abwesenheiten von Personen. Das muss ich ja dann auch noch kombinieren mit den Warnungen, das die Heizung nicht eingeschaltet wird, wenn Die Luke oder die Tür geöffnet sind.
Momentan verwende ich folgende DOIF´s für die Heizung:
Hauptschalter_Heizung_Eltern_Dachluke_doif
Internals:
DEF ([Warnung_Dachluke] eq "on") (set Hauptschalter_Heizung_Eltern aus, setState Hauptschalter_Heizung_Eltern aus) DOELSEIF ([Warnung_Dachluke] eq "off") (set Hauptschalter_Heizung_Eltern an, setState Hauptschalter_Heizung_Eltern an)
FUUID 5c5007a9-f33f-a44f-dde0-a8fb9de3cac0ddd9
MODEL FHEM
NAME Hauptschalter_Heizung_Eltern_Dachluke_doif
NOTIFYDEV global,Warnung_Dachluke
NR 421
NTFY_ORDER 50-Hauptschalter_Heizung_Eltern_Dachluke_doif
STATE cmd_2
TYPE DOIF
VERSION 21224 2020-02-18 18:45:49
READINGS:
2020-04-27 10:16:52 Device Warnung_Dachluke
2020-04-27 10:16:52 cmd 2
2020-04-27 10:16:52 cmd_event Warnung_Dachluke
2020-04-27 10:16:52 cmd_nr 2
2020-04-27 10:16:52 e_Warnung_Dachluke_STATE off
2020-04-27 10:16:52 state cmd_2
Regex:
accu:
cond:
Warnung_Dachluke:
0:
&STATE ^Warnung_Dachluke$
1:
&STATE ^Warnung_Dachluke$
attr:
cmdState:
wait:
waitdel:
condition:
0 ::InternalDoIf($hash,'Warnung_Dachluke','STATE') eq "on"
1 ::InternalDoIf($hash,'Warnung_Dachluke','STATE') eq "off"
do:
0:
0 set Hauptschalter_Heizung_Eltern aus, setState Hauptschalter_Heizung_Eltern aus
1:
0 set Hauptschalter_Heizung_Eltern an, setState Hauptschalter_Heizung_Eltern an
2:
helper:
DEVFILTER ^global$|^Warnung_Dachluke$
NOTIFYDEV global|Warnung_Dachluke
event off
globalinit 1
last_timer 0
sleeptimer -1
timerdev Warnung_Dachluke
timerevent off
triggerDev Warnung_Dachluke
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: Warnung_Dachluke
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: Warnung_Dachluke
state: cmd_2
timerevents:
off
timereventsState:
state: off
triggerEvents:
off
triggerEventsState:
state: off
internals:
all Warnung_Dachluke:STATE
perlblock:
readings:
trigger:
uiState:
uiTable:
Attributes:
room Heizungskeller
Hauptschalter_Heizung_Haus_Tuer_doif
Internals:
DEF ([Gartentuer] eq "offen") (set Hauptschalter_Heizung_Haus aus, setState Hauptschalter_Heizung_Haus aus) DOELSEIF ([Gartentuer] eq "zu") (set Hauptschalter_Heizung_Haus an, setState Hauptschalter_Heizung_Haus an)
FUUID 5c5007a3-f33f-a44f-c8ae-03ee1af422c41cfe
MODEL FHEM
NAME Hauptschalter_Heizung_Haus_Tuer_doif
NOTIFYDEV Gartentuer,global
NR 327
NTFY_ORDER 50-Hauptschalter_Heizung_Haus_Tuer_doif
STATE cmd_1
TYPE DOIF
VERSION 21224 2020-02-18 18:45:49
READINGS:
2020-04-27 09:18:57 Device Gartentuer
2020-04-27 09:19:29 cmd 1
2020-04-27 09:19:29 cmd_event Gartentuer
2020-04-27 09:19:29 cmd_nr 1
2020-04-27 09:18:57 e_Gartentuer_STATE offen
2020-04-27 09:19:29 state cmd_1
2020-04-27 09:19:27 wait_timer no timer
Regex:
accu:
cond:
Gartentuer:
0:
&STATE ^Gartentuer$
1:
&STATE ^Gartentuer$
attr:
cmdState:
wait:
0:
30
1:
30
waitdel:
condition:
0 ::InternalDoIf($hash,'Gartentuer','STATE') eq "offen"
1 ::InternalDoIf($hash,'Gartentuer','STATE') eq "zu"
do:
0:
0 set Hauptschalter_Heizung_Haus aus, setState Hauptschalter_Heizung_Haus aus
1:
0 set Hauptschalter_Heizung_Haus an, setState Hauptschalter_Heizung_Haus an
2:
helper:
DEVFILTER ^global$|^Gartentuer$
NOTIFYDEV global|Gartentuer
event offen
globalinit 1
last_timer 0
sleepdevice Gartentuer
sleepsubtimer -1
sleeptimer -1
timerdev Gartentuer
timerevent offen
triggerDev Gartentuer
DOIF_eventa:
cmd_nr: 1
cmd: 1
cmd_event: Gartentuer
cmd_1
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: Gartentuer
state: cmd_1
timerevents:
offen
timereventsState:
state: offen
triggerEvents:
offen
triggerEventsState:
state: offen
internals:
all Gartentuer:STATE
perlblock:
readings:
trigger:
uiState:
uiTable:
Attributes:
room Heizungskeller
wait 30:30
Gruß
Micha
Hallo Micha,
ich habe für meinen Teil erfahren, dass es oft besser ist ein langes DOIF zu bauen, wie viele kleine. Man kann den Wurm ja mit einigen Zeilenumbrüchen und Einzügen zähmen. Ob das mit Deiner Anforderung geht weiß ich noch nicht im Detail. Ich will Dir aber mal eine Anregung geben. Damit Du entscheiden kannst, ob Du alle 5 Minuten oder stündlich einen Alarm ausgeben willst, würde ich im DOIF ein User-Reading erstellen, welches bei jedem Durchlauf im 5-Minuten-Intervall hochgezählt wird. Darüber entscheidest Du dann, wann Du auf stündliches Generve umsteigen willst ;-)
Ein Ansatz dazu wäre (mit Atribute do always) vielleicht folgende ungetestete Definition:
([+600] and [Kontakt_Garten:state] ne "closed" and [Kontakt_Dachluke:state] ne "closed" and [TFA07:temperature] > [TFA08:temperature] and [meinDOIF:meinAlarmzähler] < 3) (Spiele Sound, set meinDOIF:meinAlarmzähler ([set meinDOIF:meinAlarmzähler]+1)
DOELSEIF
([+[1]:01] and [Kontakt_Garten:state] ne "closed" and [Kontakt_Dachluke:state] ne "closed" and [TFA07:temperature] > [TFA08:temperature]) (Spiele Sound)
DOELSE
set meinDOIF:meinAlarmzähler ([set meinDOIF:meinAlarmzähler]+1)
Willst Du jetzt beim ersten Alarm die Heizung ausschalten, würde ich vielleicht sogar vor den ersten Alarm gehen, denn das soll ja schnell gehen:
(([Kontakt_Garten:state] ne "closed" or [Kontakt_Dachluke:state] ne "closed") and [TFA07:temperature] > [TFA08:temperature] and [meinDOIF:meinAlarmzähler] < 1) (Heizung aus)
DOELSEIF
([+600] and ([Kontakt_Garten:state] ne "closed" or [Kontakt_Dachluke:state] ne "closed") and [TFA07:temperature] > [TFA08:temperature] and [meinDOIF:meinAlarmzähler] < 3) (Spiele Sound, set meinDOIF:meinAlarmzähler ([set meinDOIF:meinAlarmzähler]+1)
DOELSEIF
([+[1]:01] and ([Kontakt_Garten:state] ne "closed" or [Kontakt_Dachluke:state] ne "closed") and [TFA07:temperature] > [TFA08:temperature]) (Spiele Sound)
DOELSEIF
([Kontakt_Garten:state] ne "closed" or [Kontakt_Dachluke:state] ne "closed" (set meinDOIF:meinAlarmzähler ([set meinDOIF:meinAlarmzähler]+1 , schalte Heizung ein)
Das ganze Thema An-/Abwesenheit ist jetzt zwar noch nicht drin, sollte aber auch noch rein passen.
zusammengefasste Grüße
Niels
Hallo Niels,
vielen Dank für die Hilfe ;-) Ich werde das mal noch nicht blind reinkopieren sondern morgen mal versuchen zu verstehen ;-)
Gruß
Micha
Hallo Niels,
ich habe versucht zu verstehen ;-) Ganz gelungen ist es mir glaube ich nicht. Da wird jetzt zwischen TFA07 und TFA08 differenziert, aber die TFA01 nicht berücksichtigt ?
TFA08 ist ja meine Aussentemperatur TFA07 Wohnzimmer und TFA01 kleines Bad (zweiter Stock). Da sollten schon die unterschiedlichen Temperaturen berücksichtigt werden. Vielleicht habe ich ja auch einen Denkfehler. Aber es sollte ja immer berücksichtigt werden die Raumtemperatur von dem Raum vo ich Luke / Tür öffne.
Gruß
Micha