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
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 ;).
Gut wäre ein list vom DOIF zu haben und vielleicht ein list von so einem Fensterkontakt (exemplarisch)
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
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.
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.
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:
Und ein list vom DOIF noch ;)
s.o
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.
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.
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 :)