DOIF - Erkennung von "Fensterart" und geschlossen Status

Begonnen von itcompi, 04 Juli 2017, 09:58:02

Vorheriges Thema - Nächstes Thema

itcompi

Hallo,

ich bin neu in dem Thema DOIF und habe zur Zeit exemplarisch einen Rolladen damit angesteuert. Alle meine Rolläden wurden mit der Namenskonvention [room]_[small|big]_shutter benannt. Es gibt dabei den Spezialfall, dass zwei Türen einen Homematic threeStateSensor haben (Terasse). Zum Sonnenuntergang möchte ich alle Rolläden herunter fahren und prüfen, ob die Türen geschlossen sind, wenn ja, dann fahre den Rolladen runter, wenn nein, dann lasse diesen oben (Aussperrschutz). Der threeStateSensor ist nach Namenskonvention wie folgt genannt [room]_[small|big]_door_state.

Gibt es eine Möglichkeit abzufragen, ob es zu dem jeweiligen Fenster / Tür einen solchen Sensor gibt und wenn ja den Rolladen nicht herunter zu fahren?

Danke für Feedback

Per

Da du den Wert nur abfragst, er aber keinen Event sendet, wird es etwas schwierig.
Eventuell kannst du mit einer Filter-Funktion (keine DOIF, sondern Fhem-Funktion) was machen.
Was gehen sollte, dass die xxx_door_state "ihrem" zugeordneten xxx_shutter ein Userreading setzen (dafür reicht ein generalisiertes DOIF) und du zur passenden Zeit alle xxx_shutter mit gesetzten Reading schließt (ein weiteres DOIF).
Diese DOIF kannst du dann auch in ein DOIF packen.

ABER: falls du mal vor hast, mehr mit den Rollos zu machen, wofür ein generalisiertes DOIF nicht mehr reicht, kann (!) es schnell unübersichtlich werden. Wobei ich mir allerdings bei Rollos weniger Gedanken machen würde. Lampen o.ä. sind da eher Kandidaten dafür ;).

CoolTux

Gut wäre ein list vom DOIF zu haben und vielleicht ein list von so einem Fensterkontakt (exemplarisch)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

itcompi

Hallo, danke für die Kommentare. Hier mal die zwei Listings:

Das aktuelle DOIF ist sehr simple. Es reagiert auf den Home status (Per Tablet UI bzw. auf Sunset / Sunrise)


##Rolladen sind zwischen Sonnenuntergang und Sonnenaufgang geschlossen, sonst auf
(([current_home_mode] eq "home") or ([isShutterControlActive] eq "true" and [isShutterMorningControlActive] eq "true" and [{sunrise(0,"8:00","9:30")}]))
(set guest_shutter on)
DOELSEIF (([current_home_mode] eq "night" or [current_home_mode] eq "away") or ([isShutterControlActive] eq "true" and [isShutterEveningControlActive] eq "true" and [{sunset(-1800,"17:00","22:00")}]))
(set guest_shutter off)


Der Sensor von Homematic sieht folgendermaßen aus:


CFGFN ./fhem_guest.cfg
DEF 2C37B0
HMLAN1_MSGCNT 20
HMLAN1_RAWMSG E2C37B0,0000,001475B6,FF,FFAC,9CA6412C37B02CD9D7019B00
HMLAN1_RSSI -84
HMLAN1_TIME 2017-06-29 20:24:05
IODev HMLAN1
LASTInputDev HMLAN1
MSGCNT 20
NAME guest_door_state
NOTIFYDEV global
NR 114
STATE closed
TYPE CUL_HM
lastMsg No:9C - t:41 s:2C37B0 d:2CD9D7 019B00
protLastRcv 2017-06-29 20:24:05
protSnd 20 last_at:2017-06-29 20:24:05
protState CMDs_done
rssi_at_HMLAN1 cnt:20 avg:-85.3 min:-96 max:-72 lst:-84

Activity dead 2017-07-01 00:29:41
D-firmware 2.4 2017-04-14 10:47:12
D-serialNr LEQ08895XX 2017-04-14 10:47:12
battery ok 2017-06-29 20:24:05
contact closed (to HMLAN1) 2017-06-29 20:24:05
state closed 2017-06-29 20:24:05
trigDst_2CD9D7 noConfig 2017-06-29 20:24:05
trigger_cnt 155 2017-06-29 20:24:05

IODev HMLAN1 deleteattr
actCycle 028:00 deleteattr
actStatus dead deleteattr
autoReadReg 4_reqStatus deleteattr
expert 2_raw deleteattr
firmware 2.4 deleteattr
model HM-SEC-RHS deleteattr
peerIDs 00000000 deleteattr
room DINING_ROOM deleteattr
serialNr LEQ08895XX deleteattr
subType threeStateSensor deleteattr

CoolTux

Da kann ich Dir leider nicht helfen.

Lass mich erklären warum.
Du bearbeitet die fhem.cfg per Hand.
Du bindest über include weitere Files ein
Was Du gegeben hast ist kein list


Damit kann ich leider nicht umgehen. Daher bitte ich um Verständnis das ich hier abbrechen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Per

Zitat von: CoolTux am 04 Juli 2017, 20:13:56Du bearbeitet die fhem.cfg per Hand.
Du bindest über include weitere Files ein
Welchen Unterschied macht das für das eigentliche Problem?

Zitat von: CoolTux am 04 Juli 2017, 20:13:56Was Du gegeben hast ist kein list
Leider gibt es noch keinen Link für List bei den jeweiligen Devices. Bei 8 Posts wäre eher ein Hinweis angebracht, wie ein List geht:
Du tippst oben in die "Kommandozeile"
list guest_door_state
bzw. den Namen der anderen erforderlichen Devices ein und postest hier das Ergebnis in Code-Tags.

itcompi

#6
Hi Per,

danke für die freundliche Antwort... Ich wusste einfach nichts mit dem list Befehl anzufangen und dachte an das normale listing... Klar kann ich den Auszug bereitstellen.

dining_left_door_state

Internals:
   CFGFN      ./fhem_dining.cfg
   DEF        2C37B0
   HMLAN1_MSGCNT 20
   HMLAN1_RAWMSG E2C37B0,0000,001475B6,FF,FFAC,9CA6412C37B02CD9D7019B00
   HMLAN1_RSSI -84
   HMLAN1_TIME 2017-06-29 20:24:05
   IODev      HMLAN1
   LASTInputDev HMLAN1
   MSGCNT     20
   NAME       dining_left_door_state
   NOTIFYDEV  global
   NR         114
   STATE      closed
   TYPE       CUL_HM
   lastMsg    No:9C - t:41 s:2C37B0 d:2CD9D7 019B00
   protLastRcv 2017-06-29 20:24:05
   protSnd    20 last_at:2017-06-29 20:24:05
   protState  CMDs_done
   rssi_at_HMLAN1 cnt:20 avg:-85.3 min:-96 max:-72 lst:-84
   Readings:
     2017-07-01 00:29:41   Activity        dead
     2017-04-14 10:47:12   D-firmware      2.4
     2017-04-14 10:47:12   D-serialNr      LEQ0889596
     2017-06-29 20:24:05   battery         ok
     2017-06-29 20:24:05   contact         closed (to HMLAN1)
     2017-06-29 20:24:05   state           closed
     2017-06-29 20:24:05   trigDst_2CD9D7  noConfig
     2017-06-29 20:24:05   trigger_cnt     155
   Helper:
     HM_CMDNR   156
     mId        0030
     rxType     4
     supp_Pair_Rep 0
     Expert:
       def        1
       det        0
       raw        1
       tpl        0
     Io:
       newChn     +2C37B0,00,00,00
       nextSend   1498760645.58971
       prefIO
       rxt        0
       vccu
       p:
         2C37B0
         00
         00
         00
     Mrssi:
       mNo        9C
       Io:
         HMLAN1     -82
     Prt:
       bErr       0
       sProc      0
       Rspwait:
     Q:
       qReqConf   00
       qReqStat
     Role:
       chn        1
       dev        1
     Rpt:
       IO         HMLAN1
       flg        A
       ts         1498760645.50602
       ack:
         HASH(0x3055458)
         9C80022CD9D72C37B000
     Rssi:
       At_hmlan1:
         avg        -85.3
         cnt        20
         lst        -84
         max        -72
         min        -96
Attributes:
   IODev      HMLAN1
   actCycle   028:00
   actStatus  dead
   autoReadReg 4_reqStatus
   expert     2_raw
   firmware   2.4
   model      HM-SEC-RHS
   peerIDs    00000000,
   room       DINING_ROOM
   serialNr   LEQ0889596
   subType    threeStateSensor


dining_left_shutter

Internals:
   CFGFN      ./fhem_dining.cfg
   DEF        43293B
   HMLAN1_MSGCNT 181
   HMLAN1_RAWMSG E43293B,0000,045DFD82,FF,FFAD,A7A41043293B2CD9D70601C800
   HMLAN1_RSSI -83
   HMLAN1_TIME 2017-07-05 16:26:16
   IODev      HMLAN1
   LASTInputDev HMLAN1
   MSGCNT     181
   NAME       dining_left_shutter
   NOTIFYDEV  global
   NR         101
   STATE      on
   TYPE       CUL_HM
   lastMsg    No:A7 - t:10 s:43293B d:2CD9D7 0601C800
   protCmdDel 10
   protIOdly  1 last_at:2017-07-02 21:50:58
   protIOerr  3 last_at:2017-07-02 21:51:58
   protLastRcv 2017-07-05 16:26:16
   protResnd  2 last_at:2017-07-02 21:50:52
   protSnd    169 last_at:2017-07-05 16:26:16
   protState  CMDs_done
   rssi_HMLAN1 min:-82 avg:-75.84 max:-72 cnt:98 lst:-74
   rssi_at_HMLAN1 lst:-83 cnt:181 avg:-77.4 max:-73 min:-85
   Readings:
     2017-07-05 16:25:39   CommandAccepted yes
     2017-04-14 10:47:12   D-firmware      2.8
     2017-04-14 10:47:12   D-serialNr      MEQ1315795
     2017-05-20 11:49:31   PairedTo        0x2CD9D7
     2017-04-14 10:49:21   R-driveDown     29 s
     2017-04-14 10:49:21   R-driveTurn     0.5 s
     2017-04-14 10:49:21   R-driveUp       31 s
     2017-04-14 10:49:19   R-pairCentral   0x2CD9D7
     2017-04-14 10:49:21   R-sign          off
     2017-05-20 11:49:30   RegL_00.        02:01 0A:2C 0B:D9 0C:D7 15:FF 18:00 00:00
     2017-05-20 11:49:31   RegL_01.        08:00 09:00 0A:00 0B:01 0C:22 0D:01 0E:36 0F:05 10:00  30:06 57:24 56:00 00:00
     2017-07-05 16:26:16   deviceMsg       on (to HMLAN1)
     2017-07-05 16:26:16   level           100
     2017-07-05 16:26:16   motor           stop:on
     2017-07-05 16:26:16   pct             100
     2017-05-20 11:48:45   powerOn         2017-05-20 11:48:45
     2017-07-05 16:26:16   recentStateType info
     2017-07-05 16:26:16   state           on
     2017-07-05 16:26:16   timedOn         off
   Helper:
     HM_CMDNR   167
     cSnd       112CD9D743293B0201000000,112CD9D743293B0201C80000
     dlvlCmd    ++A0112CD9D743293B0201C80000
     mId        0005
     rxType     1
     supp_Pair_Rep 0
     Dir:
       cur        stop
       rct        up
     Expert:
       def        1
       det        0
       raw        1
       tpl        0
     Io:
       newChn     +43293B,00,00,00
       nextSend   1499264776.13593
       prefIO
       rxt        0
       vccu
       p:
         43293B
         00
         00
         00
     Mrssi:
       mNo        A7
       Io:
         HMLAN1     -81
     Prt:
       bErr       0
       sProc      0
       Rspwait:
     Q:
       qReqConf
       qReqStat
     Role:
       chn        1
       dev        1
       prs        1
     Rpt:
       IO         HMLAN1
       flg        A
       ts         1499264776.05049
       ack:
         HASH(0x2f66188)
         A780022CD9D743293B00
     Rssi:
       Hmlan1:
         avg        -75.8469387755102
         cnt        98
         lst        -74
         max        -72
         min        -82
       At_hmlan1:
         avg        -77.4033149171271
         cnt        181
         lst        -83
         max        -73
         min        -85
Attributes:
   IODev      HMLAN1
   autoReadReg 4_reqStatus
   expert     2_full
   firmware   2.8
   kitchen_shutter living_all_shutters
   model      HM-LC-BL1-FM
   peerIDs    00000000,
   room       DINING_ROOM
   serialNr   MEQ1315795
   subType    blindActuator
   userattr   kitchen_shutter kitchen_shutter_map lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0 room_map structexclude
   webCmd     statusRequest:toggleDir:on:off:up:down:stop


DOIF

Internals:
   CFGFN
   DEF        ##Rolladen sind zwischen Sonnenuntergang und Sonnenaufgang geschlossen, sonst auf
(([current_home_mode] eq "home") or
([isShutterControlActive] eq "true" and [isShutterMorningControlActive] eq "true" and [{sunrise(0,"8:00","9:30")}]))
(set guest_shutter on)
DOELSEIF (([current_home_mode] eq "night" or [current_home_mode] eq "away") or
([isShutterControlActive] eq "true" and [isShutterEveningControlActive] eq "true" and [{sunset(-1800,"17:00","22:00")}]))
(set guest_shutter off)
   NAME       ShutterControlService
   NR         20497
   NTFY_ORDER 50-ShutterControlService
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-07-05 16:25:39   Device          current_home_mode
     2017-07-05 16:25:39   cmd             1
     2017-07-05 16:25:39   cmd_event       current_home_mode
     2017-07-05 16:25:39   cmd_nr          1
     2017-07-05 16:25:39   e_current_home_mode_STATE home
     2017-07-01 21:06:27   e_isShutterControlActive_STATE false
     2017-07-05 16:25:39   state           cmd_1
     2017-07-05 08:00:00   timer_01_c01    06.07.2017 08:00:00
     2017-07-04 21:49:31   timer_02_c02    05.07.2017 21:48:49
   Condition:
     0          (InternalDoIf($hash,'current_home_mode','STATE') eq "home") or (InternalDoIf($hash,'isShutterControlActive','STATE') eq "true" and InternalDoIf($hash,'isShutterMorningControlActive','STATE') eq "true" and DOIF_time_once($hash,0,$wday))
     1          (InternalDoIf($hash,'current_home_mode','STATE') eq "night" or InternalDoIf($hash,'current_home_mode','STATE') eq "away") or (InternalDoIf($hash,'isShutterControlActive','STATE') eq "true" and InternalDoIf($hash,'isShutterEveningControlActive','STATE') eq "true" and DOIF_time_once($hash,1,$wday))
   Days:
   Devices:
     0           current_home_mode isShutterControlActive isShutterMorningControlActive
     1           current_home_mode isShutterControlActive isShutterEveningControlActive
     all         current_home_mode isShutterControlActive isShutterMorningControlActive isShutterEveningControlActive
   Do:
     0:
       0          set guest_shutter on
     1:
       0          set guest_shutter off
     2:
   Helper:
     event      home
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   current_home_mode
     timerevent home
     triggerDev current_home_mode
     timerevents:
       home
     timereventsState:
       state: home
     triggerEvents:
       home
     triggerEventsState:
       state: home
   Internals:
     0           current_home_mode:STATE isShutterControlActive:STATE isShutterMorningControlActive:STATE
     1           current_home_mode:STATE isShutterControlActive:STATE isShutterEveningControlActive:STATE
     all         current_home_mode:STATE isShutterControlActive:STATE isShutterMorningControlActive:STATE isShutterEveningControlActive:STATE
   Interval:
   Itimer:
   Localtime:
     0          1499320800
     1          1499284129
   Readings:
   Realtime:
     0          08:00:00
     1          21:48:49
   Regexp:
     0:
     1:
     All:
   State:
   Time:
     0          {sunrise(0,"8:00","9:30")}
     1          {sunset(-1800,"17:00","22:00")}
   Timecond:
     0          0
     1          1
   Timer:
     0          0
     1          0
   Timers:
     0           0
     1           1
   Trigger:
   Triggertime:
     1499284129:
       localtime  1499284129
       Hash:
     1499320800:
       localtime  1499320800
       Hash:
Attributes:


amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus


amenomade

Ich sehe leider keine Möglichkeit, alles (auf einmal für alle Rolladen) in einem einzigen DOIF ohne kompliziertes Perl zu packen: da Du nur den Status von Türsensoren abfragen musst, und nicht darauf triggern willst, kannst Du nicht mit Regex und Variable wie $NAME spielen.

Du kannst aber immer noch pro Rolladen ein DOIF haben, der ähnlich wie dein jetziges aussieht, nur mit zusätzliche Bedigungen für die Devices, die mit einem Türsensor verbunden sind.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Per

Zitat von: Per am 04 Juli 2017, 11:41:34Was gehen sollte, dass die xxx_door_state "ihrem" zugeordneten xxx_shutter ein Userreading setzen (dafür reicht ein generalisiertes DOIF) und du zur passenden Zeit alle xxx_shutter mit gesetzten Reading schließt (ein weiteres DOIF).
("_door_state":"on|off")(setreading (set [$SELF:Device:"(.*)_(.*)_door_state":"$1_$2"])_shutter door_state $EVENT)
(Dafür habe ich jetzt 30 min (+-) Perl gepaukt ;))

Zitat von: Per am 04 Juli 2017, 11:41:34Eventuell kannst du mit einer Filter-Funktion (keine DOIF, sondern Fhem-Funktion) was machen.
([{sunset(-1800,"17:00","22:00")}]) (set .*_shutter:FILTER=door_state=closed down)
Das Weiterverpacken überlass ich dir ;).

Zitat von: Per am 04 Juli 2017, 11:41:34Diese DOIF kannst du dann auch in ein DOIF packen.
Dann aber attr do always nicht vergessen.

itcompi

Danke Per! Jetzt muss ich selbst noch mal die Schulbank drücken. Beim Überfliegen verstehe ich zur Zeit nur Bahnhof...
Kann aber daran liegen das ich berufsmäßig meistens in C# unterwegs bin :)