Hallo zusammen,
ich habe mir mal ganz am Anfang von meiner FHEM config ein DOIF gebastelt (siehe unten).
Ich hoffe DOIF ist jetzt kein alter Schuh und ich sollte das komplett anders machen.
Dies sollte eine entsprechende Ansage machen, wenn die Dachluke geöffnet ist und die Temperatur im kleinen Bad höher TFA01 ist als im Garten TFA08. Hintergrund ist im Winter möchte ich natürlich eine Warnung haben und im Sommer kann es mir eigentlich egal sein.
Die Dachluke wurde jetzt nachgerüstet mit einem elektrischen Motor :-) der über einen Taster ITW_852_Bad_klein_01 angesteuert werden kann. Wie würdet ihr eine sinnvolle Steuerung umsetzen ?
Ich würde gerne
- bei höhere Luftfeuchtigkeit die Luke öffnen bis die Luftfeuchtigkeit entwichen ist (es wurde geduscht).
Hier sehe ich das Problem womit vergleiche ich die Luftfeuchtigkeitswerte und wann öffne ich ?
- nach dem die Luke geöffnet wurde weil zum Beispiel die Toilette benutzt wurde nach 15 Minuten wieder schließen (sollte reichen).
der Status von ITW_852_Bad_klein_01 sollte natürlich entsprechend angepasst werden.
Gruß
Micha
Taster
Internals:
CUL433_MSGCNT 1
CUL433_RAWMSG i95556a6696999555
CUL433_RSSI -86.5
CUL433_TIME 2021-11-16 16:33:01
DEF 10000000011101011001101010 0 0000
FUUID 5ffc053d-f33f-a44f-3474-f7eb334e82536018
IODev CUL433
LASTInputDev CUL433
MSGCNT 1
NAME ITW_852_Bad_klein_01
NR 690
STATE off
TYPE IT
XMIT 1000000001110101100110101000000
XMITdimdown 00
XMITdimup 00
XMIToff 0
XMITon 1
CODE:
1 1000000001110101100110101000000
READINGS:
2021-11-16 16:26:00 IODev CUL433
2021-01-11 09:40:23 group 0
2021-01-11 09:40:23 protocol V3
2021-11-16 16:33:01 state off
2021-01-11 09:40:23 unit 0000
Attributes:
IODev CUL433
cmdIcon on:black_down off:black_up:FS20.off
devStateIcon on:fts_light_dome off:fts_light_dome_open:FS20.off
room Bad_klein,Funkzentrale
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 398
NTFY_ORDER 50-Warnung_Dachluke_doif
STATE cmd_1
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
READINGS:
2021-11-16 16:35:48 Device TFA01
2021-11-16 16:35:53 cmd 1.2
2021-11-16 16:34:51 cmd_count 2
2021-11-16 16:35:53 cmd_event TFA01
2021-11-16 16:35:53 cmd_nr 1
2021-11-16 16:35:53 cmd_seqnr 2
2021-11-16 16:33:05 e_Kontakt_Dachluke_STATE opened
2021-11-16 16:35:48 e_TFA01_temperature 20.8
2021-11-16 16:30:06 e_TFA08_temperature 8.6
2021-11-16 16:35:53 state cmd_1
2021-11-16 16:35:52 wait_timer no timer
Regex:
accu:
collect:
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: 20.8 H: 66.0,temperature: 20.8
globalinit 1
last_timer 0
sleepdevice TFA01
sleepsubtimer -1
sleeptimer -1
timerdev TFA01
timerevent T: 20.8 H: 66.0,temperature: 20.8
triggerDev TFA01
timerevents:
T: 20.8 H: 66.0
temperature: 20.8
timereventsState:
state: T: 20.8 H: 66.0
temperature: 20.8
triggerEvents:
T: 20.8 H: 66.0
temperature: 20.8
triggerEventsState:
state: T: 20.8 H: 66.0
temperature: 20.8
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
Du kannst die Feuchtigkeit mit einem festen Wert vergleichen oder den aktuellen mit dem vorherigen Feuchtewert vergleichen (Feuchteanstieg).
Das Schließen kannst du zeitverzögert nach dem Öffnen realisieren.
Ob du es mit DOIF-FHEM oder DOIF-Perl oder sonst wie umsetzt, ist deine Entscheidung.
Mach das, was du am besten kannst, sonst bist du immer auf andere angewiesen.
Dort findest Du etwas zum Richtig Lüften
https://forum.fhem.de/index.php/topic,29773.msg224962.html#msg224962 (https://forum.fhem.de/index.php/topic,29773.msg224962.html#msg224962)
Hier meine Ansage zum Öffnen bei ansteigender Feuchte nach dem Duschen und zum Schließen beim Auskühlen des Raumes:
defmod di_Fenster_Bad_Ansage DOIF subs {\
sub send_alexa {\
my ($dev,$text,$volume)=@_;;\
$volume=20 if (!defined ($volume));;\
fhem("attr $dev speak_volume $volume");;\
fhem("set $dev speak $text");;\
}\
}\
\
{if ([$SELF:increase]) {send_alexa("echo_Bad","Bitte Fenster öffnen");;set_State("Ansage Öffnen")}}\
{if ([BadFenster:state] eq "open") {set_Reading ("temp",ReadingsVal("TH_Bad_HM","measured-temp",0));;set_State("Fenster geöffnet")}}\
{if ([$SELF:cold]) {send_alexa("echo_Bad","Bitte Fenster schließen");;set_State("Ansage Schließen")}}
attr di_Fenster_Bad_Ansage DOIF_Readings increase: [?Bad_Fenster] eq "closed" and [TH_Bad_HM:humidity:diff] > 5,\
cold:[?BadFenster] eq "open" and ([$SELF:temp] - [TH_Bad_HM:measured-temp]) > 0.5
attr di_Fenster_Bad_Ansage event-on-change-reading .*
attr di_Fenster_Bad_Ansage room Fenster
Edit: statt Ansage kann man natürlich auch einen Motor schalten