179 Commits

Author SHA1 Message Date
81489d5246 Merge pull request 'dev' (#141) from dev into testing
Reviewed-on: #141
2025-01-21 17:20:42 +00:00
833a370347 Merge pull request 'patch-commandref' (#140) from patch-commandref into dev
Reviewed-on: #140
2025-01-21 17:20:19 +00:00
fb50355d39 docs: Changelog 2025-01-21 18:19:54 +01:00
d41615c90f fix: commandref 2025-01-21 18:19:42 +01:00
be5e721c43 Merge pull request 'main' (#138) from main into dev
Reviewed-on: #138
2025-01-21 16:55:10 +00:00
2351e5b9db Merge pull request 'testing' (#136) from testing into main
Reviewed-on: #136
2025-01-21 16:31:26 +00:00
d4626a068b Merge pull request 'dev' (#135) from dev into testing
Reviewed-on: #135
2025-01-21 16:29:35 +00:00
0571adccc5 Merge pull request 'patch-marvin78' (#134) from patch-marvin78 into dev
Reviewed-on: #134
2025-01-21 16:20:07 +00:00
8ec3bcde54 docs: new changelog 2025-01-21 17:19:04 +01:00
bd97e399bf feat: change version 2025-01-21 17:18:12 +01:00
d409662969 feat: https://forum.fhem.de/index.php?topic=136510.0 2025-01-12 12:56:08 +01:00
c1c3e2cbdf Merge pull request 'main' (#133) from main into dev
Reviewed-on: #133
2025-01-12 10:48:38 +00:00
72298746ab Merge pull request 'testing' (#132) from testing into main
Reviewed-on: #132
2024-12-30 11:27:16 +00:00
787114040c Merge pull request 'dev' (#131) from dev into testing
Reviewed-on: #131
2024-12-30 11:26:50 +00:00
b517e032cf Merge pull request 'patch-riedel2' (#130) from patch-riedel2 into dev
Reviewed-on: #130
2024-12-30 11:26:14 +00:00
30cf6f41d7 Merge pull request #99 from riedel2/dev
Corrected some typos and missing spaces
2024-12-28 08:44:51 +01:00
riedel2
eef3dc7b21 Merge branch 'fhem:dev' into dev 2024-12-27 00:10:23 +01:00
riedel2
cfe3963f32 Merge commit '3542e51375d97a41001ff0a30778fd6b24685774' into dev 2024-12-26 23:35:19 +01:00
riedel2
b654481df1 Corrected some typos and missing spaces 2024-12-26 23:30:36 +01:00
e19c902780 Merge pull request 'testing' (#129) from testing into main
Reviewed-on: #129
2024-10-12 07:11:29 +00:00
757a19bdb5 Merge pull request 'dev' (#128) from dev into testing
Reviewed-on: #128
2024-10-12 05:59:59 +00:00
52930d9a07 Merge pull request 'patch-remove-eperimental' (#127) from patch-remove-eperimental into dev
Reviewed-on: #127
2024-10-12 05:59:27 +00:00
e1592b8b7d docs: Changelog 2024-10-12 07:40:57 +02:00
7eb1079458 fix: remove experimental features
change copyright
2024-10-12 07:40:39 +02:00
ceecbb063a Merge pull request 'testing' (#123) from testing into main
Reviewed-on: #123
2023-01-03 07:50:14 +01:00
49b0ff17fa Merge pull request 'dev' (#122) from dev into testing
Reviewed-on: #122
2023-01-03 07:48:55 +01:00
ae5057fbc5 Merge pull request 'patch-adv' (#121) from patch-adv into dev
Reviewed-on: #121
2022-12-20 14:20:57 +01:00
9cd0d364b4 change Copyright text
new year range
2022-12-20 14:17:08 +01:00
f216e1b308 Merge branch 'dev' of git.cooltux.net:FHEM/mod-AutoShuttersControl into dev 2022-12-20 13:56:59 +01:00
6f137256e0 Merge pull request 'fix selfdefense' (#120) from patch-selfdefense into dev
Reviewed-on: #120
2022-12-20 13:55:47 +01:00
cc5ef41e21 fix selfdefense
change selfdefense condition in SunRiseShuttersAfterTimerFn
2022-12-15 09:56:26 +01:00
587d4e4316 Merge branch 'dev' of https://github.com/fhem/AutoShuttersControl into dev 2022-11-17 10:13:20 +01:00
riedel2
3542e51375 Update 73_AutoShuttersControl.pm
added 'roommate' option at inline help for ASC_Down
2022-11-09 22:39:07 +01:00
f517b72f23 Merge pull request #97 from riedel2/patch-1
Update 73_AutoShuttersControl.pm
2022-11-05 23:18:48 +01:00
riedel2
ad5cbaac12 Update 73_AutoShuttersControl.pm
HORIZON option not yet added to german help
2022-11-05 21:52:39 +01:00
8da3b13bcc Merge pull request 'testing' (#119) from testing into main
Reviewed-on: #119
2022-08-30 18:20:26 +02:00
c09edf5496 Merge pull request 'dev' (#118) from dev into testing
Reviewed-on: #118
2022-08-30 18:20:03 +02:00
cd1c2c104a Merge pull request 'closes: #116' (#117) from patch-cant_locate_object_method into dev
Reviewed-on: #117
2022-08-30 18:13:21 +02:00
51256c1ed9 closes: #116
[Ticket: #116]
2022-08-30 18:12:01 +02:00
c0a7bfa6df Merge pull request 'patch-CommandRef' (#115) from patch-CommandRef into dev
Reviewed-on: #115
2022-08-29 13:31:17 +02:00
403936fe73 fix CommandRef ASC_Up and ASC_Down entry 2022-08-29 13:30:37 +02:00
5095c65d80 Merge pull request 'main' (#113) from main into testing
Reviewed-on: #113
2022-08-29 10:17:58 +02:00
0bd8d6273f Merge pull request 'dev' (#112) from dev into main
Reviewed-on: #112
2022-08-29 10:09:12 +02:00
c3b61def25 Merge pull request 'fix is in external trigger and shading is aktive' (#111) from patch-externalTriggerAndShading into dev
Reviewed-on: #111
2022-08-29 10:08:01 +02:00
9c096902e8 Merge branch 'dev' into patch-externalTriggerAndShading 2022-08-29 10:07:37 +02:00
6dfc92c35e Merge pull request 'fix little typo in ASC_WindParameter' (#110) from patch-Commandref into dev
Reviewed-on: #110
2022-08-29 10:00:58 +02:00
9994af6ca2 fix is in external trigger and shading is aktive
[Ticket: X]
2022-08-29 10:00:01 +02:00
eb85a74a07 fix little typo in ASC_WindParameter
[Ticket: no]
2022-08-29 09:43:06 +02:00
358c760b45 Merge pull request 'Change WindUnprotectionFn if ShuttersPlace awning' (#109) from patch-windIsDay into dev
Reviewed-on: #109
2022-08-29 09:27:13 +02:00
34a6a88401 Change WindUnprotectionFn if ShuttersPlace awning
[Ticket: X]
2022-08-29 09:25:34 +02:00
bb80fb5d3a Merge pull request 'fix ASC_Shading_BetweenTheTime Commandref entry' (#108) from patch-IsInTimeFn into dev
Reviewed-on: #108
2022-08-29 09:08:34 +02:00
2907e19d3b fix ASC_Shading_BetweenTheTime Commandref entry
[Ticket: no]
2022-08-29 08:45:51 +02:00
ae86468077 Merge pull request 'dev' (#107) from dev into main
Reviewed-on: #107
2022-08-29 07:45:43 +02:00
7cba141447 Merge pull request 'patch-regen' (#106) from patch-regen into dev
Reviewed-on: #106
2022-08-29 07:42:17 +02:00
f67d56e1cc expane rain and wind protection control
add condition for wind and rain protection

[Ticket: none]
2022-06-20 15:56:47 +02:00
527d72dd57 code review rain unprotection drive 2022-04-19 12:32:19 +02:00
459b8508ec Merge pull request 'dev' (#105) from dev into main
Reviewed-on: #105
2022-04-07 21:29:10 +02:00
ac87015478 Merge pull request 'patch-shading_markise_IsDay' (#104) from patch-shading_markise_IsDay into dev
Reviewed-on: #104
2022-04-07 21:27:00 +02:00
26105fa434 more Log out with information 2022-04-07 21:25:03 +02:00
15be0a6885 observed ShuttersPlace awning for shading condition
[Ticket: no]
2022-03-24 09:54:55 +01:00
cca6e90303 Merge pull request 'dev' (#102) from dev into main
Reviewed-on: #102
2022-03-04 07:03:43 +01:00
de5d6cbc6a Merge pull request 'patch-informationTable' (#101) from patch-informationTable into dev
Reviewed-on: #101
2022-03-04 07:03:20 +01:00
4925e654ec change ShuttersInformation fn
add table frame and whitespace-character to ShuttersInformation

[Ticket: no]
2022-03-04 07:01:54 +01:00
97caf64308 Merge pull request 'dev' (#100) from dev into main
Reviewed-on: #100
2022-03-02 16:49:31 +01:00
6bf2b17d6f Merge pull request 'patch-codeRewrite' (#99) from patch-codeRewrite into dev
Reviewed-on: #99
2022-03-02 16:48:54 +01:00
fb27bedf48 fix bug if comfotPos 0
if Comfort_Pos 0 and window is open then shutter is no drive

[Ticket: no]
2022-03-02 16:47:56 +01:00
f52187ad35 Merge pull request 'testing' (#98) from testing into main
Reviewed-on: #98
2022-01-15 15:46:42 +01:00
103697184e Merge pull request 'dev' (#97) from dev into testing
Reviewed-on: #97
2022-01-15 15:46:13 +01:00
c9894453bb Merge pull request 'patch-wrongReadingsNameFromSetter' (#96) from patch-wrongReadingsNameFromSetter into dev
Reviewed-on: #96
2022-01-15 15:42:33 +01:00
14eee0e6dd fix setter readings Bug 2022-01-15 15:39:29 +01:00
9545dda125 Merge pull request 'testing' (#94) from testing into main
Reviewed-on: #94
2022-01-14 08:48:29 +01:00
3135a27c63 Merge pull request 'dev' (#93) from dev into testing
Reviewed-on: #93
2022-01-10 11:10:09 +01:00
13689963f1 Merge pull request 'patch-codeRewrite' (#92) from patch-codeRewrite into dev
Reviewed-on: #92
2022-01-10 11:09:39 +01:00
d8881ff6d1 change default value for ASC_advEndDate 2022-01-10 11:07:42 +01:00
12f48e98b5 fix condition 2022-01-10 11:04:43 +01:00
a1d19a797d fix error in adv condition 2022-01-10 11:01:07 +01:00
f1f265b89a add end of advent season variable
change attribut ASC_advDate to ASC_advStartDate
2022-01-10 10:43:51 +01:00
ca99e2bd0c Merge pull request 'dev' (#91) from dev into testing
Reviewed-on: #91
2022-01-02 08:52:18 +01:00
29e3a1a8d7 Merge pull request 'patch-codeRewrite' (#90) from patch-codeRewrite into dev
Reviewed-on: #90
2022-01-02 08:51:45 +01:00
e02395a82f no critic for perlcritic parser 2022-01-02 08:49:58 +01:00
663ce748e2 bugfix 2022-01-02 08:31:38 +01:00
d35dda835a coderewrite 2022-01-02 08:26:14 +01:00
47be49617d Merge pull request 'dev' (#89) from dev into testing
Reviewed-on: #89
2022-01-02 07:56:13 +01:00
0dc0a9c6e4 Merge pull request 'patch-codeRewrite' (#88) from patch-codeRewrite into dev
Reviewed-on: #88
2022-01-02 07:55:49 +01:00
79d369b9f5 little bugfix 2022-01-02 07:55:00 +01:00
8109cd7ebe change condition syntax of SetFn 2022-01-02 07:49:03 +01:00
842e41e3dc export object variable 2022-01-02 07:13:04 +01:00
35a4f60a53 chnage require@ISA to use base 2022-01-02 06:42:49 +01:00
ef650b2d4b Merge pull request 'testing' (#87) from testing into dev
Reviewed-on: #87
2022-01-01 20:25:58 +01:00
bf773ca2d7 Merge pull request 'bugfix' (#86) from patch-fix into testing
Reviewed-on: #86
2022-01-01 20:22:17 +01:00
ae88630277 bugfix 2022-01-01 20:21:26 +01:00
f811cfd87f Merge pull request 'dev' (#85) from dev into testing
Reviewed-on: #85
2022-01-01 09:46:43 +01:00
1a71c63652 Merge pull request 'change version' (#84) from patch-newVersion into dev
Reviewed-on: #84
2022-01-01 09:41:47 +01:00
7d3d11d1e2 change version 2022-01-01 09:39:28 +01:00
1eeeb85eaf Merge pull request 'patch_issues73-DriveUpDriveDownRoommate' (#83) from patch_issues73-DriveUpDriveDownRoommate into dev
Reviewed-on: #83
2022-01-01 09:29:52 +01:00
397f949a21 fix FHEM::Automation::ShuttersControl::Helper::GetAttrValues 2022-01-01 09:22:19 +01:00
4ea1db3aa0 fix bareword sunsettime 2022-01-01 09:08:49 +01:00
004a15ea42 fix error wrong hash sunrisetime bareword 2022-01-01 09:04:09 +01:00
9a1b6acad3 change modul header 2022-01-01 08:55:31 +01:00
4aa24587a5 Merge branch 'dev' into patch_issues73-DriveUpDriveDownRoommate 2021-12-11 14:24:14 +01:00
c76280639f Merge pull request 'patch_issues75-ShadingOutBreaksExternalTrigger' (#80) from patch_issues75-ShadingOutBreaksExternalTrigger into dev
Reviewed-on: #80
2021-12-09 10:30:43 +01:00
a3c023711c Merge branch 'dev' into patch_issues75-ShadingOutBreaksExternalTrigger 2021-12-09 10:29:22 +01:00
c6e88f2d45 Merge pull request 'patch_issues67-Lockout_and_BlockingManualTime' (#79) from patch_issues67-Lockout_and_BlockingManualTime into dev
Reviewed-on: #79
2021-12-09 10:20:43 +01:00
f0f5cbde4b fix syntax error 2021-12-08 11:45:22 +01:00
5928276b74 fix little bug is shutter position above the window tilted position
and shutters place is terrace and sybType is twoState and event is
window open
2021-12-08 11:35:55 +01:00
32a3ac9d13 change condition for BlockingAfterManualDrive in WendowRec Section 2021-12-08 11:14:46 +01:00
ef590e002e change logical in condition 2021-12-05 11:01:19 +01:00
427018ab46 bugfix 2021-12-05 07:44:51 +01:00
89431a2af3 change hardBlock action if shutters pos close 2021-12-04 20:48:53 +01:00
39c7ec3dc5 Merge branch 'devel' into patch_issues75-ShadingOutBreaksExternalTrigger 2021-12-04 10:57:50 +01:00
37044b2316 Merge branch 'devel' into patch_issues73-DriveUpDriveDownRoommate 2021-12-04 10:57:06 +01:00
a44fffe94e Merge branch 'devel' into patch_issues67-Lockout_and_BlockingManualTime 2021-12-04 10:56:05 +01:00
870f2be5d8 Merge pull request 'fix: #77' (#78) from patch_issues77-DriveDownResidentsHomeButAutoControlOFF into devel
Reviewed-on: #78
2021-12-04 10:53:12 +01:00
36669f1405 fix: #77 2021-12-04 10:50:29 +01:00
a61458cfc2 fix logical issues 2021-12-04 10:22:22 +01:00
8c17eb5f6a change condition of Window events if the place is terrace 2021-12-04 09:55:46 +01:00
d87ddb146c all shading functions are disabled when external trigger active 2021-12-04 09:28:38 +01:00
58b2f20f19 fix condition 2021-12-04 09:07:31 +01:00
301fd32048 change condition for GetUp roommate. no shutters drive if you have been on absent or gone 2021-12-04 08:36:56 +01:00
0255be94b5 Merge pull request 'patch-commandrefChangeToId' (#74) from patch-commandrefChangeToId into devel
Reviewed-on: #74
2021-11-29 15:26:57 +01:00
4773fd0ea0 add commandref change of Beta_User 2021-11-29 15:20:33 +01:00
1ce3805427 Merge branch 'devel' of git.cooltux.net:FHEM/mod-AutoShuttersControl into devel 2021-11-25 08:26:44 +01:00
5f00d33fa9 Merge pull request 'devel' (#72) from jochenluedering/mod-AutoShuttersControl:devel into devel
Reviewed-on: #72
2021-11-22 22:38:45 +01:00
Jochen Luedering
da79e25929 rain un-protect: keep awning open at night 2021-11-22 22:20:05 +01:00
jochenluedering
0b22ac9e12 Merge pull request 'devel' (#1) from FHEM/mod-AutoShuttersControl:devel into devel
Reviewed-on: jochenluedering/mod-AutoShuttersControl#1
2021-11-22 22:08:16 +01:00
e6a01cdb18 Merge pull request 'merge from testing' (#71) from testing into master
Reviewed-on: #71
2021-11-14 14:00:43 +01:00
fb44ff9f1a Merge pull request 'merge from devel' (#70) from devel into testing
Reviewed-on: #70
2021-11-14 13:54:53 +01:00
9663b2dd43 Merge pull request 'closed: #68' (#69) from fix-Umlaute-uninitialized-value into devel
Reviewed-on: #69
2021-11-14 13:49:04 +01:00
d6cb059eaf closed: #68
fix bug PERL WARNING: Use of uninitialized value within %charHash in
substitution iterator at lib/FHEM/Automation/ShuttersControl/Helper.pm
line 1021 is FHEM startup.
2021-11-14 13:44:35 +01:00
6774e3a918 Merge pull request 'testing' (#64) from testing into master
Reviewed-on: #64
2021-10-27 10:01:55 +02:00
e28fad13d7 Merge pull request 'devel' (#63) from devel into testing
Reviewed-on: #63
2021-10-27 10:01:35 +02:00
1c1ac77851 Merge pull request 'patch-commandref' (#62) from patch-commandref into devel
Reviewed-on: #62
2021-10-27 10:01:13 +02:00
1ac38a7216 fix commandref 2021-10-27 09:59:53 +02:00
8d6044c404 Merge pull request 'testing' (#61) from testing into master
Reviewed-on: #61
2021-10-27 09:46:54 +02:00
fcce22b102 Merge pull request 'devel' (#60) from devel into testing
Reviewed-on: #60
2021-10-27 09:46:23 +02:00
4b5b03a8fc Merge pull request 'patch-renameConntrolTemplateVariables' (#59) from patch-renameConntrolTemplateVariables into devel
Reviewed-on: #59
2021-10-27 09:45:51 +02:00
f412e88325 change names of CommandTemplate variables, change commadref for
CommandTemplate
2021-10-27 09:43:16 +02:00
0dca852ad0 Merge pull request 'merge testing to master' (#58) from testing into master
Reviewed-on: #58
2021-10-27 08:49:21 +02:00
8ea4101747 Merge pull request 'merge from devel to testing' (#57) from devel into testing
Reviewed-on: #57
2021-10-27 08:43:44 +02:00
b9a7328661 Merge pull request 'closed: #53 Patch beliebigen Fahrbefehl zulassen' (#54) from patch-implementationCommandTemplate into devel
Reviewed-on: #54
2021-10-27 08:37:27 +02:00
f03a7d690f Merge branch 'devel' into patch-implementationCommandTemplate 2021-10-26 20:20:15 +02:00
5ccceaba16 add example with owner perlfunction for ASC_CommandTemplate 2021-10-26 19:42:19 +02:00
54450962ac Merge pull request 'closed: #55 fix ASC_BlockingTime_beforNightClose wird bei Regen(-schutz) ignoriert' (#56) from patch-rainprotection_blockingtime into devel
Reviewed-on: #56
2021-10-26 19:31:28 +02:00
9409c60400 change ASC_BlockingTime_beforNightClose and
ASC_BlockingTime_beforDayOpen Attributs
2021-10-26 19:29:29 +02:00
75f5b6bf01 add drive reason to CommandTemplte varibales 2021-10-26 14:05:06 +02:00
98edf0c5f6 change commandref 2021-10-25 19:54:51 +02:00
a9a47f9e70 fix ASC_BlockingTime_beforNightClose wird bei Regen(-schutz) ignoriert 2021-10-25 19:25:13 +02:00
f2b7e8490f fix Can't locate object method "getCommandTemplte" 2021-10-25 18:43:30 +02:00
3d7f9fcf92 add commandref enrty for ASC_CommandTemplate Attribut 2021-10-25 18:24:17 +02:00
e037a12879 change version 2021-10-25 17:58:08 +02:00
096e4ab815 Patch beliebigen Fahrbefehl zulassen #53 2021-10-25 17:51:37 +02:00
feba24bf99 Merge pull request 'closed: #40 Terrasse schließen Prüfung auf externe Trigger zum nachholen der Fahrt' (#52) from patch-ExternalTrigger_TerraceClose into devel
Reviewed-on: #52
2021-10-25 10:04:47 +02:00
e5a6bbdbe5 Terrasse schließen Prüfung auf externe Trigger zum nachholen der Fahrt 2021-10-25 10:02:29 +02:00
a66daa7d5a Merge pull request 'close: #50 expand regex to detect position event with dot's' (#51) from patch-driveDetection into devel
Reviewed-on: #51
2021-10-24 18:33:45 +02:00
617b7a7531 expand regex to detect position event with dot's 2021-10-24 17:16:11 +02:00
f498829347 fix set rainstate by night 2021-10-23 10:08:37 +02:00
4cc3ecc40a Merge branch 'patch-shadingOut_externalTrigger' into devel 2021-10-21 09:33:11 +02:00
95446cc91e change code for ExternlTriggerStatus. 2021-10-09 08:10:09 +02:00
63393b4cd4 add EG_window to ShuttersPlace and expand ProcessingResidents Fn for
close Shutter by open window then gone
2021-10-09 07:53:53 +02:00
6a62226a39 Merge branch 'testing' 2021-10-09 07:12:54 +02:00
cbd058773d Merge branch 'devel' into testing 2021-10-09 07:12:37 +02:00
1016b7d087 change version and contact information in all files 2021-10-09 07:11:52 +02:00
649d21f19b Merge branch 'devel' into testing 2021-10-08 11:44:44 +02:00
93bd0cd22e fix rain 2021-10-08 11:44:13 +02:00
62a4a249b4 Merge pull request 'devel' (#48) from devel into testing
Reviewed-on: #48
2021-10-08 10:02:12 +02:00
e66aa0cb4d Merge pull request 'close: #46' (#47) from patch-rainProtection into devel
Reviewed-on: #47
2021-10-08 09:58:58 +02:00
34afd51a11 fix: #46 2021-10-08 09:55:44 +02:00
a2c878e333 Merge branch 'devel' into testing 2021-10-01 08:09:29 +02:00
bb1d139ed7 Merge pull request 'drive awning to open position if (wind unprotected) at night' (#45) from jochenluedering/mod-AutoShuttersControl:devel into devel
Reviewed-on: #45
2021-09-29 08:36:42 +02:00
Jochen Lüdering
ef5b9a982e drive awning to open position if (wind unprotected) at night 2021-09-28 11:12:14 +02:00
4c1d6c7885 Merge branch 'devel' into testing 2021-09-14 09:51:23 +02:00
2b12b9ed10 fix Copyright 2021-09-14 09:50:44 +02:00
6babb451c9 Merge branch 'devel' into testing 2021-09-14 09:20:52 +02:00
9afc3ccf97 fix CVS ID Tag 2021-09-14 09:19:39 +02:00
Leon Gaultier
bee5ff33ae Merge pull request #96 from rejoe2/devel
commandref fixes, esp. "name" => "id"
2021-09-14 08:50:45 +02:00
rejoe2
9ba046452a Add HMCCUDEV TYPE 2021-09-10 09:51:33 +02:00
rejoe2
5e60229c7a Add Shelly TYPE 2021-09-09 13:11:28 +02:00
rejoe2
8009a27869 use "id" format, add some missing info in english 2021-08-31 12:34:04 +02:00
rejoe2
0b048e7dc0 prepare vor use of "id" sections in commandref 2021-08-31 12:32:22 +02:00
20 changed files with 10398 additions and 1509 deletions

8496
CHANGELOG.md Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,16 @@
UPD 2021-05-27_08:55:22 97974 FHEM/73_AutoShuttersControl.pm UPD 2025-01-21_18:19:08 116536 FHEM/73_AutoShuttersControl.pm
UPD 2021-05-27_08:51:20 74350 lib/FHEM/Automation/ShuttersControl.pm UPD 2025-01-21_17:56:42 76570 lib/FHEM/Automation/ShuttersControl.pm
UPD 2021-02-18_11:11:24 2657 lib/FHEM/Automation/ShuttersControl/Dev.pm UPD 2024-10-12_09:12:30 2691 lib/FHEM/Automation/ShuttersControl/Dev.pm
UPD 2021-02-18_11:11:24 2496 lib/FHEM/Automation/ShuttersControl/Roommate.pm UPD 2024-10-12_09:12:30 2675 lib/FHEM/Automation/ShuttersControl/Roommate.pm
UPD 2021-05-27_08:51:20 31896 lib/FHEM/Automation/ShuttersControl/Shutters.pm UPD 2024-10-12_09:12:30 31828 lib/FHEM/Automation/ShuttersControl/Shutters.pm
UPD 2021-04-30_18:20:51 25329 lib/FHEM/Automation/ShuttersControl/Shading.pm UPD 2024-10-12_09:12:30 25541 lib/FHEM/Automation/ShuttersControl/Shading.pm
UPD 2021-05-27_08:51:20 109039 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm UPD 2024-10-12_09:12:30 112297 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
UPD 2021-02-18_11:11:24 40628 lib/FHEM/Automation/ShuttersControl/Helper.pm UPD 2024-10-12_09:12:30 40681 lib/FHEM/Automation/ShuttersControl/Helper.pm
UPD 2021-02-18_11:11:24 2175 lib/FHEM/Automation/ShuttersControl/Window.pm UPD 2024-10-12_09:12:30 2209 lib/FHEM/Automation/ShuttersControl/Window.pm
UPD 2021-05-27_08:51:20 11741 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm UPD 2024-10-12_09:12:30 11857 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm
UPD 2021-02-18_11:11:24 7251 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm UPD 2024-10-12_09:12:30 7265 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm
UPD 2021-02-18_11:11:24 52525 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm UPD 2024-10-12_09:12:30 52751 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm
UPD 2021-02-18_11:11:24 2903 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm UPD 2024-10-12_09:12:30 2799 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm
UPD 2021-02-18_11:11:24 3980 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm UPD 2024-10-12_09:12:30 3887 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm
UPD 2021-02-18_11:11:24 2288 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm UPD 2024-10-12_09:12:30 2200 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm
UPD 2024-10-12_09:12:30 7394 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm

36
hooks/commit-msg Executable file
View File

@@ -0,0 +1,36 @@
#!/bin/sh
#
# An example hook script to check the commit log message.
# Called by "git commit" with one argument, the name of the file
# that has the commit message. The hook should exit with non-zero
# status after issuing an appropriate message if it wants to stop the
# commit. The hook is allowed to edit the commit message file.
#
# To enable this hook, rename this file to "commit-msg".
# Uncomment the below to add a Signed-off-by line to the message.
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
# hook is more suited to it.
#
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
# This example catches duplicate Signed-off-by lines.
commit_msg=$(cat "${1:?Missing commit message file}")
test "" = "$(grep '^Signed-off-by: ' "$1" |
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
echo >&2 Duplicate Signed-off-by lines.
exit 1
}
if ! echo "$commit_msg" | grep -Eq "^(build|chore|ci|docs|feat|feat!|fix|perf|refactor|revert|style|test)(\(.+\))?: .*$" ; then
echo "Invalid commit message"
exit 1
fi
echo "Commit message is valid!"

18
hooks/post-commit Executable file
View File

@@ -0,0 +1,18 @@
#!/bin/bash
set -eu
# destination of the final changelog file
OUTPUT_FILE=CHANGELOG.md
# generate the changelog
git --no-pager log --no-merges --format="### %s%d%n>%aD%n%n>Author: %aN (%aE)%n%n>Commiter: %cN (%cE)%n%n%b%n%N%n" > $OUTPUT_FILE
# prevent recursion!
# since a 'commit --amend' will trigger the post-commit script again
# we have to check if the changelog file has changed or not
res=$(git status --porcelain | grep -c ".\$OUTPUT_FILE$")
if [ "$res" -gt 0 ]; then
git add $OUTPUT_FILE
git commit --amend
echo "Populated Changelog in $OUTPUT_FILE"
fi

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2020 Copyright: Marko Oldenburg (leongaultier at gmail dot com) # (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@@ -43,7 +43,7 @@ package FHEM::Automation::ShuttersControl::Dev;
use FHEM::Automation::ShuttersControl::Dev::Readings; use FHEM::Automation::ShuttersControl::Dev::Readings;
use FHEM::Automation::ShuttersControl::Dev::Attr; use FHEM::Automation::ShuttersControl::Dev::Attr;
our @ISA = use base
qw(FHEM::Automation::ShuttersControl::Dev::Readings FHEM::Automation::ShuttersControl::Dev::Attr); qw(FHEM::Automation::ShuttersControl::Dev::Readings FHEM::Automation::ShuttersControl::Dev::Attr);
use strict; use strict;

View File

@@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2020 Copyright: Marko Oldenburg (leongaultier at gmail dot com) # (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@@ -44,23 +44,12 @@ use strict;
use warnings; use warnings;
use utf8; use utf8;
use GPUtils qw(GP_Import);
## Import der FHEM Funktionen
BEGIN {
GP_Import(
qw(
AttrVal
gettimeofday)
);
}
sub getShuttersOffset { sub getShuttersOffset {
my $self = shift; my $self = shift;
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_shuttersDriveDelay', -1 ); return ::AttrVal( $name, 'ASC_shuttersDriveDelay', -1 );
} }
sub getBrightnessMinVal { sub getBrightnessMinVal {
@@ -70,7 +59,7 @@ sub getBrightnessMinVal {
return $self->{ASC_brightness}->{triggermin} return $self->{ASC_brightness}->{triggermin}
if ( exists( $self->{ASC_brightness}->{LASTGETTIME} ) if ( exists( $self->{ASC_brightness}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->getBrightnessMaxVal; $FHEM::Automation::ShuttersControl::ascDev->getBrightnessMaxVal;
return $self->{ASC_brightness}->{triggermin}; return $self->{ASC_brightness}->{triggermin};
@@ -83,8 +72,8 @@ sub getBrightnessMaxVal {
return $self->{ASC_brightness}->{triggermax} return $self->{ASC_brightness}->{triggermax}
if ( exists( $self->{ASC_brightness}->{LASTGETTIME} ) if ( exists( $self->{ASC_brightness}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
$self->{ASC_brightness}->{LASTGETTIME} = int( gettimeofday() ); $self->{ASC_brightness}->{LASTGETTIME} = int( ::gettimeofday() );
my ( $triggermax, $triggermin ) = my ( $triggermax, $triggermin ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
@@ -104,7 +93,7 @@ sub _getTwilightDevice {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_twilightDevice', 'none' ); return ::AttrVal( $name, 'ASC_twilightDevice', 'none' );
} }
sub getAutoAstroModeEvening { sub getAutoAstroModeEvening {
@@ -112,7 +101,7 @@ sub getAutoAstroModeEvening {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_autoAstroModeEvening', 'REAL' ); return ::AttrVal( $name, 'ASC_autoAstroModeEvening', 'REAL' );
} }
sub getAutoAstroModeEveningHorizon { sub getAutoAstroModeEveningHorizon {
@@ -120,7 +109,7 @@ sub getAutoAstroModeEveningHorizon {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_autoAstroModeEveningHorizon', 0 ); return ::AttrVal( $name, 'ASC_autoAstroModeEveningHorizon', 0 );
} }
sub getAutoAstroModeMorning { sub getAutoAstroModeMorning {
@@ -128,7 +117,7 @@ sub getAutoAstroModeMorning {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_autoAstroModeMorning', 'REAL' ); return ::AttrVal( $name, 'ASC_autoAstroModeMorning', 'REAL' );
} }
sub getAutoAstroModeMorningHorizon { sub getAutoAstroModeMorningHorizon {
@@ -136,7 +125,7 @@ sub getAutoAstroModeMorningHorizon {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_autoAstroModeMorningHorizon', 0 ); return ::AttrVal( $name, 'ASC_autoAstroModeMorningHorizon', 0 );
} }
sub getAutoShuttersControlMorning { sub getAutoShuttersControlMorning {
@@ -144,7 +133,7 @@ sub getAutoShuttersControlMorning {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_autoShuttersControlMorning', 'on' ); return ::AttrVal( $name, 'ASC_autoShuttersControlMorning', 'on' );
} }
sub getAutoShuttersControlEvening { sub getAutoShuttersControlEvening {
@@ -152,7 +141,7 @@ sub getAutoShuttersControlEvening {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_autoShuttersControlEvening', 'on' ); return ::AttrVal( $name, 'ASC_autoShuttersControlEvening', 'on' );
} }
sub getAutoShuttersControlComfort { sub getAutoShuttersControlComfort {
@@ -160,7 +149,7 @@ sub getAutoShuttersControlComfort {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_autoShuttersControlComfort', 'off' ); return ::AttrVal( $name, 'ASC_autoShuttersControlComfort', 'off' );
} }
sub getFreezeTemp { sub getFreezeTemp {
@@ -168,7 +157,7 @@ sub getFreezeTemp {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_freezeTemp', 3 ); return ::AttrVal( $name, 'ASC_freezeTemp', 3 );
} }
sub getSlatDriveCmdInverse { sub getSlatDriveCmdInverse {
@@ -176,7 +165,7 @@ sub getSlatDriveCmdInverse {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_slatDriveCmdInverse', 0 ); return ::AttrVal( $name, 'ASC_slatDriveCmdInverse', 0 );
} }
sub _getTempSensor { sub _getTempSensor {
@@ -186,11 +175,11 @@ sub _getTempSensor {
return $self->{ASC_tempSensor}->{device} return $self->{ASC_tempSensor}->{device}
if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
$self->{ASC_tempSensor}->{LASTGETTIME} = int( gettimeofday() ); $self->{ASC_tempSensor}->{LASTGETTIME} = int( ::gettimeofday() );
my ( $device, $reading ) = my ( $device, $reading ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_tempSensor', FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
'none' ); 'ASC_tempSensor', 'none' );
## erwartetes Ergebnis ## erwartetes Ergebnis
# DEVICE:READING # DEVICE:READING
@@ -208,7 +197,7 @@ sub getTempSensorReading {
return $self->{ASC_tempSensor}->{reading} return $self->{ASC_tempSensor}->{reading}
if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->_getTempSensor; $FHEM::Automation::ShuttersControl::ascDev->_getTempSensor;
return $self->{ASC_tempSensor}->{reading}; return $self->{ASC_tempSensor}->{reading};
} }
@@ -220,8 +209,9 @@ sub _getResidentsDev {
return $self->{ASC_residentsDev}->{device} return $self->{ASC_residentsDev}->{device}
if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} ) if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) <
$self->{ASC_residentsDev}->{LASTGETTIME} = int( gettimeofday() ); 2 );
$self->{ASC_residentsDev}->{LASTGETTIME} = int( ::gettimeofday() );
my ( $device, $reading ) = my ( $device, $reading ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
'ASC_residentsDev', 'none' ); 'ASC_residentsDev', 'none' );
@@ -240,7 +230,8 @@ sub getResidentsReading {
return $self->{ASC_residentsDev}->{reading} return $self->{ASC_residentsDev}->{reading}
if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} ) if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) <
2 );
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev; $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev;
return $self->{ASC_residentsDev}->{reading}; return $self->{ASC_residentsDev}->{reading};
} }
@@ -252,11 +243,11 @@ sub _getRainSensor {
return $self->{ASC_rainSensor}->{device} return $self->{ASC_rainSensor}->{device}
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
$self->{ASC_rainSensor}->{LASTGETTIME} = int( gettimeofday() ); $self->{ASC_rainSensor}->{LASTGETTIME} = int( ::gettimeofday() );
my ( $device, $reading, $max, $hyst, $pos, $wait ) = my ( $device, $reading, $max, $hyst, $pos, $wait ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_rainSensor', FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
'none' ); 'ASC_rainSensor', 'none' );
## erwartetes Ergebnis ## erwartetes Ergebnis
# DEVICE:READING MAX:HYST # DEVICE:READING MAX:HYST
@@ -266,10 +257,10 @@ sub _getRainSensor {
$self->{ASC_rainSensor}->{reading} = $self->{ASC_rainSensor}->{reading} =
( $reading ne 'none' ? $reading : 'rain' ); ( $reading ne 'none' ? $reading : 'rain' );
$self->{ASC_rainSensor}->{triggermax} = ( $self->{ASC_rainSensor}->{triggermax} = (
( $max ne 'none' ( $max ne 'none' && $max =~ m{\A(-?\d+(\.\d+)?)\z}xms )
&& $max =~ m{\A(-?\d+(\.\d+)?)\z}xms )
? $max ? $max
: 1000 ); : 1000
);
$self->{ASC_rainSensor}->{triggerhyst} = ( $self->{ASC_rainSensor}->{triggerhyst} = (
$hyst ne 'none' $hyst ne 'none'
@@ -277,10 +268,11 @@ sub _getRainSensor {
: ( $self->{ASC_rainSensor}->{triggermax} * 0 ) : ( $self->{ASC_rainSensor}->{triggermax} * 0 )
); );
$self->{ASC_rainSensor}->{shuttersClosedPos} = $self->{ASC_rainSensor}->{shuttersClosedPos} = (
( $pos ne 'none' $pos ne 'none'
? $pos ? $pos
: $FHEM::Automation::ShuttersControl::shutters->getClosedPos ); : $FHEM::Automation::ShuttersControl::shutters->getClosedPos
);
$self->{ASC_rainSensor}->{waitingTime} = $self->{ASC_rainSensor}->{waitingTime} =
( $wait ne 'none' ? $wait : 0 ); ( $wait ne 'none' ? $wait : 0 );
@@ -294,7 +286,7 @@ sub getRainSensorReading {
return $self->{ASC_rainSensor}->{reading} return $self->{ASC_rainSensor}->{reading}
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
return $self->{ASC_rainSensor}->{reading}; return $self->{ASC_rainSensor}->{reading};
} }
@@ -306,7 +298,7 @@ sub getRainTriggerMax {
return $self->{ASC_rainSensor}->{triggermax} return $self->{ASC_rainSensor}->{triggermax}
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
return $self->{ASC_rainSensor}->{triggermax}; return $self->{ASC_rainSensor}->{triggermax};
} }
@@ -318,7 +310,7 @@ sub getRainTriggerMin {
return $self->{ASC_rainSensor}->{triggerhyst} return $self->{ASC_rainSensor}->{triggerhyst}
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
return $self->{ASC_rainSensor}->{triggerhyst}; return $self->{ASC_rainSensor}->{triggerhyst};
} }
@@ -330,7 +322,7 @@ sub getRainSensorShuttersClosedPos {
return $self->{ASC_rainSensor}->{shuttersClosedPos} return $self->{ASC_rainSensor}->{shuttersClosedPos}
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
return $self->{ASC_rainSensor}->{shuttersClosedPos}; return $self->{ASC_rainSensor}->{shuttersClosedPos};
} }
@@ -342,7 +334,7 @@ sub getRainWaitingTime {
return $self->{ASC_rainSensor}->{waitingTime} return $self->{ASC_rainSensor}->{waitingTime}
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
return $self->{ASC_rainSensor}->{waitingTime}; return $self->{ASC_rainSensor}->{waitingTime};
} }
@@ -354,11 +346,11 @@ sub _getWindSensor {
return $self->{ASC_windSensor}->{device} return $self->{ASC_windSensor}->{device}
if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
$self->{ASC_windSensor}->{LASTGETTIME} = int( gettimeofday() ); $self->{ASC_windSensor}->{LASTGETTIME} = int( ::gettimeofday() );
my ( $device, $reading ) = my ( $device, $reading ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_windSensor', FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
'none' ); 'ASC_windSensor', 'none' );
return $device if ( $device eq 'none' ); return $device if ( $device eq 'none' );
$self->{ASC_windSensor}->{device} = $device; $self->{ASC_windSensor}->{device} = $device;
@@ -375,7 +367,7 @@ sub getWindSensorReading {
return $self->{ASC_windSensor}->{reading} return $self->{ASC_windSensor}->{reading}
if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->_getWindSensor; $FHEM::Automation::ShuttersControl::ascDev->_getWindSensor;
return ( return (
defined( $self->{ASC_windSensor}->{reading} ) defined( $self->{ASC_windSensor}->{reading} )
@@ -389,18 +381,23 @@ sub getBlockAscDrivesAfterManual {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 ); return ::AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 );
} }
sub getAdvDate { sub getAdvStartDate {
my $self = shift; my $self = shift;
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_advDate', 'FirstAdvent' ); return ::AttrVal( $name, 'ASC_advStartDate', 'FirstAdvent' );
} }
sub getAdvEndDate {
my $self = shift;
my $name = $self->{name};
return ::AttrVal( $name, 'ASC_advEndDate', 'EpiphanyDay' );
}
1; 1;

View File

@@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2020 Copyright: Marko Oldenburg (leongaultier at gmail dot com) # (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@@ -48,12 +48,7 @@ use GPUtils qw(GP_Import);
## Import der FHEM Funktionen ## Import der FHEM Funktionen
BEGIN { BEGIN {
GP_Import( GP_Import(qw(defs));
qw(
readingsSingleUpdate
ReadingsVal
defs)
);
} }
sub setDelayCmdReading { sub setDelayCmdReading {
@@ -62,7 +57,7 @@ sub setDelayCmdReading {
my $name = $self->{name}; my $name = $self->{name};
my $hash = $defs{$name}; my $hash = $defs{$name};
readingsSingleUpdate( ::readingsSingleUpdate(
$hash, $hash,
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
. '_lastDelayPosValue', . '_lastDelayPosValue',
@@ -79,7 +74,7 @@ sub setStateReading {
my $name = $self->{name}; my $name = $self->{name};
my $hash = $defs{$name}; my $hash = $defs{$name};
readingsSingleUpdate( ::readingsSingleUpdate(
$hash, 'state', $hash, 'state',
( (
defined($value) defined($value)
@@ -97,7 +92,7 @@ sub setPosReading {
my $name = $self->{name}; my $name = $self->{name};
my $hash = $defs{$name}; my $hash = $defs{$name};
readingsSingleUpdate( ::readingsSingleUpdate(
$hash, $hash,
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
. '_PosValue', . '_PosValue',
@@ -113,7 +108,7 @@ sub setLastPosReading {
my $name = $self->{name}; my $name = $self->{name};
my $hash = $defs{$name}; my $hash = $defs{$name};
readingsSingleUpdate( ::readingsSingleUpdate(
$hash, $hash,
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
. '_lastPosValue', . '_lastPosValue',
@@ -128,7 +123,7 @@ sub getPartyMode {
my $name = $self->{name}; my $name = $self->{name};
return ReadingsVal( $name, 'partyMode', 'off' ); return ::ReadingsVal( $name, 'partyMode', 'off' );
} }
sub getHardLockOut { sub getHardLockOut {
@@ -136,7 +131,7 @@ sub getHardLockOut {
my $name = $self->{name}; my $name = $self->{name};
return ReadingsVal( $name, 'hardLockOut', 'none' ); return ::ReadingsVal( $name, 'hardLockOut', 'none' );
} }
sub getSunriseTimeWeHoliday { sub getSunriseTimeWeHoliday {
@@ -144,7 +139,7 @@ sub getSunriseTimeWeHoliday {
my $name = $self->{name}; my $name = $self->{name};
return ReadingsVal( $name, 'sunriseTimeWeHoliday', 'none' ); return ::ReadingsVal( $name, 'sunriseTimeWeHoliday', 'none' );
} }
sub getMonitoredDevs { sub getMonitoredDevs {
@@ -152,14 +147,14 @@ sub getMonitoredDevs {
my $name = $self->{name}; my $name = $self->{name};
$self->{monitoredDevs} = ReadingsVal( $name, '.monitoredDevs', 'none' ); $self->{monitoredDevs} = ::ReadingsVal( $name, '.monitoredDevs', 'none' );
return $self->{monitoredDevs}; return $self->{monitoredDevs};
} }
sub getOutTemp { sub getOutTemp {
my $self = shift; my $self = shift;
return ReadingsVal( return ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getTempSensor, $FHEM::Automation::ShuttersControl::ascDev->_getTempSensor,
$FHEM::Automation::ShuttersControl::ascDev->getTempSensorReading, $FHEM::Automation::ShuttersControl::ascDev->getTempSensorReading,
-100 ); -100 );
@@ -169,7 +164,8 @@ sub getResidentsStatus {
my $self = shift; my $self = shift;
my $val = my $val =
ReadingsVal( $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev, ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
$FHEM::Automation::ShuttersControl::ascDev->getResidentsReading, $FHEM::Automation::ShuttersControl::ascDev->getResidentsReading,
'none' ); 'none' );
@@ -178,7 +174,7 @@ sub getResidentsStatus {
return $1 && $1 eq 'pet' ? 'absent' : $2; return $1 && $1 eq 'pet' ? 'absent' : $2;
} }
elsif ( elsif (
ReadingsVal( ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev, $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
'homealoneType', '-' ) eq 'PET' 'homealoneType', '-' ) eq 'PET'
) )
@@ -196,7 +192,8 @@ sub getResidentsLastStatus {
my $self = shift; my $self = shift;
my $val = my $val =
ReadingsVal( $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev, ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
'lastState', 'none' ); 'lastState', 'none' );
if ( $val =~ m{^(?:(.+)_)?(.+)$}xms ) { if ( $val =~ m{^(?:(.+)_)?(.+)$}xms ) {
@@ -204,7 +201,7 @@ sub getResidentsLastStatus {
return $1 && $1 eq 'pet' ? 'absent' : $2; return $1 && $1 eq 'pet' ? 'absent' : $2;
} }
elsif ( elsif (
ReadingsVal( ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev, $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
'lastHomealoneType', '-' ) eq 'PET' 'lastHomealoneType', '-' ) eq 'PET'
) )
@@ -223,7 +220,7 @@ sub getAutoShuttersControlShading {
my $name = $self->{name}; my $name = $self->{name};
return ReadingsVal( $name, 'controlShading', 'none' ); return ::ReadingsVal( $name, 'controlShading', 'none' );
} }
sub getSelfDefense { sub getSelfDefense {
@@ -231,7 +228,7 @@ sub getSelfDefense {
my $name = $self->{name}; my $name = $self->{name};
return ReadingsVal( $name, 'selfDefense', 'none' ); return ::ReadingsVal( $name, 'selfDefense', 'none' );
} }
sub getAzimuth { sub getAzimuth {
@@ -239,13 +236,13 @@ sub getAzimuth {
my $azimuth; my $azimuth;
$azimuth = ReadingsVal( $azimuth = ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice, $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
'azimuth', -1 ) 'azimuth', -1 )
if ( if (
$defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice } $defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice }
->{TYPE} eq 'Twilight' ); ->{TYPE} eq 'Twilight' );
$azimuth = ReadingsVal( $azimuth = ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice, $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
'SunAz', -1 ) 'SunAz', -1 )
if ( if (
@@ -260,13 +257,13 @@ sub getElevation {
my $elevation; my $elevation;
$elevation = ReadingsVal( $elevation = ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice, $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
'elevation', -1 ) 'elevation', -1 )
if ( if (
$defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice } $defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice }
->{TYPE} eq 'Twilight' ); ->{TYPE} eq 'Twilight' );
$elevation = ReadingsVal( $elevation = ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice, $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
'SunAlt', -1 ) 'SunAlt', -1 )
if ( if (
@@ -281,7 +278,7 @@ sub getASCenable {
my $name = $self->{name}; my $name = $self->{name};
return ReadingsVal( $name, 'ascEnable', 'none' ); return ::ReadingsVal( $name, 'ascEnable', 'none' );
} }
1; 1;

View File

@@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) # (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@@ -52,7 +52,9 @@ use FHEM::Automation::ShuttersControl::Shading qw (:ALL);
use FHEM::Automation::ShuttersControl::Rainprotection qw (:ALL); use FHEM::Automation::ShuttersControl::Rainprotection qw (:ALL);
require Exporter; require Exporter;
our @ISA = qw(Exporter); use base qw(Exporter);
# our @ISA = qw(Exporter);
our @EXPORT_OK = qw( our @EXPORT_OK = qw(
EventProcessingPartyMode EventProcessingPartyMode
EventProcessingGeneral EventProcessingGeneral
@@ -70,21 +72,6 @@ our %EXPORT_TAGS = (
], ],
); );
use GPUtils qw(GP_Import);
## Import der FHEM Funktionen
BEGIN {
GP_Import(
qw(
Log3
gettimeofday
computeAlignTime
CommandSet
ReadingsVal
RemoveInternalTimer
)
);
}
sub EventProcessingGeneral { sub EventProcessingGeneral {
my $hash = shift; my $hash = shift;
my $devname = shift; my $devname = shift;
@@ -94,8 +81,12 @@ sub EventProcessingGeneral {
if ( defined($devname) && ($devname) ) if ( defined($devname) && ($devname) )
{ # es wird lediglich der Devicename der Funktion mitgegeben wenn es sich nicht um global handelt daher hier die Unterscheidung { # es wird lediglich der Devicename der Funktion mitgegeben wenn es sich nicht um global handelt daher hier die Unterscheidung
my $windReading = $FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading // 'none'; my $windReading =
my $rainReading = $FHEM::Automation::ShuttersControl::ascDev->getRainSensorReading // 'none'; $FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading
// 'none';
my $rainReading =
$FHEM::Automation::ShuttersControl::ascDev->getRainSensorReading
// 'none';
while ( my ( $device, $deviceAttr ) = while ( my ( $device, $deviceAttr ) =
each %{ $hash->{monitoredDevs}{$devname} } ) each %{ $hash->{monitoredDevs}{$devname} } )
@@ -122,13 +113,16 @@ sub EventProcessingGeneral {
EventProcessingExternalTriggerDevice( $hash, $device, $events ) EventProcessingExternalTriggerDevice( $hash, $device, $events )
if ( $deviceAttr eq 'ASC_ExternalTrigger' ); if ( $deviceAttr eq 'ASC_ExternalTrigger' );
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($device) $FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
$device)
if ( $deviceAttr eq 'ASC_BrightnessSensor' ); if ( $deviceAttr eq 'ASC_BrightnessSensor' );
if ( if (
$deviceAttr eq 'ASC_BrightnessSensor' $deviceAttr eq 'ASC_BrightnessSensor'
&& ( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'brightness' && ( $FHEM::Automation::ShuttersControl::shutters->getDown eq
|| $FHEM::Automation::ShuttersControl::shutters->getUp eq 'brightness' ) 'brightness'
|| $FHEM::Automation::ShuttersControl::shutters->getUp eq
'brightness' )
) )
{ {
EventProcessingBrightness( $hash, $device, $events ); EventProcessingBrightness( $hash, $device, $events );
@@ -139,6 +133,10 @@ sub EventProcessingGeneral {
} }
} }
else { # alles was kein Devicenamen mit übergeben hat landet hier else { # alles was kein Devicenamen mit übergeben hat landet hier
::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessing: All without device name in the Event"
);
if ( if (
$events =~ m{^ATTR\s(.*) $events =~ m{^ATTR\s(.*)
\s(ASC_Roommate_Device|ASC_WindowRec|ASC_residentsDev|ASC_rainSensor \s(ASC_Roommate_Device|ASC_WindowRec|ASC_residentsDev|ASC_rainSensor
@@ -147,8 +145,9 @@ sub EventProcessingGeneral {
\s(.*)$}xms \s(.*)$}xms
) )
{ # wurde den Attributen unserer Rolläden ein Wert zugewiesen ? { # wurde den Attributen unserer Rolläden ein Wert zugewiesen ?
FHEM::Automation::ShuttersControl::AddNotifyDev( $hash, $3, $1, $2 ) if ( $3 ne 'none' ); FHEM::Automation::ShuttersControl::AddNotifyDev( $hash, $3, $1, $2 )
Log3( $name, 4, if ( $3 ne 'none' );
::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessing: ATTR" ); "AutoShuttersControl ($name) - EventProcessing: ATTR" );
} }
elsif ( elsif (
@@ -160,7 +159,7 @@ sub EventProcessingGeneral {
$}xms $}xms
) )
{ # wurde das Attribut unserer Rolläden gelöscht ? { # wurde das Attribut unserer Rolläden gelöscht ?
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessing: DELETEATTR" ); "AutoShuttersControl ($name) - EventProcessing: DELETEATTR" );
FHEM::Automation::ShuttersControl::DeleteNotifyDev( $hash, $1, $2 ); FHEM::Automation::ShuttersControl::DeleteNotifyDev( $hash, $1, $2 );
} }
@@ -175,11 +174,17 @@ sub EventProcessingGeneral {
(.*)?}xms (.*)?}xms
) )
{ {
FHEM::Automation::ShuttersControl::CreateSunRiseSetShuttersTimer( $hash, $2 ) ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessing: Morning and Evening Time Shedules"
);
FHEM::Automation::ShuttersControl::CreateSunRiseSetShuttersTimer(
$hash, $2 )
if ( if (
$3 ne 'ASC_Time_Up_WE_Holiday' $3 ne 'ASC_Time_Up_WE_Holiday'
|| ( $3 eq 'ASC_Time_Up_WE_Holiday' || ( $3 eq 'ASC_Time_Up_WE_Holiday'
&& $FHEM::Automation::ShuttersControl::ascDev->getSunriseTimeWeHoliday eq 'on' ) && $FHEM::Automation::ShuttersControl::ascDev
->getSunriseTimeWeHoliday eq 'on' )
); );
} }
elsif ( elsif (
@@ -189,7 +194,8 @@ sub EventProcessingGeneral {
(.*)?}xms (.*)?}xms
) )
{ {
FHEM::Automation::ShuttersControl::RenewSunRiseSetShuttersTimer($hash); FHEM::Automation::ShuttersControl::RenewSunRiseSetShuttersTimer(
$hash);
} }
elsif ( elsif (
$events =~ m{^(DELETEATTR|ATTR) $events =~ m{^(DELETEATTR|ATTR)
@@ -197,7 +203,8 @@ sub EventProcessingGeneral {
(.*)?}xms (.*)?}xms
) )
{ {
$FHEM::Automation::ShuttersControl::shutters->deleteShadingStateChangeSunny; $FHEM::Automation::ShuttersControl::shutters
->deleteShadingStateChangeSunny;
} }
if ( if (
@@ -219,11 +226,13 @@ m{^(DELETEATTR|ATTR) #global ATTR myASC ASC_tempSensor Cellar
attrEvent => 1, attrEvent => 1,
); );
FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn(\%funcHash); FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn(
\%funcHash );
} }
else { else {
CommandSet( undef, $name . ' controlShading on' ) ::CommandSet( undef, $name . ' controlShading on' )
if ( ReadingsVal( $name, 'controlShading', 'off' ) ne 'off' ); if (
::ReadingsVal( $name, 'controlShading', 'off' ) ne 'off' );
} }
} }
} }
@@ -243,9 +252,17 @@ sub EventProcessingWindowRec {
$FHEM::Automation::ShuttersControl::shutters->getWinDevReading; $FHEM::Automation::ShuttersControl::shutters->getWinDevReading;
if ( $events =~ if ( $events =~
m{.*$reading:.*?([Oo]pen(?>ed)?|[Cc]losed?|tilt(?>ed)?|true|false)}xms m{.*$reading:.*?([Oo]pen(?>ed)?|[Cc]losed?|tilt(?>ed)?|true|false)}xms )
&& IsAfterShuttersManualBlocking($shuttersDev) )
{ {
return
if (
!IsAfterShuttersManualBlocking($shuttersDev)
&& ( $FHEM::Automation::ShuttersControl::shutters->getLockOut eq
'off'
|| $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace ne 'terrace' )
);
my $match = $1; my $match = $1;
FHEM::Automation::ShuttersControl::ASC_Debug( FHEM::Automation::ShuttersControl::ASC_Debug(
@@ -260,11 +277,6 @@ sub EventProcessingWindowRec {
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev( $FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
$shuttersDev); $shuttersDev);
my $homemode =
$FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
$homemode =
$FHEM::Automation::ShuttersControl::ascDev->getResidentsStatus
if ( $homemode eq 'none' );
#### Hardware Lock der Rollläden #### Hardware Lock der Rollläden
$FHEM::Automation::ShuttersControl::shutters->setHardLockOut('off') $FHEM::Automation::ShuttersControl::shutters->setHardLockOut('off')
@@ -272,9 +284,25 @@ sub EventProcessingWindowRec {
&& $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace && $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
eq 'terrace' ); eq 'terrace' );
$FHEM::Automation::ShuttersControl::shutters->setHardLockOut('on') $FHEM::Automation::ShuttersControl::shutters->setHardLockOut('on')
if ( $match =~ m{[Oo]pen|false}xms if (
$match =~ m{[Oo]pen|false}xms
&& $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace && $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
eq 'terrace' ); eq 'terrace'
&& ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters->getOpenPos
|| $FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters->getComfortOpenPos
)
);
return
if ( !IsAfterShuttersManualBlocking($shuttersDev) );
my $homemode =
$FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
$homemode =
$FHEM::Automation::ShuttersControl::ascDev->getResidentsStatus
if ( $homemode eq 'none' );
FHEM::Automation::ShuttersControl::ASC_Debug( FHEM::Automation::ShuttersControl::ASC_Debug(
'EventProcessingWindowRec: ' 'EventProcessingWindowRec: '
@@ -303,27 +331,33 @@ sub EventProcessingWindowRec {
$FHEM::Automation::ShuttersControl::shutters->getComfortOpenPos $FHEM::Automation::ShuttersControl::shutters->getComfortOpenPos
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus == || ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters->getOpenPos $FHEM::Automation::ShuttersControl::shutters->getOpenPos
&& $FHEM::Automation::ShuttersControl::shutters->getLastDrive && $FHEM::Automation::ShuttersControl::shutters
eq 'ventilate - window open' ->getLastDrive eq 'ventilate - window open'
&& $FHEM::Automation::ShuttersControl::shutters->getSubTyp && $FHEM::Automation::ShuttersControl::shutters->getSubTyp
eq 'twostate' eq 'twostate'
&& $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen && $FHEM::Automation::ShuttersControl::shutters
eq 'on' ) ->getVentilateOpen eq 'on' )
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus == || ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getPrivacyDownPos ->getPrivacyDownPos
&& $FHEM::Automation::ShuttersControl::shutters && $FHEM::Automation::ShuttersControl::shutters
->getPrivacyDownStatus != 2 ->getPrivacyDownStatus != 2
&& !$FHEM::Automation::ShuttersControl::shutters->getIsDay ) && !$FHEM::Automation::ShuttersControl::shutters->getIsDay )
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus == || (
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters->getStatus ==
->getOpenPos $FHEM::Automation::ShuttersControl::shutters->getOpenPos
&& ( $FHEM::Automation::ShuttersControl::shutters && ( $FHEM::Automation::ShuttersControl::shutters
->getLockOut ne 'off' ->getLockOut ne 'off'
|| $FHEM::Automation::ShuttersControl::shutters || $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'terrace' ->getShuttersPlace eq 'terrace' )
&& !$FHEM::Automation::ShuttersControl::shutters->getIsDay
) )
&& !$FHEM::Automation::ShuttersControl::shutters->getIsDay ) || ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters->getOpenPos
&& $FHEM::Automation::ShuttersControl::shutters
->getDelayCmd ne 'none'
&& $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'terrace' )
) )
&& ( $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen && ( $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen
eq 'on' eq 'on'
@@ -364,13 +398,19 @@ sub EventProcessingWindowRec {
elsif ( elsif (
!$FHEM::Automation::ShuttersControl::shutters !$FHEM::Automation::ShuttersControl::shutters
->getIfInShading ->getIfInShading
&& ( $FHEM::Automation::ShuttersControl::shutters->getStatus && (
$FHEM::Automation::ShuttersControl::shutters->getStatus
!= $FHEM::Automation::ShuttersControl::shutters != $FHEM::Automation::ShuttersControl::shutters
->getOpenPos ->getOpenPos
|| $FHEM::Automation::ShuttersControl::shutters || $FHEM::Automation::ShuttersControl::shutters
->getStatus != ->getStatus !=
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getLastManPos ) ->getLastManPos
|| ( $FHEM::Automation::ShuttersControl::shutters
->getDelayCmd ne 'none'
&& $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'terrace' )
)
) )
{ {
if ( $FHEM::Automation::ShuttersControl::shutters if ( $FHEM::Automation::ShuttersControl::shutters
@@ -394,6 +434,13 @@ sub EventProcessingWindowRec {
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->setDriveCmd( ->setDriveCmd(
( (
$FHEM::Automation::ShuttersControl::shutters
->getDelayCmd ne 'none'
&& $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'terrace'
? $FHEM::Automation::ShuttersControl::shutters
->getDelayCmd
: (
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getVentilatePosAfterDayClosed eq 'open' ->getVentilatePosAfterDayClosed eq 'open'
? $FHEM::Automation::ShuttersControl::shutters ? $FHEM::Automation::ShuttersControl::shutters
@@ -401,19 +448,22 @@ sub EventProcessingWindowRec {
: $FHEM::Automation::ShuttersControl::shutters : $FHEM::Automation::ShuttersControl::shutters
->getLastManPos ->getLastManPos
) )
)
); );
} }
} }
} }
elsif ( elsif (
!$FHEM::Automation::ShuttersControl::shutters->getIsDay !$FHEM::Automation::ShuttersControl::shutters->getIsDay
&& $FHEM::Automation::ShuttersControl::shutters->getModeDown eq 'roommate' && $FHEM::Automation::ShuttersControl::shutters->getModeDown eq
&& ( $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus eq 'home' 'roommate'
|| $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus eq 'awoken' ) && ( $FHEM::Automation::ShuttersControl::shutters
->getRoommatesStatus eq 'home'
|| $FHEM::Automation::ShuttersControl::shutters
->getRoommatesStatus eq 'awoken' )
) )
{ {
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
->setDriveCmd(
( (
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getVentilatePosAfterDayClosed eq 'open' ->getVentilatePosAfterDayClosed eq 'open'
@@ -477,9 +527,16 @@ sub EventProcessingWindowRec {
) )
&& $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen && $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen
eq 'on' eq 'on'
&& $FHEM::Automation::ShuttersControl::shutters && (
$FHEM::Automation::ShuttersControl::shutters
->getQueryShuttersPos( ->getQueryShuttersPos(
$FHEM::Automation::ShuttersControl::shutters->getVentilatePos $FHEM::Automation::ShuttersControl::shutters
->getVentilatePos
)
|| ( $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'terrace'
&& $FHEM::Automation::ShuttersControl::shutters->getSubTyp
eq 'twostate' )
) )
) )
{ {
@@ -510,7 +567,7 @@ sub EventProcessingWindowRec {
if ( if (
$FHEM::Automation::ShuttersControl::ascDev $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlComfort eq 'on' ->getAutoShuttersControlComfort eq 'on'
and $FHEM::Automation::ShuttersControl::shutters && $FHEM::Automation::ShuttersControl::shutters
->getQueryShuttersPos( ->getQueryShuttersPos(
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getComfortOpenPos ->getComfortOpenPos
@@ -536,7 +593,7 @@ sub EventProcessingWindowRec {
$setLastDrive = 'ventilate - window open'; $setLastDrive = 'ventilate - window open';
} }
if ( defined($posValue) && $posValue ) { if ( defined($posValue) ) {
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
$setLastDrive); $setLastDrive);
$FHEM::Automation::ShuttersControl::shutters->setNoDelay(1); $FHEM::Automation::ShuttersControl::shutters->setNoDelay(1);
@@ -562,14 +619,15 @@ sub EventProcessingRoommate {
$FHEM::Automation::ShuttersControl::shutters->getRoommatesReading; $FHEM::Automation::ShuttersControl::shutters->getRoommatesReading;
if ( $events =~ m{$reading:\s(absent|gotosleep|asleep|awoken|home)}xms ) { if ( $events =~ m{$reading:\s(absent|gotosleep|asleep|awoken|home)}xms ) {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate: " "AutoShuttersControl ($name) - EventProcessingRoommate: "
. $FHEM::Automation::ShuttersControl::shutters . $FHEM::Automation::ShuttersControl::shutters
->getRoommatesReading ); ->getRoommatesReading );
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate: $shuttersDev und Events $events" "AutoShuttersControl ($name) - EventProcessingRoommate: $shuttersDev und Events $events"
); );
my $event = $1;
my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp; my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp;
my $getModeDown = my $getModeDown =
$FHEM::Automation::ShuttersControl::shutters->getModeDown; $FHEM::Automation::ShuttersControl::shutters->getModeDown;
@@ -577,21 +635,30 @@ sub EventProcessingRoommate {
$FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus; $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
my $getRoommatesLastStatus = my $getRoommatesLastStatus =
$FHEM::Automation::ShuttersControl::shutters->getRoommatesLastStatus; $FHEM::Automation::ShuttersControl::shutters->getRoommatesLastStatus;
my $event = $1; my $getUp = $FHEM::Automation::ShuttersControl::shutters->getUp;
my $posValue = $FHEM::Automation::ShuttersControl::shutters->getStatus; my $getDown = $FHEM::Automation::ShuttersControl::shutters->getDown;
my $getIsDay = $FHEM::Automation::ShuttersControl::shutters->getIsDay;
my $posValue = $FHEM::Automation::ShuttersControl::shutters
->getStatus; # !!! ACHTUNG!!!
if ( if (
( $event eq 'home' || $event eq 'awoken' ) ( $event eq 'home' || $event eq 'awoken' )
&& ( $getRoommatesStatus eq 'home' && ( $getRoommatesStatus eq 'home'
|| $getRoommatesStatus eq 'awoken' ) || $getRoommatesStatus eq 'awoken' )
&& ( $FHEM::Automation::ShuttersControl::ascDev && (
$FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlMorning eq 'on' ->getAutoShuttersControlMorning eq 'on'
|| $FHEM::Automation::ShuttersControl::shutters->getUp eq || (
'roommate' ) $getUp eq 'roommate'
&& ( $getRoommatesLastStatus eq 'asleep'
|| $getRoommatesLastStatus ne 'awoken' )
)
)
&& IsAfterShuttersManualBlocking($shuttersDev) && IsAfterShuttersManualBlocking($shuttersDev)
) )
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate_1: $shuttersDev und Events $events" "AutoShuttersControl ($name) - EventProcessingRoommate_1: $shuttersDev und Events $events"
); );
if ( if (
@@ -600,26 +667,24 @@ sub EventProcessingRoommate {
$getRoommatesLastStatus eq 'asleep' $getRoommatesLastStatus eq 'asleep'
&& ( $FHEM::Automation::ShuttersControl::shutters && ( $FHEM::Automation::ShuttersControl::shutters
->getModeUp eq 'always' ->getModeUp eq 'always'
or $FHEM::Automation::ShuttersControl::shutters || $FHEM::Automation::ShuttersControl::shutters
->getModeUp eq $event ) ->getModeUp eq $event )
) )
|| ( || (
$getRoommatesLastStatus eq 'awoken' $getRoommatesLastStatus eq 'awoken'
&& ( $FHEM::Automation::ShuttersControl::shutters && ( $FHEM::Automation::ShuttersControl::shutters
->getModeUp eq 'always' ->getModeUp eq 'always'
or $FHEM::Automation::ShuttersControl::shutters || $FHEM::Automation::ShuttersControl::shutters
->getModeUp eq $event ) ->getModeUp eq $event )
) )
) )
&& ( $FHEM::Automation::ShuttersControl::shutters->getIsDay && ( $getIsDay
|| $FHEM::Automation::ShuttersControl::shutters->getUp eq || $getUp eq 'roommate' )
'roommate' )
&& ( IsAfterShuttersTimeBlocking($shuttersDev) && ( IsAfterShuttersTimeBlocking($shuttersDev)
|| $FHEM::Automation::ShuttersControl::shutters->getUp eq || $getUp eq 'roommate' )
'roommate' )
) )
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate_2: $shuttersDev und Events $events" "AutoShuttersControl ($name) - EventProcessingRoommate_2: $shuttersDev und Events $events"
); );
@@ -657,7 +722,7 @@ sub EventProcessingRoommate {
) )
{ {
if ( if (
$FHEM::Automation::ShuttersControl::shutters->getIsDay $getIsDay
&& $FHEM::Automation::ShuttersControl::shutters && $FHEM::Automation::ShuttersControl::shutters
->getIfInShading ->getIfInShading
&& $FHEM::Automation::ShuttersControl::shutters->getStatus && $FHEM::Automation::ShuttersControl::shutters->getStatus
@@ -677,12 +742,11 @@ sub EventProcessingRoommate {
ShadingProcessingDriveCommand( $hash, $shuttersDev, 1 ); ShadingProcessingDriveCommand( $hash, $shuttersDev, 1 );
} }
elsif ( elsif (
!$FHEM::Automation::ShuttersControl::shutters->getIsDay !$getIsDay
&& IsAfterShuttersTimeBlocking($shuttersDev) && IsAfterShuttersTimeBlocking($shuttersDev)
&& ( $getModeDown eq 'home' && ( $getModeDown eq 'home'
|| $getModeDown eq 'always' ) || $getModeDown eq 'always' )
&& $FHEM::Automation::ShuttersControl::shutters->getDown ne && $getDown ne 'roommate'
'roommate'
) )
{ {
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
@@ -720,11 +784,7 @@ sub EventProcessingRoommate {
$hash, $shuttersDev, $posValue ); $hash, $shuttersDev, $posValue );
} }
elsif ( elsif (
( ( $getIsDay || $getUp eq 'roommate' )
$FHEM::Automation::ShuttersControl::shutters->getIsDay
|| $FHEM::Automation::ShuttersControl::shutters->getUp
eq 'roommate'
)
&& IsAfterShuttersTimeBlocking($shuttersDev) && IsAfterShuttersTimeBlocking($shuttersDev)
&& ( $getModeUp eq 'home' && ( $getModeUp eq 'home'
|| $getModeUp eq 'always' ) || $getModeUp eq 'always' )
@@ -806,11 +866,9 @@ sub EventProcessingRoommate {
'absent' 'absent'
&& ( $FHEM::Automation::ShuttersControl::ascDev && ( $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlEvening eq 'on' ->getAutoShuttersControlEvening eq 'on'
|| $FHEM::Automation::ShuttersControl::shutters->getDown eq || $getDown eq 'roommate' )
'roommate' )
&& ( IsAfterShuttersManualBlocking($shuttersDev) && ( IsAfterShuttersManualBlocking($shuttersDev)
|| $FHEM::Automation::ShuttersControl::shutters->getDown eq || $getDown eq 'roommate' )
'roommate' )
) )
{ {
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
@@ -840,9 +898,8 @@ sub EventProcessingRoommate {
} }
elsif ( elsif (
$event eq 'absent' $event eq 'absent'
&& ( !$FHEM::Automation::ShuttersControl::shutters->getIsDay && ( !$getIsDay
|| $FHEM::Automation::ShuttersControl::shutters->getDown eq || $getDown eq 'roommate'
'roommate'
|| $FHEM::Automation::ShuttersControl::shutters->getShadingMode || $FHEM::Automation::ShuttersControl::shutters->getShadingMode
eq 'absent' eq 'absent'
|| $FHEM::Automation::ShuttersControl::shutters->getModeUp eq || $FHEM::Automation::ShuttersControl::shutters->getModeUp eq
@@ -851,16 +908,12 @@ sub EventProcessingRoommate {
'absent' ) 'absent' )
) )
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate absent: $shuttersDev" "AutoShuttersControl ($name) - EventProcessingRoommate absent: $shuttersDev"
); );
if ( if (
( $getIsDay
$FHEM::Automation::ShuttersControl::shutters->getIsDay
|| $FHEM::Automation::ShuttersControl::shutters->getUp eq
'roommate'
)
&& $FHEM::Automation::ShuttersControl::shutters->getIfInShading && $FHEM::Automation::ShuttersControl::shutters->getIfInShading
&& !$FHEM::Automation::ShuttersControl::shutters && !$FHEM::Automation::ShuttersControl::shutters
->getQueryShuttersPos( ->getQueryShuttersPos(
@@ -870,7 +923,7 @@ sub EventProcessingRoommate {
eq 'absent' eq 'absent'
) )
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate Shading: $shuttersDev" "AutoShuttersControl ($name) - EventProcessingRoommate Shading: $shuttersDev"
); );
@@ -882,17 +935,11 @@ sub EventProcessingRoommate {
$FHEM::Automation::ShuttersControl::shutters->getShadingPos $FHEM::Automation::ShuttersControl::shutters->getShadingPos
); );
} }
elsif ( elsif (( !$getIsDay || $getDown eq 'roommate' )
(
!$FHEM::Automation::ShuttersControl::shutters->getIsDay
|| $FHEM::Automation::ShuttersControl::shutters->getDown eq
'roommate'
)
&& $getModeDown eq 'absent' && $getModeDown eq 'absent'
&& $getRoommatesStatus eq 'absent' && $getRoommatesStatus eq 'absent' )
)
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate Down: $shuttersDev" "AutoShuttersControl ($name) - EventProcessingRoommate Down: $shuttersDev"
); );
@@ -904,12 +951,12 @@ sub EventProcessingRoommate {
$FHEM::Automation::ShuttersControl::shutters->getClosedPos $FHEM::Automation::ShuttersControl::shutters->getClosedPos
); );
} }
elsif ($FHEM::Automation::ShuttersControl::shutters->getIsDay elsif ($getIsDay
&& $FHEM::Automation::ShuttersControl::shutters->getModeUp eq && $FHEM::Automation::ShuttersControl::shutters->getModeUp eq
'absent' 'absent'
&& $getRoommatesStatus eq 'absent' ) && $getRoommatesStatus eq 'absent' )
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate Up: $shuttersDev" "AutoShuttersControl ($name) - EventProcessingRoommate Up: $shuttersDev"
); );
@@ -920,7 +967,7 @@ sub EventProcessingRoommate {
$FHEM::Automation::ShuttersControl::shutters->getOpenPos ); $FHEM::Automation::ShuttersControl::shutters->getOpenPos );
} }
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate NICHTS: $shuttersDev" "AutoShuttersControl ($name) - EventProcessingRoommate NICHTS: $shuttersDev"
); );
} }
@@ -957,6 +1004,7 @@ sub EventProcessingResidents {
&& $FHEM::Automation::ShuttersControl::shutters && $FHEM::Automation::ShuttersControl::shutters
->getSelfDefenseMode ne 'off' ->getSelfDefenseMode ne 'off'
|| $getModeDown eq 'absent' || $getModeDown eq 'absent'
# || $getModeDown eq 'always' ) Wird zu Testzwecken auskommentiert, siehe #90 Github # || $getModeDown eq 'always' ) Wird zu Testzwecken auskommentiert, siehe #90 Github
|| ( $FHEM::Automation::ShuttersControl::shutters || ( $FHEM::Automation::ShuttersControl::shutters
->getShadingMode eq 'absent' ->getShadingMode eq 'absent'
@@ -974,13 +1022,17 @@ sub EventProcessingResidents {
&& ( && (
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getSelfDefenseMode eq 'absent' ->getSelfDefenseMode eq 'absent'
|| ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2 || (
CheckIfShuttersWindowRecOpen($shuttersDev) == 2
&& $FHEM::Automation::ShuttersControl::shutters && $FHEM::Automation::ShuttersControl::shutters
->getSelfDefenseMode eq 'gone' ->getSelfDefenseMode eq 'gone'
&& $FHEM::Automation::ShuttersControl::shutters && ( $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'terrace' ->getShuttersPlace eq 'terrace'
|| $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'EG_window' )
&& $FHEM::Automation::ShuttersControl::shutters && $FHEM::Automation::ShuttersControl::shutters
->getSelfDefenseMode ne 'off' ) ->getSelfDefenseMode ne 'off'
)
) )
) )
{ {
@@ -1031,11 +1083,14 @@ sub EventProcessingResidents {
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getLastPos ); ->getLastPos );
} }
elsif ( $getModeDown eq 'absent' # || $getModeDown eq 'always' ) Wird zu Testzwecken auskommentiert, siehe #90 Github elsif (
$getModeDown eq
'absent' # || $getModeDown eq 'always' ) Wird zu Testzwecken auskommentiert, siehe #90 Github
&& !$FHEM::Automation::ShuttersControl::shutters->getIsDay && !$FHEM::Automation::ShuttersControl::shutters->getIsDay
&& IsAfterShuttersTimeBlocking($shuttersDev) && IsAfterShuttersTimeBlocking($shuttersDev)
&& $FHEM::Automation::ShuttersControl::shutters && $FHEM::Automation::ShuttersControl::shutters
->getRoommatesStatus eq 'none' ) ->getRoommatesStatus eq 'none'
)
{ {
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'residents absent'); 'residents absent');
@@ -1095,6 +1150,8 @@ sub EventProcessingResidents {
->getRoommatesStatus eq 'none' ->getRoommatesStatus eq 'none'
&& ( $getModeDown eq 'home' && ( $getModeDown eq 'home'
|| $getModeDown eq 'always' ) || $getModeDown eq 'always' )
&& $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlEvening eq 'on'
&& $getResidentsLastStatus ne 'asleep' && $getResidentsLastStatus ne 'asleep'
&& $getResidentsLastStatus ne 'awoken' && $getResidentsLastStatus ne 'awoken'
&& IsAfterShuttersTimeBlocking($shuttersDev) && IsAfterShuttersTimeBlocking($shuttersDev)
@@ -1178,7 +1235,7 @@ sub EventProcessingResidents {
->getSelfDefenseState ->getSelfDefenseState
) )
{ {
RemoveInternalTimer( ::RemoveInternalTimer(
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getSelfDefenseAbsentTimerhash ) ->getSelfDefenseAbsentTimerhash )
if ( $getResidentsLastStatus eq 'absent' if ( $getResidentsLastStatus eq 'absent'
@@ -1242,6 +1299,8 @@ sub EventProcessingResidents {
->getRoommatesStatus eq 'none' ->getRoommatesStatus eq 'none'
&& ( $getModeUp eq 'home' && ( $getModeUp eq 'home'
|| $getModeUp eq 'always' ) || $getModeUp eq 'always' )
&& $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlMorning eq 'on'
&& IsAfterShuttersTimeBlocking($shuttersDev) && IsAfterShuttersTimeBlocking($shuttersDev)
&& !$FHEM::Automation::ShuttersControl::shutters->getIfInShading && !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
&& !$FHEM::Automation::ShuttersControl::shutters && !$FHEM::Automation::ShuttersControl::shutters
@@ -1304,6 +1363,7 @@ sub EventProcessingWind {
my $name = $hash->{NAME}; my $name = $hash->{NAME};
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev); $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
my $targetPos = $FHEM::Automation::ShuttersControl::shutters->getLastPos;
my $reading = my $reading =
$FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading $FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading
@@ -1355,29 +1415,38 @@ sub EventProcessingWind {
{ {
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'wind un-protected'); 'wind un-protected');
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
( if ( $FHEM::Automation::ShuttersControl::shutters->getIsDay
$FHEM::Automation::ShuttersControl::shutters->getIsDay && !$FHEM::Automation::ShuttersControl::shutters
? $FHEM::Automation::ShuttersControl::shutters ->getIfInShading
->getLastPos && $FHEM::Automation::ShuttersControl::shutters->getLastPos
: ( == $FHEM::Automation::ShuttersControl::shutters
->getShadingPos )
{
$targetPos =
$FHEM::Automation::ShuttersControl::shutters->getOpenPos;
}
else {
$targetPos =
$FHEM::Automation::ShuttersControl::shutters->getLastPos;
}
if ( !$FHEM::Automation::ShuttersControl::shutters->getIsDay ) {
$targetPos = (
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getPrivacyDownStatus == 2 ->getPrivacyDownStatus == 2
? $FHEM::Automation::ShuttersControl::shutters ? $FHEM::Automation::ShuttersControl::shutters
->getPrivacyDownPos ->getPrivacyDownPos
: (
$FHEM::Automation::ShuttersControl::shutters
->getSleepPos > 0
? $FHEM::Automation::ShuttersControl::shutters
->getSleepPos
: $FHEM::Automation::ShuttersControl::shutters : $FHEM::Automation::ShuttersControl::shutters
->getClosedPos ->getClosedPos
)
)
)
); );
}
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->setWindProtectionStatus('unprotected'); ->setWindProtectionStatus('unprotected');
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
$targetPos);
} }
FHEM::Automation::ShuttersControl::ASC_Debug( FHEM::Automation::ShuttersControl::ASC_Debug(
@@ -1431,8 +1500,8 @@ sub EventProcessingBrightness {
( (
( (
( (
int( gettimeofday() / 86400 ) == int( int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpEarly ->getTimeUpEarly
@@ -1453,8 +1522,8 @@ sub EventProcessingBrightness {
) )
) )
|| ( || (
int( gettimeofday() / 86400 ) == int( int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpWeHoliday ->getTimeUpWeHoliday
@@ -1467,8 +1536,8 @@ sub EventProcessingBrightness {
->getTimeUpWeHoliday ne '01:25' ->getTimeUpWeHoliday ne '01:25'
) )
) )
&& int( gettimeofday() / 86400 ) == int( && int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpLate ->getTimeUpLate
@@ -1477,8 +1546,8 @@ sub EventProcessingBrightness {
|| ( || (
( (
int( gettimeofday() / 86400 ) != int( int( ::gettimeofday() / 86400 ) != int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpEarly ->getTimeUpEarly
@@ -1499,8 +1568,8 @@ sub EventProcessingBrightness {
) )
) )
|| ( || (
int( gettimeofday() / 86400 ) != int( int( ::gettimeofday() / 86400 ) != int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpWeHoliday ->getTimeUpWeHoliday
@@ -1513,8 +1582,8 @@ sub EventProcessingBrightness {
->getTimeUpWeHoliday ne '01:25' ->getTimeUpWeHoliday ne '01:25'
) )
) )
&& int( gettimeofday() / 86400 ) != int( && int( ::gettimeofday() / 86400 ) != int(
com