Hauptmenü

DOIF Dachluke

Begonnen von mfeske, 16 November 2021, 16:47:05

Vorheriges Thema - Nächstes Thema

mfeske

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
Hardware:
1 x Raspberry Pi Mod. B 512 MB
eq-3 2 x MAX! eTRV Heizungssteller, 1 x MAX! Fensterkontakt, 1 x MAX! Cube - LAN Gateway (ausser Betrieb)
Intertechno 1x ITZ-500, 3x ITT-1500, 9x ITR-1500, 3 x ITDL-1000, 2 x ITL-500
1 x CC1101-USB-Lite 433MHz (CUL433)  V3 1 x CC1101-USB-Lite 868MHz (CUL868)

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

jkriegl

Rpi 3/4, buster, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

Damian

#3
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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF