scenario:
rollo ist manuell geschlossen.
nun wird fenster gekippt => rollo öffnet auf 30 => wie gewollt, alles gut
später wird fenster wieder geschlossen => rollo bleibt bei 30 => warum schliesst das rolo nicht wieder?
######################### kein rollo schliessen nach fenster schliessen
######################### rollo war manuell geschlossen. fenster wird gekippt und öffnet rollo auf position 30. ok
2022.08.18 13:35:15.999 4: CUL_Parse: cul868 A 0C 28 A441 1C1BE3 1ACE1F 01276434 -48
2022.08.18 13:35:16.001 5: cul868: dispatch A0C28A4411C1BE31ACE1F012764::-48:cul868
2022.08.18 13:35:16.022 1: ----- IODev-Change ----- => Fenster.Bad: cul868 -> no change
2022.08.18 13:35:16.035 5: cul868 sending As0A2880021ACE1F1C1BE300
2022.08.18 13:35:16.036 5: CUL 1C1BE3 dly:64ms
2022.08.18 13:35:16.101 5: DevIo_SimpleWrite cul868: As0A2880021ACE1F1C1BE300
2022.08.18 13:35:16.120 1: ----- IODev-Change ----- => Fenster.Bad: cul868 -> no change
2022.08.18 13:35:16.130 5: cul868 sending As0A2880021ACE1F1C1BE300
2022.08.18 13:35:16.132 5: CUL 1C1BE3 dly:28ms
2022.08.18 13:35:16.161 5: DevIo_SimpleWrite cul868: As0A2880021ACE1F1C1BE300
ASC_DEBUG!!! 2022.08.18 13:35:16 - EventProcessingWindowRec: BlindPBU01 - RECEIVED EVENT: contact: tilted (to ccu) state: tilted trigger_cnt: 39 - IDENTIFIED EVENT: tilted - STORED EVENT: tilted
ASC_DEBUG!!! 2022.08.18 13:35:16 - EventProcessingWindowRec: BlindPBU01 - HOMEMODE: none QueryShuttersPosWinRecTilted:1 QueryShuttersPosWinRecComfort: 1
ASC_DEBUG!!! 2022.08.18 13:35:16 - FnSetCmdFn: BlindPBU01 - Rollo wird gefahren, aktuelle Position: 0, Zielposition: 30. Grund der Fahrt: ventilate - window open
2022.08.18 13:35:16.202 3: CUL_HM set BlindPBU01 pct 30
2022.08.18 13:35:16.290 1: ----- IODev-Change ----- => BlindPBU01: cul868 -> no change
2022.08.18 13:35:16.301 5: cul868 sending As0C26A0111ACE1F31696102013C
2022.08.18 13:35:16.302 5: DevIo_SimpleWrite cul868: As0C26A0111ACE1F31696102013C
ASC_DEBUG!!! 2022.08.18 13:35:16 - FnSetDriveCmd: BlindPBU01 - NICHT versetztes fahren
ASC_DEBUG!!! 2022.08.18 13:35:16 - FnSetDriveCmd: BlindPBU01 - NoDelay: JA
2022.08.18 13:35:16.357 0: HMLAN_Parse: hmlan1 R:E1C1BE3 stat:0000 t:A07A9648 d:FF r:FFDB m:28 A441 1C1BE3 1ACE1F 012764
2022.08.18 13:35:16.360 0: HMLAN_Parse: hmlan1 R:E1ACE1F stat:0000 t:A07A96CB d:FF r:FFCE m:28 8002 1ACE1F 1C1BE3 00
2022.08.18 13:35:16.363 0: HMLAN_Parse: hmlan1 R:E1ACE1F stat:0000 t:A07A9706 d:FF r:FFCF m:28 8002 1ACE1F 1C1BE3 00
2022.08.18 13:35:16.366 0: HMLAN_Parse: hmlan1 R:E1ACE1F stat:0000 t:A07A9795 d:FF r:FFD0 m:26 A011 1ACE1F 316961 02013C
2022.08.18 13:35:16.392 0: HMUARTLGW hmuart1 recv: 01 05 00 00 3D msg: 28 A4 41 1C1BE3 1ACE1F 012764
2022.08.18 13:35:16.395 0: HMUARTLGW hmuart1 recv: 01 05 00 00 1D msg: 28 80 02 1ACE1F 1C1BE3 00
2022.08.18 13:35:16.399 0: HMUARTLGW hmuart1 recv: 01 05 00 00 1D msg: 28 80 02 1ACE1F 1C1BE3 00
2022.08.18 13:35:16.402 0: HMUARTLGW hmuart1 recv: 01 05 00 00 1D msg: 26 A0 11 1ACE1F 316961 02013C
2022.08.18 13:35:16.459 4: CUL_Parse: cul868 A 0E 26 8002 316961 1ACE1F 010100102E3D -43.5
2022.08.18 13:35:16.460 5: cul868: dispatch A0E2680023169611ACE1F010100102E::-43.5:cul868
ASC_DEBUG!!! 2022.08.18 13:35:16 - Notify: ASC_Pos_Reading Event vom Rollo BlindPBU01 wurde erkannt - RECEIVED EVENT: $VAR1 = [
'CommandAccepted: yes',
'recentStateType: ack',
'commState: CMDs_done',
'deviceMsg: off (to ccu)',
'level: 0',
'motor: up:off',
'pct: 0',
'state: off',
'timedOn: off',
'motorErr: ok'
];
ASC_DEBUG!!! 2022.08.18 13:35:16 - EventProcessingShutters: Fn wurde durch Notify aufgerufen da ASC_Pos_Reading Event erkannt wurde - RECEIVED EVENT: $VAR1 = 'CommandAccepted: yes recentStateType: ack commState: CMDs_done deviceMsg: off (to ccu) level: 0 motor: up:off pct: 0 state: off timedOn: off motorErr: ok';
ASC_DEBUG!!! 2022.08.18 13:35:16 - EventProcessingShutters: BlindPBU01 - Event vom Rollo erkannt. Es wird nun eine etwaige manuelle Fahrt ausgewertet. Int von ::gettimeofday: 1660822516 Last Position Timestamp: 1660822516 Drive Up Max Duration: 60 Last Position: 0 aktuelle Position: 0
ASC_DEBUG!!! 2022.08.18 13:35:16 - EventProcessingShutters: eine automatisierte Fahrt durch ASC wurde erkannt! Es werden nun die LastDriveReading und StateReading Werte gesetzt!
ASC_DEBUG!!! 2022.08.18 13:35:16 - EventProcessingShutters: Fn wurde durlaufen und es sollten Debugausgaben gekommen sein. !!!Wenn nicht!!! wurde der Event nicht korrekt als Nummerisch erkannt.
2022.08.18 13:35:16.577 0: HMLAN_Parse: hmlan1 R:E316961 stat:0000 t:A07A9813 d:FF r:FFDF m:26 8002 316961 1ACE1F 010100102E
2022.08.18 13:35:16.580 0: HMUARTLGW hmuart1 recv: 01 05 00 00 28 msg: 26 80 02 316961 1ACE1F 010100102E
2022.08.18 13:35:26.684 4: CUL_Parse: cul868 A 0D 27 A410 316961 1ACE1F 06013C003F -42.5
2022.08.18 13:35:26.685 5: cul868: dispatch A0D27A4103169611ACE1F06013C00::-42.5:cul868
2022.08.18 13:35:26.704 1: ----- IODev-Change ----- => BlindPBU01: cul868 -> no change
2022.08.18 13:35:26.719 5: cul868 sending As0A2780021ACE1F31696100
2022.08.18 13:35:26.720 5: CUL 316961 dly:64ms
2022.08.18 13:35:26.786 5: DevIo_SimpleWrite cul868: As0A2780021ACE1F31696100
ASC_DEBUG!!! 2022.08.18 13:35:26 - Notify: ASC_Pos_Reading Event vom Rollo BlindPBU01 wurde erkannt - RECEIVED EVENT: $VAR1 = [
'recentStateType: info',
'commState: CMDs_done',
'deviceMsg: 30 (to ccu)',
'level: 30',
'motor: stop:30',
'pct: 30',
'state: 30',
'timedOn: off',
'motorErr: ok'
];
ASC_DEBUG!!! 2022.08.18 13:35:26 - EventProcessingShutters: Fn wurde durch Notify aufgerufen da ASC_Pos_Reading Event erkannt wurde - RECEIVED EVENT: $VAR1 = 'recentStateType: info commState: CMDs_done deviceMsg: 30 (to ccu) level: 30 motor: stop:30 pct: 30 state: 30 timedOn: off motorErr: ok';
ASC_DEBUG!!! 2022.08.18 13:35:26 - EventProcessingShutters: BlindPBU01 - Event vom Rollo erkannt. Es wird nun eine etwaige manuelle Fahrt ausgewertet. Int von ::gettimeofday: 1660822526 Last Position Timestamp: 1660822516 Drive Up Max Duration: 60 Last Position: 0 aktuelle Position: 30
ASC_DEBUG!!! 2022.08.18 13:35:26 - EventProcessingShutters: eine automatisierte Fahrt durch ASC wurde erkannt! Es werden nun die LastDriveReading und StateReading Werte gesetzt!
ASC_DEBUG!!! 2022.08.18 13:35:26 - EventProcessingShutters: Fn wurde durlaufen und es sollten Debugausgaben gekommen sein. !!!Wenn nicht!!! wurde der Event nicht korrekt als Nummerisch erkannt.
2022.08.18 13:35:26.878 0: HMLAN_Parse: hmlan1 R:E316961 stat:0000 t:A07AC006 d:FF r:FFD8 m:27 A410 316961 1ACE1F 06013C00
2022.08.18 13:35:26.881 0: HMLAN_Parse: hmlan1 R:E1ACE1F stat:0000 t:A07AC089 d:FF r:FFCD m:27 8002 1ACE1F 316961 00
2022.08.18 13:35:26.886 0: HMUARTLGW hmuart1 recv: 01 05 00 00 27 msg: 27 A4 10 316961 1ACE1F 06013C00
2022.08.18 13:35:26.889 0: HMUARTLGW hmuart1 recv: 01 05 00 00 1D msg: 27 80 02 1ACE1F 316961 00
########################## jetzt wird fenster wieder geschlossen, aber rollo bleibt bei position 30. falsch, sollte wieder geschlossen werden.
2022.08.18 13:41:52.503 4: CUL_Parse: cul868 A 0C 29 A441 1C1BE3 1ACE1F 01280028 -54
2022.08.18 13:41:52.506 5: cul868: dispatch A0C29A4411C1BE31ACE1F012800::-54:cul868
2022.08.18 13:41:52.544 1: ----- IODev-Change ----- => Fenster.Bad: cul868 -> no change
2022.08.18 13:41:52.563 5: cul868 sending As0A2980021ACE1F1C1BE300
2022.08.18 13:41:52.565 5: CUL 1C1BE3 dly:40ms
2022.08.18 13:41:52.606 5: DevIo_SimpleWrite cul868: As0A2980021ACE1F1C1BE300
2022.08.18 13:41:52.632 1: ----- IODev-Change ----- => Fenster.Bad: cul868 -> no change
2022.08.18 13:41:52.644 5: cul868 sending As0A2980021ACE1F1C1BE300
2022.08.18 13:41:52.645 5: CUL 1C1BE3 dly:19ms
2022.08.18 13:41:52.666 5: DevIo_SimpleWrite cul868: As0A2980021ACE1F1C1BE300
ASC_DEBUG!!! 2022.08.18 13:41:52 - EventProcessingWindowRec: BlindPBU01 - RECEIVED EVENT: contact: closed (to ccu) state: closed trigger_cnt: 40 - IDENTIFIED EVENT: closed - STORED EVENT: closed
ASC_DEBUG!!! 2022.08.18 13:41:52 - EventProcessingWindowRec: BlindPBU01 - HOMEMODE: none QueryShuttersPosWinRecTilted: QueryShuttersPosWinRecComfort: 1
ASC_DEBUG!!! 2022.08.18 13:41:52 - FnIsDay: BlindPBU01 Allgemein: 1
ASC_DEBUG!!! 2022.08.18 13:41:52 - FnIsDay: BlindPBU01 Allgemein: 1
ASC_DEBUG!!! 2022.08.18 13:41:52 - EventProcessingWindowRec: BlindPBU01 Event Closed
ASC_DEBUG!!! 2022.08.18 13:41:52 - FnIsDay: BlindPBU01 Allgemein: 1
ASC_DEBUG!!! 2022.08.18 13:41:52 - FnSetCmdFn: BlindPBU01 - Abbruch aktuelle Position ist gleich der Zielposition 30=30
ASC_DEBUG!!! 2022.08.18 13:41:52 - FnSetDriveCmd: BlindPBU01 - NICHT versetztes fahren
ASC_DEBUG!!! 2022.08.18 13:41:52 - FnSetDriveCmd: BlindPBU01 - NoDelay: JA
2022.08.18 13:41:52.727 0: HMLAN_Parse: hmlan1 R:E1C1BE3 stat:0000 t:A080A364 d:FF r:FFD4 m:29 A441 1C1BE3 1ACE1F 012800
2022.08.18 13:41:52.748 0: HMLAN_Parse: hmlan1 R:E1ACE1F stat:0000 t:A080A3E9 d:FF r:FFC8 m:29 8002 1ACE1F 1C1BE3 00
2022.08.18 13:41:52.752 0: HMLAN_Parse: hmlan1 R:E1ACE1F stat:0000 t:A080A424 d:FF r:FFC9 m:29 8002 1ACE1F 1C1BE3 00
2022.08.18 13:41:52.756 0: HMUARTLGW hmuart1 recv: 01 05 00 00 33 msg: 29 A4 41 1C1BE3 1ACE1F 012800
2022.08.18 13:41:52.760 0: HMUARTLGW hmuart1 recv: 01 05 00 00 1D msg: 29 80 02 1ACE1F 1C1BE3 00
2022.08.18 13:41:52.763 0: HMUARTLGW hmuart1 recv: 01 05 00 00 1D msg: 29 80 02 1ACE1F 1C1BE3 00
#########################
list rollo
Internals:
DEF 316961
FUUID 626a3938-f33f-09c4-f76b-de9b449a5770af9f
IODev cul868
LASTInputDev hmuart1
MSGCNT 315
NAME BlindPBU01
NR 763
NTFY_ORDER 48-BlindPBU01
STATE 30
TYPE CUL_HM
chanNo 01
cul868_MSGCNT 106
cul868_RAWMSG A0D27A4103169611ACE1F06013C00::-42.5:cul868
cul868_RSSI -42.5
cul868_TIME 2022-08-18 13:35:26
disableNotifyFn 1
hmlan1_MSGCNT 103
hmlan1_RAWMSG E316961,0000,A07AC006,FF,FFD8,27A4103169611ACE1F06013C00
hmlan1_RSSI -40
hmlan1_TIME 2022-08-18 13:35:26
hmuart1_MSGCNT 106
hmuart1_RAWMSG 0500002727A4103169611ACE1F06013C00
hmuart1_RSSI -39
hmuart1_TIME 2022-08-18 13:35:26
lastMsg No:27 - t:10 s:316961 d:1ACE1F 06013C00
peerList self01,self02
protLastRcv 2022-08-18 13:35:26
protRcv 12 last_at:2022-08-18 13:35:26
protSnd 13 last_at:2022-08-18 13:35:26
protState CMDs_done
rssi_at_cul868 cnt:106 min:-51.5 max:-41 avg:-43.75 lst:-42.5
rssi_at_hmlan1 cnt:103 min:-59 max:-32 avg:-39.48 lst:-40
rssi_at_hmuart1 cnt:106 min:-48 max:-38 avg:-41.59 lst:-39
rssi_cul868 cnt:23 min:-46 max:-43 avg:-44.78 lst:-46
CL:
Authenticated 0
BUF
FD 88
FW_ID 153028
LASTACCESS 1660826583.20475
NAME WEB_192.168.1.31_65125
NR 153910
PEER 192.168.1.31
PORT 65125
SNAME WEB
SSL
STATE Connected
TEMPORARY 1
TYPE FHEMWEB
canAsyncOutput 1
encoding UTF-8
READINGS:
2022-08-18 14:43:03 state Connected
READINGS:
2022-05-04 12:38:59 ASC_Enable on
2022-08-18 13:35:26 ASC_ShuttersLastDrive ventilate - window open
2022-08-18 09:00:01 ASC_Time_DriveDown 18.08.2022 - 20:12
2022-08-18 09:00:01 ASC_Time_DriveUp 19.08.2022 - 09:00
2022-08-17 20:35:05 Activity alive
2022-08-18 13:35:16 CommandAccepted yes
2022-06-16 13:08:37 D-firmware 2.11
2022-06-16 13:08:37 D-serialNr LEQ1027174
2022-08-18 13:35:26 IODev cul868
2022-08-17 20:37:06 PairedTo 0x1ACE1F
2022-04-28 08:50:42 R-confBtnTime permanent
2022-08-17 20:37:07 R-driveDown 30.2 s
2022-04-28 09:03:16 R-driveTurn 0.5 s
2022-08-17 20:37:07 R-driveUp 32.2 s
2022-06-16 13:11:25 R-intKeyVisib visib
2022-04-28 08:50:42 R-localResDis off
2022-06-16 13:08:42 R-pairCentral 0x1ACE1F
2022-06-16 13:08:43 R-refRunCounter 0
2022-04-28 09:13:02 R-self01-lgActionType jmpToTarget
2022-04-28 09:13:02 R-self01-lgBlJtDlyOff refOff
2022-04-28 09:13:02 R-self01-lgBlJtDlyOn dlyOff
2022-04-28 09:13:02 R-self01-lgBlJtOff dlyOff
2022-04-28 09:13:02 R-self01-lgBlJtOn dlyOff
2022-04-28 09:13:02 R-self01-lgBlJtRampOff rampOff
2022-04-28 09:13:02 R-self01-lgBlJtRampOn on
2022-04-28 09:13:02 R-self01-lgBlJtRefOff rampOff
2022-04-28 09:13:02 R-self01-lgBlJtRefOn on
2022-04-28 09:13:02 R-self01-lgCtDlyOff geLo
2022-04-28 09:13:02 R-self01-lgCtDlyOn geLo
2022-04-28 09:13:02 R-self01-lgCtOff geLo
2022-04-28 09:13:02 R-self01-lgCtOn geLo
2022-04-28 09:13:02 R-self01-lgCtRampOff geLo
2022-04-28 09:13:02 R-self01-lgCtRampOn geLo
2022-04-28 09:13:02 R-self01-lgCtRefOff geLo
2022-04-28 09:13:02 R-self01-lgCtRefOn geLo
2022-04-28 09:13:02 R-self01-lgCtValHi 100
2022-04-28 09:13:02 R-self01-lgCtValLo 50
2022-04-28 09:13:02 R-self01-lgDriveMode direct
2022-04-28 09:13:02 R-self01-lgMaxTimeF 0.4 s
2022-04-28 09:13:02 R-self01-lgMultiExec on
2022-04-28 09:13:02 R-self01-lgOffDly 0 s
2022-04-28 09:13:02 R-self01-lgOffLevel 0 %
2022-04-28 09:13:02 R-self01-lgOffTime unused
2022-04-28 09:13:02 R-self01-lgOffTimeMode absolut
2022-04-28 09:13:02 R-self01-lgOnDly 0 s
2022-04-28 09:13:02 R-self01-lgOnLevel 100 %
2022-04-28 09:13:02 R-self01-lgOnTime unused
2022-04-28 09:13:02 R-self01-lgOnTimeMode absolut
2022-04-28 09:13:02 R-self01-shActionType jmpToTarget
2022-04-28 09:13:02 R-self01-shBlJtDlyOff refOff
2022-04-28 09:13:02 R-self01-shBlJtDlyOn dlyOff
2022-04-28 09:13:02 R-self01-shBlJtOff dlyOff
2022-04-28 09:13:02 R-self01-shBlJtOn dlyOff
2022-04-28 09:13:02 R-self01-shBlJtRampOff rampOff
2022-04-28 09:13:02 R-self01-shBlJtRampOn on
2022-04-28 09:13:02 R-self01-shBlJtRefOff rampOff
2022-04-28 09:13:02 R-self01-shBlJtRefOn on
2022-04-28 09:13:02 R-self01-shCtDlyOff geLo
2022-04-28 09:13:02 R-self01-shCtDlyOn geLo
2022-04-28 09:13:02 R-self01-shCtOff geLo
2022-04-28 09:13:02 R-self01-shCtOn geLo
2022-04-28 09:13:02 R-self01-shCtRampOff geLo
2022-04-28 09:13:02 R-self01-shCtRampOn geLo
2022-04-28 09:13:02 R-self01-shCtRefOff geLo
2022-04-28 09:13:02 R-self01-shCtRefOn geLo
2022-04-28 09:13:02 R-self01-shCtValHi 100
2022-04-28 09:13:02 R-self01-shCtValLo 50
2022-04-28 09:13:02 R-self01-shDriveMode direct
2022-04-28 09:13:02 R-self01-shMaxTimeF unused
2022-04-28 09:13:02 R-self01-shMultiExec off
2022-04-28 09:13:02 R-self01-shOffDly 0 s
2022-04-28 09:13:02 R-self01-shOffLevel 0 %
2022-04-28 09:13:02 R-self01-shOffTime unused
2022-04-28 09:13:02 R-self01-shOffTimeMode absolut
2022-04-28 09:13:02 R-self01-shOnDly 0 s
2022-04-28 09:13:02 R-self01-shOnLevel 100 %
2022-04-28 09:13:02 R-self01-shOnTime unused
2022-04-28 09:13:02 R-self01-shOnTimeMode absolut
2022-04-28 09:13:00 R-self02-lgActionType jmpToTarget
2022-04-28 09:13:00 R-self02-lgBlJtDlyOff dlyOn
2022-04-28 09:13:00 R-self02-lgBlJtDlyOn refOn
2022-04-28 09:13:00 R-self02-lgBlJtOff dlyOn
2022-04-28 09:13:00 R-self02-lgBlJtOn dlyOn
2022-04-28 09:13:00 R-self02-lgBlJtRampOff off
2022-04-28 09:13:00 R-self02-lgBlJtRampOn rampOn
2022-04-28 09:13:00 R-self02-lgBlJtRefOff off
2022-04-28 09:13:00 R-self02-lgBlJtRefOn rampOn
2022-04-28 09:13:00 R-self02-lgCtDlyOff geLo
2022-04-28 09:13:00 R-self02-lgCtDlyOn geLo
2022-04-28 09:13:00 R-self02-lgCtOff geLo
2022-04-28 09:13:00 R-self02-lgCtOn geLo
2022-04-28 09:13:00 R-self02-lgCtRampOff geLo
2022-04-28 09:13:00 R-self02-lgCtRampOn geLo
2022-04-28 09:13:00 R-self02-lgCtRefOff geLo
2022-04-28 09:13:00 R-self02-lgCtRefOn geLo
2022-04-28 09:13:00 R-self02-lgCtValHi 100
2022-04-28 09:13:00 R-self02-lgCtValLo 50
2022-04-28 09:13:00 R-self02-lgDriveMode direct
2022-04-28 09:13:00 R-self02-lgMaxTimeF 0.4 s
2022-04-28 09:13:00 R-self02-lgMultiExec on
2022-04-28 09:13:00 R-self02-lgOffDly 0 s
2022-04-28 09:13:00 R-self02-lgOffLevel 0 %
2022-04-28 09:13:00 R-self02-lgOffTime unused
2022-04-28 09:13:00 R-self02-lgOffTimeMode absolut
2022-04-28 09:13:00 R-self02-lgOnDly 0 s
2022-04-28 09:13:00 R-self02-lgOnLevel 100 %
2022-04-28 09:13:00 R-self02-lgOnTime unused
2022-04-28 09:13:00 R-self02-lgOnTimeMode absolut
2022-04-28 09:13:00 R-self02-shActionType jmpToTarget
2022-04-28 09:13:00 R-self02-shBlJtDlyOff dlyOn
2022-04-28 09:13:00 R-self02-shBlJtDlyOn refOn
2022-04-28 09:13:00 R-self02-shBlJtOff dlyOn
2022-04-28 09:13:00 R-self02-shBlJtOn dlyOn
2022-04-28 09:13:00 R-self02-shBlJtRampOff off
2022-04-28 09:13:00 R-self02-shBlJtRampOn rampOn
2022-04-28 09:13:00 R-self02-shBlJtRefOff off
2022-04-28 09:13:00 R-self02-shBlJtRefOn rampOn
2022-04-28 09:13:00 R-self02-shCtDlyOff geLo
2022-04-28 09:13:00 R-self02-shCtDlyOn geLo
2022-04-28 09:13:00 R-self02-shCtOff geLo
2022-04-28 09:13:00 R-self02-shCtOn geLo
2022-04-28 09:13:00 R-self02-shCtRampOff geLo
2022-04-28 09:13:00 R-self02-shCtRampOn geLo
2022-04-28 09:13:00 R-self02-shCtRefOff geLo
2022-04-28 09:13:00 R-self02-shCtRefOn geLo
2022-04-28 09:13:00 R-self02-shCtValHi 100
2022-04-28 09:13:00 R-self02-shCtValLo 50
2022-04-28 09:13:00 R-self02-shDriveMode direct
2022-04-28 09:13:00 R-self02-shMaxTimeF unused
2022-04-28 09:13:00 R-self02-shMultiExec off
2022-04-28 09:13:00 R-self02-shOffDly 0 s
2022-04-28 09:13:00 R-self02-shOffLevel 0 %
2022-04-28 09:13:00 R-self02-shOffTime unused
2022-04-28 09:13:00 R-self02-shOffTimeMode absolut
2022-04-28 09:13:00 R-self02-shOnDly 0 s
2022-04-28 09:13:00 R-self02-shOnLevel 100 %
2022-04-28 09:13:00 R-self02-shOnTime unused
2022-04-28 09:13:00 R-self02-shOnTimeMode absolut
2022-04-28 09:03:16 R-sign off
2022-06-16 13:12:54 R-statusInfoMinDly 0.5 s
2022-06-16 13:12:54 R-statusInfoRandom 0 s
2022-04-28 09:03:16 R-transmitTryMax 6
2022-08-17 20:37:06 RegL_00. 00:00 02:81 0A:1A 0B:CE 0C:1F 15:FF 18:00
2022-08-17 20:37:07 RegL_01. 00:00 08:00 09:00 0A:00 0B:01 0C:2E 0D:01 0E:42 0F:05 10:00 30:06 56:00 57:01
2022-08-17 20:37:09 RegL_03.self01 00:00 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:44 0C:54 0D:93 0E:00 0F:00 11:C8 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 1A:00 1B:00 1C:00 1D:FF 1E:93 1F:00 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:21 8B:44 8C:54 8D:93 8E:00 8F:00 91:C8 92:00 93:00 94:00 95:00 96:00 97:00 98:00 99:00 9A:00 9B:00 9C:00 9D:04 9E:93 9F:00
2022-08-17 20:37:10 RegL_03.self02 00:00 01:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:11 0C:12 0D:68 0E:00 0F:00 11:C8 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 1A:00 1B:00 1C:00 1D:FF 1E:68 1F:00 81:00 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:21 8B:11 8C:12 8D:68 8E:00 8F:00 91:C8 92:00 93:00 94:00 95:00 96:00 97:00 98:00 99:00 9A:00 9B:00 9C:00 9D:04 9E:68 9F:00
2022-08-12 10:06:43 associatedWith asc
2022-08-17 20:38:10 cfgState ok
2022-08-18 13:35:26 commState CMDs_done
2022-08-18 13:35:26 deviceMsg 30 (to ccu)
2022-08-18 13:35:26 level 30
2022-08-18 13:35:26 motor stop:30
2022-08-18 13:35:26 motorErr ok
2022-08-18 13:35:26 pct 30
2022-08-17 20:37:07 peerList self01,self02
2022-08-17 20:33:29 powerOn 2022-08-17 20:33:29
2022-08-18 13:35:26 recentStateType info
2022-08-18 13:35:26 state 30
2022-08-18 13:35:26 timedOn off
2022-08-18 13:35:16 trigLast fhem:02
2022-05-20 10:59:23 trig_rolloTasterVirtuell_Btn1 Long_4
helper:
HM_CMDNR 39
PONtest 0
cSnd 111ACE1F316961020100,111ACE1F31696102013C
cfgChkResult No regs found for:-ret--ret-BlindPBU01 type:blindActuator - -ret-list:peer register :value-ret- 0: confBtnTime :permanent-ret- 0: intKeyVisib :visib-ret- 0: localResDis :off-ret- 0: pairCentral :0x1ACE1F-ret- 1: driveDown :30.2 s-ret- 1: driveTurn :0.5 s-ret- 1: driveUp :32.2 s-ret- 1: refRunCounter :0-ret- 1: sign :off-ret- 1: statusInfoMinDly :0.5 s-ret- 1: statusInfoRandom :0 s-ret- 1: transmitTryMax :6-ret- self01 self02 -ret- lg sh lg sh -ret-ActionType jmpToTarget jmpToTarget jmpToTarget jmpToTarget -ret-BlJtDlyOff refOff refOff dlyOn dlyOn -ret-BlJtDlyOn dlyOff dlyOff refOn refOn -ret-BlJtOff dlyOff dlyOff dlyOn dlyOn -ret-BlJtOn dlyOff dlyOff dlyOn dlyOn -ret-BlJtRampOff rampOff rampOff off off -ret-BlJtRampOn on on rampOn rampOn -ret-BlJtRefOff rampOff rampOff off off -ret-BlJtRefOn on on rampOn rampOn -ret-CtDlyOff geLo geLo geLo geLo -ret-CtDlyOn geLo geLo geLo geLo -ret-CtOff geLo geLo geLo geLo -ret-CtOn geLo geLo geLo geLo -ret-CtRampOff geLo geLo geLo geLo -ret-CtRampOn geLo geLo geLo geLo -ret-CtRefOff geLo geLo geLo geLo -ret-CtRefOn geLo geLo geLo geLo -ret-CtValHi 100 100 100 100 -ret-CtValLo 50 50 50 50 -ret-DriveMode direct direct direct direct -ret-MaxTimeF [s] 0.4 unused 0.4 unused -ret-MultiExec on off on off -ret-OffDly [s] 0 0 0 0 -ret-OffLevel [%] 0 0 0 0 -ret-OffTime unused unused unused unused -ret-OffTimeMode absolut absolut absolut absolut -ret-OnDly [s] 0 0 0 0 -ret-OnLevel [%] 100 100 100 100 -ret-OnTime unused unused unused unused -ret-OnTimeMode absolut absolut absolut absolut -ret-
cfgStateUpdt 0
dlvlCmd ++A0111ACE1F31696102013C
lastMsgTm 1660822526.68648
mId 0005
peerFriend peerSens,peerVirt
peerIDsRaw ,31696101,31696102,00000000
peerIDsState complete
peerOpt 3:blindActuator
regLst 0,1,3p
rxType 1
supp_Pair_Rep 0
tmplChg 0
ack:
cmds:
TmplKey self01,self02:1660297748.56985:1660291604.52775
TmplTs 1660291604.52775
cmdKey 1:1:0::BlindPBU01:0005:01:self01,self02
cmdLst:
assignHmKey noArg
clear [({msgErrors}|msgEvents|rssi|attack|trigger|register|oldRegs|readings|all)]
deviceRename -newName-
down 'change:'[(0..100;1|{10})] [(-ontime-|{})] [(-ramptime-|{})]
eventL -peer- -cond-
eventS -peer- -cond-
fwUpdate -filename- [-bootTime-]
getConfig noArg
getDevInfo noArg
getRegRaw (List0|List1|List2|List3|List4|List5|List6|List7) [-peerChn-]
getVersion noArg
inhibit [(on|{off})]
off noArg
on noArg
pair noArg
pct -value- [-ontime-]
peerBulk -peer1,peer2,...- [({set}|unset)]
peerIODev [IO] -btn- [({set}|unset)] 'not for future use'
peerSmart -peerOpt-
press [(long|{short})] [(-peer-|{self01})] [(-repCount-|{0})] [(-repDelay-|{0.25})]
pressL [(-peer-|{self01})]
pressS [(-peer-|{self01})]
raw -data- [...]
regBulk -list-.-peerChn- -addr1:data1- [-addr2:data2-]...
regSet [(prep|{exec})] -regName- -value- [-peerChn-]
reset noArg
sign [(on|{off})]
statusRequest noArg
stop noArg
toggle noArg
toggleDir noArg
tplDel -tplDel-
tplSet_0 -tplChan-
tplSet_self01 -tplPeer-
tplSet_self02 -tplPeer-
unpair noArg
up 'change:'[(0..100;1|{10})] [(-ontime-|{})] [(-ramptime-|{})]
lst:
condition slider,0,1,255
peer self01,self02
peerOpt Fenster.Bad,SDTeam_Btn1,SwitchES01_SenF,SwitchES01_SenI,SwitchES01_SenPwr,SwitchES01_SenU,SwitchPBU01_Btn_01,SwitchPBU01_Btn_02,Tuer.SZ,Tuer.WZ.Terrasse,VentilControler.AZ.Nord_Btn1,VentilControler.AZ.West_Btn1,VentilControler.Bad_Btn1,VentilControler.Kueche_Btn1,VentilControler.SZ_Btn1,VentilControler.WZ_Btn1,virtAktorAlarmOff_Btn1,virt_vd_Btn1
tplChan ES_device,es99,sw99,test,test01,tplCheck
tplDel
tplPeer BlStopDnLg_long,BlStopDnLg_short,BlStopDnSh_long,BlStopDnSh_short,BlStopUpLg_long,BlStopUpLg_short,BlStopUpSh_long,BlStopUpSh_short,SwCondAbove_long,SwCondAbove_short,SwCondBelow_long,SwCondBelow_short,SwOnCond_long,SwOnCond_short,ignore_long,ignore_short
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
dir:
cur stop
rct up
expert:
def 1
det 1
raw 1
tpl 1
io:
flgs 0
newChn +316961,00,00,00
nextSend 1660822526.84515
rxt 0
vccu ccu
p:
316961
00
00
00
prefIO:
cul868
mRssi:
mNo 27
io:
cul868:
-34.5
-34.5
hmlan1:
-40
-40
hmuart1:
-39
-39
peerIDsH:
00000000 broadcast
31696101 self01
31696102 self02
prt:
bErr 0
sProc 0
rspWait:
tryMsg:
q:
qReqConf
qReqStat
regCollect:
role:
chn 1
dev 1
prs 1
rpt:
IO cul868
flg A
ts 1660822526.68648
ack:
HASH(0x6b01608)
2780021ACE1F31696100
rssi:
at_cul868:
avg -43.7547169811321
cnt 106
lst -42.5
max -41
min -51.5
at_hmlan1:
avg -39.4854368932039
cnt 103
lst -40
max -32
min -59
at_hmuart1:
avg -41.5943396226415
cnt 106
lst -39
max -38
min -48
cul868:
avg -44.7826086956522
cnt 23
lst -46
max -43
min -46
shadowReg:
tmpl:
hmccu:
nb:
cnt 1
Attributes:
ASC 2
ASC_AutoAstroModeEvening HORIZON
ASC_AutoAstroModeEveningHorizon 3
ASC_ComfortOpen_Pos 90
ASC_Down astro
ASC_Mode_Down always
ASC_Mode_Up always
ASC_Pos_Reading pct
ASC_ShuttersPlace EG_window
ASC_Time_Up_Early 09:00
ASC_Time_Up_Late 10:00
ASC_Up time
ASC_Ventilate_Pos 30
ASC_Ventilate_Window_Open on
ASC_WindowRec Fenster.Bad:contact
ASC_WindowRec_PosAfterDayClosed lastManual
ASC_WindowRec_subType threestate
IOgrp ccu:cul868
actCycle 024:00
actStatus alive
autoReadReg 5_readMissing
commStInCh off
comment c26 ausgewechselt: 2022-04-28 08:53:32
devStateIcon 100:fts_shutter_10@lightgreen
9\d.*:fts_shutter_10@yellow
8\d.*:fts_shutter_20@yellow
7\d.*:fts_shutter_30@yellow
6\d.*:fts_shutter_40@yellow
5\d.*:fts_shutter_50@yellow
4\d.*:fts_shutter_60@yellow
3\d.*:fts_shutter_70@yellow
2\d.*:fts_shutter_80@yellow
1\d.*:fts_shutter_90@yellow
(0\.5|[1-9]\.?5?):fts_shutter_100@yellow
0:fts_shutter_100@red
expert defReg,allReg,rawReg,templ
firmware 2.11
forceEvents 1
model HM-LC-BL1PBU-FM
peerIDs 00000000,31696101,31696102
room 02_handy,10_WZ,ASC
serialNr LEQ1027174
stateFormat level
subType blindActuator
userReadings motorErr:motor:.* {
my $mot = ReadingsVal($name,"motor","");
return ($mot =~ /err:/)? $mot: "ok";
}
userattr ASC_Adv:on,off ASC_Antifreeze:off,soft,hard,am,pm ASC_Antifreeze_Pos:5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100 ASC_AutoAstroModeEvening:REAL,CIVIL,NAUTIC,ASTRONOMIC,HORIZON ASC_AutoAstroModeEveningHorizon:-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9 ASC_AutoAstroModeMorning:REAL,CIVIL,NAUTIC,ASTRONOMIC,HORIZON ASC_AutoAstroModeMorningHorizon:-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9 ASC_BlockingTime_afterManual ASC_BlockingTime_beforeDayOpen ASC_BlockingTime_beforeNightClose ASC_BrightnessSensor ASC_Closed_Pos:0,10,20,30,40,50,60,70,80,90,100 ASC_ComfortOpen_Pos:0,10,20,30,40,50,60,70,80,90,100 ASC_CommandTemplate ASC_Down:time,astro,brightness,roommate ASC_DriveUpMaxDuration ASC_Drive_Delay ASC_Drive_DelayStart ASC_ExternalTrigger ASC_GuestRoom:on,off ASC_LockOut:soft,hard,off ASC_LockOut_Cmd:inhibit,blocked,protection ASC_Mode_Down:absent,always,off,home ASC_Mode_Up:absent,always,off,home ASC_Open_Pos:0,10,20,30,40,50,60,70,80,90,100 ASC_Partymode:on,off ASC_Pos_Reading ASC_PrivacyDownValue_beforeNightClose ASC_PrivacyDown_Pos ASC_PrivacyUpValue_beforeDayOpen ASC_PrivacyUp_Pos ASC_RainProtection:on,off ASC_Roommate_Device ASC_Roommate_Reading ASC_Self_Defense_AbsentDelay ASC_Self_Defense_Mode:absent,gone,off ASC_Shading_BetweenTheTime ASC_Shading_InOutAzimuth ASC_Shading_MinMax_Elevation ASC_Shading_Min_OutsideTemperature ASC_Shading_Mode:absent,always,off,home ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100 ASC_Shading_StateChange_SunnyCloudy ASC_Shading_WaitingPeriod ASC_Shutter_IdleDetection ASC_ShuttersPlace:window,terrace,awning,EG_window ASC_SlatPosCmd_SlatDevice ASC_Sleep_Pos:0,10,20,30,40,50,60,70,80,90,100 ASC_TempSensor ASC_Time_Down_Early ASC_Time_Down_Late ASC_Time_Up_Early ASC_Time_Up_Late ASC_Time_Up_WE_Holiday ASC_Up:time,astro,brightness,roommate ASC_Ventilate_Pos:10,20,30,40,50,60,70,80,90,100 ASC_Ventilate_Window_Open:on,off ASC_WiggleValue ASC_WindParameters ASC_WindProtection:on,off ASC_WindowRec ASC_WindowRec_PosAfterDayClosed:open,lastManual ASC_WindowRec_subType:twostate,threestate
webCmd up:down:stop
list asc
Internals:
.FhemMetaInternals 1
FUUID 6272570f-f33f-09c4-c69a-a624974b2a78d347
FVERSION 73_AutoShuttersControl.pm:v0.10.23-s25934/2022-04-07
MID da39a3ee5e6b4b0d3255bfef95601890afd80709
NAME asc
NOTIFYDEV global,asc,BlindPBU01,BlindPBU01,Fenster.Bad
NR 767
NTFY_ORDER 51-asc
STATE ventilate - window open
TYPE AutoShuttersControl
VERSION v0.10.23
.attraggr:
.attrminint:
OLDREADINGS:
READINGS:
2022-05-12 19:08:15 .monitoredDevs {"Fenster.Bad":{"BlindPBU01":"ASC_WindowRec"},"BlindPBU01":{}}
2022-08-18 13:35:26 BlindPBU01_PosValue 30
2022-08-18 09:00:01 BlindPBU01_lastPosValue 30
2022-08-18 09:00:01 BlindPBU01_nextAstroTimeEvent 18.08.2022 - 20:12
2022-05-05 15:08:59 ascEnable on
2022-05-05 15:08:59 controlShading off
2022-05-05 15:08:59 hardLockOut off
2022-08-12 10:06:41 room_02_handy_10_WZ_ASC BlindPBU01
2022-05-05 15:08:59 selfDefense off
2022-08-18 13:35:26 state ventilate - window open
2022-05-05 15:08:59 sunriseTimeWeHoliday off
2022-08-12 10:06:41 userAttrList rolled out
helper:
shuttersList:
BlindPBU01
monitoredDevs:
BlindPBU01:
Fenster.Bad:
BlindPBU01 ASC_WindowRec
Attributes:
ASC_autoShuttersControlComfort on
ASC_debug 1
ASC_expert 1
ASC_twilightDevice astro
devStateIcon { ShuttersControl_DevStateIcon($name) }
icon fts_shutter_automatic
room ASC
edit:
wäre es vielleicht möglich die unnötigen leerzeilen bei ASC_DEBUG zu entfernen?
Ich tippe auf
ASC_WindowRec_PosAfterDayClosed lastManual
Er sagt ja auch
ASC_DEBUG!!! 2022.08.18 13:41:52 - FnSetCmdFn: BlindPBU01 - Abbruch aktuelle Position ist gleich der Zielposition 30=30
ZitatIch tippe auf
ASC_WindowRec_PosAfterDayClosed lastManual
Er sagt ja auch
ASC_DEBUG!!! 2022.08.18 13:41:52 - FnSetCmdFn: BlindPBU01 - Abbruch aktuelle Position ist gleich der Zielposition 30=30
genau, diese zielposition wird falsch ermittelt.
definiere bitte mal den wert "lastManual".
(für mich bedeutet es: die letzte manuell gesetzte position vor dem öffnen des fensters)
##########################################
tagsüber passiert scheinbar nur "mist":
gerade habe ich das rollo extra stufenweise manuell geschlossen (60/45/20/0).
anschliessend das fenster gekippt.
diesmal gibt es dazu nicht einmal debugausgaben in fhem.log, asc hat das fensterereignis völlig ignoriert.
list asc:
Internals:
.FhemMetaInternals 1
FUUID 6272570f-f33f-09c4-c69a-a624974b2a78d347
FVERSION 73_AutoShuttersControl.pm:v0.10.23-s25934/2022-04-07
MID da39a3ee5e6b4b0d3255bfef95601890afd80709
NAME asc
NOTIFYDEV global,asc,BlindPBU01,Fenster.Bad,BlindPBU01
NR 767
NTFY_ORDER 51-asc
STATE manual
TYPE AutoShuttersControl
VERSION v0.10.23
.attraggr:
.attrminint:
OLDREADINGS:
READINGS:
2022-05-12 19:08:15 .monitoredDevs {"Fenster.Bad":{"BlindPBU01":"ASC_WindowRec"},"BlindPBU01":{}}
2022-08-20 13:23:01 BlindPBU01_PosValue 0
2022-08-20 09:00:01 BlindPBU01_lastPosValue 30
2022-08-20 09:00:01 BlindPBU01_nextAstroTimeEvent 20.08.2022 - 20:08
2022-05-05 15:08:59 ascEnable on
2022-05-05 15:08:59 controlShading off
2022-05-05 15:08:59 hardLockOut off
2022-08-19 11:48:37 room_02_handy_10_WZ_ASC BlindPBU01
2022-05-05 15:08:59 selfDefense off
2022-08-20 13:23:01 state manual
2022-05-05 15:08:59 sunriseTimeWeHoliday off
2022-08-19 11:48:37 userAttrList rolled out
helper:
shuttersList:
BlindPBU01
monitoredDevs:
BlindPBU01:
Fenster.Bad:
BlindPBU01 ASC_WindowRec
Attributes:
ASC_autoShuttersControlComfort on
ASC_debug 1
ASC_expert 1
ASC_twilightDevice astro
devStateIcon { ShuttersControl_DevStateIcon($name) }
icon fts_shutter_automatic
room ASC
vielleicht hilft dir ja das eventlog weiter (asc, rollo, fenster):
2022-08-20_03:47:51 asc BlindPBU01_PosValue: 30
2022-08-20_03:47:51 asc ventilate - window open
2022-08-20_03:47:51 BlindPBU01 ASC_ShuttersLastDrive: ventilate - window open
2022-08-20_09:00:01 BlindPBU01 commState: CMDs_pending
2022-08-20_09:00:01 BlindPBU01 level: set_100
2022-08-20_09:00:01 BlindPBU01 set_100
2022-08-20_09:00:01 BlindPBU01 IODev: cul868
2022-08-20_09:00:01 BlindPBU01 commState: CMDs_processing...
2022-08-20_09:00:01 BlindPBU01 trigLast: fhem:02
2022-08-20_09:00:01 asc BlindPBU01_lastPosValue: 30
2022-08-20_09:00:01 BlindPBU01 ASC_Time_DriveDown: 20.08.2022 - 20:08
2022-08-20_09:00:01 BlindPBU01 ASC_Time_DriveUp: 21.08.2022 - 09:00
2022-08-20_09:00:01 asc BlindPBU01_nextAstroTimeEvent: 20.08.2022 - 20:08
2022-08-20_09:00:01 asc created new drive timer
2022-08-20_09:00:01 BlindPBU01 trigLast: fhem:02
2022-08-20_09:00:01 BlindPBU01 CommandAccepted: yes
2022-08-20_09:00:01 BlindPBU01 recentStateType: ack
2022-08-20_09:00:01 BlindPBU01 commState: CMDs_done
2022-08-20_09:00:01 BlindPBU01 deviceMsg: 30 (to ccu)
2022-08-20_09:00:01 BlindPBU01 level: 30
2022-08-20_09:00:01 BlindPBU01 motor: up:30
2022-08-20_09:00:01 BlindPBU01 pct: 30
2022-08-20_09:00:01 BlindPBU01 30
2022-08-20_09:00:01 BlindPBU01 timedOn: off
2022-08-20_09:00:01 BlindPBU01 motorErr: ok
2022-08-20_09:00:01 asc BlindPBU01_PosValue: 30
2022-08-20_09:00:01 asc day open
2022-08-20_09:00:01 BlindPBU01 ASC_ShuttersLastDrive: day open
2022-08-20_09:00:27 BlindPBU01 IODev: cul868
2022-08-20_09:00:27 BlindPBU01 recentStateType: info
2022-08-20_09:00:27 BlindPBU01 commState: CMDs_done
2022-08-20_09:00:27 BlindPBU01 deviceMsg: on (to ccu)
2022-08-20_09:00:27 BlindPBU01 level: 100
2022-08-20_09:00:27 BlindPBU01 motor: stop:on
2022-08-20_09:00:27 BlindPBU01 pct: 100
2022-08-20_09:00:27 BlindPBU01 on
2022-08-20_09:00:27 BlindPBU01 timedOn: off
2022-08-20_09:00:27 BlindPBU01 motorErr: ok
2022-08-20_09:00:27 asc BlindPBU01_PosValue: 100
2022-08-20_09:00:27 asc day open
2022-08-20_09:00:27 BlindPBU01 ASC_ShuttersLastDrive: day open
2022-08-20_09:43:50 Fenster.Bad IODev: cul868
2022-08-20_09:43:50 Fenster.Bad IODev: cul868
2022-08-20_09:43:50 Fenster.Bad contact: closed (to ccu)
2022-08-20_09:43:50 Fenster.Bad closed
2022-08-20_09:43:50 Fenster.Bad trigger_cnt: 80
2022-08-20_10:05:24 Fenster.Bad IODev: cul868
2022-08-20_10:05:24 Fenster.Bad IODev: cul868
2022-08-20_10:05:25 Fenster.Bad contact: tilted (to ccu)
2022-08-20_10:05:25 Fenster.Bad tilted
2022-08-20_10:05:25 Fenster.Bad trigger_cnt: 81
2022-08-20_13:20:12 Fenster.Bad IODev: cul868
2022-08-20_13:20:12 Fenster.Bad IODev: cul868
2022-08-20_13:20:12 Fenster.Bad contact: closed (to ccu)
2022-08-20_13:20:12 Fenster.Bad closed
2022-08-20_13:20:12 Fenster.Bad trigger_cnt: 82
2022-08-20_13:20:53 BlindPBU01 commState: CMDs_pending
2022-08-20_13:20:53 BlindPBU01 level: set_60
2022-08-20_13:20:53 BlindPBU01 set_60
2022-08-20_13:20:53 BlindPBU01 IODev: cul868
2022-08-20_13:20:53 BlindPBU01 commState: CMDs_processing...
2022-08-20_13:20:53 BlindPBU01 trigLast: fhem:02
2022-08-20_13:20:53 BlindPBU01 trigLast: fhem:02
2022-08-20_13:20:53 BlindPBU01 CommandAccepted: yes
2022-08-20_13:20:53 BlindPBU01 recentStateType: ack
2022-08-20_13:20:53 BlindPBU01 commState: CMDs_done
2022-08-20_13:20:53 BlindPBU01 deviceMsg: on (to ccu)
2022-08-20_13:20:53 BlindPBU01 level: 100
2022-08-20_13:20:53 BlindPBU01 motor: down:on
2022-08-20_13:20:53 BlindPBU01 pct: 100
2022-08-20_13:20:53 BlindPBU01 on
2022-08-20_13:20:53 BlindPBU01 timedOn: off
2022-08-20_13:20:53 BlindPBU01 motorErr: ok
2022-08-20_13:20:53 asc BlindPBU01_PosValue: 100
2022-08-20_13:20:53 asc manual
2022-08-20_13:20:53 BlindPBU01 ASC_ShuttersLastDrive: manual
2022-08-20_13:21:06 BlindPBU01 IODev: cul868
2022-08-20_13:21:06 BlindPBU01 recentStateType: info
2022-08-20_13:21:06 BlindPBU01 commState: CMDs_done
2022-08-20_13:21:06 BlindPBU01 deviceMsg: 60 (to ccu)
2022-08-20_13:21:06 BlindPBU01 level: 60
2022-08-20_13:21:06 BlindPBU01 motor: stop:60
2022-08-20_13:21:06 BlindPBU01 pct: 60
2022-08-20_13:21:06 BlindPBU01 60
2022-08-20_13:21:06 BlindPBU01 timedOn: off
2022-08-20_13:21:06 BlindPBU01 motorErr: ok
2022-08-20_13:21:06 asc BlindPBU01_PosValue: 60
2022-08-20_13:21:06 asc manual
2022-08-20_13:21:06 BlindPBU01 ASC_ShuttersLastDrive: manual
2022-08-20_13:21:55 BlindPBU01 commState: CMDs_pending
2022-08-20_13:21:55 BlindPBU01 level: set_45
2022-08-20_13:21:55 BlindPBU01 set_45
2022-08-20_13:21:55 BlindPBU01 IODev: cul868
2022-08-20_13:21:55 BlindPBU01 commState: CMDs_processing...
2022-08-20_13:21:55 BlindPBU01 trigLast: fhem:02
2022-08-20_13:21:55 BlindPBU01 trigLast: fhem:02
2022-08-20_13:21:56 BlindPBU01 CommandAccepted: yes
2022-08-20_13:21:56 BlindPBU01 recentStateType: ack
2022-08-20_13:21:56 BlindPBU01 commState: CMDs_done
2022-08-20_13:21:56 BlindPBU01 deviceMsg: 60 (to ccu)
2022-08-20_13:21:56 BlindPBU01 level: 60
2022-08-20_13:21:56 BlindPBU01 motor: down:60
2022-08-20_13:21:56 BlindPBU01 pct: 60
2022-08-20_13:21:56 BlindPBU01 60
2022-08-20_13:21:56 BlindPBU01 timedOn: off
2022-08-20_13:21:56 BlindPBU01 motorErr: ok
2022-08-20_13:21:56 asc BlindPBU01_PosValue: 60
2022-08-20_13:21:56 asc manual
2022-08-20_13:21:56 BlindPBU01 ASC_ShuttersLastDrive: manual
2022-08-20_13:22:00 BlindPBU01 IODev: cul868
2022-08-20_13:22:01 BlindPBU01 recentStateType: info
2022-08-20_13:22:01 BlindPBU01 commState: CMDs_done
2022-08-20_13:22:01 BlindPBU01 deviceMsg: 45 (to ccu)
2022-08-20_13:22:01 BlindPBU01 level: 45
2022-08-20_13:22:01 BlindPBU01 motor: stop:45
2022-08-20_13:22:01 BlindPBU01 pct: 45
2022-08-20_13:22:01 BlindPBU01 45
2022-08-20_13:22:01 BlindPBU01 timedOn: off
2022-08-20_13:22:01 BlindPBU01 motorErr: ok
2022-08-20_13:22:01 asc BlindPBU01_PosValue: 45
2022-08-20_13:22:01 asc manual
2022-08-20_13:22:01 BlindPBU01 ASC_ShuttersLastDrive: manual
2022-08-20_13:22:39 BlindPBU01 commState: CMDs_pending
2022-08-20_13:22:39 BlindPBU01 level: set_20
2022-08-20_13:22:39 BlindPBU01 set_20
2022-08-20_13:22:39 BlindPBU01 IODev: cul868
2022-08-20_13:22:39 BlindPBU01 commState: CMDs_processing...
2022-08-20_13:22:39 BlindPBU01 trigLast: fhem:02
2022-08-20_13:22:40 BlindPBU01 trigLast: fhem:02
2022-08-20_13:22:40 BlindPBU01 CommandAccepted: yes
2022-08-20_13:22:40 BlindPBU01 recentStateType: ack
2022-08-20_13:22:40 BlindPBU01 commState: CMDs_done
2022-08-20_13:22:40 BlindPBU01 deviceMsg: 45 (to ccu)
2022-08-20_13:22:40 BlindPBU01 level: 45
2022-08-20_13:22:40 BlindPBU01 motor: down:45
2022-08-20_13:22:40 BlindPBU01 pct: 45
2022-08-20_13:22:40 BlindPBU01 45
2022-08-20_13:22:40 BlindPBU01 timedOn: off
2022-08-20_13:22:40 BlindPBU01 motorErr: ok
2022-08-20_13:22:40 asc BlindPBU01_PosValue: 45
2022-08-20_13:22:40 asc manual
2022-08-20_13:22:40 BlindPBU01 ASC_ShuttersLastDrive: manual
2022-08-20_13:22:47 BlindPBU01 IODev: cul868
2022-08-20_13:22:48 BlindPBU01 recentStateType: info
2022-08-20_13:22:48 BlindPBU01 commState: CMDs_done
2022-08-20_13:22:48 BlindPBU01 deviceMsg: 20 (to ccu)
2022-08-20_13:22:48 BlindPBU01 level: 20
2022-08-20_13:22:48 BlindPBU01 motor: stop:20
2022-08-20_13:22:48 BlindPBU01 pct: 20
2022-08-20_13:22:48 BlindPBU01 20
2022-08-20_13:22:48 BlindPBU01 timedOn: off
2022-08-20_13:22:48 BlindPBU01 motorErr: ok
2022-08-20_13:22:48 asc BlindPBU01_PosValue: 20
2022-08-20_13:22:48 asc manual
2022-08-20_13:22:48 BlindPBU01 ASC_ShuttersLastDrive: manual
2022-08-20_13:22:51 BlindPBU01 commState: CMDs_pending
2022-08-20_13:22:51 BlindPBU01 level: set_0
2022-08-20_13:22:51 BlindPBU01 set_0
2022-08-20_13:22:52 BlindPBU01 IODev: cul868
2022-08-20_13:22:52 BlindPBU01 commState: CMDs_processing...
2022-08-20_13:22:52 BlindPBU01 trigLast: fhem:02
2022-08-20_13:22:52 BlindPBU01 trigLast: fhem:02
2022-08-20_13:22:52 BlindPBU01 CommandAccepted: yes
2022-08-20_13:22:52 BlindPBU01 recentStateType: ack
2022-08-20_13:22:52 BlindPBU01 commState: CMDs_done
2022-08-20_13:22:52 BlindPBU01 deviceMsg: 20 (to ccu)
2022-08-20_13:22:52 BlindPBU01 level: 20
2022-08-20_13:22:52 BlindPBU01 motor: down:20
2022-08-20_13:22:52 BlindPBU01 pct: 20
2022-08-20_13:22:52 BlindPBU01 20
2022-08-20_13:22:52 BlindPBU01 timedOn: off
2022-08-20_13:22:52 BlindPBU01 motorErr: ok
2022-08-20_13:22:52 asc BlindPBU01_PosValue: 20
2022-08-20_13:22:52 asc manual
2022-08-20_13:22:52 BlindPBU01 ASC_ShuttersLastDrive: manual
2022-08-20_13:23:01 BlindPBU01 IODev: cul868
2022-08-20_13:23:01 BlindPBU01 recentStateType: info
2022-08-20_13:23:01 BlindPBU01 commState: CMDs_done
2022-08-20_13:23:01 BlindPBU01 deviceMsg: off (to ccu)
2022-08-20_13:23:01 BlindPBU01 level: 0
2022-08-20_13:23:01 BlindPBU01 motor: stop:off
2022-08-20_13:23:01 BlindPBU01 pct: 0
2022-08-20_13:23:01 BlindPBU01 off
2022-08-20_13:23:01 BlindPBU01 timedOn: off
2022-08-20_13:23:01 BlindPBU01 motorErr: ok
2022-08-20_13:23:01 asc BlindPBU01_PosValue: 0
2022-08-20_13:23:01 asc manual
2022-08-20_13:23:01 BlindPBU01 ASC_ShuttersLastDrive: manual
2022-08-20_13:23:06 Fenster.Bad IODev: cul868
2022-08-20_13:23:06 Fenster.Bad IODev: cul868
2022-08-20_13:23:06 Fenster.Bad contact: tilted (to ccu)
2022-08-20_13:23:06 Fenster.Bad tilted
2022-08-20_13:23:06 Fenster.Bad trigger_cnt: 83
edit:
was genau bedeutet eigentlich das reading "BlindPBU01_lastPosValue " im asc device?
ist das der "alte/letzte" wert von "BlindPBU01_PosValue"?
(dem namen nach sollte das wohl so sein)
"BlindPBU01_lastPosValue" wird, wenn überhaupt, scheinbar nur zum tages-/nacht wechsel geändert.
Zitatdiesmal gibt es dazu nicht einmal debugausgaben in fhem.log, asc hat das fensterereignis völlig ignoriert.
das passiert, weil es am anfang von EventProcessingWindowRec() gleich wieder raus geht.
return
if (
!IsAfterShuttersManualBlocking($shuttersDev)
&& ( $FHEM::Automation::ShuttersControl::shutters->getLockOut eq
'off'
|| $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace ne 'terrace' )
);
sub IsAfterShuttersManualBlocking {
my $shuttersDev = shift;
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
if (
$FHEM::Automation::ShuttersControl::ascDev->getBlockAscDrivesAfterManual
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
$FHEM::Automation::ShuttersControl::shutters->getOpenPos
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
$FHEM::Automation::ShuttersControl::shutters->getClosedPos
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
$FHEM::Automation::ShuttersControl::shutters->getWindPos
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
$FHEM::Automation::ShuttersControl::shutters->getShadingPos
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
$FHEM::Automation::ShuttersControl::shutters->getComfortOpenPos
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
$FHEM::Automation::ShuttersControl::shutters->getVentilatePos
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
$FHEM::Automation::ShuttersControl::shutters->getAntiFreezePos
&& $FHEM::Automation::ShuttersControl::shutters->getLastDrive eq
'manual' )
{
return 0;
}
elsif (
(
int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
) <
$FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
)
{
return 0;
}
else { return 1 }
}
was ist hier wohl "faul"?
edit:
erste hürde genommen. :)
ASC_BlockingTime_afterManual - Time in which operations by ASC are blocked after the last manual operation in seconds. Defaults to 1200 (20 minutes).
da nicht gesetzt, gab es immer eine blockade. da muss man erst mal drauf kommen.
für die attribute ASC_BlockingTime_beforeDayOpen und ASC_BlockingTime_beforeNightClose wird kein hilfetext bei der auswahl der attribute angezeigt.
edit2:
eine debugausgabe mit den gründen zum ignorieren von EventProcessingWindowRec() fände ich sehr hilfreich.
hallo cooltux,
das problem ist die ermittlung der manuellen fahrten in der funktion EventProcessingShutters() in der datei EventProcessingFunctions.pm.
bei aktoren, die mehrere position events pro fahrt senden, kann die funktion immer nur das erste position event als manuell erkennen. mein homematic aktor sendet immer 2 position events. die 1. position kurz nach dem start der fahrt und die 2. position nach beendigung der fahrt.
somit wird quasi immer die endposition der vorherigen fahrt in LastManPos gespeichert. dabei ist es auch egal, ob die vorherige fahrt manuell oder automatisch war.
########## beispiel ##########
ich habe mal ein userreading im aktor definiert, das die LastManPos inklusive dem timestamp über die ascAPI ermittelt:
ASC_lastManPosValue:ASC_ShuttersLastDrive:.* {
return ascAPIget('LastManPos','BlindPBU01')." => ".FmtDateTime(ascAPIget('LastManPosTimestamp','BlindPBU01'))
}
im eventlog sieht man nun, dass nur das erste position event in LastManPos gespeichert wird.
interessant ist auch, dass das 2. position event in den asc readings "fälschlicherweise" als manuell gekennzeichnet wird, obwohl es intern als automatisches ereignis erkannt wurde. siehe folgende debug ausgaben zu dieser fahrt.
eventlog einer fahrt von 79 auf 0:
2022-08-24_07:59:50 BlindPBU01 commState: CMDs_pending
2022-08-24_07:59:50 BlindPBU01 level: set_0
2022-08-24_07:59:50 BlindPBU01 set_0
2022-08-24_07:59:50 BlindPBU01 IODev: hmuart1
2022-08-24_07:59:50 BlindPBU01 commState: CMDs_processing...
2022-08-24_07:59:50 BlindPBU01 trigLast: fhem:02
2022-08-24_07:59:51 BlindPBU01 trigLast: fhem:02
2022-08-24_07:59:51 BlindPBU01 CommandAccepted: yes
2022-08-24_07:59:51 BlindPBU01 recentStateType: ack
2022-08-24_07:59:51 BlindPBU01 commState: CMDs_done
2022-08-24_07:59:51 BlindPBU01 deviceMsg: 79 (to ccu)
2022-08-24_07:59:51 BlindPBU01 level: 79
2022-08-24_07:59:51 BlindPBU01 motor: down:79
2022-08-24_07:59:51 BlindPBU01 pct: 79
2022-08-24_07:59:51 BlindPBU01 rssi_at_cul868: -46.5
2022-08-24_07:59:51 BlindPBU01 rssi_hmuart1: -58
2022-08-24_07:59:51 BlindPBU01 79
2022-08-24_07:59:51 BlindPBU01 timedOn: off
2022-08-24_07:59:51 BlindPBU01 motorErr: ok
2022-08-24_07:59:51 asc BlindPBU01_PosValue: 79
2022-08-24_07:59:51 asc manual
2022-08-24_07:59:51 BlindPBU01 rssi_at_hmlan1: -41
2022-08-24_07:59:51 BlindPBU01 rssi_at_hmuart1: -45
2022-08-24_07:59:51 BlindPBU01 ASC_ShuttersLastDrive: manual
2022-08-24_07:59:51 BlindPBU01 ASC_lastManPosValue: 79 => 2022-08-24 07:59:51
2022-08-24_08:00:18 BlindPBU01 IODev: hmuart1
2022-08-24_08:00:18 BlindPBU01 recentStateType: info
2022-08-24_08:00:18 BlindPBU01 commState: CMDs_done
2022-08-24_08:00:18 BlindPBU01 deviceMsg: off (to ccu)
2022-08-24_08:00:18 BlindPBU01 level: 0
2022-08-24_08:00:18 BlindPBU01 motor: stop:off
2022-08-24_08:00:18 BlindPBU01 pct: 0
2022-08-24_08:00:18 BlindPBU01 rssi_at_cul868: -46.5
2022-08-24_08:00:18 BlindPBU01 off
2022-08-24_08:00:18 BlindPBU01 timedOn: off
2022-08-24_08:00:18 BlindPBU01 motorErr: ok
2022-08-24_08:00:18 asc BlindPBU01_PosValue: 0
2022-08-24_08:00:18 asc manual
2022-08-24_08:00:18 BlindPBU01 rssi_at_hmuart1: -47
2022-08-24_08:00:18 BlindPBU01 rssi_at_hmlan1: -42
2022-08-24_08:00:18 BlindPBU01 ASC_ShuttersLastDrive: manual
2022-08-24_08:00:18 BlindPBU01 ASC_lastManPosValue: 79 => 2022-08-24 07:59:51
zugehöriges debuglog der fahrt von 79 auf 0:
##################################
ASC_DEBUG!!! 2022.08.24 07:59:51 - Notify: ASC_Pos_Reading Event vom Rollo BlindPBU01 wurde erkannt - RECEIVED EVENT: $VAR1 = [
'CommandAccepted: yes',
'recentStateType: ack',
'commState: CMDs_done',
'deviceMsg: 79 (to ccu)',
'level: 79',
'motor: down:79',
'pct: 79',
'rssi_at_cul868: -46.5',
'rssi_hmuart1: -58',
'state: 79',
'timedOn: off',
'motorErr: ok'
];
ASC_DEBUG!!! 2022.08.24 07:59:51 - EventProcessingShutters: Fn wurde durch Notify aufgerufen da ASC_Pos_Reading Event erkannt wurde - RECEIVED EVENT: $VAR1 = 'CommandAccepted: yes recentStateType: ack commState: CMDs_done deviceMsg: 79 (to ccu) level: 79 motor: down:79 pct: 79 rssi_at_cul868: -46.5 rssi_hmuart1: -58 state: 79 timedOn: off motorErr: ok';
ASC_DEBUG!!! 2022.08.24 07:59:51 - EventProcessingShutters: BlindPBU01 - Event vom Rollo erkannt. Es wird nun eine etwaige manuelle Fahrt ausgewertet. Int von ::gettimeofday: 1661320791 Last Position Timestamp: 1661284137 Drive Up Max Duration: 60 Last Position: 30 aktuelle Position: 79
ASC_DEBUG!!! 2022.08.24 07:59:51 - FnIsDay: BlindPBU01 Allgemein: 0
ASC_DEBUG!!! 2022.08.24 07:59:51 - EventProcessingShutters: eine manualle Fahrt wurde erkannt!
ASC_DEBUG!!! 2022.08.24 07:59:51 - EventProcessingShutters: Fn wurde durlaufen und es sollten Debugausgaben gekommen sein. !!!Wenn nicht!!! wurde der Event nicht korrekt als Nummerisch erkannt.
###################################
ASC_DEBUG!!! 2022.08.24 08:00:18 - Notify: ASC_Pos_Reading Event vom Rollo BlindPBU01 wurde erkannt - RECEIVED EVENT: $VAR1 = [
'recentStateType: info',
'commState: CMDs_done',
'deviceMsg: off (to ccu)',
'level: 0',
'motor: stop:off',
'pct: 0',
'rssi_at_cul868: -46.5',
'state: off',
'timedOn: off',
'motorErr: ok'
];
ASC_DEBUG!!! 2022.08.24 08:00:18 - EventProcessingShutters: Fn wurde durch Notify aufgerufen da ASC_Pos_Reading Event erkannt wurde - RECEIVED EVENT: $VAR1 = 'recentStateType: info commState: CMDs_done deviceMsg: off (to ccu) level: 0 motor: stop:off pct: 0 rssi_at_cul868: -46.5 state: off timedOn: off motorErr: ok';
ASC_DEBUG!!! 2022.08.24 08:00:18 - EventProcessingShutters: BlindPBU01 - Event vom Rollo erkannt. Es wird nun eine etwaige manuelle Fahrt ausgewertet. Int von ::gettimeofday: 1661320818 Last Position Timestamp: 1661284137 Drive Up Max Duration: 60 Last Position: 30 aktuelle Position: 0
ASC_DEBUG!!! 2022.08.24 08:00:18 - EventProcessingShutters: eine automatisierte Fahrt durch ASC wurde erkannt! Es werden nun die LastDriveReading und StateReading Werte gesetzt!
ASC_DEBUG!!! 2022.08.24 08:00:18 - EventProcessingShutters: Fn wurde durlaufen und es sollten Debugausgaben gekommen sein. !!!Wenn nicht!!! wurde der Event nicht korrekt als Nummerisch erkannt.
##################################
########## hack ##########
mit folgendem hack, kann man auch die 2. position (oder weitere positions) in LastManPos speichern:
if (
(
int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters
->getLastPosTimestamp
) >
$FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration
&& (
int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters
->getLastManPosTimestamp ) >
$FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration
)
{
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'manual');
$FHEM::Automation::ShuttersControl::shutters->setLastDriveReading;
$FHEM::Automation::ShuttersControl::ascDev->setStateReading;
$FHEM::Automation::ShuttersControl::shutters->setLastManPos($1);
$FHEM::Automation::ShuttersControl::shutters
->setShadingManualDriveStatus(1)
if ( $FHEM::Automation::ShuttersControl::shutters->getIsDay
&& $FHEM::Automation::ShuttersControl::shutters->getIfInShading
);
FHEM::Automation::ShuttersControl::ASC_Debug(
'EventProcessingShutters: eine manualle Fahrt wurde erkannt!');
}
else {
$FHEM::Automation::ShuttersControl::shutters->setLastDriveReading;
$FHEM::Automation::ShuttersControl::ascDev->setStateReading;
$FHEM::Automation::ShuttersControl::shutters->setLastManPos($1) #frank
if($FHEM::Automation::ShuttersControl::shutters->getLastDrive eq 'manual'); #frank
$FHEM::Automation::ShuttersControl::shutters->setHardLockOut('on')
if (
(
$FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters
->getComfortOpenPos
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus
== $FHEM::Automation::ShuttersControl::shutters
->getOpenPos
&& $FHEM::Automation::ShuttersControl::shutters
->getLastDrive eq 'ventilate - window open' )
)
&& $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'terrace'
);
FHEM::Automation::ShuttersControl::ASC_Debug(
'EventProcessingShutters: eine automatisierte Fahrt durch ASC wurde erkannt! Es werden nun die LastDriveReading und StateReading Werte gesetzt!'
);
}
########## wunsch ##########
eigentlich müsste man aber die manuelle erkennung umbauen, da die aktuelle implementierung zb auch probleme hat, wenn zu schnell nach einer automatischen fahrt eine manuelle fahrt startet.
vorschlag:
asc weiss doch am besten, wann eine automatische fahrt gestartet wird (set cmd wird gesendet).
ab diesem moment wird ein timer gestartet (dauer=DriveUpMaxDuration). während der laufzeit des timers werden alle position events als zugehörige events einer automatischen fahrt registriert. ausserhalb der laufzeit ist alles manuell.
noch genauer wird es, wenn man zusätzlich die laufzeit des timers entsprechend der gesetzten positionsänderung dynamisch verkürzt.
also bei einer fahrt von 40 auf 80 läuft der timer nur 40% von DriveUpMaxDuration.
wo finde ich eigentlich die funktion "getDriveUpMaxDuration"?
wird die eventuell irgendwo zusammengebaut?
edit: gefunden.
Hallo Frank,
Vielen Dank für Deine ausführliche Analyse. Ich schaue es mir gerne in der kommenden Woche einmal genauer an.
Die Ermittlung der manuellen Fahrt erfolgt im übrigen bereits durch das feststellen ob ASC die Fahrt durch ein Kommando ausgelöst hat und einem dann gesetzen Timer. Hier könnte man noch schauen bezüglich Deiner Berechnung der Prozente.
Grüße
Marko
moin,
Zitat von: CoolTux am 26 August 2022, 05:38:51
Ich schaue es mir gerne in der kommenden Woche einmal genauer an.
prima. :)
ZitatDie Ermittlung der manuellen Fahrt erfolgt im übrigen bereits durch das feststellen ob ASC die Fahrt durch ein Kommando ausgelöst hat und einem dann gesetzen Timer.
du beschreibst hier aber die ermittlung einer "automatischen" fahrt, initiert durch asc.
in dem gezeigten code ausschnitt in meinem letzten post, ist davon nichts zu sehen.
vielleicht hast du noch nicht den feinen unterschied verstanden.
asc muss "nur" das ende der
automatischen fahrt ermitteln. ab dann gehört jedes weitere position event in jedem fall zu einer
manuellen fahrt bis asc erneut eine
automatische fahrt initiert.
ich habe keine probleme bei der ermittlung einer "normalen" automatischen fahrt festgestellt. hier erkennt asc korrekt beide position events, die der homematic aktor dabei generiert.
das beschriebene problem existiert, da nach dem ende der automatischen fahrt weiterhin der "timer" aktiv ist.
die ermittlung des endes der automatischen fahrt nur über einen timer ist trotzdem fragil.
der timer muss lang genug sein, dass das richtige position event erfasst wird, aber auch kurz genug, so dass nicht ein anschliessendes manuelles event fälschlicher weise erkannt wird.
die bereits beschriebene dynamische anpassung des timers verbessert sicher die erkennung, da folgende manuelle position events besser ausgefiltert werden. allerdings erhöht sich auch das risiko, dass das richtige position event nicht mehr erfasst wird.
zb gibt es beim homematic aktor auch "referenzfahrten", wo das ziel nicht direkt angefahren wird, sondern zuvor erst ein endanschlag angefahren wird. diese referenzfahrten verlängern natürlich die fahrtzeit eventuell erheblich.
daher tendiere ich aktuell dazu, den timer zunächst auf den 2-fachen wert von DriveUpMaxDuration zu setzen und bis zum ablauf des timers alle eingehenden position events mit dem sollwert zu vergleichen. sobald ein position event gleich dem sollwert ist, wird der timer abgebrochen und das ende der automatischen fahrt ist erreicht.
############ exakte bestimmung durch fahrtstatus events
aber es gibt weitere fälle wie zb den manuellen abbruch einer automatischen fahrt, die zumindestens beim homematic aktor durch folgende auswertung exakt bestimmt werden können.
der homematic aktor sendet in seiner status message nicht nur die position, sondern auch eine info über den aktuellen fahrtstatus. dadurch kann anfang und ende jeder fahrt eindeutig ermittelt werden.
im reading "motor" wird fahrtstatus und position (durch doppelpunkt getrennt) gemeinsam übermittelt.
der fahrtstatus kann 4 werte annnehmen: up/down/stop/err.
jedes stop-position-event zeigt das ende einer fahrt an.
ein up/down-position-event zeigt den start einer fahrt an oder auch eine änderung der zielposition während einer fahrt.
nach der initiierung einer automatischen fahrt kommt also immer zuerst ein up/down-position-event.
die fahrt ist in jedem fall zuende, wenn irgendwann ein stop-position-event eintrifft.
wenn die dabei übermittelte position gleich der soll position ist, war es eine "normale" automatische fahrt.
ist die stop-position ungleich der sollposition, wurde die fahrt entweder manuell gestopt, oder es gab vor dem ende der fahrt eine neue manuelle zielposition.
der fahrtstatus "err" mit einer position 50 wird in jedem fall nach einer versorgungsspannungsunterbrechung gesendet. hier wird in jedem fall eine referenzfahrt benötigt, damit der aktor die zukünftigen positionen wieder richtig berechnen kann. referenzfahrten muss ich noch genauer untersuchen.
ich wünsche mir für meinen homematic aktor natürlich eine exakte ermittlung von auto/manu fahrten anhand von gesendetem fahrtstatus und position. :)
gruss frank
edit:
es gibt ja das attr ASC_Shutter_IdleDetection, habe ich gerade gesehen.
wird das eventuell schon dafür benutzt?
idledetection ist dafür gedacht zu erkennen ob gerade eine Fahrt des Rollos statt findet. Dann sendet ASC keine Fahranweisung.
In Bezug auf das erkennen der manuellen Fahrt oder nicht manuellen Fahrt. Es ist zwar schön das Homematic sendet wenn die Fahrt unterbrochen wurde als Beispiel, aber Ich ASC nicht so Homematic abhängig gestaltet. Es gibt noch tausend andere Rollotypen.
Aktuell ist es so das ASC einen Timestamp setzt wenn es selbst eine Fahrt initiiert. Danach reagiert es auf das erste Event welches vom Reading "ASC_Pos_Reading" gesendet wird und wertet dann aus ob es älter ist wie TIMESTAMP + ASC_DriveUpMaxDuration ist oder nicht. So ist es aktuell.
ZitatIn Bezug auf das erkennen der manuellen Fahrt oder nicht manuellen Fahrt. Es ist zwar schön das Homematic sendet wenn die Fahrt unterbrochen wurde als Beispiel, aber Ich ASC nicht so Homematic abhängig gestaltet. Es gibt noch tausend andere Rollotypen.
es würde mich wirklich wundern, wenn nur homematic aktoren melden, wenn der motor läuft.
Zitatidledetection ist dafür gedacht zu erkennen ob gerade eine Fahrt des Rollos statt findet. Dann sendet ASC keine Fahranweisung.
die existenz von idledetection verstärkt zudem mein gefühl, dass es viele solcher aktoren gibt.
ausserdem könnte man idledetection bestens zur erkennung verwenden. ;)
über dieses userreading habe ich nun "ASC_Shutter_IdleDetection=motorAction:idle" gesetzt.
motorAction:motor:.* {
my $mot = ReadingsVal($name,"motor","");
return ($mot =~ /^(stop|err):/)? "idle": "running";
}
hier ein beispiel, wo das ende einer automatischen fahrt nicht/falsch erkannt wird, da der aktor automatisch eine "referenzfahrt" eingefügt hat, um sich zu synchronisieren.
im kommentierten eventlog ist auch das idledetection reading "motorAction" zu sehen:
################### vor dem versuch wurde das rollo manuell geschlossen => position=0
2022-08-30_09:33:45 BlindPBU01 motor: stop:off
2022-08-30_09:33:45 BlindPBU01 motorAction: idle
2022-08-30_09:33:45 asc BlindPBU01_PosValue: 0
2022-08-30_09:33:45 BlindPBU01 ASC_ShuttersLastDrive: manual
################### spannung am rollo aus/an => rollo meldet error mit position=50 (eine referenzfahrt wird nötig)
2022-08-30_09:33:59 BlindPBU01 powerOn: 2022-08-30 09:33:59
2022-08-30_09:33:59 BlindPBU01 motor: err:50
2022-08-30_09:33:59 BlindPBU01 motorAction: idle
2022-08-30_09:33:59 asc BlindPBU01_PosValue: 50
2022-08-30_09:33:59 BlindPBU01 ASC_ShuttersLastDrive: manual
################### fenster wird geöffnet => asc initiiert eine automatische fahrt auf position 90 wie konfiguriert
################### ASC_DriveUpMaxDuration=38s ist gesetzt (aktor konfiguriert mit gemessenen 32.2s)
################### die fahrt führt zu 3 positionsmeldungen des aktors
################### 1. referenzfahrt von 36s zum oberen anschlag wird gestartet
2022-08-30_09:34:20 BlindPBU01 level: set_90
2022-08-30_09:34:20 BlindPBU01 motor: up:50 0s
2022-08-30_09:34:20 BlindPBU01 motorAction: running
2022-08-30_09:34:21 asc BlindPBU01_PosValue: 50
2022-08-30_09:34:21 BlindPBU01 ASC_ShuttersLastDrive: comfort - window open
################### 2. oberer anschlag erreicht position=100 => rollo dreht um und fährt weiter zum ziel
2022-08-30_09:34:56 BlindPBU01 motor: down:on 36s
2022-08-30_09:34:56 BlindPBU01 motorAction: running
2022-08-30_09:34:56 asc BlindPBU01_PosValue: 100
2022-08-30_09:34:56 BlindPBU01 ASC_ShuttersLastDrive: comfort - window open
################### 3. ziel erreicht => die fahrt hat zu lange gedauert (40s), daher wird die zielposition als manuelle fahrt ermittelt.
2022-08-30_09:35:00 BlindPBU01 motor: stop:90 40s
2022-08-30_09:35:00 BlindPBU01 motorAction: idle
2022-08-30_09:35:00 asc BlindPBU01_PosValue: 90
2022-08-30_09:35:00 BlindPBU01 ASC_ShuttersLastDrive: manual
diese fahrt würde also zu einem 20-minütigen (default) blockieren von asc führen.
referenzfahrten sind sicherlich auch nicht exklusiv bei homematic zu finden.
ich denke: je weniger fehler die erkennung macht, desto weniger support aufwand für dich.
Zitat von: frank am 30 August 2022, 12:22:13
es würde mich wirklich wundern, wenn nur homematic aktoren melden, wenn der motor läuft.
Ich meine damit nicht die Meldung das der Motor läuft, sondern das wärend der Fahrt dauernd die position gemeldet wird. Bisher hat sich noch kein User gemeldet bei dem das passiert. Also das zum Beispiel bei einer 1min Fahrt 3 mal auf dem Weg dorthin irgendeine unwichtige Position gemeldet wird. Entscheident ist doch die Position welche er hat wenn die Fahrt abgeschlossen ist, oder nicht?
Zitat von: frank am 30 August 2022, 12:22:13
die existenz von idledetection verstärkt zudem mein gefühl, dass es viele solcher aktoren gibt.
ausserdem könnte man idledetection bestens zur erkennung verwenden. ;)
Aktuell wird zu mindest darauf reagiert wenn ASC eine Fahrt initiieren soll und es wird durch idledetection erkannt das das Rollo bereits fährt.
Allerdings gebe ich Dir recht, hier könnte man in der Tat einmal schauen das man durch das idledetection Fehlinterpretationen vermeiden kann.
Zitat von: frank am 30 August 2022, 12:22:13
über dieses userreading habe ich nun "ASC_Shutter_IdleDetection=motorAction:idle" gesetzt.
motorAction:motor:.* {
my $mot = ReadingsVal($name,"motor","");
return ($mot =~ /^(stop|err):/)? "idle": "running";
}
hier ein beispiel, wo das ende einer automatischen fahrt nicht/falsch erkannt wird, da der aktor automatisch eine "referenzfahrt" eingefügt hat, um sich zu synchronisieren.
im kommentierten eventlog ist auch das idledetection reading "motorAction" zu sehen:
################### vor dem versuch wurde das rollo manuell geschlossen => position=0
2022-08-30_09:33:45 BlindPBU01 motor: stop:off
2022-08-30_09:33:45 BlindPBU01 motorAction: idle
2022-08-30_09:33:45 asc BlindPBU01_PosValue: 0
2022-08-30_09:33:45 BlindPBU01 ASC_ShuttersLastDrive: manual
################### spannung am rollo aus/an => rollo meldet error mit position=50 (eine referenzfahrt wird nötig)
2022-08-30_09:33:59 BlindPBU01 powerOn: 2022-08-30 09:33:59
2022-08-30_09:33:59 BlindPBU01 motor: err:50
2022-08-30_09:33:59 BlindPBU01 motorAction: idle
2022-08-30_09:33:59 asc BlindPBU01_PosValue: 50
2022-08-30_09:33:59 BlindPBU01 ASC_ShuttersLastDrive: manual
################### fenster wird geöffnet => asc initiiert eine automatische fahrt auf position 90 wie konfiguriert
################### ASC_DriveUpMaxDuration=38s ist gesetzt (aktor konfiguriert mit gemessenen 32.2s)
################### die fahrt führt zu 3 positionsmeldungen des aktors
################### 1. referenzfahrt von 36s zum oberen anschlag wird gestartet
2022-08-30_09:34:20 BlindPBU01 level: set_90
2022-08-30_09:34:20 BlindPBU01 motor: up:50 0s
2022-08-30_09:34:20 BlindPBU01 motorAction: running
2022-08-30_09:34:21 asc BlindPBU01_PosValue: 50
2022-08-30_09:34:21 BlindPBU01 ASC_ShuttersLastDrive: comfort - window open
################### 2. oberer anschlag erreicht position=100 => rollo dreht um und fährt weiter zum ziel
2022-08-30_09:34:56 BlindPBU01 motor: down:on 36s
2022-08-30_09:34:56 BlindPBU01 motorAction: running
2022-08-30_09:34:56 asc BlindPBU01_PosValue: 100
2022-08-30_09:34:56 BlindPBU01 ASC_ShuttersLastDrive: comfort - window open
################### 3. ziel erreicht => die fahrt hat zu lange gedauert (40s), daher wird die zielposition als manuelle fahrt ermittelt.
2022-08-30_09:35:00 BlindPBU01 motor: stop:90 40s
2022-08-30_09:35:00 BlindPBU01 motorAction: idle
2022-08-30_09:35:00 asc BlindPBU01_PosValue: 90
2022-08-30_09:35:00 BlindPBU01 ASC_ShuttersLastDrive: manual
diese fahrt würde also zu einem 20-minütigen (default) blockieren von asc führen.
referenzfahrten sind sicherlich auch nicht exklusiv bei homematic zu finden.
ich denke: je weniger fehler die erkennung macht, desto weniger support aufwand für dich.
Wir schaut es eigentlich aus wenn Du generell die MaxDuration auf 60 stellst? Zum testen für ein zwei Tage.
Grüße
ZitatIch meine damit nicht die Meldung das der Motor läuft, sondern das wärend der Fahrt dauernd die position gemeldet wird. Bisher hat sich noch kein User gemeldet bei dem das passiert. Also das zum Beispiel bei einer 1min Fahrt 3 mal auf dem Weg dorthin irgendeine unwichtige Position gemeldet wird. Entscheident ist doch die Position welche er hat wenn die Fahrt abgeschlossen ist, oder nicht?
das liegt wohl im auge des betrachters, oder?
möchte man zb die fahrt realistisch abbilden, ist man sicherlich für jede zusätzliche position dankbar.
bei zb "tasmota"-devices wäre ich auch nicht über deutlich mehr positionen überrascht.
die statusmessage vom aktor enthält nun mal den fahrtstatus
und die aktuell berechnete position.
eine "einfache" fahrt mit nur einem einzigen ziel liefert also bei mir genau 2 positionen (start, stop). jedes weitere zwischenziel genau eine weitere position.
also: n-ziele => (n+1)-positionen.
wenn das noch kein user gemeldet hat, wurde es ja höchste zeit. ;)
ZitatWir schaut es eigentlich aus wenn Du generell die MaxDuration auf 60 stellst? Zum testen für ein zwei Tage.
das hatte ich ja bis vor kurzem, da es der default wert ist.
ich habe den wert extra verkürzt, damit manuelle fahrten besser erkannt werden können.
manuelle fahrten, die zu schnell nach einer automatischen fahrt erfolgen (innerhalb ASC_DriveUpMaxDuration), werden falsch als automatisch erkannt:
################### vor dem versuch wurde das rollo manuell geschlossen => position=0
2022-08-31_11:38:09 BlindPBU01 motor: stop:off
2022-08-31_11:38:09 BlindPBU01 motorAction: idle
2022-08-31_11:38:09 asc BlindPBU01_PosValue: 0
2022-08-31_11:38:10 BlindPBU01 ASC_ShuttersLastDrive: manual
################### fenster öffnen => ventilate fährt das rollo automatisch auf 30
2022-08-31_11:38:29 Fenster.Bad tilted
2022-08-31_11:38:29 BlindPBU01 level: set_30
2022-08-31_11:38:30 BlindPBU01 motor: up:off
2022-08-31_11:38:30 BlindPBU01 motorAction: running
2022-08-31_11:38:30 asc BlindPBU01_PosValue: 0
2022-08-31_11:38:30 BlindPBU01 ASC_ShuttersLastDrive: ventilate - window open
2022-08-31_11:38:40 BlindPBU01 motor: stop:30
2022-08-31_11:38:40 BlindPBU01 motorAction: idle
2022-08-31_11:38:40 asc BlindPBU01_PosValue: 30
2022-08-31_11:38:40 BlindPBU01 ASC_ShuttersLastDrive: ventilate - window open
################### ein zusätzliches manuelles fahren noch innerhalb von ASC_DriveUpMaxDuration=60
2022-08-31_11:38:57 BlindPBU01 level: set_65
2022-08-31_11:38:57 BlindPBU01 motor: up:30
2022-08-31_11:38:57 BlindPBU01 motorAction: running
2022-08-31_11:38:57 asc BlindPBU01_PosValue: 30
2022-08-31_11:38:57 BlindPBU01 ASC_ShuttersLastDrive: ventilate - window open
2022-08-31_11:39:09 BlindPBU01 motor: stop:65
2022-08-31_11:39:09 BlindPBU01 motorAction: idle
2022-08-31_11:39:09 asc BlindPBU01_PosValue: 65
2022-08-31_11:39:09 BlindPBU01 ASC_ShuttersLastDrive: ventilate - window open
################
eine ermittlung des endes einer automatischen fahrt über einen timer ist in jedem fall fehleranfällig.
mit einer veränderung des timers kann man sich höchstens zwischen "pest oder cholera" entscheiden. ;)
wenn man als längste fahrt eine fahrt annimmt, die eine endlage als zwischenziel anfährt (referenzfahrt), so ist die gesamtzeit dieser fahrt maximal etwa 2x (reelle uptime + 5s).
die kürzeste fahrt wäre eine sehr kurze fahrt ohne zwischenziel. sagen wir mal 1s.
eine ermittlung über einen vergleich von soll-position und ist-position erscheint mir deutlich besser zu sein.
alle positionen die nach dem starten eines automatischen fahrens hereinkommen
und ungleich der sollposition sind gehören zur automatischen fahrt. sobald eine position
gleich der sollposition ist, wird die erkennung abgebrochen. die automatische fahrt wurde erfolgreich beendet und diese position ist dann natürlich die aktuelle position der automatischen fahrt.
dieses verfahren darf natürlich nicht unendlich lange andauern, falls aus irgendeinem grund keine positionen gemeldet werden oder nie die sollposition gemeldet wird. zb weil die fahrt manuell abgebrochen wurde.
als "timeout" würde ich 2x ASC_DriveUpMaxDuration nehmen (ist abwärtskompatibel für diejenigen, die diesen wert bereits angepasst haben)
wenn also die erkennung durch timeout abgebrochen wurde, gibt es mindestens 2 fälle zu unterscheiden:
1. keine positionsmeldung erhalten => zb fehlermeldung ausgeben? fahrt wiederholen?
2. die letzte gemeldete position innerhalb timeout wird als manuelle position behandelt (manueller abbruch der automatischen fahrt)
alle weiteren positionen, die nach dem ende der erkennung der automatischen (entweder soll=ist oder timeout) eintreffen, werden bis zum nächsten starten einer automatischen fahrt als manuelle positionen behandelt. ohne jegliche weitere vergleiche oder timeouts.
wenn man ASC_Shutter_IdleDetection gesetzt hat, wird die erkennung innerhalb des timeout hierüber beendet.
ist/soll vergleich der letzten position ermöglicht die erkennung eines manuellen abbruchs.
bei timeout auf alle fälle fehler:
1. keine positionsmeldung erhalten => zb fehlermeldung ausgeben? fahrt wiederholen?
2. wenn wert vorhanden => zb fehlermeldung ausgeben? ASC_DriveUpMaxDuration eventuell zu kurz, weil zb nicht gesetzt.
Zitat von: frank am 01 September 2022, 13:20:14
wenn das noch kein user gemeldet hat, wurde es ja höchste zeit. ;)
...vermutlich würdest du fündig, wenn du in den Threads zu Version 0.4 oder 0.6 suchst...
Generell: Wir hatten relativ wenige Test-"Hardwares", genauer afaik: CUL_HM, ZWave und ROLLO. Genau aus dem Grund, dass die CUL_HM relativ viel "Zwischenlärm" veranstalten waren wir nach meiner erinnerung damals auf die Timer-Lösung gegangen, schlicht, weil wir an diesem Punkt "irgendwie" weiterkommen wollten.... ZWave macht z.B. keinen "Zwischenlärm" betr. den aktuellen Stand, was genau der Grund war, warum es ergänzend die Erkennung mit "motor" etc. gibt ;) .
Das bedeutet aber nicht, dass die jetzige Lösung optimal wäre...
@frank
Ich muss gestehen daß ich gefallen an Deine Ideen gefunden habe. Sowohl der Weg über die tatsächliche Endposition sofern von ASC ausgelöst als auch das mit der IdleDetection finde ich sehr erfolgversprechend. Ich werde es mir in nächster Zeit einmal genauer anschauen.
Zitat von: Beta-User am 01 September 2022, 13:41:22
Wir hatten relativ wenige Test-"Hardwares", genauer afaik: CUL_HM, ZWave und ROLLO.
du hast zwave?
meldet zwave infos zum fahrtstatus? welche (start/stop/up/down/error/...)?
meldet zwave infos, wenn die position nicht mehr stimmt. zb nach device booten?
Zitat...vermutlich würdest du fündig, wenn du in den Threads zu Version 0.4 oder 0.6 suchst...
0.4 habe ich noch nicht gefunden.
0.6.x habe ich gefunden, aber .... 214 seiten a 15 beiträge. 8)
Zitat von: CoolTux am 01 September 2022, 15:42:52
@frank
Ich muss gestehen daß ich gefallen an Deine Ideen gefunden habe. Sowohl der Weg über die tatsächliche Endposition sofern von ASC ausgelöst als auch das mit der IdleDetection finde ich sehr erfolgversprechend. Ich werde es mir in nächster Zeit einmal genauer anschauen.
ich bin gespannt!
übrigens (die entwickler haben das sicherlich auf dem schirm):wenn das position reading des rollos events-on-update sendet, erzeugt jeder statusrequest am aktor eine neue manuelle fahrt mit entsprechendem blocking. zusätzliche probleme kann es geben, wenn der request nach einer automatischen fahrt kommt, da dadurch dann die letzte automatische fahrt zur letzten manuellen fahrt wird.
wäre es nicht überlegenswert, dass asc von sich aus wiederholungen des position readings filtert?
wenn ich mir so die list der rollos diverser asc-user anschaue, ist das attribut event-on-change im rollo eher sehr selten selten zu sehen.
Zitat von: frank am 02 September 2022, 13:58:46
du hast zwave?
Ja! Nachdem mich eQ-3 nachhaltig verärgert hat, habe ich erst MCU-Programmieren gelernt (MySensors) und bei der Kaufhardware nach Alternativen geschaut. Und die Rollladenaktoren von Fibaro sind VIEL universeller wie alles, was man bisher in Homematic hätte bekommen können. (Jalousie/Venetian-blind-Betrieb per Konfigurationskommando einstellbar, Doppel- und Dreifachklick-Erkennung, "Gate"-Modus in verschiedenen Varianten, ...).
Zitat
meldet zwave infos zum fahrtstatus? welche (start/stop/up/down/error/...)?
Die melden nur, dass Energie verbraucht wird, "Stillstand" ist "0 W", und das kommt nach dem "state", der auch den dim-Wert beinhaltet (letzteren muss man da per userReading extrahieren).
(Man sieht daran, auch ZWave braucht eine gründlichere Einarbeitung...)
Zitat
meldet zwave infos, wenn die position nicht mehr stimmt. zb nach device booten?
Wenn die Dinger spannungslos waren, machen (oder brauchen?) sie erst mal eine Kalibrierfahrt. Kein Gefrickel mit der Einstellung der Fahrtdauern...
Zitat
0.4 habe ich noch nicht gefunden.
0.6.x habe ich gefunden, aber .... 214 seiten a 15 beiträge. 8)
::) ich hatte auch keine Lust zum Suchen, war aber eben auch von Anfang an dabei (und hatte nur zwischendurch auch etwas den Faden verloren).
Zitat von: frank am 02 September 2022, 14:23:16
ich bin gespannt!
Ich auch!
Zitat
übrigens (die entwickler haben das sicherlich auf dem schirm):
Falls du damit mich mit ansprechen willst: bin leider aus den Tiefen schon lange wieder draußen, und der Code ist mir zu verteilt...
Zitat
wenn das position reading des rollos events-on-update sendet, erzeugt jeder statusrequest am aktor eine neue manuelle fahrt mit entsprechendem blocking. zusätzliche probleme kann es geben, wenn der request nach einer automatischen fahrt kommt, da dadurch dann die letzte automatische fahrt zur letzten manuellen fahrt wird.
wäre es nicht überlegenswert, dass asc von sich aus wiederholungen des position readings filtert?
wenn ich mir so die list der rollos diverser asc-user anschaue, ist das attribut event-on-change im rollo eher sehr selten selten zu sehen.
Dass event-on-change-reading nicht gesetzt ist, ist in der Tat ein häufiger "Fehler" von Neueinsteigern, die dadurch praktisch "alle" aus der Kurve fliegen. Wenn wir das wegbekämen, wäre das vermutlich hilfreich. Andererseits gibt es eben auch eine nicht unerhebliche Zahl von Usern, die das kennen und ggf. auch aktiv für sich nutzen (?).
Prinzipiell sehe ich auch eigentlich kein Problem darin, das aufzugeben und dazu noch einige andere "alte Zöpfe", wie die vermeintlich strikte 10-er-Unterteilung (Attribut-Vorgabe) und/oder das Verbot gleicher Ziel-Werte für verschiedene Zwecke. In den länglichen Threads zur Entwicklung hatte ich mehrfach schon die Auffassung vertreten, dass es eigentlich genügen müßte, jedem "Fahrgrund" eine Priorität zu geben und dann einfach zu schauen, ob bei Eintritt einer Bedingung für "irgendwas" die Position zu ändern wäre oder ob es Gründe gibt, die dagegen sprechen (höhrere Prio für anderen Fahrgrund).
Dass man den Grund ändert, warum ein Rollladen auf einer bestimmten Position steht, bedeutet ja nicht zwangsläufig, dass auch gefahren werden müßte...
Hallo,
hab leider das gleiche Problem. Hatte heute den Fall das die Fenster gekippt waren und meine Frau den Schlafmodus der Kinder eingeschaltet hat. Die Rollläden sind daraufhin auf 30% zugefahren, alles noch korrekt. Jetzt war ich eben im Zimmer und habe die Fenster zugemacht, erwartet hätte ich jetzt eigentlich das die Rollläden nun zufahren, das tun sie aber nicht, bleiben munter auf den 30% stehen. Im ASC-Device steht bei Last Drive "roommate asleep - ventilate mode".
Was mir dann beim weiteren Testen aufgefallen ist, wenn ich nun das Fenster wieder öffne passiert weiterhin nichts, soll ja jetzt wieder auf 30% fahren und ist ja noch auf 30%. Wenn ich aber nun das Fenster wieder schließe fährt der Rollladen jetzt runter.
Gruß Markus
Zitat von: CoolTux am 01 September 2022, 15:42:52
@frank
Ich muss gestehen daß ich gefallen an Deine Ideen gefunden habe. Sowohl der Weg über die tatsächliche Endposition sofern von ASC ausgelöst als auch das mit der IdleDetection finde ich sehr erfolgversprechend. Ich werde es mir in nächster Zeit einmal genauer anschauen.
gibt es vielleicht schon was zum testen? 8)
Zitat von: frank am 21 Oktober 2022, 10:01:52
gibt es vielleicht schon was zum testen? 8)
Leider noch nicht. Aber vielen Dank für die Erinnerung.
moin,
ich habe bei mir nun die vorgeschlagene erkennung manueller fahrten erfolgreich umgesetzt.
Zitat von: frank am 01 September 2022, 13:20:14
eine ermittlung über einen vergleich von soll-position und ist-position erscheint mir deutlich besser zu sein.
alle positionen die nach dem starten eines automatischen fahrens hereinkommen und ungleich der sollposition sind gehören zur automatischen fahrt. sobald eine position gleich der sollposition ist, wird die erkennung abgebrochen. die automatische fahrt wurde erfolgreich beendet und diese position ist dann natürlich die aktuelle position der automatischen fahrt.
dieses verfahren darf natürlich nicht unendlich lange andauern, falls aus irgendeinem grund keine positionen gemeldet werden oder nie die sollposition gemeldet wird. zb weil die fahrt manuell abgebrochen wurde.
als "timeout" würde ich 2x ASC_DriveUpMaxDuration nehmen (ist abwärtskompatibel für diejenigen, die diesen wert bereits angepasst haben)
wenn also die erkennung durch timeout abgebrochen wurde, gibt es mindestens 2 fälle zu unterscheiden:
1. keine positionsmeldung erhalten => zb fehlermeldung ausgeben? fahrt wiederholen?
2. die letzte gemeldete position innerhalb timeout wird als manuelle position behandelt (manueller abbruch der automatischen fahrt)
alle weiteren positionen, die nach dem ende der erkennung der automatischen (entweder soll=ist oder timeout) eintreffen, werden bis zum nächsten starten einer automatischen fahrt als manuelle positionen behandelt. ohne jegliche weitere vergleiche oder timeouts.
wenn man ASC_Shutter_IdleDetection gesetzt hat, wird die erkennung innerhalb des timeout hierüber beendet.
ist/soll vergleich der letzten position ermöglicht die erkennung eines manuellen abbruchs.
bei timeout auf alle fälle fehler:
1. keine positionsmeldung erhalten => zb fehlermeldung ausgeben? fahrt wiederholen?
2. wenn wert vorhanden => zb fehlermeldung ausgeben? ASC_DriveUpMaxDuration eventuell zu kurz, weil zb nicht gesetzt.
zusätzlich wird nun auch noch das ende jeder fahrt (asc und manuell) erkannt.
die erkennung funktioniert für alle mir bisher bekannten aktortypen.
zwischenpositionen werden ggf "gefiltert" und eine vorhandene und konfigurierte idleDetection erkennt das ende einer manuellen fahrt oder das ende einer manuell abgebrochenen automatischen fahrt quasi in echtzeit.
ohne idleDetection gibt es in diesen fällen eine verzögerung, die durch das attribut ASC_DriveUpMaxDuration definiert wird.
grundsätzlich geht der detector davon aus, dass der motor still steht, wenn nach einer positionsmeldung (oder dem start einer asc fahrt), für die in ASC_DriveUpMaxDuration eingestellte zeit, keine positionsmeldung eingeht (timeout).
einige durch timeout erkannte "zustände" werden als problem eingestuft und als fehler angezeigt.
detector readingszum ausgibigen testen stellt der detector im asc device für jedes rollo 3 readings bereit.
<rollo>_timerRcvAsc und <rollo>_timerRcvMan zeigen mit on/off die aktivität der 2 timer an.
und <rollo>_driveAction zeigt die zustände des detectors wie folgt an:
asc_posSnd:xx # automatische fahrt wird gestartet
asc_posRun:xx # position während einer automatischen fahrt
asc_posEnd:xx # position am ende einer automatischen fahrt (idle detektion aktiv)
asc_posEndManBreak:xx # position durch manuellen stop einer automatischen fahrt (idle detektion aktiv)
asc_noPosEnd:xx # error: nur run-positionen empfangen (idle detektion aktiv)
asc_timeOut_posEndManBreak:xx # position durch manuellen stop einer automatischen fahrt (idle detektion inaktiv)
asc_timeOut_noPos # error: keine position empfangen
asc_timeOut_noPosEnd:xx # error: nur run-positionen empfangen (idle detektion aktiv)
man_posRun:xx # position während einer manuellen fahrt
man_posEnd:xx # position am ende einer manuellen fahrt (idle detektion aktiv)
man_timeOut_posEnd:xx # position am ende einer manuellen fahrt (idle detektion inaktiv)
man_timeOut_noPosEnd:xx # error: nur run-positionen empfangen (idle detektion aktiv)
code änderungenzu ändern sind 2 funktionen, zusätzlich gibt es 3 neue funktionen.
1. in
/opt/fhem/lib/FHEM/Automation/ShuttersControl.pm sieht der anfang der funktion SetCmdFn() nun so aus:
sub SetCmdFn { #frank
my $h = shift;
my $shuttersDev = $h->{shuttersDev};
my $posValue = $h->{posValue};
$shutters->setShuttersDev($shuttersDev);
$shutters->setLastDrive( $h->{lastDrive} )
if ( defined( $h->{lastDrive} ) );
# my $idleDetectionValue = $shutters->getIdleDetectionValue; #frank
# my $idleDetection = $shutters->getIdleDetection; #frank
my $hash = $::defs{$ascDev->{name}}; #frank
return
if ( $shutters->getASCenable eq 'off'
|| $ascDev->getASCenable eq 'off'
# || $idleDetection !~ m{^$idleDetectionValue$}xms #frank
|| $hash->{helper}{$shuttersDev}{timerRcvAsc} #frank: now also for types without detection. should cmd delayed?
|| $hash->{helper}{$shuttersDev}{timerRcvMan} #frank: now also for types without detection. should cmd delayed?
|| $shutters->getWindProtectionStatus eq 'protected' #frank
|| $shutters->getRainProtectionStatus eq 'protected' ); #frank
if ( $shutters->getStatus != $posValue ) {
$shutters->setLastPos( $shutters->getStatus );
####### new drive detection ############################################################################### #frank
$hash->{helper}{$shuttersDev}{timerRcvAsc} = 1;
$hash->{helper}{$shuttersDev}{posSnd} = $posValue;
$hash->{helper}{$shuttersDev}{posRcvVal} = -1; #no position received yet
my $t = ::gettimeofday() + $shutters->getDriveUpMaxDuration;
::RemoveInternalTimer("timerRcvAsc:$shuttersDev");
::InternalTimer($t, \&ASC_TimeoutRcvAsc, "timerRcvAsc:$shuttersDev");
::readingsSingleUpdate($hash,$shuttersDev.'_timerRcvAsc','on',1);
::readingsSingleUpdate($hash,$shuttersDev.'_driveAction',"asc_posSnd:$posValue",1);
########################################################################################################### #frank
}
else {
nach SetCmdFn() werden folgende 3 neue funktionen eingefügt:
sub ASC_TimeoutRcvAsc { #frank
my $in = shift;
my (undef,$shuttersDev) = split(':',$in);
my $hash = $::defs{$ascDev->{name}};
$shutters->setShuttersDev($shuttersDev);
$hash->{helper}{$shuttersDev}{timerRcvAsc} = 0;
::readingsSingleUpdate($hash,$shuttersDev.'_timerRcvAsc','off',1);
#we have timeout because no position received with value==posSnd
#possible problems (fhem freeze?, bad rssi?, bad config?, timeout too short?)
my $posRcv = $hash->{helper}{$shuttersDev}{posRcvVal};
my $err = '';
if($shutters->getIdleDetection eq 'none') { #without idle detection:
if($posRcv >= 0) { #manual break if no problems
::readingsSingleUpdate($hash, $shuttersDev.'_driveAction', "asc_timeOut_posEndManBreak:$posRcv", 1);
$hash->{helper}{$shuttersDev}{timerRcvMan} = 1;
my $t = $hash->{helper}{$shuttersDev}{posRcvTS} + $shutters->getDriveUpMaxDuration;
::InternalTimer($t, \&ASC_TimeoutRcvMan, "timerRcvMan:$shuttersDev");
::readingsSingleUpdate($hash,$shuttersDev.'_timerRcvMan','on',1);
}
else { #no positions received
$err = 'asc_timeOut_noPos';
::readingsSingleUpdate($hash, $shuttersDev.'_driveAction', $err, 1);
ASC_DoAfterPosRcv($shuttersDev, -1, $err);
}
}
else { #with idle detection:
if($posRcv >= 0) { #only received running positions
$err = 'asc_timeOut_noPosEnd';
::readingsSingleUpdate($hash, $shuttersDev.'_driveAction', "$err:$posRcv", 1);
ASC_DoAfterPosRcv($shuttersDev, $posRcv, $err);
}
else { #no positions received
$err = 'asc_timeOut_noPos';
::readingsSingleUpdate($hash, $shuttersDev.'_driveAction', $err, 1);
ASC_DoAfterPosRcv($shuttersDev, -1, $err);
}
}
return;
}
sub ASC_TimeoutRcvMan { #frank
my $in = shift;
my (undef,$shuttersDev) = split(':',$in);
my $hash = $::defs{$ascDev->{name}};
$shutters->setShuttersDev($shuttersDev);
$hash->{helper}{$shuttersDev}{timerRcvMan} = 0;
::readingsSingleUpdate($hash,$shuttersDev.'_timerRcvMan','off',1);
#we have timeout: normal for no detection, else error
#possible problems (fhem freeze?, bad rssi?, bad config?, timeout too short?)
my $posRcv = $hash->{helper}{$shuttersDev}{posRcvVal};
if($shutters->getIdleDetection eq 'none') { #without detection => normal if no problems
::readingsSingleUpdate($hash, $shuttersDev.'_driveAction', "man_timeOut_posEnd:$posRcv", 1);
ASC_DoAfterPosRcv($shuttersDev, $posRcv, 'manual');
}
else { #with detection => error: missing idle position
my $err = 'man_timeOut_noPosEnd';
::readingsSingleUpdate($hash, $shuttersDev.'_driveAction', "$err:$posRcv", 1);
ASC_DoAfterPosRcv($shuttersDev, $posRcv, $err);
}
return;
}
sub ASC_DoAfterPosRcv { #frank
my $shuttersDev = shift;
my $posRcv = shift;
my $type = shift;
$shutters->setShuttersDev($shuttersDev);
if($posRcv >= 0) {
$ascDev->setPosReading;
if($type eq 'manual') {
$shutters->setLastDrive('manual');
$shutters->setLastDriveReading;
$ascDev->setStateReading;
$shutters->setLastManPos($posRcv);
$shutters->setShadingManualDriveStatus(1) if($shutters->getIsDay && $shutters->getIfInShading);
FHEM::Automation::ShuttersControl::ASC_Debug( 'EventProcessingShutters:'
. ' eine manuelle Fahrt wurde erkannt!'
. ' die Position wird ggf automatisch auf die Frostschutzposition korrigiert.'
);
}
elsif($type eq 'asc') {
$shutters->setLastDriveReading;
$ascDev->setStateReading;
$shutters->setHardLockOut('on') if( ( $posRcv == $shutters->getComfortOpenPos
|| $posRcv == $shutters->getOpenPos
&& $shutters->getLastDrive eq 'ventilate - window open'
)
&& $shutters->getShuttersPlace eq 'terrace'
);
FHEM::Automation::ShuttersControl::ASC_Debug( 'EventProcessingShutters: '
. ' eine automatisierte Fahrt durch ASC wurde erkannt!'
. ' Es werden nun die LastDriveReading und StateReading Werte gesetzt!'
);
}
else { #error with position
$shutters->setLastDrive("missing idle position ($type:$posRcv)");
$shutters->setLastDriveReading;
$ascDev->setStateReading;
}
}
else { #error without position
$shutters->setLastDrive("no position received ($type)");
$shutters->setLastDriveReading;
$ascDev->setStateReading;
}
return;
}
2. in
/opt/fhem/lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm sieht die funktion EventProcessingShutters() nun so aus:
sub EventProcessingShutters { #frank
my $hash = shift;
my $shuttersDev = shift;
my $events = shift;
my $name = $hash->{NAME};
FHEM::Automation::ShuttersControl::ASC_Debug( 'EventProcessingShutters: '
. ' Fn wurde durch Notify aufgerufen da ASC_Pos_Reading Event erkannt wurde '
. ' - RECEIVED EVENT: '
. Dumper $events
);
####### new drive detection ############################################################################### #frank
my $aH = $FHEM::Automation::ShuttersControl::ascDev;
my $sH = $FHEM::Automation::ShuttersControl::shutters;
$sH->setShuttersDev($shuttersDev);
my $posReading = $sH->getPosCmd;
if ( $events =~ m{.*$posReading:\s([0-9\.]+)}xms ) { #check with readingname and point
my $posRcv = $1; #also change all other $1 and getStatus() in the rest of the function
# if ( $events =~ m{.*:\s(\d+)}xms ) { #frank: dangerous!
# $FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
# $shuttersDev);
# $FHEM::Automation::ShuttersControl::ascDev->setPosReading;
#
########################################################################################################### #frank
FHEM::Automation::ShuttersControl::ASC_Debug( 'EventProcessingShutters: '
. $shuttersDev
. ' - Event vom Rollo erkannt. Es wird nun eine etwaige manuelle Fahrt ausgewertet.'
. ' Int von ::gettimeofday: ' . int( ::gettimeofday() )
. ' Last Position Timestamp: ' . $sH->getLastPosTimestamp
. ' Drive Up Max Duration: ' . $sH->getDriveUpMaxDuration
. ' Last Position: ' . $sH->getLastPos
. ' aktuelle Position: ' . $posRcv #frank: change $posRcv
);
####### new drive detection ############################################################################### #frank
$hash->{helper}{$shuttersDev}{timerRcvAsc} = 0 if(!defined($hash->{helper}{$shuttersDev}{timerRcvAsc}));
$hash->{helper}{$shuttersDev}{timerRcvMan} = 0 if(!defined($hash->{helper}{$shuttersDev}{timerRcvMan}));
$hash->{helper}{$shuttersDev}{posRcvVal} = $posRcv;
$hash->{helper}{$shuttersDev}{posRcvTS} = ::gettimeofday();
if($hash->{helper}{$shuttersDev}{timerRcvAsc} == 1) { #asc drive
if($posRcv == $hash->{helper}{$shuttersDev}{posSnd}) { #pos==snd
$hash->{helper}{$shuttersDev}{timerRcvAsc} = 0;
::RemoveInternalTimer("timerRcvAsc:$shuttersDev");
::readingsSingleUpdate($hash,$shuttersDev.'_timerRcvAsc','off',1);
if( $sH->getIdleDetection eq 'none' #detection: no or idle
|| $sH->getIdleDetection ne 'none' && $sH->getIdleDetection eq $sH->getIdleDetectionValue) {
::readingsSingleUpdate($hash,$shuttersDev.'_driveAction',"asc_posEnd:$posRcv",1);
FHEM::Automation::ShuttersControl::ASC_DoAfterPosRcv($shuttersDev, $posRcv, 'asc');
}
else { #detection: run => error: position without idle
::readingsSingleUpdate($hash,$shuttersDev.'_driveAction',"asc_noPosEndWithIdle:$posRcv",1);
FHEM::Automation::ShuttersControl::ASC_DoAfterPosRcv($shuttersDev, $posRcv, 'error');
}
}
else { #pos!=snd
if( $sH->getIdleDetection eq 'none' #detection: no or run
|| $sH->getIdleDetection ne 'none' && $sH->getIdleDetection ne $sH->getIdleDetectionValue) {
::readingsSingleUpdate($hash,$shuttersDev.'_driveAction',"asc_posRun:$posRcv",1);
}
else { #detection: idle
$hash->{helper}{$shuttersDev}{timerRcvAsc} = 0;
::RemoveInternalTimer("timerRcvAsc:$shuttersDev");
::readingsSingleUpdate($hash,$shuttersDev.'_timerRcvAsc','off',1);
::readingsSingleUpdate($hash,$shuttersDev.'_driveAction',"asc_posEndManBreak:$posRcv",1);
FHEM::Automation::ShuttersControl::ASC_DoAfterPosRcv($shuttersDev, $posRcv, 'manual');
}
}
}
else { #manual drive (not a asc drive)
if( $sH->getIdleDetection eq 'none' #detection: no or run
|| $sH->getIdleDetection ne 'none' && $sH->getIdleDetection ne $sH->getIdleDetectionValue) {
$hash->{helper}{$shuttersDev}{timerRcvMan} = 1;
my $t = ::gettimeofday() + $sH->getDriveUpMaxDuration;
::RemoveInternalTimer("timerRcvMan:$shuttersDev");
::InternalTimer($t, \&FHEM::Automation::ShuttersControl::ASC_TimeoutRcvMan, "timerRcvMan:$shuttersDev");
::readingsSingleUpdate($hash,$shuttersDev.'_timerRcvMan','on',1);
::readingsSingleUpdate($hash,$shuttersDev.'_driveAction',"man_posRun:$posRcv",1);
}
else { #detection: idle
if($hash->{helper}{$shuttersDev}{timerRcvMan}) {
$hash->{helper}{$shuttersDev}{timerRcvMan} = 0;
::RemoveInternalTimer("timerRcvMan:$shuttersDev");
::readingsSingleUpdate($hash,$shuttersDev.'_timerRcvMan','off',1);
}
::readingsSingleUpdate($hash,$shuttersDev.'_driveAction',"man_posEnd:$posRcv",1);
FHEM::Automation::ShuttersControl::ASC_DoAfterPosRcv($shuttersDev, $posRcv, 'manual');
}
}
########################################################################################################### #frank
# what we want to do for manual/asc drive is now extern in FHEM::Automation::ShuttersControl::ASC_DoAfterPosRcv() #frank
#
# if( (int( ::gettimeofday() ) - $sH->getLastPosTimestamp ) > $sH->getDriveUpMaxDuration
# && (int( ::gettimeofday() ) - $sH->getLastManPosTimestamp ) > $sH->getDriveUpMaxDuration
# ){
# $sH->setLastDrive('manual');
# $sH->setLastDriveReading;
# $aH->setStateReading;
# $sH->setLastManPos($posRcv); #frank: change $posRcv
# $sH->setShadingManualDriveStatus(1) if ( $sH->getIsDay && $sH->getIfInShading );
#
# FHEM::Automation::ShuttersControl::ASC_Debug(
# 'EventProcessingShutters: eine manuelle Fahrt wurde erkannt!'
# );
# }
# else {
# $sH->setLastDriveReading;
# $aH->setStateReading;
# $sH->setHardLockOut('on') if( ( $posRcv == $sH->getComfortOpenPos #frank: change $posRcv
# || ( $posRcv == $sH->getOpenPos #frank: change $posRcv
# && $sH->getLastDrive eq 'ventilate - window open'
# ))
# && $sH->getShuttersPlace eq 'terrace'
# );
#
# FHEM::Automation::ShuttersControl::ASC_Debug( 'EventProcessingShutters: '
# . ' eine automatisierte Fahrt durch ASC wurde erkannt!'
# . ' Es werden nun die LastDriveReading und StateReading Werte gesetzt!'
# );
# }
}
FHEM::Automation::ShuttersControl::ASC_Debug( 'EventProcessingShutters: '
. ' Fn wurde durlaufen und es sollten Debugausgaben gekommen sein. '
. ' !!!Wenn nicht!!! wurde der Event nicht korrekt als Nummerisch erkannt. '
);
return;
}
Zitat von: meier81 am 12 September 2022, 20:10:10Hallo,
hab leider das gleiche Problem. Hatte heute den Fall das die Fenster gekippt waren und meine Frau den Schlafmodus der Kinder eingeschaltet hat. Die Rollläden sind daraufhin auf 30% zugefahren, alles noch korrekt. Jetzt war ich eben im Zimmer und habe die Fenster zugemacht, erwartet hätte ich jetzt eigentlich das die Rollläden nun zufahren, das tun sie aber nicht, bleiben munter auf den 30% stehen. Im ASC-Device steht bei Last Drive "roommate asleep - ventilate mode".
Was mir dann beim weiteren Testen aufgefallen ist, wenn ich nun das Fenster wieder öffne passiert weiterhin nichts, soll ja jetzt wieder auf 30% fahren und ist ja noch auf 30%. Wenn ich aber nun das Fenster wieder schließe fährt der Rollladen jetzt runter.
Gruß Markus
Hallo CoolTux,
muss das Thema nochmals aufgreifen, hatte ja den oben angegebenen Fehler letztes Jahr bei mir gefunden. Nun habe ich aber das gleiche Problem auch umgekehrt, ich hatte jetzt schon einige Male den Fall das Rollläden in der Beschattung waren und meine Frau hat die Fenster gekippt, dann sind die Rollläden von 10% auf 30% gefahren, auch alles soweit korrekt. Geht jetzt die Beschattung raus während die Fenster noch gekippt sind bleiben die Rollläden stehen und fahren nicht auf, auch nicht wenn ich jetzt die Fenster wieder zu mache. Spätestens jetzt müssten die doch hochfahren, oder?
Hoffe ich kann das hier mit anhängen, ansonsten mach ich einen eigenen Thread auf.
Gruß Markus
Eigener Thread ist besser. Und list vom ASC und Rollo bitte