Ich habe seit Jahren ein DOIF laufen, welches den Rola im Bad in Abängigkeit von Wetter, Fensterstellung und Zeit steuert.
Seit geraumer Zeit (ein paar Wochen...) entwickelt es ein "Eigenleben":
Wenn der Rola oben ist und das Fenster geöffnet wird, dann ruckt der Rola kurz an und fährt dann wieder in die obere Position. Er soll aber oben bleiben, da er ja schon oben ist... (5. Kommando).
Beim Schließen des Fensters soll der Rola die Position einnehmen, die er beim Öffnen hatte (in last_state gespeichert). Er ruckt wieder kurz an, wartet kurz und fährt dann wieder in die obere Endposition. Wenn dann das Relais im Aktor "klickt" kann der Rola dann per Taster und DOIF geschlossen werden (6. Kommando).
Muss ich meine Abfragen alle ändern, weil in den letzten Wochen/Monaten etwas geändert wurde?
Die Geräte sind alle HM.
Hier das DOIF:
Internals:
CFGFN ./FHEM/14_Rola.cfg
DEF ([[uptime]] and [Rolaautomatik] eq "Ein")(setreading BD_Rola last_state 100,set BD_Rola:FILTER=STATE!=Auf Auf)
DOELSEIF
([([Sonnenuntergang]-1800)] and [Rolaautomatik] eq "Ein" and [BD_Rola] eq "Auf" and (ReadingsNum("Wetter_Pro","fc0_tempMin",0)<5))
(IF ([BD_Fenster] =~ "geschlossen|gekippt")(set BD_Rola:FILTER=STATE!=Zu Zu) ELSE (setreading BD_Rola last_state 0))
DOELSEIF
([12:00] and [13:00])(set BD_Rola SoSchu)
DOELSEIF
([([Sonnenuntergang]-1800)] and [Rolaautomatik] eq "Ein" and [Heizung] eq "Ein" and [BD_Rola] eq "Auf" and (ReadingsNum("Wetter_Pro","fc0_tempMin",0)>=5) and !([Heizmodus] eq "Urlaub" and [Heizung] eq "Aus"))
(IF ([BD_Fenster] =~ "geschlossen|gekippt" and [Heizmodus] ne "Urlaub")(set BD_Rola SiSchu) ELSE (setreading BD_Rola last_state 32))
DOELSEIF
([BD_Fenster:"^offen$"] and [?BD_Rola] ne "Auf")(setreading BD_Rola last_state [BD_Rola:pct],set BD_Rola:FILTER=STATE!=Auf Auf)
DOELSEIF
([BD_Fenster] =~ "geschlossen|gekippt" and [?BD_Rola] =~ "Auf|Zu" and [Rolaautomatik] eq "Ein")(set BD_Rola:FILTER=level!=last_state pct [BD_Rola:last_state],setreading BD_Rola last_state 100)
DOELSEIF
([12:00] and [13:00])(set BD_Rola Zu)
FUUID 5c443da9-f33f-b425-2aa8-d55fe88c970062fa
MODEL FHEM
NAME BD_Rola_move
NOTIFYDEV global,Sonnenuntergang,BD_Fenster,Heizung,Rolaautomatik,BD_Rola,uptime,Heizmodus
NR 388
NTFY_ORDER 50-BD_Rola_move
STATE auto ab
TYPE DOIF
VERSION 24195 2021-04-08 21:50:20
READINGS:
2021-04-09 16:04:41 Device BD_Rola
2021-04-09 16:04:35 cmd 6
2021-04-09 16:04:35 cmd_event BD_Fenster
2021-04-09 16:04:35 cmd_nr 6
2021-04-09 16:04:35 e_BD_Fenster_STATE geschlossen
2021-04-09 16:04:35 e_BD_Fenster_events commState: CMDs_done
2021-04-09 16:04:41 e_BD_Rola_STATE Auf
2021-04-09 15:53:36 mode enabled
2021-04-09 16:04:35 state auto ab
2021-04-09 15:53:36 timer_01_c01 10.04.2021 08:00:00
2021-04-09 15:53:36 timer_02_c02 09.04.2021 20:00:26
2021-04-09 15:53:36 timer_03_c03 10.04.2021 12:00:00
2021-04-09 15:53:36 timer_04_c03 10.04.2021 13:00:00
2021-04-09 15:53:36 timer_05_c04 09.04.2021 20:00:26
2021-04-09 15:53:36 timer_06_c07 10.04.2021 12:00:00
2021-04-09 15:53:36 timer_07_c07 10.04.2021 13:00:00
Regex:
accu:
collect:
cond:
BD_Fenster:
0:
1:
2:
3:
4:
&STATE ^BD_Fenster$
5:
&STATE ^BD_Fenster$
6:
BD_Rola:
0:
1:
&STATE ^BD_Rola$
2:
3:
&STATE ^BD_Rola$
4:
5:
6:
Heizmodus:
3:
&STATE ^Heizmodus$
Heizung:
3:
&STATE ^Heizung$
Rolaautomatik:
0:
&STATE ^Rolaautomatik$
1:
&STATE ^Rolaautomatik$
3:
&STATE ^Rolaautomatik$
5:
&STATE ^Rolaautomatik$
itimer:
Sonnenuntergang:
itimer:
&STATE ^Sonnenuntergang$
uptime:
itimer:
&STATE ^uptime$
attr:
cmdState:
0:
hoch
1:
runter kalt oder warm
2:
SoSchu
3:
SiSchu
4:
auto auf
5:
auto ab
auto nach Lüften
6:
auto zu bei kalt
cmdpause:
0
0
0
20
wait:
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday) and ::InternalDoIf($hash,'Rolaautomatik','STATE') eq "Ein"
1 ::DOIF_time_once($hash,1,$wday) and ::InternalDoIf($hash,'Rolaautomatik','STATE') eq "Ein" and ::InternalDoIf($hash,'BD_Rola','STATE') eq "Auf" and (ReadingsNum("Wetter_Pro","fc0_tempMin",0)<5)
2 ::DOIF_time_once($hash,2,$wday) and ::DOIF_time_once($hash,3,$wday)
3 ::DOIF_time_once($hash,4,$wday) and ::InternalDoIf($hash,'Rolaautomatik','STATE') eq "Ein" and ::InternalDoIf($hash,'Heizung','STATE') eq "Ein" and ::InternalDoIf($hash,'BD_Rola','STATE') eq "Auf" and (ReadingsNum("Wetter_Pro","fc0_tempMin",0)>=5) and !(::InternalDoIf($hash,'Heizmodus','STATE') eq "Urlaub" and ::InternalDoIf($hash,'Heizung','STATE') eq "Aus")
4 ::EventDoIf('BD_Fenster',$hash,'^offen$',1) and ::InternalDoIf($hash,'BD_Rola','STATE') ne "Auf"
5 ::InternalDoIf($hash,'BD_Fenster','STATE') =~ "geschlossen|gekippt" and ::InternalDoIf($hash,'BD_Rola','STATE') =~ "Auf|Zu" and ::InternalDoIf($hash,'Rolaautomatik','STATE') eq "Ein"
6 ::DOIF_time_once($hash,5,$wday) and ::DOIF_time_once($hash,6,$wday)
days:
do:
0:
0 setreading BD_Rola last_state 100,set BD_Rola:FILTER=STATE!=Auf Auf
1:
0 IF ([BD_Fenster] =~ "geschlossen|gekippt")(set BD_Rola:FILTER=STATE!=Zu Zu) ELSE (setreading BD_Rola last_state 0)
2:
0 set BD_Rola SoSchu
3:
0 IF ([BD_Fenster] =~ "geschlossen|gekippt" and [Heizmodus] ne "Urlaub")(set BD_Rola SiSchu) ELSE (setreading BD_Rola last_state 32)
4:
0 setreading BD_Rola last_state [BD_Rola:pct],set BD_Rola:FILTER=STATE!=Auf Auf
5:
0 set BD_Rola:FILTER=level!=last_state pct [BD_Rola:last_state],setreading BD_Rola last_state 100
6:
0 set BD_Rola Zu
7:
helper:
DEVFILTER ^global$|^Sonnenuntergang$|^uptime$|^BD_Rola$|^Heizung$|^Rolaautomatik$|^Heizmodus$|^BD_Fenster$
NOTIFYDEV global|Sonnenuntergang|uptime|BD_Rola|Heizung|Rolaautomatik|Heizmodus|BD_Fenster
event deviceMsg: Auf (to broadcast),level: 100,motor: stop:Auf,pct: 100,Auf,timedOn: Zu
globalinit 1
last_timer 7
sleeptimer -1
timerdev BD_Fenster
timerevent commState: CMDs_done
triggerDev BD_Rola
timerevents:
commState: CMDs_done
timereventsState:
commState: CMDs_done
triggerEvents:
deviceMsg: Auf (to broadcast)
level: 100
motor: stop:Auf
pct: 100
Auf
timedOn: Zu
triggerEventsState:
deviceMsg: Auf (to broadcast)
level: 100
motor: stop:Auf
pct: 100
state: on
timedOn: Zu
internals:
all Rolaautomatik:STATE BD_Rola:STATE Heizung:STATE Heizmodus:STATE BD_Fenster:STATE
intervalfunc:
localtime:
0 1618034400
1 1617991226
2 1618048800
3 1618052400
4 1617991226
5 1618048800
6 1618052400
readings:
realtime:
0 08:00:00
1 20:00:26
2 12:00:00
3 13:00:00
4 20:00:26
5 12:00:00
6 13:00:00
time:
0 [uptime]
1 ([Sonnenuntergang]-1800)
2 12:00:00
3 13:00:00
4 ([Sonnenuntergang]-1800)
5 12:00:00
6 13:00:00
timeCond:
0 0
1 1
2 2
3 2
4 3
5 6
6 6
timer:
0 0
1 0
2 0
3 0
4 0
5 0
6 0
timers:
0 0
1 1
2 2 3
3 4
6 5 6
trigger:
all BD_Fenster
triggertime:
1617991226:
localtime 1617991226
hash:
1618034400:
localtime 1618034400
hash:
1618048800:
localtime 1618048800
hash:
1618052400:
localtime 1618052400
hash:
uiState:
uiTable:
Attributes:
cmdState hoch|runter kalt oder warm|SoSchu|SiSchu|auto auf|auto ab, auto nach Lüften|auto zu bei kalt
cmdpause 0:0:0:20
disable 0
do always
room 004Bad
Bitte nicht wundern, das 3. und 7. Kommando dienen nur als Platzhalter, da von einem anderen DOIF auf die entsprechenden Ausführungsteile zugegriffen wird.
Falls noch Input fehlt, dann biite fragen.
Dankeschön.
Guten Morgen.
Ich füge mal noch ein List vom Fenster mit an:
Internals:
CFGFN ./FHEM/064_BD.cfg
DEF 149A4C
FUUID 5c443da8-f33f-b425-cb01-fa4c8b02a307fe7a
HMLAN1_MSGCNT 12
HMLAN1_RAWMSG E149A4C,0000,041167BA,FF,FFB5,5EA441149A4CF11234013D00
HMLAN1_RSSI -75
HMLAN1_TIME 2021-04-10 10:10:23
IODev HMLAN1
LASTInputDev HMLAN1
MSGCNT 12
NAME BD_Fenster
NOTIFYDEV global
NR 180
STATE geschlossen
TYPE CUL_HM
chanNo 01
lastMsg No:5E - t:41 s:149A4C d:F11234 013D00
protLastRcv 2021-04-10 10:10:23
protRcv 8 last_at:2021-04-10 10:10:23
protSnd 12 last_at:2021-04-10 10:10:23
protState CMDs_done
rssi_at_HMLAN1 cnt:12 min:-81 max:-74 avg:-76.08 lst:-75
READINGS:
2021-04-09 11:51:43 Activity alive
2021-03-09 16:29:53 Batteriedauer_alt 13
2021-04-10 08:05:00 Batteriewechsel 32
2021-03-09 16:38:37 CommandAccepted yes
2021-03-09 16:38:33 D-firmware 2.0
2021-03-09 16:38:33 D-serialNr IEQ0044944
2021-03-14 20:17:42 PairedTo 0xF11234
2021-03-09 16:38:37 R-cyclicInfoMsg on
2021-03-09 11:35:51 R-eventDlyTime 0 s
2020-03-07 01:58:54 R-ledOnTime 0.5 s
2020-03-07 01:58:54 R-msgRhsPosA closed
2020-03-07 01:58:54 R-msgRhsPosB open
2020-03-07 01:58:54 R-msgRhsPosC tilted
2021-03-09 15:12:22 R-pairCentral 0xF11234
2021-03-05 20:31:50 R-sabotageMsg on
2020-03-07 01:58:54 R-sign off
2020-03-07 01:58:54 R-transmDevTryMax 6
2020-03-07 01:58:54 R-transmitTryMax 6
2021-03-14 20:17:42 RegL_00. 00:00 02:01 09:01 0A:F1 0B:12 0C:34 10:01 14:06
2021-03-14 20:17:43 RegL_01. 00:00 08:00 20:6C 21:00 22:64 30:06
2021-04-08 19:47:57 alive yes
2021-04-10 10:10:23 battery ok
2021-04-09 19:27:34 cfgState ok
2021-04-10 10:10:23 commState CMDs_done
2021-04-10 10:10:23 contact closed (to VCCU)
2020-02-24 08:05:00 ftui_background green
2021-03-09 15:00:16 powerOn 2021-03-09 15:00:16
2021-04-08 19:47:57 recentStateType info
2021-04-08 19:47:57 sabotageError off
2021-04-10 10:10:23 state closed
2021-04-10 10:10:23 trigger_cnt 61
helper:
HM_CMDNR 94
mId 0030
peerFriend peerAct,peerVirt
peerIDsState complete
peerOpt 4:threeStateSensor
regLst 0,1,4p
rxType 20
supp_Pair_Rep 0
ack:
cmds:
TmplKey :no:1617989180.67964
TmplTs 1617989180.67964
cmdKey 1:1:0::BD_Fenster:0030:01:
cmdLst:
assignHmKey noArg
clear [(readings|trigger|register|oldRegs|rssi|msgEvents|{msgErrors}|attack|all)]
deviceRename -newName-
fwUpdate -filename- [-bootTime-]
getConfig noArg
getDevInfo noArg
getRegRaw (List0|List1|List2|List3|List4|List5|List6|List7) [-peerChn-]
peerBulk -peer1,peer2,...- [({set}|unset)]
peerChan -btnNumber- -actChn- [({single})] [({set}|unset)] [actor|remote|both]
peerSmart -peerOpt-
raw -data- [...]
regBulk -list-.-peerChn- -addr1:data1- -addr2:data2-...
regSet [(prep|{exec})] -regName- -value- [-peerChn-]
reset noArg
sign [(on|{off})]
tplDel -tplDel-
tplSet_0 -tplChan-
trgEventL -peer- -condition-
trgEventS -peer- -condition-
trgPressL [(-peer-|{all})]
trgPressS [(-peer-|{all})]
unpair noArg
lst:
condition closed,open,tilted
peer
peerOpt AZ_Rola
tplChan
tplDel
tplPeer
rtrvLst:
cmdList [({short}|long)]
deviceInfo [({short}|long)]
list [({normal}|full)]
param -param-
reg -addr- -list- [-peerChn-]
regList noArg
regTable noArg
regVal -addr- -list- [-peerChn-]
saveConfig [-filename-]
tplInfo noArg
expert:
def 1
det 1
raw 1
tpl 0
io:
newChn +149A4C,00,00,00
nextSend 1618042223.49563
prefIO
rxt 2
vccu VCCU
p:
149A4C
00
00
00
mRssi:
mNo 5E
io:
HMLAN1:
-73
-73
myHmUART:
peerIDsH:
00000000 broadcast
prt:
bErr 0
sProc 0
sleeping 1
rspWait:
q:
qReqConf
qReqStat
role:
chn 1
dev 1
rpt:
IO HMLAN1
flg A
ts 1618042223.40474
ack:
HASH(0x55f71f0)
5E8002F11234149A4C00
rssi:
at_HMLAN1:
avg -76.0833333333333
cnt 12
lst -75
max -74
min -81
shadowReg:
tmpl:
Attributes:
IODev HMLAN1
IOgrp VCCU
actCycle 028:00
actStatus alive
autoReadReg 4_reqStatus
eventMap /tilted:gekippt/open:offen/closed:geschlossen/
expert defReg,allReg,rawReg
firmware 2.0
fp_ETW 26,596,0,
model HM-SEC-RHS
peerIDs 00000000
room 004Bad
serialNr IEQ0044944
subType threeStateSensor
Ich bin noch dabei, die Abfragen von STATE auf events umzustellen (s. 5. Abfragezweig), wie muss das aussehen, wenn ich wie im 6. auf zwei Bedingungen prüfen will?
Mit STATE sieht es so aus: [BD_Fenster] =~ "geschlossen|gekippt"
Dankeschön.
Hi,
ich würde ehrlich gesagt nicht diese umgewandelten Zustände auszuwerten. STATE würde ich gar nicht auswerten, ich bin auch nicht sicher, wie gut es ist state auszuwerten, eventuell ist es besser in dem Fall contact zu nehmen? state könnte auch ganz andere Zustände annehmen.
Ich würde den Zustand nur abfragen und mit einem Event das ganze triggern.
[?BD_Fenster:contact] =~ "closed|tilted"
Gruß Otto
Das habe ich jetzt mal so geändert...
Beim Zusammenspiel von Fenster und DOIF ist mir noch aufgefallen, dass der RHS oft sehr lange braucht, um von orange auf grün zu wechseln, manchmal auch auf rot oder gar keine abschließende Meldung bringt. In der Zeit arbeitet aber das DOIF schon und so kommt evtl. das Timing durcheinander.
Wie kann ich dies weiter eingrenzen? Ich habe schon den HM-LAN näher heran gebracht, damit die RSSI-Werte besser werden, das hat die Kommunikation aber nicht entscheident verbessert.
So schlecht sind die RSSI nicht. Hat sich das Verhalten mit alter und neuer CUL_HM Version verändert?
beim rhs ist zu beachten, dass je nach bedienung auch 2 unterschiedliche events quasi gleichzeitig auftreten können, da es 3 positionen gibt.
es ist sinnvoll beim register eventDlyTime einen wert zu setzen, zb 2s, damit nur das letzte, verbleibende event gesendet wird.
Ich bekomme das Register nicht geladen...
Muss das "s" mit angegeben werden und wenn ja mit oder ohne Leerstelle?
Die RSSI-Werte sind übrigens schon die neueren...
Die FW des HM-LAN ist die 0.961 - da habe ich schon ewig nichts geändert, die vom myHmUART ist 1.4.1.
ZitatDie FW des HM-LAN ist die 0.961
Das ist gefährlich! Es kann sein das er durch ein HmIP Gerät in der Nähe stirbt - zumindest gibt es solche Berichte. Unbedingt aktualisieren!
https://wiki.fhem.de/wiki/HM-CFG-LAN_LAN_Konfigurations-Adapter#Firmware
set BD_Fenster regSet eventDlyTime 2
danach betätigen zur Datenübertragung. Funktioniert - getestet.
Ugh - das ist bisher an mir vorbei gegangen... Danke!
"set BD_Fenster regSet eventDlyTime 2"
infos zu registern immer unter get regList.
oder komfortabel über hm.js. siehe signatur.
wenn dir dein hmlan lieb ist, mach schnell ein update auf 0.965.
Danke ihr beiden, das Update ist gemacht und das Register geändert.
Mal sehen, ob das Zusammenspiel heute Abend besser klappt...