testing #87
| @@ -1,8 +1,8 @@ | |||||||
| ############################################################################### | ############################################################################### | ||||||
| # | # | ||||||
| # Developed with Kate | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
| @@ -49,26 +49,17 @@ use utf8; | |||||||
| use FHEM::Meta; | use FHEM::Meta; | ||||||
|  |  | ||||||
| use FHEM::Automation::ShuttersControl; | use FHEM::Automation::ShuttersControl; | ||||||
| use GPUtils qw(GP_Import GP_Export); | use GPUtils qw(GP_Import); | ||||||
|  |  | ||||||
| ## Import der FHEM Funktionen | ## Import der FHEM Funktionen | ||||||
| #-- Run before package compilation | #-- Run before package compilation | ||||||
| BEGIN { | BEGIN { | ||||||
|     # Import from main context |     # Import from main context | ||||||
|     GP_Import( |     GP_Import(qw(readingFnAttributes)); | ||||||
|         qw( |  | ||||||
|           readingFnAttributes |  | ||||||
|           ) |  | ||||||
|     ); |  | ||||||
|  |  | ||||||
|     #-- Export to main context with different name |  | ||||||
|     GP_Export( |  | ||||||
|         qw( |  | ||||||
|           Initialize |  | ||||||
|           ) |  | ||||||
|     ); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | sub ::AutoShuttersControl_Initialize { goto &Initialize } | ||||||
|  |  | ||||||
| sub Initialize { | sub Initialize { | ||||||
|     my $hash = shift; |     my $hash = shift; | ||||||
|  |  | ||||||
| @@ -81,7 +72,7 @@ sub Initialize { | |||||||
|     $hash->{UndefFn}    = \&FHEM::Automation::ShuttersControl::Undef; |     $hash->{UndefFn}    = \&FHEM::Automation::ShuttersControl::Undef; | ||||||
|     $hash->{DeleteFn}   = \&FHEM::Automation::ShuttersControl::Delete; |     $hash->{DeleteFn}   = \&FHEM::Automation::ShuttersControl::Delete; | ||||||
|     $hash->{ShutdownFn} = \&FHEM::Automation::ShuttersControl::Shutdown; |     $hash->{ShutdownFn} = \&FHEM::Automation::ShuttersControl::Shutdown; | ||||||
|     $hash->{AttrList}   = |     $hash->{AttrList} = | ||||||
|         'ASC_tempSensor ' |         'ASC_tempSensor ' | ||||||
|       . 'ASC_brightnessDriveUpDown ' |       . 'ASC_brightnessDriveUpDown ' | ||||||
|       . 'ASC_autoShuttersControlMorning:on,off ' |       . 'ASC_autoShuttersControlMorning:on,off ' | ||||||
| @@ -416,11 +407,11 @@ __END__ | |||||||
|                 after the last manual operation in seconds. Defaults to 1200 (20 minutes). |                 after the last manual operation in seconds. Defaults to 1200 (20 minutes). | ||||||
|             </li> |             </li> | ||||||
|             <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforDayOpen"></a> |             <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforDayOpen"></a> | ||||||
|             <li><strong>ASC_BlockingTime_beforeDayOpen</strong> - Time in which no closing operation is made by |             <li><strong>ASC_BlockingTime_beforDayOpen</strong> - Time in which no closing operation is made by | ||||||
|                 <abbr>ASC</abbr> after opening at the morning in seconds. Defaults to 3600 (one hour). |                 <abbr>ASC</abbr> after opening at the morning in seconds. Defaults to 3600 (one hour). | ||||||
|             </li> |             </li> | ||||||
|             <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforeNightClose"></a> |             <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforNightClose"></a> | ||||||
|             <li><strong>ASC_BlockingTime_beforeNightClose</strong> - Time in which no closing operation is made by |             <li><strong>ASC_BlockingTime_beforNightClose</strong> - Time in which no closing operation is made by | ||||||
|                 <abbr>ASC</abbr> before closing at the evening in seconds. Defaults to 3600 (one hour). |                 <abbr>ASC</abbr> before closing at the evening in seconds. Defaults to 3600 (one hour). | ||||||
|             </li> |             </li> | ||||||
|             <a id="AutoShuttersControl-attr-ASC_BrightnessSensor"></a> |             <a id="AutoShuttersControl-attr-ASC_BrightnessSensor"></a> | ||||||
| @@ -1041,10 +1032,10 @@ __END__ | |||||||
|             <li><strong>ASC_AutoAstroModeMorningHorizon</strong> - Höhe über Horizont,a wenn beim Attribut ASC_autoAstroModeMorning HORIZON ausgewählt (default: none)</li> |             <li><strong>ASC_AutoAstroModeMorningHorizon</strong> - Höhe über Horizont,a wenn beim Attribut ASC_autoAstroModeMorning HORIZON ausgewählt (default: none)</li> | ||||||
|             <a id="AutoShuttersControl-attr-ASC_BlockingTime_afterManual"></a> |             <a id="AutoShuttersControl-attr-ASC_BlockingTime_afterManual"></a> | ||||||
|             <li><strong>ASC_BlockingTime_afterManual</strong> - wie viel Sekunden soll die Automatik nach einer manuellen Fahrt aussetzen. (default: 1200)</li> |             <li><strong>ASC_BlockingTime_afterManual</strong> - wie viel Sekunden soll die Automatik nach einer manuellen Fahrt aussetzen. (default: 1200)</li> | ||||||
|             <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforeDayOpen"></a> |             <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforDayOpen"></a> | ||||||
|             <li><strong>ASC_BlockingTime_beforeDayOpen</strong> - wie viel Sekunden vor dem morgendlichen öffnen soll keine schließen Fahrt mehr stattfinden. (default: 3600)</li> |             <li><strong>ASC_BlockingTime_beforDayOpen</strong> - wie viel Sekunden vor dem morgendlichen öffnen soll keine schließen Fahrt mehr stattfinden. (default: 3600)</li> | ||||||
|             <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforeNightClose"></a> |             <a id="AutoShuttersControl-attr-ASC_BlockingTime_beforNightClose"></a> | ||||||
|             <li><strong>ASC_BlockingTime_beforeNightClose</strong> - wie viel Sekunden vor dem nächtlichen schließen soll keine öffnen Fahrt mehr stattfinden. (default: 3600)</li> |             <li><strong>ASC_BlockingTime_beforNightClose</strong> - wie viel Sekunden vor dem nächtlichen schließen soll keine öffnen Fahrt mehr stattfinden. (default: 3600)</li> | ||||||
|             <a id="AutoShuttersControl-attr-ASC_BrightnessSensor"></a> |             <a id="AutoShuttersControl-attr-ASC_BrightnessSensor"></a> | ||||||
|             <li><strong>ASC_BrightnessSensor - DEVICE[:READING] WERT-MORGENS:WERT-ABENDS</strong> / 'Sensorname[:brightness [400:800]]' Angaben zum Helligkeitssensor mit (Readingname, optional) für die Beschattung und dem Fahren der Rollladen nach brightness und den optionalen Brightnesswerten für Sonnenauf- und Sonnenuntergang. (default: none)</li> |             <li><strong>ASC_BrightnessSensor - DEVICE[:READING] WERT-MORGENS:WERT-ABENDS</strong> / 'Sensorname[:brightness [400:800]]' Angaben zum Helligkeitssensor mit (Readingname, optional) für die Beschattung und dem Fahren der Rollladen nach brightness und den optionalen Brightnesswerten für Sonnenauf- und Sonnenuntergang. (default: none)</li> | ||||||
|             <a id="AutoShuttersControl-attr-ASC_Down"></a> |             <a id="AutoShuttersControl-attr-ASC_Down"></a> | ||||||
| @@ -1465,7 +1456,7 @@ __END__ | |||||||
|   ], |   ], | ||||||
|   "release_status": "stable", |   "release_status": "stable", | ||||||
|   "license": "GPL_2", |   "license": "GPL_2", | ||||||
|   "version": "v0.10.19", |   "version": "v0.10.20", | ||||||
|   "author": [ |   "author": [ | ||||||
|     "Marko Oldenburg <fhemdevelopment@cooltux.net>" |     "Marko Oldenburg <fhemdevelopment@cooltux.net>" | ||||||
|   ], |   ], | ||||||
| @@ -1479,7 +1470,7 @@ __END__ | |||||||
|     "runtime": { |     "runtime": { | ||||||
|       "requires": { |       "requires": { | ||||||
|         "FHEM": 5.00918799, |         "FHEM": 5.00918799, | ||||||
|         "perl": 5.016,  |         "perl": 5.023,  | ||||||
|         "Meta": 0, |         "Meta": 0, | ||||||
|         "JSON": 0, |         "JSON": 0, | ||||||
|         "Date::Parse": 0 |         "Date::Parse": 0 | ||||||
|   | |||||||
| @@ -1,16 +1,16 @@ | |||||||
| UPD 2021-11-14_13:42:55 115685 FHEM/73_AutoShuttersControl.pm | UPD 2022-01-01_09:39:12 115601 FHEM/73_AutoShuttersControl.pm | ||||||
| UPD 2021-11-14_13:40:41 75264 lib/FHEM/Automation/ShuttersControl.pm | UPD 2022-01-01_09:25:20 75212 lib/FHEM/Automation/ShuttersControl.pm | ||||||
| UPD 2021-10-09_07:12:54 2657 lib/FHEM/Automation/ShuttersControl/Dev.pm | UPD 2022-01-01_09:25:20 2693 lib/FHEM/Automation/ShuttersControl/Dev.pm | ||||||
| UPD 2021-10-09_07:12:54 2494 lib/FHEM/Automation/ShuttersControl/Roommate.pm | UPD 2022-01-01_09:25:20 2405 lib/FHEM/Automation/ShuttersControl/Roommate.pm | ||||||
| UPD 2021-10-24_07:33:53 31900 lib/FHEM/Automation/ShuttersControl/Shutters.pm | UPD 2022-01-01_09:25:20 32020 lib/FHEM/Automation/ShuttersControl/Shutters.pm | ||||||
| UPD 2021-10-09_07:12:54 25333 lib/FHEM/Automation/ShuttersControl/Shading.pm | UPD 2022-01-01_09:25:20 25426 lib/FHEM/Automation/ShuttersControl/Shading.pm | ||||||
| UPD 2021-11-10_20:11:14 110681 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm | UPD 2022-01-01_09:25:20 112138 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm | ||||||
| UPD 2021-11-14_13:37:27 40094 lib/FHEM/Automation/ShuttersControl/Helper.pm | UPD 2022-01-01_09:25:20 40296 lib/FHEM/Automation/ShuttersControl/Helper.pm | ||||||
| UPD 2021-10-09_07:12:54 2173 lib/FHEM/Automation/ShuttersControl/Window.pm | UPD 2022-01-01_09:25:20 2211 lib/FHEM/Automation/ShuttersControl/Window.pm | ||||||
| UPD 2021-10-09_07:12:54 11739 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm | UPD 2022-01-01_09:25:20 11706 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm | ||||||
| UPD 2021-10-09_07:12:54 7249 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm | UPD 2022-01-01_09:25:20 7265 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm | ||||||
| UPD 2021-10-27_08:50:46 52649 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm | UPD 2022-01-01_09:25:20 52751 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm | ||||||
| UPD 2021-10-09_07:12:54 2901 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm | UPD 2022-01-01_09:25:20 2799 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm | ||||||
| UPD 2021-10-09_07:12:54 3978 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm | UPD 2022-01-01_09:25:20 3887 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm | ||||||
| UPD 2021-10-09_07:12:54 2286 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm | UPD 2022-01-01_09:25:20 2200 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm | ||||||
| UPD 2021-10-27_08:50:46 6716 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm | UPD 2022-01-01_09:25:20 7087 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| ############################################################################### | ############################################################################### | ||||||
| # | # | ||||||
| # Developed with Kate | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2021 Copyright: Marko Oldenburg (fhemsupport@cooltux.net) | #  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
| @@ -76,7 +76,8 @@ use Date::Parse; | |||||||
| use FHEM::Automation::ShuttersControl::Shutters; | use FHEM::Automation::ShuttersControl::Shutters; | ||||||
| use FHEM::Automation::ShuttersControl::Dev; | use FHEM::Automation::ShuttersControl::Dev; | ||||||
|  |  | ||||||
| use FHEM::Automation::ShuttersControl::Shading qw (CheckASC_ConditionsForShadingFn); | use FHEM::Automation::ShuttersControl::Shading | ||||||
|  |   qw (CheckASC_ConditionsForShadingFn); | ||||||
| use FHEM::Automation::ShuttersControl::EventProcessingFunctions qw (:ALL); | use FHEM::Automation::ShuttersControl::EventProcessingFunctions qw (:ALL); | ||||||
| use FHEM::Automation::ShuttersControl::Helper qw (:ALL); | use FHEM::Automation::ShuttersControl::Helper qw (:ALL); | ||||||
|  |  | ||||||
| @@ -86,27 +87,20 @@ eval { | |||||||
|     require JSON::MaybeXS; |     require JSON::MaybeXS; | ||||||
|     import JSON::MaybeXS qw( decode_json encode_json ); |     import JSON::MaybeXS qw( decode_json encode_json ); | ||||||
|     1; |     1; | ||||||
| }; | } or do { | ||||||
|  |  | ||||||
| if ($@) { |  | ||||||
|     $@ = undef; |  | ||||||
|  |  | ||||||
|     # try to use JSON wrapper |     # try to use JSON wrapper | ||||||
|     #   for chance of better performance |     #   for chance of better performance | ||||||
|     eval { |     eval { | ||||||
|  |  | ||||||
|         # JSON preference order |         # JSON preference order | ||||||
|         local $ENV{PERL_JSON_BACKEND} = |         local $ENV{PERL_JSON_BACKEND} = | ||||||
|           'Cpanel::JSON::XS,JSON::XS,JSON::PP,JSON::backportPP' |           'Cpanel::JSON::XS,JSON::XS,JSON::PP,JSON::backportPP' | ||||||
|           if ( !defined( $ENV{PERL_JSON_BACKEND} ) ); |           unless ( defined( $ENV{PERL_JSON_BACKEND} ) ); | ||||||
|  |  | ||||||
|         require JSON; |         require JSON; | ||||||
|         import JSON qw( decode_json encode_json ); |         import JSON qw( decode_json encode_json ); | ||||||
|         1; |         1; | ||||||
|     }; |     } or do { | ||||||
|  |  | ||||||
|     if ($@) { |  | ||||||
|         $@ = undef; |  | ||||||
|  |  | ||||||
|         # In rare cases, Cpanel::JSON::XS may |         # In rare cases, Cpanel::JSON::XS may | ||||||
|         #   be installed but JSON|JSON::MaybeXS not ... |         #   be installed but JSON|JSON::MaybeXS not ... | ||||||
| @@ -114,10 +108,7 @@ if ($@) { | |||||||
|             require Cpanel::JSON::XS; |             require Cpanel::JSON::XS; | ||||||
|             import Cpanel::JSON::XS qw(decode_json encode_json); |             import Cpanel::JSON::XS qw(decode_json encode_json); | ||||||
|             1; |             1; | ||||||
|         }; |         } or do { | ||||||
|  |  | ||||||
|         if ($@) { |  | ||||||
|             $@ = undef; |  | ||||||
|  |  | ||||||
|             # In rare cases, JSON::XS may |             # In rare cases, JSON::XS may | ||||||
|             #   be installed but JSON not ... |             #   be installed but JSON not ... | ||||||
| @@ -125,10 +116,7 @@ if ($@) { | |||||||
|                 require JSON::XS; |                 require JSON::XS; | ||||||
|                 import JSON::XS qw(decode_json encode_json); |                 import JSON::XS qw(decode_json encode_json); | ||||||
|                 1; |                 1; | ||||||
|             }; |             } or do { | ||||||
|  |  | ||||||
|             if ($@) { |  | ||||||
|                 $@ = undef; |  | ||||||
|  |  | ||||||
|                 # Fallback to built-in JSON which SHOULD |                 # Fallback to built-in JSON which SHOULD | ||||||
|                 #   be available since 5.014 ... |                 #   be available since 5.014 ... | ||||||
| @@ -136,20 +124,17 @@ if ($@) { | |||||||
|                     require JSON::PP; |                     require JSON::PP; | ||||||
|                     import JSON::PP qw(decode_json encode_json); |                     import JSON::PP qw(decode_json encode_json); | ||||||
|                     1; |                     1; | ||||||
|                 }; |                 } or do { | ||||||
|  |  | ||||||
|                 if ($@) { |  | ||||||
|                     $@ = undef; |  | ||||||
|  |  | ||||||
|                     # Fallback to JSON::backportPP in really rare cases |                     # Fallback to JSON::backportPP in really rare cases | ||||||
|                     require JSON::backportPP; |                     require JSON::backportPP; | ||||||
|                     import JSON::backportPP qw(decode_json encode_json); |                     import JSON::backportPP qw(decode_json encode_json); | ||||||
|                     1; |                     1; | ||||||
|                 } |                 }; | ||||||
|             } |             }; | ||||||
|         } |         }; | ||||||
|     } |     }; | ||||||
| } | }; | ||||||
|  |  | ||||||
| ## Import der FHEM Funktionen | ## Import der FHEM Funktionen | ||||||
| #-- Run before package compilation | #-- Run before package compilation | ||||||
| @@ -227,8 +212,8 @@ our %userAttrList = ( | |||||||
|     'ASC_LockOut:soft,hard,off'                  => '-', |     'ASC_LockOut:soft,hard,off'                  => '-', | ||||||
|     'ASC_LockOut_Cmd:inhibit,blocked,protection' => '-', |     'ASC_LockOut_Cmd:inhibit,blocked,protection' => '-', | ||||||
|     'ASC_BlockingTime_afterManual'               => '-', |     'ASC_BlockingTime_afterManual'               => '-', | ||||||
|     'ASC_BlockingTime_beforeNightClose'           => '-', |     'ASC_BlockingTime_beforeNightClose'          => '-', | ||||||
|     'ASC_BlockingTime_beforeDayOpen'              => '-', |     'ASC_BlockingTime_beforeDayOpen'             => '-', | ||||||
|     'ASC_BrightnessSensor'                       => '-', |     'ASC_BrightnessSensor'                       => '-', | ||||||
|     'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100'       => [ '', 80, 20 ], |     'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100'       => [ '', 80, 20 ], | ||||||
|     'ASC_Shading_Mode:absent,always,off,home'              => '-', |     'ASC_Shading_Mode:absent,always,off,home'              => '-', | ||||||
| @@ -366,7 +351,7 @@ sub Define { | |||||||
|         $name . ' devStateIcon { ShuttersControl_DevStateIcon($name) }' ) |         $name . ' devStateIcon { ShuttersControl_DevStateIcon($name) }' ) | ||||||
|       if ( AttrVal( $name, 'devStateIcon', 'none' ) eq 'none' ); |       if ( AttrVal( $name, 'devStateIcon', 'none' ) eq 'none' ); | ||||||
|  |  | ||||||
|     addToAttrList('ASC:0,1,2','AutoShuttersControl'); |     addToAttrList( 'ASC:0,1,2', 'AutoShuttersControl' ); | ||||||
|  |  | ||||||
|     Log3( $name, 3, "AutoShuttersControl ($name) - defined" ); |     Log3( $name, 3, "AutoShuttersControl ($name) - defined" ); | ||||||
|  |  | ||||||
| @@ -516,7 +501,7 @@ m{^(ATTR|DELETEATTR)\s(.*ASC_Time_Up_WE_Holiday|.*ASC_Up|.*ASC_Down|.*ASC_AutoAs | |||||||
|     } |     } | ||||||
|     elsif ( grep m{^($posReading):\s\d{1,3}(\.\d{1,3})?$}xms, @{$events} ) { |     elsif ( grep m{^($posReading):\s\d{1,3}(\.\d{1,3})?$}xms, @{$events} ) { | ||||||
|         ASC_Debug( 'Notify: ' |         ASC_Debug( 'Notify: ' | ||||||
|               . ' ASC_Pos_Reading Event vom Rollo '  |               . ' ASC_Pos_Reading Event vom Rollo ' | ||||||
|               . $devname |               . $devname | ||||||
|               . ' wurde erkannt ' |               . ' wurde erkannt ' | ||||||
|               . ' - RECEIVED EVENT: ' |               . ' - RECEIVED EVENT: ' | ||||||
| @@ -572,7 +557,7 @@ sub Set { | |||||||
|     elsif ( lc $cmd eq 'controlshading' ) { |     elsif ( lc $cmd eq 'controlshading' ) { | ||||||
|         return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); |         return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); | ||||||
|  |  | ||||||
|         my $response = CheckASC_ConditionsForShadingFn($hash,$aArg->[0]); |         my $response = CheckASC_ConditionsForShadingFn( $hash, $aArg->[0] ); | ||||||
|         readingsSingleUpdate( |         readingsSingleUpdate( | ||||||
|             $hash, $cmd, |             $hash, $cmd, | ||||||
|             ( |             ( | ||||||
| @@ -703,6 +688,7 @@ sub ShuttersDeviceScan { | |||||||
|             $shutters->setAttrUpdateChanges( 'ASC_ShuttersPlace', |             $shutters->setAttrUpdateChanges( 'ASC_ShuttersPlace', | ||||||
|                 AttrVal( $shuttersDev, 'ASC_ShuttersPlace', 'none' ) ); |                 AttrVal( $shuttersDev, 'ASC_ShuttersPlace', 'none' ) ); | ||||||
|             delFromDevAttrList( $shuttersDev, 'ASC_ShuttersPlace' ); |             delFromDevAttrList( $shuttersDev, 'ASC_ShuttersPlace' ); | ||||||
|  |  | ||||||
| #             $shutters->setAttrUpdateChanges( 'ASC_Down', | #             $shutters->setAttrUpdateChanges( 'ASC_Down', | ||||||
| #                 AttrVal( $shuttersDev, 'ASC_Down', 'none' ) ); | #                 AttrVal( $shuttersDev, 'ASC_Down', 'none' ) ); | ||||||
| #             delFromDevAttrList( $shuttersDev, 'ASC_Down' ); | #             delFromDevAttrList( $shuttersDev, 'ASC_Down' ); | ||||||
| @@ -775,7 +761,8 @@ sub WriteReadingsShuttersList { | |||||||
|         readingsBulkUpdate( |         readingsBulkUpdate( | ||||||
|             $hash, |             $hash, | ||||||
|             'room_' |             'room_' | ||||||
|               . ::makeReadingName( AttrVal( $shuttersDev, 'room', 'unsorted' ) ), |               . ::makeReadingName( | ||||||
|  |                 AttrVal( $shuttersDev, 'room', 'unsorted' ) ), | ||||||
|             ReadingsVal( |             ReadingsVal( | ||||||
|                 $name, |                 $name, | ||||||
|                 'room_' |                 'room_' | ||||||
| @@ -801,7 +788,8 @@ sub WriteReadingsShuttersList { | |||||||
|         readingsBulkUpdate( |         readingsBulkUpdate( | ||||||
|             $hash, |             $hash, | ||||||
|             'room_' |             'room_' | ||||||
|               . ::makeReadingName( AttrVal( $shuttersDev, 'room', 'unsorted' ) ), |               . ::makeReadingName( | ||||||
|  |                 AttrVal( $shuttersDev, 'room', 'unsorted' ) ), | ||||||
|             $shuttersDev |             $shuttersDev | ||||||
|           ) |           ) | ||||||
|           if ( |           if ( | ||||||
| @@ -1014,11 +1002,13 @@ sub ShuttersCommandSet { | |||||||
|                     || $shutters->getLockOut eq 'hard' ) |                     || $shutters->getLockOut eq 'hard' ) | ||||||
|                 && !$shutters->getQueryShuttersPos($posValue) |                 && !$shutters->getQueryShuttersPos($posValue) | ||||||
|             ) |             ) | ||||||
|             || (   CheckIfShuttersWindowRecOpen($shuttersDev) == 2 |             || ( | ||||||
|  |                    CheckIfShuttersWindowRecOpen($shuttersDev) == 2 | ||||||
|                 && $shutters->getShuttersPlace eq 'terrace' |                 && $shutters->getShuttersPlace eq 'terrace' | ||||||
|                 && !$shutters->getQueryShuttersPos($posValue) |                 && !$shutters->getQueryShuttersPos($posValue) | ||||||
|                 && (   $shutters->getLockOut eq 'soft' |                 && (   $shutters->getLockOut eq 'soft' | ||||||
|                     || $shutters->getLockOut eq 'hard' ) ) |                     || $shutters->getLockOut eq 'hard' ) | ||||||
|  |             ) | ||||||
|             || (   $shutters->getRainProtectionStatus eq 'protected' |             || (   $shutters->getRainProtectionStatus eq 'protected' | ||||||
|                 || $shutters->getWindProtectionStatus eq 'protected' ) |                 || $shutters->getWindProtectionStatus eq 'protected' ) | ||||||
|         ) |         ) | ||||||
| @@ -1068,7 +1058,7 @@ sub CreateSunRiseSetShuttersTimer { | |||||||
|     return if ( IsDisabled($name) ); |     return if ( IsDisabled($name) ); | ||||||
|  |  | ||||||
|     my $shuttersSunriseUnixtime = ShuttersSunrise( $shuttersDev, 'unix' ) + 1; |     my $shuttersSunriseUnixtime = ShuttersSunrise( $shuttersDev, 'unix' ) + 1; | ||||||
|     my $shuttersSunsetUnixtime = ShuttersSunset( $shuttersDev, 'unix' ) + 1; |     my $shuttersSunsetUnixtime  = ShuttersSunset( $shuttersDev, 'unix' ) + 1; | ||||||
|  |  | ||||||
|     $shutters->setSunriseUnixTime($shuttersSunriseUnixtime); |     $shutters->setSunriseUnixTime($shuttersSunriseUnixtime); | ||||||
|     $shutters->setSunsetUnixTime($shuttersSunsetUnixtime); |     $shutters->setSunsetUnixTime($shuttersSunsetUnixtime); | ||||||
| @@ -1200,8 +1190,11 @@ sub RenewSunRiseSetShuttersTimer { | |||||||
|             ) == 0 |             ) == 0 | ||||||
|           ) |           ) | ||||||
|         { |         { | ||||||
|             $attr{$shuttersDev}{'ASC_ShuttersPlace'} = $shutters->getAttrUpdateChanges('ASC_ShuttersPlace') |             $attr{$shuttersDev}{'ASC_ShuttersPlace'} = | ||||||
|               if ( $shutters->getAttrUpdateChanges('ASC_ShuttersPlace') ne 'none' ); |               $shutters->getAttrUpdateChanges('ASC_ShuttersPlace') | ||||||
|  |               if ( $shutters->getAttrUpdateChanges('ASC_ShuttersPlace') ne | ||||||
|  |                 'none' ); | ||||||
|  |  | ||||||
| #             $attr{$shuttersDev}{'ASC_Down'} = | #             $attr{$shuttersDev}{'ASC_Down'} = | ||||||
| #               $shutters->getAttrUpdateChanges('ASC_Down') | #               $shutters->getAttrUpdateChanges('ASC_Down') | ||||||
| #               if ( $shutters->getAttrUpdateChanges('ASC_Down') ne 'none' ); | #               if ( $shutters->getAttrUpdateChanges('ASC_Down') ne 'none' ); | ||||||
| @@ -1228,12 +1221,16 @@ sub RenewSunRiseSetShuttersTimer { | |||||||
|  |  | ||||||
|         $attr{$shuttersDev}{ASC_BlockingTime_beforeNightClose} = |         $attr{$shuttersDev}{ASC_BlockingTime_beforeNightClose} = | ||||||
|           AttrVal( $shuttersDev, 'ASC_BlockingTime_beforNightClose', 'none' ) |           AttrVal( $shuttersDev, 'ASC_BlockingTime_beforNightClose', 'none' ) | ||||||
|           if ( AttrVal( $shuttersDev, 'ASC_BlockingTime_beforNightClose', 'none' ) ne 'none' ); |           if ( | ||||||
|  |             AttrVal( $shuttersDev, 'ASC_BlockingTime_beforNightClose', 'none' ) | ||||||
|  |             ne 'none' ); | ||||||
|         delFromDevAttrList( $shuttersDev, 'ASC_BlockingTime_beforNightClose' ); |         delFromDevAttrList( $shuttersDev, 'ASC_BlockingTime_beforNightClose' ); | ||||||
|  |  | ||||||
|         $attr{$shuttersDev}{ASC_BlockingTime_beforeDayOpen} = |         $attr{$shuttersDev}{ASC_BlockingTime_beforeDayOpen} = | ||||||
|           AttrVal( $shuttersDev, 'ASC_BlockingTime_beforDayOpen', 'none' ) |           AttrVal( $shuttersDev, 'ASC_BlockingTime_beforDayOpen', 'none' ) | ||||||
|           if ( AttrVal( $shuttersDev, 'ASC_BlockingTime_beforDayOpen', 'none' ) ne 'none' ); |           if ( | ||||||
|  |             AttrVal( $shuttersDev, 'ASC_BlockingTime_beforDayOpen', 'none' ) ne | ||||||
|  |             'none' ); | ||||||
|         delFromDevAttrList( $shuttersDev, 'ASC_BlockingTime_beforDayOpen' ); |         delFromDevAttrList( $shuttersDev, 'ASC_BlockingTime_beforDayOpen' ); | ||||||
| # | # | ||||||
| #         $attr{$shuttersDev}{ASC_Shading_StateChange_SunnyCloudy} = | #         $attr{$shuttersDev}{ASC_Shading_StateChange_SunnyCloudy} = | ||||||
| @@ -1708,23 +1705,31 @@ sub _DetermineSlatCmd { | |||||||
|     my $value    = shift; |     my $value    = shift; | ||||||
|     my $posValue = shift; |     my $posValue = shift; | ||||||
|  |  | ||||||
|     return $posValue    == $shutters->getShadingPos |     return $posValue == $shutters->getShadingPos | ||||||
|             && $shutters->getShadingPositionAssignment      ne 'none'   ? $shutters->getShadingPositionAssignment |       && $shutters->getShadingPositionAssignment ne 'none' | ||||||
|         : $posValue     == $shutters->getVentilatePos |       ? $shutters->getShadingPositionAssignment | ||||||
|             && $shutters->getVentilatePositionAssignment    ne 'none'   ? $shutters->getVentilatePositionAssignment |       : $posValue == $shutters->getVentilatePos | ||||||
|         : $posValue     == $shutters->getOpenPos |       && $shutters->getVentilatePositionAssignment ne 'none' | ||||||
|             && $shutters->getOpenPositionAssignment         ne 'none'   ? $shutters->getOpenPositionAssignment |       ? $shutters->getVentilatePositionAssignment | ||||||
|         : $posValue     == $shutters->getClosedPos |       : $posValue == $shutters->getOpenPos | ||||||
|             && $shutters->getClosedPositionAssignment       ne 'none'   ? $shutters->getClosedPositionAssignment |       && $shutters->getOpenPositionAssignment ne 'none' | ||||||
|         : $posValue     == $shutters->getSleepPos |       ? $shutters->getOpenPositionAssignment | ||||||
|             && $shutters->getSleepPositionAssignment        ne 'none'   ? $shutters->getSleepPositionAssignment |       : $posValue == $shutters->getClosedPos | ||||||
|         : $posValue     == $shutters->getComfortOpenPos |       && $shutters->getClosedPositionAssignment ne 'none' | ||||||
|             && $shutters->getComfortOpenPositionAssignment  ne 'none'   ? $shutters->getComfortOpenPositionAssignment |       ? $shutters->getClosedPositionAssignment | ||||||
|         : $posValue     == $shutters->getPrivacyUpPos |       : $posValue == $shutters->getSleepPos | ||||||
|             && $shutters->getPrivacyUpPositionAssignment    ne 'none'   ? $shutters->getPrivacyUpPositionAssignment |       && $shutters->getSleepPositionAssignment ne 'none' | ||||||
|         : $posValue     == $shutters->getPrivacyDownPos |       ? $shutters->getSleepPositionAssignment | ||||||
|             && $shutters->getPrivacyDownPositionAssignment  ne 'none'   ? $shutters->getPrivacyDownPositionAssignment |       : $posValue == $shutters->getComfortOpenPos | ||||||
|         : $value; |       && $shutters->getComfortOpenPositionAssignment ne 'none' | ||||||
|  |       ? $shutters->getComfortOpenPositionAssignment | ||||||
|  |       : $posValue == $shutters->getPrivacyUpPos | ||||||
|  |       && $shutters->getPrivacyUpPositionAssignment ne 'none' | ||||||
|  |       ? $shutters->getPrivacyUpPositionAssignment | ||||||
|  |       : $posValue == $shutters->getPrivacyDownPos | ||||||
|  |       && $shutters->getPrivacyDownPositionAssignment ne 'none' | ||||||
|  |       ? $shutters->getPrivacyDownPositionAssignment | ||||||
|  |       : $value; | ||||||
| } | } | ||||||
|  |  | ||||||
| sub _SetCmdFn { | sub _SetCmdFn { | ||||||
| @@ -1809,12 +1814,12 @@ sub _SetCmdFn { | |||||||
|             $driveCommand = _DetermineSlatCmd( $driveCommand, $posValue ); |             $driveCommand = _DetermineSlatCmd( $driveCommand, $posValue ); | ||||||
|         } |         } | ||||||
|         elsif ($shutters->getShadingPositionAssignment =~ m{\A\d{1,3}\z}xms |         elsif ($shutters->getShadingPositionAssignment =~ m{\A\d{1,3}\z}xms | ||||||
|             || $shutters->getOpenPositionAssignment =~ m{\A\d{1,3}\z}xms |             || $shutters->getOpenPositionAssignment        =~ m{\A\d{1,3}\z}xms | ||||||
|             || $shutters->getClosedPositionAssignment =~ m{\A\d{1,3}\z}xms |             || $shutters->getClosedPositionAssignment      =~ m{\A\d{1,3}\z}xms | ||||||
|             || $shutters->getPrivacyUpPositionAssignment =~ m{\A\d{1,3}\z}xms |             || $shutters->getPrivacyUpPositionAssignment   =~ m{\A\d{1,3}\z}xms | ||||||
|             || $shutters->getPrivacyDownPositionAssignment =~ m{\A\d{1,3}\z}xms |             || $shutters->getPrivacyDownPositionAssignment =~ m{\A\d{1,3}\z}xms | ||||||
|             || $shutters->getSleepPositionAssignment =~ m{\A\d{1,3}\z}xms |             || $shutters->getSleepPositionAssignment       =~ m{\A\d{1,3}\z}xms | ||||||
|             || $shutters->getVentilatePositionAssignment =~ m{\A\d{1,3}\z}xms |             || $shutters->getVentilatePositionAssignment   =~ m{\A\d{1,3}\z}xms | ||||||
|             || $shutters->getComfortOpenPositionAssignment =~ |             || $shutters->getComfortOpenPositionAssignment =~ | ||||||
|             m{\A\d{1,3}\z}xms ) |             m{\A\d{1,3}\z}xms ) | ||||||
|         { |         { | ||||||
| @@ -1822,26 +1827,28 @@ sub _SetCmdFn { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if ( $commandTemplate ne 'none' ) {     # Patch von Beta-User Forum https://forum.fhem.de/index.php/topic,123659.0.html |     if ( $commandTemplate ne 'none' ) | ||||||
|         # Nutzervariablen setzen |     { # Patch von Beta-User Forum https://forum.fhem.de/index.php/topic,123659.0.html | ||||||
|  |             # Nutzervariablen setzen | ||||||
|         my %specials = ( |         my %specials = ( | ||||||
|              '$name'        => $shuttersDev, |             '$name'    => $shuttersDev, | ||||||
|              '$pos'       => $posValue, |             '$pos'     => $posValue, | ||||||
|              '$slatPos'   => $slatPos, |             '$slatPos' => $slatPos, | ||||||
|              '$cause'      => $shutters->getLastDrive |             '$cause'   => $shutters->getLastDrive | ||||||
|         ); |         ); | ||||||
|          |  | ||||||
|         $commandTemplate  = ::EvalSpecials($commandTemplate, %specials); |         $commandTemplate = ::EvalSpecials( $commandTemplate, %specials ); | ||||||
|  |  | ||||||
|         # CMD ausführen |         # CMD ausführen | ||||||
|         ::AnalyzeCommandChain( $h, $commandTemplate ); |         ::AnalyzeCommandChain( $h, $commandTemplate ); | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|         CommandSet( undef, |         CommandSet( undef, | ||||||
|                 $shuttersDev |                 $shuttersDev | ||||||
|             . ':FILTER=' |               . ':FILTER=' | ||||||
|             . $shutters->getPosCmd . '!=' |               . $shutters->getPosCmd . '!=' | ||||||
|             . $posValue . ' ' |               . $posValue . ' ' | ||||||
|             . $driveCommand ); |               . $driveCommand ); | ||||||
|  |  | ||||||
|         InternalTimer( |         InternalTimer( | ||||||
|             gettimeofday() + 3, |             gettimeofday() + 3, | ||||||
| @@ -1849,20 +1856,20 @@ sub _SetCmdFn { | |||||||
|                 CommandSet( |                 CommandSet( | ||||||
|                     undef, |                     undef, | ||||||
|                     ( |                     ( | ||||||
|                         $shutters->getSlatDevice ne 'none' |                           $shutters->getSlatDevice ne 'none' | ||||||
|                         ? $shutters->getSlatDevice |                         ? $shutters->getSlatDevice | ||||||
|                         : $shuttersDev |                         : $shuttersDev | ||||||
|                     ) |                       ) | ||||||
|                     . ' ' |                       . ' ' | ||||||
|                     . $shutters->getSlatPosCmd . ' ' |                       . $shutters->getSlatPosCmd . ' ' | ||||||
|                     . $slatPos |                       . $slatPos | ||||||
|                 ); |                 ); | ||||||
|             }, |             }, | ||||||
|             $shuttersDev |             $shuttersDev | ||||||
|         ) |           ) | ||||||
|         if ( $slatPos > -1 |           if ( $slatPos > -1 | ||||||
|             && $shutters->getSlatPosCmd ne 'none' ); |             && $shutters->getSlatPosCmd ne 'none' ); | ||||||
|      |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     $shutters->setSelfDefenseAbsent( 0, 0 ) |     $shutters->setSelfDefenseAbsent( 0, 0 ) | ||||||
| @@ -1888,7 +1895,7 @@ sub ASC_Debug { | |||||||
|     return |     return | ||||||
|       if ( !AttrVal( $ascDev->getName, 'ASC_debug', 0 ) ); |       if ( !AttrVal( $ascDev->getName, 'ASC_debug', 0 ) ); | ||||||
|  |  | ||||||
|     my $debugMsg = shift; |     my $debugMsg       = shift; | ||||||
|     my $debugTimestamp = strftime( "%Y.%m.%d %T", localtime(time) ); |     my $debugTimestamp = strftime( "%Y.%m.%d %T", localtime(time) ); | ||||||
|  |  | ||||||
|     print( |     print( | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| ############################################################################### | ############################################################################### | ||||||
| # | # | ||||||
| # Developed with Kate | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2021 Copyright: Marko Oldenburg (leongaultier at gmail dot com) | #  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -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-2022 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,7 +381,7 @@ 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 getAdvDate { | ||||||
| @@ -397,10 +389,7 @@ sub getAdvDate { | |||||||
|  |  | ||||||
|     my $name = $self->{name}; |     my $name = $self->{name}; | ||||||
|  |  | ||||||
|     return AttrVal( $name, 'ASC_advDate', 'FirstAdvent' ); |     return ::AttrVal( $name, 'ASC_advDate', 'FirstAdvent' ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 1; | 1; | ||||||
|   | |||||||
| @@ -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-2022 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; | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,8 +1,8 @@ | |||||||
| ############################################################################### | ############################################################################### | ||||||
| # | # | ||||||
| # Developed with Kate | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2021 Copyright: Marko Oldenburg (fhemsupport@cooltux.net) | #  (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
| @@ -89,21 +89,7 @@ our %EXPORT_TAGS = ( | |||||||
| use GPUtils qw(GP_Import); | use GPUtils qw(GP_Import); | ||||||
| ## Import der FHEM Funktionen | ## Import der FHEM Funktionen | ||||||
| BEGIN { | BEGIN { | ||||||
|     GP_Import( |     GP_Import(qw(cmdFromAnalyze)); | ||||||
|         qw( |  | ||||||
|           devspec2array |  | ||||||
|           CommandAttr |  | ||||||
|           AttrVal |  | ||||||
|           Log3 |  | ||||||
|           computeAlignTime |  | ||||||
|           gettimeofday |  | ||||||
|           sunset |  | ||||||
|           sunset_abs |  | ||||||
|           sunrise |  | ||||||
|           sunrise_abs |  | ||||||
|           cmdFromAnalyze |  | ||||||
|           ) |  | ||||||
|     ); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| sub PositionValueWindowRec { | sub PositionValueWindowRec { | ||||||
| @@ -156,12 +142,12 @@ sub AutoSearchTwilightDev { | |||||||
|  |  | ||||||
|     my $name = $hash->{NAME}; |     my $name = $hash->{NAME}; | ||||||
|  |  | ||||||
|     if ( devspec2array('TYPE=(Astro|Twilight)') > 0 ) { |     if ( ::devspec2array('TYPE=(Astro|Twilight)') > 0 ) { | ||||||
|         CommandAttr( undef, |         ::CommandAttr( undef, | ||||||
|                 $name |                 $name | ||||||
|               . ' ASC_twilightDevice ' |               . ' ASC_twilightDevice ' | ||||||
|               . ( devspec2array('TYPE=(Astro|Twilight)') )[0] ) |               . ( ::devspec2array('TYPE=(Astro|Twilight)') )[0] ) | ||||||
|           if ( AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' ); |           if ( ::AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return; |     return; | ||||||
| @@ -172,8 +158,10 @@ sub GetAttrValues { | |||||||
|     my $attribut = shift; |     my $attribut = shift; | ||||||
|     my $default  = shift; |     my $default  = shift; | ||||||
|  |  | ||||||
|     my @values = split( ' ', |     my @values = split( | ||||||
|         AttrVal( $dev, $attribut, ( defined($default) ? $default : 'none' ) ) ); |         ' ', | ||||||
|  |         ::AttrVal( $dev, $attribut, ( defined($default) ? $default : 'none' ) ) | ||||||
|  |     ); | ||||||
|     my ( $value1, $value2 ) = split( ':', $values[0] ); |     my ( $value1, $value2 ) = split( ':', $values[0] ); | ||||||
|  |  | ||||||
|     my ( $value3, $value4, $value5, $value6, $value7, $value8 ); |     my ( $value3, $value4, $value5, $value6, $value7, $value8 ); | ||||||
| @@ -227,10 +215,10 @@ sub ExtractNotifyDevFromEvent { | |||||||
|  |  | ||||||
|     my %notifyDevs; |     my %notifyDevs; | ||||||
|     while ( my $notifyDev = each %{ $hash->{monitoredDevs} } ) { |     while ( my $notifyDev = each %{ $hash->{monitoredDevs} } ) { | ||||||
|         Log3( $hash->{NAME}, 4, |         ::Log3( $hash->{NAME}, 4, | ||||||
| "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - NotifyDev: " | "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - NotifyDev: " | ||||||
|               . $notifyDev ); |               . $notifyDev ); | ||||||
|         Log3( $hash->{NAME}, 5, |         ::Log3( $hash->{NAME}, 5, | ||||||
| "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDev: " | "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDev: " | ||||||
|               . $shuttersDev ); |               . $shuttersDev ); | ||||||
|  |  | ||||||
| @@ -238,10 +226,10 @@ sub ExtractNotifyDevFromEvent { | |||||||
|             && $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} eq |             && $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} eq | ||||||
|             $shuttersAttr ) |             $shuttersAttr ) | ||||||
|         { |         { | ||||||
|             Log3( $hash->{NAME}, 4, |             ::Log3( $hash->{NAME}, 4, | ||||||
| "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDevHash: " | "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDevHash: " | ||||||
|                   . $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} ); |                   . $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} ); | ||||||
|             Log3( $hash->{NAME}, 5, |             ::Log3( $hash->{NAME}, 5, | ||||||
| "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - return ShuttersDev: " | "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - return ShuttersDev: " | ||||||
|                   . $notifyDev ); |                   . $notifyDev ); | ||||||
|             $notifyDevs{$notifyDev} = $shuttersDev; |             $notifyDevs{$notifyDev} = $shuttersDev; | ||||||
| @@ -279,24 +267,27 @@ sub _IsDay { | |||||||
|         ( |         ( | ||||||
|             ( |             ( | ||||||
|                 ( |                 ( | ||||||
|                     int( gettimeofday() / 86400 ) != int( |                     int( ::gettimeofday() / 86400 ) != int( | ||||||
|                         computeAlignTime( '24:00', |                         ::computeAlignTime( | ||||||
|  |                             '24:00', | ||||||
|                             $FHEM::Automation::ShuttersControl::shutters |                             $FHEM::Automation::ShuttersControl::shutters | ||||||
|                               ->getTimeUpEarly ) / 86400 |                               ->getTimeUpEarly | ||||||
|  |                         ) / 86400 | ||||||
|                     ) |                     ) | ||||||
|                     && ( !IsWe() |                     && ( | ||||||
|                       || ( IsWe() |                         !IsWe() | ||||||
|                         && ( $FHEM::Automation::ShuttersControl::ascDev |                         || ( | ||||||
|                           ->getSunriseTimeWeHoliday eq 'off' |                             IsWe() | ||||||
|                           || $FHEM::Automation::ShuttersControl::shutters |                             && ( $FHEM::Automation::ShuttersControl::ascDev | ||||||
|                             ->getTimeUpWeHoliday eq '01:25' |                                 ->getSunriseTimeWeHoliday eq 'off' | ||||||
|                            ) |                                 || $FHEM::Automation::ShuttersControl::shutters | ||||||
|                          ) |                                 ->getTimeUpWeHoliday eq '01:25' ) | ||||||
|                         ) |                         ) | ||||||
|  |                     ) | ||||||
|                 ) |                 ) | ||||||
|                 || ( |                 || ( | ||||||
|                     int( gettimeofday() / 86400 ) != int( |                     int( ::gettimeofday() / 86400 ) != int( | ||||||
|                         computeAlignTime( |                         ::computeAlignTime( | ||||||
|                             '24:00', |                             '24:00', | ||||||
|                             $FHEM::Automation::ShuttersControl::shutters |                             $FHEM::Automation::ShuttersControl::shutters | ||||||
|                               ->getTimeUpWeHoliday |                               ->getTimeUpWeHoliday | ||||||
| @@ -309,23 +300,23 @@ sub _IsDay { | |||||||
|                     ->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->getTimeUpLate |                     $FHEM::Automation::ShuttersControl::shutters->getTimeUpLate | ||||||
|                 ) / 86400 |                 ) / 86400 | ||||||
|             ) |             ) | ||||||
|         ) |         ) | ||||||
|         || ( |         || ( | ||||||
|             int( gettimeofday() / 86400 ) != int( |             int( ::gettimeofday() / 86400 ) != int( | ||||||
|                 computeAlignTime( |                 ::computeAlignTime( | ||||||
|                     '24:00', |                     '24:00', | ||||||
|                     $FHEM::Automation::ShuttersControl::shutters |                     $FHEM::Automation::ShuttersControl::shutters | ||||||
|                       ->getTimeDownEarly |                       ->getTimeDownEarly | ||||||
|                 ) / 86400 |                 ) / 86400 | ||||||
|             ) |             ) | ||||||
|             && int( gettimeofday() / 86400 ) == int( |             && int( ::gettimeofday() / 86400 ) == int( | ||||||
|                 computeAlignTime( |                 ::computeAlignTime( | ||||||
|                     '24:00', |                     '24:00', | ||||||
|                     $FHEM::Automation::ShuttersControl::shutters |                     $FHEM::Automation::ShuttersControl::shutters | ||||||
|                       ->getTimeDownLate |                       ->getTimeDownLate | ||||||
| @@ -390,19 +381,24 @@ sub _IsDay { | |||||||
|               . $FHEM::Automation::ShuttersControl::shutters->getSunrise ); |               . $FHEM::Automation::ShuttersControl::shutters->getSunrise ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|      |  | ||||||
|     $respIsDay = 1 |     $respIsDay = 1 | ||||||
|       if ( |       if ( | ||||||
|            (  $FHEM::Automation::ShuttersControl::shutters->getDown eq 'roommate' |         ( | ||||||
|              and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'asleep' |             $FHEM::Automation::ShuttersControl::shutters->getDown eq 'roommate' | ||||||
|                 or $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'gotosleep' ) |             and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne | ||||||
|            )  |                 'asleep' | ||||||
|         or (  $FHEM::Automation::ShuttersControl::shutters->getUp eq 'roommate' |                 or $FHEM::Automation::ShuttersControl::shutters->getRoommates | ||||||
|              and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'asleep' |                 ne 'gotosleep' ) | ||||||
|                 or $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'gotosleep' ) |         ) | ||||||
|            ) |         or ( | ||||||
|  |             $FHEM::Automation::ShuttersControl::shutters->getUp eq 'roommate' | ||||||
|  |             and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne | ||||||
|  |                 'asleep' | ||||||
|  |                 or $FHEM::Automation::ShuttersControl::shutters->getRoommates | ||||||
|  |                 ne 'gotosleep' ) | ||||||
|  |         ) | ||||||
|       ); |       ); | ||||||
|      |  | ||||||
|     return $respIsDay; |     return $respIsDay; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -436,7 +432,7 @@ sub ShuttersSunrise { | |||||||
|     my $oldFuncHash = |     my $oldFuncHash = | ||||||
|       $FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash; |       $FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash; | ||||||
|     my $shuttersSunriseUnixtime = |     my $shuttersSunriseUnixtime = | ||||||
|       computeAlignTime( '24:00', sunrise( 'REAL', 0, '4:30', '8:30' ) ); |       ::computeAlignTime( '24:00', ::sunrise( 'REAL', 0, '4:30', '8:30' ) ); | ||||||
|  |  | ||||||
|     if ( $tm eq 'unix' ) { |     if ( $tm eq 'unix' ) { | ||||||
|         if ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'astro' ) { |         if ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'astro' ) { | ||||||
| @@ -449,11 +445,11 @@ sub ShuttersSunrise { | |||||||
|                 if ( !IsWe('tomorrow') ) { |                 if ( !IsWe('tomorrow') ) { | ||||||
|                     if ( |                     if ( | ||||||
|                         IsWe() |                         IsWe() | ||||||
|                         && int( gettimeofday() / 86400 ) == int( |                         && int( ::gettimeofday() / 86400 ) == int( | ||||||
|                             ( |                             ( | ||||||
|                                 computeAlignTime( |                                 ::computeAlignTime( | ||||||
|                                     '24:00', |                                     '24:00', | ||||||
|                                     sunrise_abs( |                                     ::sunrise_abs( | ||||||
|                                         $autoAstroMode, |                                         $autoAstroMode, | ||||||
|                                         0, |                                         0, | ||||||
|                                         $FHEM::Automation::ShuttersControl::shutters |                                         $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -465,9 +461,9 @@ sub ShuttersSunrise { | |||||||
|                       ) |                       ) | ||||||
|                     { |                     { | ||||||
|                         $shuttersSunriseUnixtime = ( |                         $shuttersSunriseUnixtime = ( | ||||||
|                             computeAlignTime( |                             ::computeAlignTime( | ||||||
|                                 '24:00', |                                 '24:00', | ||||||
|                                 sunrise_abs( |                                 ::sunrise_abs( | ||||||
|                                     $autoAstroMode, |                                     $autoAstroMode, | ||||||
|                                     0, |                                     0, | ||||||
|                                     $FHEM::Automation::ShuttersControl::shutters |                                     $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -477,11 +473,11 @@ sub ShuttersSunrise { | |||||||
|                         ); |                         ); | ||||||
|                     } |                     } | ||||||
|                     elsif ( |                     elsif ( | ||||||
|                         int( gettimeofday() / 86400 ) == int( |                         int( ::gettimeofday() / 86400 ) == int( | ||||||
|                             ( |                             ( | ||||||
|                                 computeAlignTime( |                                 ::computeAlignTime( | ||||||
|                                     '24:00', |                                     '24:00', | ||||||
|                                     sunrise_abs( |                                     ::sunrise_abs( | ||||||
|                                         $autoAstroMode, |                                         $autoAstroMode, | ||||||
|                                         0, |                                         0, | ||||||
|                                         $FHEM::Automation::ShuttersControl::shutters |                                         $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -495,9 +491,9 @@ sub ShuttersSunrise { | |||||||
|                       ) |                       ) | ||||||
|                     { |                     { | ||||||
|                         $shuttersSunriseUnixtime = ( |                         $shuttersSunriseUnixtime = ( | ||||||
|                             computeAlignTime( |                             ::computeAlignTime( | ||||||
|                                 '24:00', |                                 '24:00', | ||||||
|                                 sunrise_abs( |                                 ::sunrise_abs( | ||||||
|                                     $autoAstroMode, |                                     $autoAstroMode, | ||||||
|                                     0, |                                     0, | ||||||
|                                     $FHEM::Automation::ShuttersControl::shutters |                                     $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -508,9 +504,9 @@ sub ShuttersSunrise { | |||||||
|                     } |                     } | ||||||
|                     else { |                     else { | ||||||
|                         $shuttersSunriseUnixtime = ( |                         $shuttersSunriseUnixtime = ( | ||||||
|                             computeAlignTime( |                             ::computeAlignTime( | ||||||
|                                 '24:00', |                                 '24:00', | ||||||
|                                 sunrise_abs( |                                 ::sunrise_abs( | ||||||
|                                     $autoAstroMode, |                                     $autoAstroMode, | ||||||
|                                     0, |                                     0, | ||||||
|                                     $FHEM::Automation::ShuttersControl::shutters |                                     $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -526,11 +522,11 @@ sub ShuttersSunrise { | |||||||
|                     if ( |                     if ( | ||||||
|                         IsWe() |                         IsWe() | ||||||
|                         && ( |                         && ( | ||||||
|                             int( gettimeofday() / 86400 ) == int( |                             int( ::gettimeofday() / 86400 ) == int( | ||||||
|                                 ( |                                 ( | ||||||
|                                     computeAlignTime( |                                     ::computeAlignTime( | ||||||
|                                         '24:00', |                                         '24:00', | ||||||
|                                         sunrise_abs( |                                         ::sunrise_abs( | ||||||
|                                             $autoAstroMode, |                                             $autoAstroMode, | ||||||
|                                             0, |                                             0, | ||||||
|                                             $FHEM::Automation::ShuttersControl::shutters |                                             $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -539,11 +535,11 @@ sub ShuttersSunrise { | |||||||
|                                     ) + 1 |                                     ) + 1 | ||||||
|                                 ) / 86400 |                                 ) / 86400 | ||||||
|                             ) |                             ) | ||||||
|                             || int( gettimeofday() / 86400 ) != int( |                             || int( ::gettimeofday() / 86400 ) != int( | ||||||
|                                 ( |                                 ( | ||||||
|                                     computeAlignTime( |                                     ::computeAlignTime( | ||||||
|                                         '24:00', |                                         '24:00', | ||||||
|                                         sunrise_abs( |                                         ::sunrise_abs( | ||||||
|                                             $autoAstroMode, |                                             $autoAstroMode, | ||||||
|                                             0, |                                             0, | ||||||
|                                             $FHEM::Automation::ShuttersControl::shutters |                                             $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -556,9 +552,9 @@ sub ShuttersSunrise { | |||||||
|                       ) |                       ) | ||||||
|                     { |                     { | ||||||
|                         $shuttersSunriseUnixtime = ( |                         $shuttersSunriseUnixtime = ( | ||||||
|                             computeAlignTime( |                             ::computeAlignTime( | ||||||
|                                 '24:00', |                                 '24:00', | ||||||
|                                 sunrise_abs( |                                 ::sunrise_abs( | ||||||
|                                     $autoAstroMode, |                                     $autoAstroMode, | ||||||
|                                     0, |                                     0, | ||||||
|                                     $FHEM::Automation::ShuttersControl::shutters |                                     $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -568,11 +564,11 @@ sub ShuttersSunrise { | |||||||
|                         ); |                         ); | ||||||
|                     } |                     } | ||||||
|                     elsif ( |                     elsif ( | ||||||
|                         int( gettimeofday() / 86400 ) == int( |                         int( ::gettimeofday() / 86400 ) == int( | ||||||
|                             ( |                             ( | ||||||
|                                 computeAlignTime( |                                 ::computeAlignTime( | ||||||
|                                     '24:00', |                                     '24:00', | ||||||
|                                     sunrise_abs( |                                     ::sunrise_abs( | ||||||
|                                         $autoAstroMode, |                                         $autoAstroMode, | ||||||
|                                         0, |                                         0, | ||||||
|                                         $FHEM::Automation::ShuttersControl::shutters |                                         $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -586,9 +582,9 @@ sub ShuttersSunrise { | |||||||
|                       ) |                       ) | ||||||
|                     { |                     { | ||||||
|                         $shuttersSunriseUnixtime = ( |                         $shuttersSunriseUnixtime = ( | ||||||
|                             computeAlignTime( |                             ::computeAlignTime( | ||||||
|                                 '24:00', |                                 '24:00', | ||||||
|                                 sunrise_abs( |                                 ::sunrise_abs( | ||||||
|                                     $autoAstroMode, |                                     $autoAstroMode, | ||||||
|                                     0, |                                     0, | ||||||
|                                     $FHEM::Automation::ShuttersControl::shutters |                                     $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -601,11 +597,11 @@ sub ShuttersSunrise { | |||||||
|                     } |                     } | ||||||
|                     else { |                     else { | ||||||
|                         if ( |                         if ( | ||||||
|                             int( gettimeofday() / 86400 ) == int( |                             int( ::gettimeofday() / 86400 ) == int( | ||||||
|                                 ( |                                 ( | ||||||
|                                     computeAlignTime( |                                     ::computeAlignTime( | ||||||
|                                         '24:00', |                                         '24:00', | ||||||
|                                         sunrise_abs( |                                         ::sunrise_abs( | ||||||
|                                             $autoAstroMode, |                                             $autoAstroMode, | ||||||
|                                             0, |                                             0, | ||||||
|                                             $FHEM::Automation::ShuttersControl::shutters |                                             $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -617,9 +613,9 @@ sub ShuttersSunrise { | |||||||
|                           ) |                           ) | ||||||
|                         { |                         { | ||||||
|                             $shuttersSunriseUnixtime = ( |                             $shuttersSunriseUnixtime = ( | ||||||
|                                 computeAlignTime( |                                 ::computeAlignTime( | ||||||
|                                     '24:00', |                                     '24:00', | ||||||
|                                     sunrise_abs( |                                     ::sunrise_abs( | ||||||
|                                         $autoAstroMode, |                                         $autoAstroMode, | ||||||
|                                         0, |                                         0, | ||||||
|                                         $FHEM::Automation::ShuttersControl::shutters |                                         $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -630,9 +626,9 @@ sub ShuttersSunrise { | |||||||
|                         } |                         } | ||||||
|                         else { |                         else { | ||||||
|                             $shuttersSunriseUnixtime = ( |                             $shuttersSunriseUnixtime = ( | ||||||
|                                 computeAlignTime( |                                 ::computeAlignTime( | ||||||
|                                     '24:00', |                                     '24:00', | ||||||
|                                     sunrise_abs( |                                     ::sunrise_abs( | ||||||
|                                         $autoAstroMode, |                                         $autoAstroMode, | ||||||
|                                         0, |                                         0, | ||||||
|                                         $FHEM::Automation::ShuttersControl::shutters |                                         $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -646,9 +642,9 @@ sub ShuttersSunrise { | |||||||
|             } |             } | ||||||
|             else { |             else { | ||||||
|                 $shuttersSunriseUnixtime = ( |                 $shuttersSunriseUnixtime = ( | ||||||
|                     computeAlignTime( |                     ::computeAlignTime( | ||||||
|                         '24:00', |                         '24:00', | ||||||
|                         sunrise_abs( |                         ::sunrise_abs( | ||||||
|                             $autoAstroMode, |                             $autoAstroMode, | ||||||
|                             0, |                             0, | ||||||
|                             $FHEM::Automation::ShuttersControl::shutters |                             $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -669,11 +665,11 @@ sub ShuttersSunrise { | |||||||
|             { |             { | ||||||
|                 if ( !IsWe('tomorrow') ) { |                 if ( !IsWe('tomorrow') ) { | ||||||
|                     if ( |                     if ( | ||||||
|                         int( gettimeofday() / 86400 ) == int( |                         int( ::gettimeofday() / 86400 ) == int( | ||||||
|                             ( |                             ( | ||||||
|                                 computeAlignTime( |                                 ::computeAlignTime( | ||||||
|                                     '24:00', |                                     '24:00', | ||||||
|                                     sunrise_abs( |                                     ::sunrise_abs( | ||||||
|                                         $autoAstroMode, |                                         $autoAstroMode, | ||||||
|                                         0, |                                         0, | ||||||
|                                         $FHEM::Automation::ShuttersControl::shutters |                                         $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -690,7 +686,7 @@ sub ShuttersSunrise { | |||||||
|                           ( $shuttersSunriseUnixtime + 86400 ) |                           ( $shuttersSunriseUnixtime + 86400 ) | ||||||
|                           if ( $shuttersSunriseUnixtime < |                           if ( $shuttersSunriseUnixtime < | ||||||
|                             ( $oldFuncHash->{sunrisetime} + 180 ) |                             ( $oldFuncHash->{sunrisetime} + 180 ) | ||||||
|                             && $oldFuncHash->{sunrisetime} < gettimeofday() ); |                             && $oldFuncHash->{sunrisetime} < ::gettimeofday() ); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| @@ -698,7 +694,7 @@ sub ShuttersSunrise { | |||||||
|                 $shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime + 86400 ) |                 $shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime + 86400 ) | ||||||
|                   if ( $shuttersSunriseUnixtime < |                   if ( $shuttersSunriseUnixtime < | ||||||
|                     ( $oldFuncHash->{sunrisetime} + 180 ) |                     ( $oldFuncHash->{sunrisetime} + 180 ) | ||||||
|                     && $oldFuncHash->{sunrisetime} < gettimeofday() ); |                     && $oldFuncHash->{sunrisetime} < ::gettimeofday() ); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'time' ) |         elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'time' ) | ||||||
| @@ -711,8 +707,8 @@ sub ShuttersSunrise { | |||||||
|             { |             { | ||||||
|                 if ( !IsWe('tomorrow') ) { |                 if ( !IsWe('tomorrow') ) { | ||||||
|                     if ( |                     if ( | ||||||
|                         int( gettimeofday() / 86400 ) == int( |                         int( ::gettimeofday() / 86400 ) == int( | ||||||
|                             computeAlignTime( |                             ::computeAlignTime( | ||||||
|                                 '24:00', |                                 '24:00', | ||||||
|                                 $FHEM::Automation::ShuttersControl::shutters |                                 $FHEM::Automation::ShuttersControl::shutters | ||||||
|                                   ->getTimeUpWeHoliday |                                   ->getTimeUpWeHoliday | ||||||
| @@ -720,13 +716,13 @@ sub ShuttersSunrise { | |||||||
|                         ) |                         ) | ||||||
|                       ) |                       ) | ||||||
|                     { |                     { | ||||||
|                         $shuttersSunriseUnixtime = computeAlignTime( '24:00', |                         $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||||
|                             $FHEM::Automation::ShuttersControl::shutters |                             $FHEM::Automation::ShuttersControl::shutters | ||||||
|                               ->getTimeUpWeHoliday ); |                               ->getTimeUpWeHoliday ); | ||||||
|                     } |                     } | ||||||
|                     elsif ( |                     elsif ( | ||||||
|                         int( gettimeofday() / 86400 ) == int( |                         int( ::gettimeofday() / 86400 ) == int( | ||||||
|                             computeAlignTime( |                             ::computeAlignTime( | ||||||
|                                 '24:00', |                                 '24:00', | ||||||
|                                 $FHEM::Automation::ShuttersControl::shutters |                                 $FHEM::Automation::ShuttersControl::shutters | ||||||
|                                   ->getTimeUpEarly |                                   ->getTimeUpEarly | ||||||
| @@ -736,12 +732,12 @@ sub ShuttersSunrise { | |||||||
|                         ->getSunrise |                         ->getSunrise | ||||||
|                       ) |                       ) | ||||||
|                     { |                     { | ||||||
|                         $shuttersSunriseUnixtime = computeAlignTime( '24:00', |                         $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||||
|                             $FHEM::Automation::ShuttersControl::shutters |                             $FHEM::Automation::ShuttersControl::shutters | ||||||
|                               ->getTimeUpEarly ) + 86400; |                               ->getTimeUpEarly ) + 86400; | ||||||
|                     } |                     } | ||||||
|                     else { |                     else { | ||||||
|                         $shuttersSunriseUnixtime = computeAlignTime( '24:00', |                         $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||||
|                             $FHEM::Automation::ShuttersControl::shutters |                             $FHEM::Automation::ShuttersControl::shutters | ||||||
|                               ->getTimeUpEarly ); |                               ->getTimeUpEarly ); | ||||||
|                     } |                     } | ||||||
| @@ -749,8 +745,8 @@ sub ShuttersSunrise { | |||||||
|                 else { |                 else { | ||||||
|                     if ( |                     if ( | ||||||
|                         IsWe() |                         IsWe() | ||||||
|                         && int( gettimeofday() / 86400 ) == int( |                         && int( ::gettimeofday() / 86400 ) == int( | ||||||
|                             computeAlignTime( |                             ::computeAlignTime( | ||||||
|                                 '24:00', |                                 '24:00', | ||||||
|                                 $FHEM::Automation::ShuttersControl::shutters |                                 $FHEM::Automation::ShuttersControl::shutters | ||||||
|                                   ->getTimeUpWeHoliday |                                   ->getTimeUpWeHoliday | ||||||
| @@ -758,13 +754,13 @@ sub ShuttersSunrise { | |||||||
|                         ) |                         ) | ||||||
|                       ) |                       ) | ||||||
|                     { |                     { | ||||||
|                         $shuttersSunriseUnixtime = computeAlignTime( '24:00', |                         $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||||
|                             $FHEM::Automation::ShuttersControl::shutters |                             $FHEM::Automation::ShuttersControl::shutters | ||||||
|                               ->getTimeUpWeHoliday ); |                               ->getTimeUpWeHoliday ); | ||||||
|                     } |                     } | ||||||
|                     elsif ( |                     elsif ( | ||||||
|                         int( gettimeofday() / 86400 ) == int( |                         int( ::gettimeofday() / 86400 ) == int( | ||||||
|                             computeAlignTime( |                             ::computeAlignTime( | ||||||
|                                 '24:00', |                                 '24:00', | ||||||
|                                 $FHEM::Automation::ShuttersControl::shutters |                                 $FHEM::Automation::ShuttersControl::shutters | ||||||
|                                   ->getTimeUpEarly |                                   ->getTimeUpEarly | ||||||
| @@ -772,13 +768,13 @@ sub ShuttersSunrise { | |||||||
|                         ) |                         ) | ||||||
|                       ) |                       ) | ||||||
|                     { |                     { | ||||||
|                         $shuttersSunriseUnixtime = computeAlignTime( '24:00', |                         $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||||
|                             $FHEM::Automation::ShuttersControl::shutters |                             $FHEM::Automation::ShuttersControl::shutters | ||||||
|                               ->getTimeUpEarly ); |                               ->getTimeUpEarly ); | ||||||
|                     } |                     } | ||||||
|                     elsif ( |                     elsif ( | ||||||
|                         int( gettimeofday() / 86400 ) != int( |                         int( ::gettimeofday() / 86400 ) != int( | ||||||
|                             computeAlignTime( |                             ::computeAlignTime( | ||||||
|                                 '24:00', |                                 '24:00', | ||||||
|                                 $FHEM::Automation::ShuttersControl::shutters |                                 $FHEM::Automation::ShuttersControl::shutters | ||||||
|                                   ->getTimeUpWeHoliday |                                   ->getTimeUpWeHoliday | ||||||
| @@ -786,19 +782,19 @@ sub ShuttersSunrise { | |||||||
|                         ) |                         ) | ||||||
|                       ) |                       ) | ||||||
|                     { |                     { | ||||||
|                         $shuttersSunriseUnixtime = computeAlignTime( '24:00', |                         $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||||
|                             $FHEM::Automation::ShuttersControl::shutters |                             $FHEM::Automation::ShuttersControl::shutters | ||||||
|                               ->getTimeUpWeHoliday ); |                               ->getTimeUpWeHoliday ); | ||||||
|                     } |                     } | ||||||
|                     else { |                     else { | ||||||
|                         $shuttersSunriseUnixtime = computeAlignTime( '24:00', |                         $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||||
|                             $FHEM::Automation::ShuttersControl::shutters |                             $FHEM::Automation::ShuttersControl::shutters | ||||||
|                               ->getTimeUpWeHoliday ) + 86400; |                               ->getTimeUpWeHoliday ) + 86400; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             else { |             else { | ||||||
|                 $shuttersSunriseUnixtime = computeAlignTime( '24:00', |                 $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||||
|                     $FHEM::Automation::ShuttersControl::shutters |                     $FHEM::Automation::ShuttersControl::shutters | ||||||
|                       ->getTimeUpEarly ); |                       ->getTimeUpEarly ); | ||||||
|             } |             } | ||||||
| @@ -806,15 +802,14 @@ sub ShuttersSunrise { | |||||||
|         elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq |         elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq | ||||||
|             'brightness' ) |             'brightness' ) | ||||||
|         { |         { | ||||||
|             $shuttersSunriseUnixtime = computeAlignTime( '24:00', |             $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||||
|                 $FHEM::Automation::ShuttersControl::shutters->getTimeUpLate |                 $FHEM::Automation::ShuttersControl::shutters->getTimeUpLate ); | ||||||
|             ); |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return $shuttersSunriseUnixtime; |         return $shuttersSunriseUnixtime; | ||||||
|     } |     } | ||||||
|     elsif ( $tm eq 'real' ) { |     elsif ( $tm eq 'real' ) { | ||||||
|         return sunrise_abs( |         return ::sunrise_abs( | ||||||
|             $autoAstroMode, |             $autoAstroMode, | ||||||
|             0, |             0, | ||||||
|             $FHEM::Automation::ShuttersControl::shutters->getTimeUpEarly, |             $FHEM::Automation::ShuttersControl::shutters->getTimeUpEarly, | ||||||
| @@ -858,15 +853,15 @@ sub ShuttersSunset { | |||||||
|     my $oldFuncHash = |     my $oldFuncHash = | ||||||
|       $FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash; |       $FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash; | ||||||
|     my $shuttersSunsetUnixtime = |     my $shuttersSunsetUnixtime = | ||||||
|       computeAlignTime( '24:00', sunset( 'REAL', 0, '15:30', '21:30' ) ); |       ::computeAlignTime( '24:00', ::sunset( 'REAL', 0, '15:30', '21:30' ) ); | ||||||
|  |  | ||||||
|     if ( $tm eq 'unix' ) { |     if ( $tm eq 'unix' ) { | ||||||
|         if ( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'astro' ) |         if ( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'astro' ) | ||||||
|         { |         { | ||||||
|             $shuttersSunsetUnixtime = ( |             $shuttersSunsetUnixtime = ( | ||||||
|                 computeAlignTime( |                 ::computeAlignTime( | ||||||
|                     '24:00', |                     '24:00', | ||||||
|                     sunset_abs( |                     ::sunset_abs( | ||||||
|                         $autoAstroMode, |                         $autoAstroMode, | ||||||
|                         0, |                         0, | ||||||
|                         $FHEM::Automation::ShuttersControl::shutters |                         $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -880,13 +875,13 @@ sub ShuttersSunset { | |||||||
|                 $shuttersSunsetUnixtime += 86400 |                 $shuttersSunsetUnixtime += 86400 | ||||||
|                   if ( $shuttersSunsetUnixtime < |                   if ( $shuttersSunsetUnixtime < | ||||||
|                     ( $oldFuncHash->{sunsettime} + 180 ) |                     ( $oldFuncHash->{sunsettime} + 180 ) | ||||||
|                     && $oldFuncHash->{sunsettime} < gettimeofday() ); |                     && $oldFuncHash->{sunsettime} < ::gettimeofday() ); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         elsif ( |         elsif ( | ||||||
|             $FHEM::Automation::ShuttersControl::shutters->getDown eq 'time' ) |             $FHEM::Automation::ShuttersControl::shutters->getDown eq 'time' ) | ||||||
|         { |         { | ||||||
|             $shuttersSunsetUnixtime = computeAlignTime( '24:00', |             $shuttersSunsetUnixtime = ::computeAlignTime( '24:00', | ||||||
|                 $FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly |                 $FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly | ||||||
|             ); |             ); | ||||||
|         } |         } | ||||||
| @@ -894,13 +889,13 @@ sub ShuttersSunset { | |||||||
|             'brightness' ) |             'brightness' ) | ||||||
|         { |         { | ||||||
|             $shuttersSunsetUnixtime = |             $shuttersSunsetUnixtime = | ||||||
|               computeAlignTime( '24:00', |               ::computeAlignTime( '24:00', | ||||||
|                 $FHEM::Automation::ShuttersControl::shutters->getTimeDownLate ); |                 $FHEM::Automation::ShuttersControl::shutters->getTimeDownLate ); | ||||||
|         } |         } | ||||||
|         return $shuttersSunsetUnixtime; |         return $shuttersSunsetUnixtime; | ||||||
|     } |     } | ||||||
|     elsif ( $tm eq 'real' ) { |     elsif ( $tm eq 'real' ) { | ||||||
|         return sunset_abs( |         return ::sunset_abs( | ||||||
|             $autoAstroMode, |             $autoAstroMode, | ||||||
|             0, |             0, | ||||||
|             $FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly, |             $FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly, | ||||||
| @@ -923,7 +918,7 @@ sub IsAfterShuttersTimeBlocking { | |||||||
|  |  | ||||||
|     if ( |     if ( | ||||||
|         ( |         ( | ||||||
|             int( gettimeofday() ) - |             int( ::gettimeofday() ) - | ||||||
|             $FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp |             $FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp | ||||||
|         ) < |         ) < | ||||||
|         $FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual |         $FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual | ||||||
| @@ -933,7 +928,7 @@ sub IsAfterShuttersTimeBlocking { | |||||||
|                 $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime |                 $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime | ||||||
|             ) |             ) | ||||||
|             && $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime |             && $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime | ||||||
|             - ( int( gettimeofday() ) ) < |             - ( int( ::gettimeofday() ) ) < | ||||||
|             $FHEM::Automation::ShuttersControl::shutters |             $FHEM::Automation::ShuttersControl::shutters | ||||||
|             ->getBlockingTimeBeforDayOpen |             ->getBlockingTimeBeforDayOpen | ||||||
|         ) |         ) | ||||||
| @@ -943,7 +938,7 @@ sub IsAfterShuttersTimeBlocking { | |||||||
|                 $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime |                 $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime | ||||||
|             ) |             ) | ||||||
|             && $FHEM::Automation::ShuttersControl::shutters->getSunsetUnixTime |             && $FHEM::Automation::ShuttersControl::shutters->getSunsetUnixTime | ||||||
|             - ( int( gettimeofday() ) ) < |             - ( int( ::gettimeofday() ) ) < | ||||||
|             $FHEM::Automation::ShuttersControl::shutters |             $FHEM::Automation::ShuttersControl::shutters | ||||||
|             ->getBlockingTimeBeforNightClose |             ->getBlockingTimeBeforNightClose | ||||||
|         ) |         ) | ||||||
| @@ -982,7 +977,7 @@ sub IsAfterShuttersManualBlocking { | |||||||
|     } |     } | ||||||
|     elsif ( |     elsif ( | ||||||
|         ( |         ( | ||||||
|             int( gettimeofday() ) - |             int( ::gettimeofday() ) - | ||||||
|             $FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp |             $FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp | ||||||
|         ) < |         ) < | ||||||
|         $FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual |         $FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual | ||||||
| @@ -1019,7 +1014,7 @@ sub PerlCodeCheck { | |||||||
| sub IsAdv { | sub IsAdv { | ||||||
|     use HTTP::Date; |     use HTTP::Date; | ||||||
|     my ( undef, undef, undef, $monthday, $month, $year, undef, undef, undef ) = |     my ( undef, undef, undef, $monthday, $month, $year, undef, undef, undef ) = | ||||||
|       localtime( gettimeofday() ); |       localtime( ::gettimeofday() ); | ||||||
|     my $adv = 0; |     my $adv = 0; | ||||||
|     $year += 1900; |     $year += 1900; | ||||||
|  |  | ||||||
| @@ -1032,11 +1027,12 @@ sub IsAdv { | |||||||
|         my $time = str2time( $year . '-12-25' ); |         my $time = str2time( $year . '-12-25' ); | ||||||
|         my $wday = ( localtime($time) )[6]; |         my $wday = ( localtime($time) )[6]; | ||||||
|         $wday = $wday ? $wday : 7; |         $wday = $wday ? $wday : 7; | ||||||
|         $time -= ( $FHEM::Automation::ShuttersControl::ascDev |         $time -= ( | ||||||
|             ->getAdvDate eq 'DeadSunday' |             $FHEM::Automation::ShuttersControl::ascDev->getAdvDate eq | ||||||
|               ? ($wday + 27) * 86400 |               'DeadSunday' | ||||||
|               : ($wday + 21) * 86400 |             ? ( $wday + 27 ) * 86400 | ||||||
|           ); |             : ( $wday + 21 ) * 86400 | ||||||
|  |         ); | ||||||
|         $adv = 1 if ( $time < time ); |         $adv = 1 if ( $time < time ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -1046,18 +1042,19 @@ sub IsAdv { | |||||||
| sub IsInTime { | sub IsInTime { | ||||||
|     my $dfi = shift; |     my $dfi = shift; | ||||||
|  |  | ||||||
|     $dfi =~ s/{([^\x7d]*)}/$cmdFromAnalyze=$1; eval $1/ge; # Forum #69787 |     $dfi =~ s/{([^\x7d]*)}/$cmdFromAnalyze=$1; eval $1/ge;    # Forum #69787 | ||||||
|     my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(gettimeofday()); |     my ( $sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst ) = | ||||||
|     my $dhms = sprintf("%s\@%02d:%02d:%02d", $wday, $hour, $min, $sec); |       localtime( ::gettimeofday() ); | ||||||
|     foreach my $ft (split(" ", $dfi)) { |     my $dhms = sprintf( "%s\@%02d:%02d:%02d", $wday, $hour, $min, $sec ); | ||||||
|         my ($from, $to) = split("-", $ft); |     foreach my $ft ( split( " ", $dfi ) ) { | ||||||
|         if(defined($from) && defined($to)) { |         my ( $from, $to ) = split( "-", $ft ); | ||||||
|             $from = "$wday\@$from" if(index($from,"@") < 0); |         if ( defined($from) && defined($to) ) { | ||||||
|             $to   = "$wday\@$to"   if(index($to,  "@") < 0); |             $from = "$wday\@$from" if ( index( $from, "@" ) < 0 ); | ||||||
|             return 1 if($from le $dhms && $dhms le $to); |             $to   = "$wday\@$to"   if ( index( $to,   "@" ) < 0 ); | ||||||
|  |             return 1 if ( $from le $dhms && $dhms le $to ); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|      |  | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
| @@ -59,12 +59,11 @@ our %EXPORT_TAGS = ( | |||||||
|     ], |     ], | ||||||
| ); | ); | ||||||
|  |  | ||||||
|  |  | ||||||
| sub RainProcessing { | sub RainProcessing { | ||||||
|     my ( $hash, $val, $triggerMax, $triggerMin ) = @_; |     my ( $hash, $val, $triggerMax, $triggerMin ) = @_; | ||||||
|      |  | ||||||
|     my $rainClosedPos = $FHEM::Automation::ShuttersControl::ascDev |     my $rainClosedPos = $FHEM::Automation::ShuttersControl::ascDev | ||||||
|           ->getRainSensorShuttersClosedPos; |       ->getRainSensorShuttersClosedPos; | ||||||
|  |  | ||||||
|     for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { |     for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { | ||||||
|         $FHEM::Automation::ShuttersControl::shutters->setShuttersDev( |         $FHEM::Automation::ShuttersControl::shutters->setShuttersDev( | ||||||
| @@ -75,49 +74,53 @@ sub RainProcessing { | |||||||
|             $FHEM::Automation::ShuttersControl::shutters->getRainProtection eq |             $FHEM::Automation::ShuttersControl::shutters->getRainProtection eq | ||||||
|             'off' ); |             'off' ); | ||||||
|  |  | ||||||
|         if (   $val > $triggerMax |         if ( | ||||||
|  |                $val > $triggerMax | ||||||
|             && $FHEM::Automation::ShuttersControl::shutters->getStatus != |             && $FHEM::Automation::ShuttersControl::shutters->getStatus != | ||||||
|             $rainClosedPos |             $rainClosedPos | ||||||
|             && $FHEM::Automation::ShuttersControl::shutters |             && $FHEM::Automation::ShuttersControl::shutters | ||||||
|                  ->getRainProtectionStatus eq 'unprotected' |             ->getRainProtectionStatus eq 'unprotected' | ||||||
|             || ( $FHEM::Automation::ShuttersControl::shutters |             || ( $FHEM::Automation::ShuttersControl::shutters | ||||||
|                    ->getRainProtectionStatus eq 'unprotected' |                 ->getRainProtectionStatus eq 'unprotected' | ||||||
|               && $FHEM::Automation::ShuttersControl::shutters |                 && $FHEM::Automation::ShuttersControl::shutters | ||||||
|                    ->getRainUnprotectionDelayObj ne 'none') |                 ->getRainUnprotectionDelayObj ne 'none' ) | ||||||
|           ) |           ) | ||||||
|         { |         { | ||||||
|             _RainProtected(); |             _RainProtected(); | ||||||
|         } |         } | ||||||
|         elsif ( ( $val == 0 || $val < $triggerMin ) |         elsif ( ( $val == 0 || $val < $triggerMin ) | ||||||
|             && $FHEM::Automation::ShuttersControl::shutters->getStatus == |             && $FHEM::Automation::ShuttersControl::shutters->getStatus == | ||||||
|               $rainClosedPos |             $rainClosedPos | ||||||
|             && IsAfterShuttersManualBlocking($shuttersDev) |             && IsAfterShuttersManualBlocking($shuttersDev) | ||||||
|             && $FHEM::Automation::ShuttersControl::shutters |             && $FHEM::Automation::ShuttersControl::shutters | ||||||
|                  ->getRainProtectionStatus eq 'protected' ) |             ->getRainProtectionStatus eq 'protected' ) | ||||||
|         { |         { | ||||||
|             my %funcHash = ( |             my %funcHash = ( shuttersdevice => $shuttersDev, ); | ||||||
|                 shuttersdevice => $shuttersDev, |  | ||||||
|  |             $FHEM::Automation::ShuttersControl::shutters | ||||||
|  |               ->setRainUnprotectionDelayObj( \%funcHash ); | ||||||
|  |             ::InternalTimer( | ||||||
|  |                 ::gettimeofday() + | ||||||
|  |                   $FHEM::Automation::ShuttersControl::ascDev | ||||||
|  |                   ->getRainWaitingTime, | ||||||
|  |                 \&_RainUnprotected, \%funcHash | ||||||
|             ); |             ); | ||||||
|  |  | ||||||
|             $FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj(\%funcHash); |  | ||||||
|             ::InternalTimer( ::gettimeofday() + $FHEM::Automation::ShuttersControl::ascDev->getRainWaitingTime |  | ||||||
|                 , \&_RainUnprotected |  | ||||||
|                 , \%funcHash ); |  | ||||||
|              |  | ||||||
|             $FHEM::Automation::ShuttersControl::shutters |             $FHEM::Automation::ShuttersControl::shutters | ||||||
|                 ->setRainProtectionStatus('unprotected'); |               ->setRainProtectionStatus('unprotected'); | ||||||
|         } |         } | ||||||
|         else { |         else { | ||||||
|             if (  $FHEM::Automation::ShuttersControl::shutters->getStatus != $rainClosedPos |             if ( $FHEM::Automation::ShuttersControl::shutters->getStatus != | ||||||
|               && ($val == 0 || $val < $triggerMin) ) |                 $rainClosedPos | ||||||
|  |                 && ( $val == 0 || $val < $triggerMin ) ) | ||||||
|             { |             { | ||||||
|                 $FHEM::Automation::ShuttersControl::shutters |                 $FHEM::Automation::ShuttersControl::shutters | ||||||
|                   ->setRainProtectionStatus('unprotected'); |                   ->setRainProtectionStatus('unprotected'); | ||||||
|             } |             } | ||||||
|             elsif ($val > $triggerMax) { |             elsif ( $val > $triggerMax ) { | ||||||
|                 $FHEM::Automation::ShuttersControl::shutters |                 $FHEM::Automation::ShuttersControl::shutters | ||||||
|                   ->setRainProtectionStatus('protected'); |                   ->setRainProtectionStatus('protected'); | ||||||
|             }      |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -126,58 +129,69 @@ sub RainProcessing { | |||||||
|  |  | ||||||
| ### es muss noch beobachtet werden ob die Auswahl des Rollos welches bearbeitet werden soll bestehen bleibt oder mit in die neuen Funktionen übergeben werden muss | ### es muss noch beobachtet werden ob die Auswahl des Rollos welches bearbeitet werden soll bestehen bleibt oder mit in die neuen Funktionen übergeben werden muss | ||||||
| sub _RainProtected { | sub _RainProtected { | ||||||
|     ::RemoveInternalTimer($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj) |     ::RemoveInternalTimer( $FHEM::Automation::ShuttersControl::shutters | ||||||
|         if($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj ne 'none'); |           ->getRainUnprotectionDelayObj ) | ||||||
|          |       if ( $FHEM::Automation::ShuttersControl::shutters | ||||||
|     $FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none'); |         ->getRainUnprotectionDelayObj ne 'none' ); | ||||||
|  |  | ||||||
|  |     $FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj( | ||||||
|  |         'none'); | ||||||
|  |  | ||||||
|     $FHEM::Automation::ShuttersControl::shutters->setLastDrive( |     $FHEM::Automation::ShuttersControl::shutters->setLastDrive( | ||||||
|             'rain protected'); |         'rain protected'); | ||||||
|  |  | ||||||
|     $FHEM::Automation::ShuttersControl::shutters->setDriveCmd( |     $FHEM::Automation::ShuttersControl::shutters->setDriveCmd( | ||||||
|         $FHEM::Automation::ShuttersControl::ascDev |         $FHEM::Automation::ShuttersControl::ascDev | ||||||
|     ->getRainSensorShuttersClosedPos); |           ->getRainSensorShuttersClosedPos ); | ||||||
|  |  | ||||||
|     $FHEM::Automation::ShuttersControl::shutters |     $FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus( | ||||||
|         ->setRainProtectionStatus('protected'); |         'protected'); | ||||||
|  |  | ||||||
|  |     return; | ||||||
| } | } | ||||||
|  |  | ||||||
| sub _RainUnprotected { | sub _RainUnprotected { | ||||||
|     my $h = shift; |     my $h = shift; | ||||||
|      |  | ||||||
|     my $shuttersDev = $h->{shuttersdevice}; |     my $shuttersDev = $h->{shuttersdevice}; | ||||||
|     $FHEM::Automation::ShuttersControl::shutters->setShuttersDev( |     $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev); | ||||||
|             $shuttersDev); |  | ||||||
|  |  | ||||||
|     $FHEM::Automation::ShuttersControl::shutters->setLastDrive( |     $FHEM::Automation::ShuttersControl::shutters->setLastDrive( | ||||||
|             'rain un-protected'); |         'rain un-protected'); | ||||||
|  |  | ||||||
|     if ( $FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj ne 'none' ) { |     if ( $FHEM::Automation::ShuttersControl::shutters | ||||||
|         ::RemoveInternalTimer($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj); |         ->getRainUnprotectionDelayObj ne 'none' ) | ||||||
|         $FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none'); |     { | ||||||
|  |         ::RemoveInternalTimer( $FHEM::Automation::ShuttersControl::shutters | ||||||
|  |               ->getRainUnprotectionDelayObj ); | ||||||
|  |         $FHEM::Automation::ShuttersControl::shutters | ||||||
|  |           ->setRainUnprotectionDelayObj('none'); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     $FHEM::Automation::ShuttersControl::shutters->setDriveCmd( |     $FHEM::Automation::ShuttersControl::shutters->setDriveCmd( | ||||||
|         ( |         ( | ||||||
|                 $FHEM::Automation::ShuttersControl::shutters->getIsDay |               $FHEM::Automation::ShuttersControl::shutters->getIsDay | ||||||
|             ? $FHEM::Automation::ShuttersControl::shutters->getLastPos |             ? $FHEM::Automation::ShuttersControl::shutters->getLastPos | ||||||
|             : ( |             : ( | ||||||
|                 $FHEM::Automation::ShuttersControl::shutters |                 $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace | ||||||
|                     ->getPrivacyDownStatus == 2 |                   eq 'awning' | ||||||
|                 ? $FHEM::Automation::ShuttersControl::shutters |                 ? $FHEM::Automation::ShuttersControl::shutters->getOpenPos | ||||||
|                     ->getPrivacyDownPos |                 : ( | ||||||
|                 : $FHEM::Automation::ShuttersControl::shutters |                     $FHEM::Automation::ShuttersControl::shutters | ||||||
|                     ->getClosedPos |                       ->getPrivacyDownStatus == 2 | ||||||
|  |                     ? $FHEM::Automation::ShuttersControl::shutters | ||||||
|  |                       ->getPrivacyDownPos | ||||||
|  |                     : $FHEM::Automation::ShuttersControl::shutters | ||||||
|  |                       ->getClosedPos | ||||||
|  |                 ) | ||||||
|             ) |             ) | ||||||
|         ) |         ) | ||||||
|     ) |     ) if ( IsAfterShuttersTimeBlocking($shuttersDev) ); | ||||||
|     if (IsAfterShuttersTimeBlocking($shuttersDev)); |  | ||||||
|  |  | ||||||
|     $FHEM::Automation::ShuttersControl::shutters |     $FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus( | ||||||
|         ->setRainProtectionStatus('unprotected'); |         'unprotected'); | ||||||
|  |  | ||||||
|  |     return; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 1; | 1; | ||||||
|   | |||||||
| @@ -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-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
| @@ -44,37 +44,24 @@ use strict; | |||||||
| use warnings; | use warnings; | ||||||
| use utf8; | use utf8; | ||||||
|  |  | ||||||
| use GPUtils qw(GP_Import); | sub getRoommateStatus { | ||||||
|  |  | ||||||
| ## Import der FHEM Funktionen |  | ||||||
| BEGIN { |  | ||||||
|     GP_Import( |  | ||||||
|         qw( |  | ||||||
|           ReadingsVal) |  | ||||||
|     ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| sub _getRoommateStatus { |  | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     my $roommate = $self->{roommate}; |     my $roommate = $self->{roommate}; | ||||||
|  |  | ||||||
|     return ReadingsVal( $roommate, |     return ::ReadingsVal( $roommate, | ||||||
|         $FHEM::Automation::ShuttersControl::shutters->getRoommatesReading, |         $FHEM::Automation::ShuttersControl::shutters->getRoommatesReading, | ||||||
|         'none' ); |         'none' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub _getRoommateLastStatus { | sub getRoommateLastStatus { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     my $roommate = $self->{roommate}; |     my $roommate = $self->{roommate}; | ||||||
|     my $default  = $self->{defaultarg}; |     my $default  = $self->{defaultarg}; | ||||||
|  |  | ||||||
|     $default = 'none' if ( !defined($default) ); |     $default = 'none' if ( !defined($default) ); | ||||||
|     return ReadingsVal( $roommate, 'lastState', $default ); |     return ::ReadingsVal( $roommate, 'lastState', $default ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 1; | 1; | ||||||
|   | |||||||
| @@ -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-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
| @@ -64,27 +64,9 @@ our %EXPORT_TAGS = ( | |||||||
|     ], |     ], | ||||||
| ); | ); | ||||||
|  |  | ||||||
| use GPUtils qw(GP_Import); |  | ||||||
| ## Import der FHEM Funktionen |  | ||||||
| BEGIN { |  | ||||||
|     GP_Import( |  | ||||||
|         qw( |  | ||||||
|           Log3 |  | ||||||
|           gettimeofday |  | ||||||
|           InternalTimer |  | ||||||
|           ReadingsVal |  | ||||||
|           readingsBeginUpdate |  | ||||||
|           readingsBulkUpdate |  | ||||||
|           readingsBulkUpdateIfChanged |  | ||||||
|           readingsEndUpdate |  | ||||||
|           defs |  | ||||||
|           ) |  | ||||||
|     ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| sub CheckASC_ConditionsForShadingFn { | sub CheckASC_ConditionsForShadingFn { | ||||||
|     my $hash    = shift; |     my $hash  = shift; | ||||||
|     my $value   = shift; |     my $value = shift; | ||||||
|  |  | ||||||
|     my $error; |     my $error; | ||||||
|  |  | ||||||
| @@ -98,14 +80,14 @@ sub CheckASC_ConditionsForShadingFn { | |||||||
|     my $count = 1; |     my $count = 1; | ||||||
|     for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { |     for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { | ||||||
|         my %funcHash = ( |         my %funcHash = ( | ||||||
|             hash            => $hash, |             hash           => $hash, | ||||||
|             shuttersdevice  => $shuttersDev, |             shuttersdevice => $shuttersDev, | ||||||
|             value           => $value, |             value          => $value, | ||||||
|             attrEvent       => 0, |             attrEvent      => 0, | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         InternalTimer( |         ::InternalTimer( | ||||||
|             gettimeofday() + $count, |             ::gettimeofday() + $count, | ||||||
| 'FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn', | 'FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn', | ||||||
|             \%funcHash |             \%funcHash | ||||||
|         ); |         ); | ||||||
| @@ -121,86 +103,93 @@ sub CheckASC_ConditionsForShadingFn { | |||||||
| } | } | ||||||
|  |  | ||||||
| sub _CheckShuttersConditionsForShadingFn { | sub _CheckShuttersConditionsForShadingFn { | ||||||
|     my $funcHash    = shift; |     my $funcHash = shift; | ||||||
|      |  | ||||||
|     my $hash        = $funcHash->{hash}; |     my $hash        = $funcHash->{hash}; | ||||||
|     my $shuttersDev = $funcHash->{shuttersdevice}; |     my $shuttersDev = $funcHash->{shuttersdevice}; | ||||||
|     my $value       = $funcHash->{value}; |     my $value       = $funcHash->{value}; | ||||||
|  |  | ||||||
|     $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev); |     $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev); | ||||||
|     my $shuttersDevHash = $defs{$shuttersDev}; |     my $shuttersDevHash = $::defs{$shuttersDev}; | ||||||
|     my $message         = ''; |     my $message         = ''; | ||||||
|     my $errorMessage; |     my $errorMessage; | ||||||
|     my $warnMessage; |     my $warnMessage; | ||||||
|     my $infoMessage; |     my $infoMessage; | ||||||
|      |  | ||||||
|     if ( $value eq 'off' ) { |     if ( $value eq 'off' ) { | ||||||
|         $FHEM::Automation::ShuttersControl::shutters->setShadingStatus('out'); |         $FHEM::Automation::ShuttersControl::shutters->setShadingStatus('out'); | ||||||
|         $infoMessage    .= ' shading was deactivated ' . ($funcHash->{attrEvent} ? 'in the device' : 'globally'); |         $infoMessage .= ' shading was deactivated ' | ||||||
|         $errorMessage   .= ''; |           . ( $funcHash->{attrEvent} ? 'in the device' : 'globally' ); | ||||||
|  |         $errorMessage .= ''; | ||||||
|         ShadingProcessingDriveCommand( $hash, $shuttersDev ); |         ShadingProcessingDriveCommand( $hash, $shuttersDev ); | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|         $infoMessage .= ( |         $infoMessage .= ( | ||||||
|             $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne 'off' |             $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne | ||||||
|             && $FHEM::Automation::ShuttersControl::ascDev |               'off' | ||||||
|             ->getAutoShuttersControlShading eq 'on' |               && $FHEM::Automation::ShuttersControl::ascDev | ||||||
|             && $FHEM::Automation::ShuttersControl::shutters->getOutTemp == -100 |               ->getAutoShuttersControlShading eq 'on' | ||||||
|  |               && $FHEM::Automation::ShuttersControl::shutters->getOutTemp == | ||||||
|  |               -100 | ||||||
|             ? ' shading active, global temp sensor is set, but shutters temperature sensor is not set' |             ? ' shading active, global temp sensor is set, but shutters temperature sensor is not set' | ||||||
|             : '' |             : '' | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         $warnMessage .= ( |         $warnMessage .= ( | ||||||
|             $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off' |             $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq | ||||||
|             && $FHEM::Automation::ShuttersControl::ascDev |               'off' | ||||||
|             ->getAutoShuttersControlShading eq 'on' |               && $FHEM::Automation::ShuttersControl::ascDev | ||||||
|  |               ->getAutoShuttersControlShading eq 'on' | ||||||
|             ? ' global shading active but ASC_Shading_Mode attribut is not set or off' |             ? ' global shading active but ASC_Shading_Mode attribut is not set or off' | ||||||
|             : '' |             : '' | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         $errorMessage .= ( |         $errorMessage .= ( | ||||||
|             $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne 'off' |             $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne | ||||||
|             && $FHEM::Automation::ShuttersControl::ascDev |               'off' | ||||||
|             ->getAutoShuttersControlShading ne 'on' |               && $FHEM::Automation::ShuttersControl::ascDev | ||||||
|             && $FHEM::Automation::ShuttersControl::ascDev |               ->getAutoShuttersControlShading ne 'on' | ||||||
|             ->getAutoShuttersControlShading ne 'off' |               && $FHEM::Automation::ShuttersControl::ascDev | ||||||
|  |               ->getAutoShuttersControlShading ne 'off' | ||||||
|             ? ' ASC_Shading_Mode attribut is set but global shading has errors, look at ASC device ' |             ? ' ASC_Shading_Mode attribut is set but global shading has errors, look at ASC device ' | ||||||
|             . '<a href="' |               . '<a href="' | ||||||
|             . '/fhem?detail=' |               . '/fhem?detail=' | ||||||
|             . ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' ) |               . ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' ) | ||||||
|             . $::FW_CSRF . '">' |               . $::FW_CSRF . '">' | ||||||
|             . ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' ) |               . ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' ) | ||||||
|             . '</a>' |               . '</a>' | ||||||
|             : '' |             : '' | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         $errorMessage .= ( |         $errorMessage .= ( | ||||||
|             $FHEM::Automation::ShuttersControl::shutters->getBrightness == -1 |             $FHEM::Automation::ShuttersControl::shutters->getBrightness == -1 | ||||||
|             && $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne |               && $FHEM::Automation::ShuttersControl::shutters->getShadingMode | ||||||
|             'off' |               ne 'off' | ||||||
|             ? ' no brightness sensor found, please set ASC_BrightnessSensor attribut' |             ? ' no brightness sensor found, please set ASC_BrightnessSensor attribut' | ||||||
|             : '' |             : '' | ||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     $message .= ' ERROR: ' . $errorMessage |     $message .= ' ERROR: ' . $errorMessage | ||||||
|     if ( defined($errorMessage) |       if ( defined($errorMessage) | ||||||
|         && $errorMessage ne '' ); |         && $errorMessage ne '' ); | ||||||
|  |  | ||||||
|     $message .= ' WARN: ' . $warnMessage |     $message .= ' WARN: ' . $warnMessage | ||||||
|     if ( defined($warnMessage) |       if ( defined($warnMessage) | ||||||
|         && $warnMessage ne '' |         && $warnMessage ne '' | ||||||
|         && $errorMessage eq '' ); |         && $errorMessage eq '' ); | ||||||
|  |  | ||||||
|     $message .= ' INFO: ' . $infoMessage |     $message .= ' INFO: ' . $infoMessage | ||||||
|     if ( defined($infoMessage) |       if ( defined($infoMessage) | ||||||
|         && $infoMessage ne '' |         && $infoMessage ne '' | ||||||
|         && $errorMessage eq '' ); |         && $errorMessage eq '' ); | ||||||
|  |  | ||||||
|     readingsBeginUpdate($shuttersDevHash); |     ::readingsBeginUpdate($shuttersDevHash); | ||||||
|     readingsBulkUpdateIfChanged( $shuttersDevHash, 'ASC_ShadingMessage', |     ::readingsBulkUpdateIfChanged( $shuttersDevHash, 'ASC_ShadingMessage', | ||||||
|         '<html>' . $message . ' </html>' ); |         '<html>' . $message . ' </html>' ); | ||||||
|     readingsEndUpdate( $shuttersDevHash, 1 ); |     ::readingsEndUpdate( $shuttersDevHash, 1 ); | ||||||
|  |  | ||||||
|  |     return; | ||||||
| } | } | ||||||
|  |  | ||||||
| sub ShadingProcessing { | sub ShadingProcessing { | ||||||
| @@ -215,12 +204,18 @@ sub ShadingProcessing { | |||||||
|     $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev); |     $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev); | ||||||
|     my $brightness = |     my $brightness = | ||||||
|       $FHEM::Automation::ShuttersControl::shutters->getBrightnessAverage; |       $FHEM::Automation::ShuttersControl::shutters->getBrightnessAverage; | ||||||
|        |  | ||||||
|     $FHEM::Automation::ShuttersControl::shutters->setShadingBetweenTheTimeSuspend( |     $FHEM::Automation::ShuttersControl::shutters | ||||||
|           ( IsInTime($FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTime) |       ->setShadingBetweenTheTimeSuspend( | ||||||
|         ? 0 |         ( | ||||||
|         : 1 ) |             IsInTime( | ||||||
|     ); |                 $FHEM::Automation::ShuttersControl::shutters | ||||||
|  |                   ->getShadingBetweenTheTime | ||||||
|  |               ) | ||||||
|  |             ? 0 | ||||||
|  |             : 1 | ||||||
|  |         ) | ||||||
|  |       ); | ||||||
|  |  | ||||||
|     FHEM::Automation::ShuttersControl::ASC_Debug( |     FHEM::Automation::ShuttersControl::ASC_Debug( | ||||||
|             'ShadingProcessing: ' |             'ShadingProcessing: ' | ||||||
| @@ -250,7 +245,7 @@ sub ShadingProcessing { | |||||||
|           . ', Ist es nach der Hälfte der Beschattungswartezeit: ' |           . ', Ist es nach der Hälfte der Beschattungswartezeit: ' | ||||||
|           . ( |           . ( | ||||||
|             ( |             ( | ||||||
|                 int( gettimeofday() ) - |                 int( ::gettimeofday() ) - | ||||||
|                   $FHEM::Automation::ShuttersControl::shutters |                   $FHEM::Automation::ShuttersControl::shutters | ||||||
|                   ->getShadingStatusTimestamp |                   ->getShadingStatusTimestamp | ||||||
|             ) < ( |             ) < ( | ||||||
| @@ -260,7 +255,7 @@ sub ShadingProcessing { | |||||||
|           ) |           ) | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     Log3( $name, 4, |     ::Log3( $name, 4, | ||||||
|             "AutoShuttersControl ($name) - Shading Processing, Rollladen: " |             "AutoShuttersControl ($name) - Shading Processing, Rollladen: " | ||||||
|           . $shuttersDev |           . $shuttersDev | ||||||
|           . " Azimuth: " |           . " Azimuth: " | ||||||
| @@ -279,18 +274,20 @@ sub ShadingProcessing { | |||||||
|         || $brightness == -1 |         || $brightness == -1 | ||||||
|         || $outTemp == -100 |         || $outTemp == -100 | ||||||
|         || ( |         || ( | ||||||
|             int( gettimeofday() ) - |             int( ::gettimeofday() ) - | ||||||
|             $FHEM::Automation::ShuttersControl::shutters |             $FHEM::Automation::ShuttersControl::shutters | ||||||
|             ->getShadingStatusTimestamp ) < ( |             ->getShadingStatusTimestamp ) < ( | ||||||
|             $FHEM::Automation::ShuttersControl::shutters |             $FHEM::Automation::ShuttersControl::shutters | ||||||
|               ->getShadingWaitingPeriod / 2 |               ->getShadingWaitingPeriod / 2 | ||||||
|             ) |             ) | ||||||
|  |         || $FHEM::Automation::ShuttersControl::shutters | ||||||
|  |         ->getExternalTriggerStatus | ||||||
|         || $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off' |         || $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off' | ||||||
|         || $FHEM::Automation::ShuttersControl::ascDev |         || $FHEM::Automation::ShuttersControl::ascDev | ||||||
|               ->getAutoShuttersControlShading eq 'off' |         ->getAutoShuttersControlShading eq 'off' | ||||||
|       ); |       ); | ||||||
|  |  | ||||||
|     Log3( $name, 4, |     ::Log3( $name, 4, | ||||||
|             "AutoShuttersControl ($name) - Shading Processing, Rollladen: " |             "AutoShuttersControl ($name) - Shading Processing, Rollladen: " | ||||||
|           . $shuttersDev |           . $shuttersDev | ||||||
|           . " Nach dem return" ); |           . " Nach dem return" ); | ||||||
| @@ -300,7 +297,7 @@ sub ShadingProcessing { | |||||||
|     my $getStatus = $FHEM::Automation::ShuttersControl::shutters->getStatus; |     my $getStatus = $FHEM::Automation::ShuttersControl::shutters->getStatus; | ||||||
|     my $oldShadingStatus = |     my $oldShadingStatus = | ||||||
|       $FHEM::Automation::ShuttersControl::shutters->getShadingStatus; |       $FHEM::Automation::ShuttersControl::shutters->getShadingStatus; | ||||||
|     my $shuttersDevHash = $defs{$shuttersDev}; |     my $shuttersDevHash = $::defs{$shuttersDev}; | ||||||
|  |  | ||||||
|     my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp; |     my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp; | ||||||
|     my $homemode  = $FHEM::Automation::ShuttersControl::shutters->getHomemode; |     my $homemode  = $FHEM::Automation::ShuttersControl::shutters->getHomemode; | ||||||
| @@ -316,9 +313,9 @@ sub ShadingProcessing { | |||||||
|             ->getShadingMinOutsideTemperature - 4 |             ->getShadingMinOutsideTemperature - 4 | ||||||
|             || $azimuth < $azimuthLeft |             || $azimuth < $azimuthLeft | ||||||
|             || $azimuth > $azimuthRight |             || $azimuth > $azimuthRight | ||||||
|             || (   !$FHEM::Automation::ShuttersControl::shutters->getIsDay |             || (  !$FHEM::Automation::ShuttersControl::shutters->getIsDay | ||||||
|                 && $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime |                 && $FHEM::Automation::ShuttersControl::shutters | ||||||
|                   - ( int( gettimeofday() ) ) > 7200 ) |                 ->getSunriseUnixTime - ( int( ::gettimeofday() ) ) > 7200 ) | ||||||
|         ) |         ) | ||||||
|         && $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ne |         && $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ne | ||||||
|         'out' |         'out' | ||||||
| @@ -331,7 +328,7 @@ sub ShadingProcessing { | |||||||
|               . ' - Es ist Nacht oder die Aussentemperatur unterhalb der Shading Temperatur. Die Beschattung wird Zwangsbeendet' |               . ' - Es ist Nacht oder die Aussentemperatur unterhalb der Shading Temperatur. Die Beschattung wird Zwangsbeendet' | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         Log3( $name, 4, |         ::Log3( $name, 4, | ||||||
| "AutoShuttersControl ($name) - Shading Processing - Der Sonnenstand ist ausserhalb der Winkelangaben oder die Aussentemperatur unterhalb der Shading Temperatur " | "AutoShuttersControl ($name) - Shading Processing - Der Sonnenstand ist ausserhalb der Winkelangaben oder die Aussentemperatur unterhalb der Shading Temperatur " | ||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
| @@ -358,7 +355,7 @@ sub ShadingProcessing { | |||||||
|                 $FHEM::Automation::ShuttersControl::shutters->getShadingStatus |                 $FHEM::Automation::ShuttersControl::shutters->getShadingStatus | ||||||
|                 eq 'out reserved' |                 eq 'out reserved' | ||||||
|                 and ( |                 and ( | ||||||
|                     int( gettimeofday() ) - |                     int( ::gettimeofday() ) - | ||||||
|                     $FHEM::Automation::ShuttersControl::shutters |                     $FHEM::Automation::ShuttersControl::shutters | ||||||
|                     ->getShadingStatusTimestamp ) |                     ->getShadingStatusTimestamp ) | ||||||
|             ) > $FHEM::Automation::ShuttersControl::shutters |             ) > $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -369,7 +366,7 @@ sub ShadingProcessing { | |||||||
|                 'out'); |                 'out'); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         Log3( $name, 4, |         ::Log3( $name, 4, | ||||||
|                 "AutoShuttersControl ($name) - Shading Processing, Rollladen: " |                 "AutoShuttersControl ($name) - Shading Processing, Rollladen: " | ||||||
|               . $shuttersDev |               . $shuttersDev | ||||||
|               . " In der Out Abfrage, Shadingwert: " |               . " In der Out Abfrage, Shadingwert: " | ||||||
| @@ -411,7 +408,7 @@ sub ShadingProcessing { | |||||||
|             $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq |             $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq | ||||||
|             'in reserved' |             'in reserved' | ||||||
|             and ( |             and ( | ||||||
|                 int( gettimeofday() ) - |                 int( ::gettimeofday() ) - | ||||||
|                 $FHEM::Automation::ShuttersControl::shutters |                 $FHEM::Automation::ShuttersControl::shutters | ||||||
|                 ->getShadingStatusTimestamp ) > ( |                 ->getShadingStatusTimestamp ) > ( | ||||||
|                 $FHEM::Automation::ShuttersControl::shutters |                 $FHEM::Automation::ShuttersControl::shutters | ||||||
| @@ -423,7 +420,7 @@ sub ShadingProcessing { | |||||||
|                 'in'); |                 'in'); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         Log3( $name, 4, |         ::Log3( $name, 4, | ||||||
|                 "AutoShuttersControl ($name) - Shading Processing, Rollladen: " |                 "AutoShuttersControl ($name) - Shading Processing, Rollladen: " | ||||||
|               . $shuttersDev |               . $shuttersDev | ||||||
|               . " In der In Abfrage, Shadingwert: " |               . " In der In Abfrage, Shadingwert: " | ||||||
| @@ -468,22 +465,18 @@ sub ShadingProcessing { | |||||||
|             || $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq |             || $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq | ||||||
|             $homemode ) |             $homemode ) | ||||||
|         && ( |         && ( | ||||||
|             $getModeUp eq 'always' |                $getModeUp eq 'always' | ||||||
|             || $getModeUp eq |             || $getModeUp eq $homemode | ||||||
|             $homemode |  | ||||||
|             || $getModeUp eq 'off' |             || $getModeUp eq 'off' | ||||||
|             || $getModeUp eq |             || $getModeUp eq 'absent' | ||||||
|             'absent' |             || $getModeUp eq 'gone' | ||||||
|             || $getModeUp eq |             || (   $getModeUp eq 'home' | ||||||
|             'gone' |  | ||||||
|             || ( $getModeUp eq |  | ||||||
|                 'home' |  | ||||||
|                 && $homemode ne 'asleep' ) |                 && $homemode ne 'asleep' ) | ||||||
|         ) |         ) | ||||||
|         && ( |         && ( | ||||||
|             ( |             ( | ||||||
|                 ( |                 ( | ||||||
|                     int( gettimeofday() ) - |                     int( ::gettimeofday() ) - | ||||||
|                     $FHEM::Automation::ShuttersControl::shutters |                     $FHEM::Automation::ShuttersControl::shutters | ||||||
|                     ->getShadingStatusTimestamp |                     ->getShadingStatusTimestamp | ||||||
|                 ) < 2 |                 ) < 2 | ||||||
| @@ -497,18 +490,18 @@ sub ShadingProcessing { | |||||||
|                 ) |                 ) | ||||||
|                 && $FHEM::Automation::ShuttersControl::shutters->getIfInShading |                 && $FHEM::Automation::ShuttersControl::shutters->getIfInShading | ||||||
|             ) |             ) | ||||||
|             || (   !$FHEM::Automation::ShuttersControl::shutters->getIfInShading |             || (  !$FHEM::Automation::ShuttersControl::shutters->getIfInShading | ||||||
|                 && $FHEM::Automation::ShuttersControl::shutters->getStatus == |                 && $FHEM::Automation::ShuttersControl::shutters->getStatus == | ||||||
|                 $FHEM::Automation::ShuttersControl::shutters->getShadingPos |                 $FHEM::Automation::ShuttersControl::shutters->getShadingPos ) | ||||||
|             ) |             || ( !$FHEM::Automation::ShuttersControl::shutters | ||||||
|             || (   !$FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTimeSuspend |                 ->getShadingBetweenTheTimeSuspend | ||||||
|                 && $FHEM::Automation::ShuttersControl::shutters->getStatus != |                 && $FHEM::Automation::ShuttersControl::shutters->getStatus != | ||||||
|                 $FHEM::Automation::ShuttersControl::shutters->getShadingPos ) |                 $FHEM::Automation::ShuttersControl::shutters->getShadingPos ) | ||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
|  |  | ||||||
|     readingsBeginUpdate($shuttersDevHash); |     ::readingsBeginUpdate($shuttersDevHash); | ||||||
|     readingsBulkUpdate( |     ::readingsBulkUpdate( | ||||||
|         $shuttersDevHash, |         $shuttersDevHash, | ||||||
|         'ASC_ShadingMessage', |         'ASC_ShadingMessage', | ||||||
|         'INFO: current shading status is \'' |         'INFO: current shading status is \'' | ||||||
| @@ -531,7 +524,7 @@ sub ShadingProcessing { | |||||||
|           ) / 60 |           ) / 60 | ||||||
|           . 'm' |           . 'm' | ||||||
|     ); |     ); | ||||||
|     readingsEndUpdate( $shuttersDevHash, 1 ); |     ::readingsEndUpdate( $shuttersDevHash, 1 ); | ||||||
|  |  | ||||||
|     return; |     return; | ||||||
| } | } | ||||||
| @@ -551,19 +544,28 @@ sub ShadingProcessingDriveCommand { | |||||||
|     $FHEM::Automation::ShuttersControl::shutters->setShadingStatus( |     $FHEM::Automation::ShuttersControl::shutters->setShadingStatus( | ||||||
|         $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ); |         $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ); | ||||||
|  |  | ||||||
|     if (   IsInTime($FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTime) |     if ( | ||||||
|         && $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'in' |         IsInTime( | ||||||
|  |             $FHEM::Automation::ShuttersControl::shutters | ||||||
|  |               ->getShadingBetweenTheTime | ||||||
|  |         ) | ||||||
|  |         && $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq | ||||||
|  |         'in' | ||||||
|         && $getShadingPos != $getStatus |         && $getShadingPos != $getStatus | ||||||
|         && ( $getStatus != $FHEM::Automation::ShuttersControl::shutters->getClosedPos |         && ( | ||||||
|           || ( $getStatus == $FHEM::Automation::ShuttersControl::shutters->getClosedPos |             $getStatus != | ||||||
|             && $marker |             $FHEM::Automation::ShuttersControl::shutters->getClosedPos | ||||||
|             ) |             || ( $getStatus == | ||||||
|           ) |                    $FHEM::Automation::ShuttersControl::shutters->getClosedPos | ||||||
|         && ( $getStatus != $FHEM::Automation::ShuttersControl::shutters->getSleepPos |                 && $marker ) | ||||||
|           || ( $getStatus == $FHEM::Automation::ShuttersControl::shutters->getSleepPos |         ) | ||||||
|             && $marker |         && ( | ||||||
|             ) |             $getStatus != | ||||||
|           ) |             $FHEM::Automation::ShuttersControl::shutters->getSleepPos | ||||||
|  |             || ( $getStatus == | ||||||
|  |                    $FHEM::Automation::ShuttersControl::shutters->getSleepPos | ||||||
|  |                 && $marker ) | ||||||
|  |         ) | ||||||
|         && ( |         && ( | ||||||
|             FHEM::Automation::ShuttersControl::CheckIfShuttersWindowRecOpen( |             FHEM::Automation::ShuttersControl::CheckIfShuttersWindowRecOpen( | ||||||
|                 $shuttersDev) != 2 |                 $shuttersDev) != 2 | ||||||
| @@ -602,10 +604,10 @@ sub ShadingProcessingDriveCommand { | |||||||
|             ( |             ( | ||||||
|                 ( |                 ( | ||||||
|                     $getShadingPos == |                     $getShadingPos == | ||||||
|                          $FHEM::Automation::ShuttersControl::shutters->getLastPos |                       $FHEM::Automation::ShuttersControl::shutters->getLastPos | ||||||
|                       || $getShadingPos == |                       || $getShadingPos == | ||||||
|                          $FHEM::Automation::ShuttersControl::shutters |                       $FHEM::Automation::ShuttersControl::shutters | ||||||
|                          ->getShadingLastPos |                       ->getShadingLastPos | ||||||
|                 ) |                 ) | ||||||
|                 ? $FHEM::Automation::ShuttersControl::shutters->getOpenPos |                 ? $FHEM::Automation::ShuttersControl::shutters->getOpenPos | ||||||
|                 : ( |                 : ( | ||||||
| @@ -626,8 +628,10 @@ sub ShadingProcessingDriveCommand { | |||||||
|                     : $FHEM::Automation::ShuttersControl::shutters->getOpenPos |                     : $FHEM::Automation::ShuttersControl::shutters->getOpenPos | ||||||
|                 ) |                 ) | ||||||
|             ) |             ) | ||||||
|         ) if (    $FHEM::Automation::ShuttersControl::shutters->getIsDay |           ) | ||||||
|                || $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace eq 'awning' ); |           if ( $FHEM::Automation::ShuttersControl::shutters->getIsDay | ||||||
|  |             || $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace | ||||||
|  |             eq 'awning' ); | ||||||
|  |  | ||||||
|         FHEM::Automation::ShuttersControl::ASC_Debug( |         FHEM::Automation::ShuttersControl::ASC_Debug( | ||||||
|                 'ShadingProcessingDriveCommand: ' |                 'ShadingProcessingDriveCommand: ' | ||||||
| @@ -639,7 +643,7 @@ sub ShadingProcessingDriveCommand { | |||||||
|               . ' zum beenden der Beschattung gefahren' ); |               . ' zum beenden der Beschattung gefahren' ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     Log3( $name, 4, |     ::Log3( $name, 4, | ||||||
| "AutoShuttersControl ($name) - Shading Processing - In der Routine zum fahren der Rollläden, Shading Wert: " | "AutoShuttersControl ($name) - Shading Processing - In der Routine zum fahren der Rollläden, Shading Wert: " | ||||||
|           . $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ); |           . $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
| @@ -45,6 +45,10 @@ | |||||||
|  |  | ||||||
| package FHEM::Automation::ShuttersControl::Shutters; | package FHEM::Automation::ShuttersControl::Shutters; | ||||||
|  |  | ||||||
|  | use strict; | ||||||
|  | use warnings; | ||||||
|  | use utf8; | ||||||
|  |  | ||||||
| use FHEM::Automation::ShuttersControl::Shutters::Readings; | use FHEM::Automation::ShuttersControl::Shutters::Readings; | ||||||
| use FHEM::Automation::ShuttersControl::Shutters::Attr; | use FHEM::Automation::ShuttersControl::Shutters::Attr; | ||||||
| use FHEM::Automation::ShuttersControl::Roommate; | use FHEM::Automation::ShuttersControl::Roommate; | ||||||
| @@ -53,10 +57,6 @@ use FHEM::Automation::ShuttersControl::Window; | |||||||
| our @ISA = | our @ISA = | ||||||
|   qw(FHEM::Automation::ShuttersControl::Shutters::Readings FHEM::Automation::ShuttersControl::Shutters::Attr FHEM::Automation::ShuttersControl::Roommate FHEM::Automation::ShuttersControl::Window); |   qw(FHEM::Automation::ShuttersControl::Shutters::Readings FHEM::Automation::ShuttersControl::Shutters::Attr FHEM::Automation::ShuttersControl::Roommate FHEM::Automation::ShuttersControl::Window); | ||||||
|  |  | ||||||
| use strict; |  | ||||||
| use warnings; |  | ||||||
| use utf8; |  | ||||||
|  |  | ||||||
| sub new { | sub new { | ||||||
|     my $class = shift; |     my $class = shift; | ||||||
|     my $self  = { |     my $self  = { | ||||||
| @@ -161,6 +161,7 @@ sub setDriveCmd { | |||||||
|         $FHEM::Automation::ShuttersControl::shutters->setDelayCmd($posValue); |         $FHEM::Automation::ShuttersControl::shutters->setDelayCmd($posValue); | ||||||
|         $FHEM::Automation::ShuttersControl::ascDev->setDelayCmdReading; |         $FHEM::Automation::ShuttersControl::ascDev->setDelayCmdReading; | ||||||
|         $FHEM::Automation::ShuttersControl::shutters->setNoDelay(0); |         $FHEM::Automation::ShuttersControl::shutters->setNoDelay(0); | ||||||
|  |  | ||||||
| #         $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0) | #         $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0) | ||||||
| #           if ( $FHEM::Automation::ShuttersControl::shutters | #           if ( $FHEM::Automation::ShuttersControl::shutters | ||||||
| #             ->getExternalTriggerStatus ); | #             ->getExternalTriggerStatus ); | ||||||
| @@ -177,7 +178,8 @@ sub setDriveCmd { | |||||||
|           if ( $FHEM::Automation::ShuttersControl::shutters->getDelayCmd ne |           if ( $FHEM::Automation::ShuttersControl::shutters->getDelayCmd ne | ||||||
|             'none' ) |             'none' ) | ||||||
|           ; # setzt den Wert auf none da der Rolladen nun gesteuert werden kann. |           ; # setzt den Wert auf none da der Rolladen nun gesteuert werden kann. | ||||||
|         $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0) |         $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus( | ||||||
|  |             0) | ||||||
|           if ( $FHEM::Automation::ShuttersControl::shutters |           if ( $FHEM::Automation::ShuttersControl::shutters | ||||||
|             ->getExternalTriggerStatus ); |             ->getExternalTriggerStatus ); | ||||||
|  |  | ||||||
| @@ -460,7 +462,8 @@ sub setRainUnprotectionDelayObj { | |||||||
|     my $self  = shift; |     my $self  = shift; | ||||||
|     my $value = shift; |     my $value = shift; | ||||||
|  |  | ||||||
|     $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} = $value |     $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} | ||||||
|  |       = $value | ||||||
|       if ( defined($value) ); |       if ( defined($value) ); | ||||||
|     return; |     return; | ||||||
| } | } | ||||||
| @@ -545,12 +548,13 @@ sub getAttrUpdateChanges { | |||||||
| sub getIsDay { | sub getIsDay { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return FHEM::Automation::ShuttersControl::Helper::_IsDay( $self->{shuttersDev} ); |     return FHEM::Automation::ShuttersControl::Helper::_IsDay( | ||||||
|  |         $self->{shuttersDev} ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub getAntiFreezeStatus { | sub getAntiFreezeStatus { | ||||||
|     use POSIX qw(strftime); |     use POSIX qw(strftime); | ||||||
|     my $self = shift; |     my $self    = shift; | ||||||
|     my $daytime = strftime( "%P", localtime() ); |     my $daytime = strftime( "%P", localtime() ); | ||||||
|     $daytime = ( |     $daytime = ( | ||||||
|         defined($daytime) && $daytime |         defined($daytime) && $daytime | ||||||
| @@ -756,10 +760,12 @@ sub getRainUnprotectionDelayObj { | |||||||
|         ( |         ( | ||||||
|             defined( $self->{ $self->{shuttersDev} }->{RainProtection} ) |             defined( $self->{ $self->{shuttersDev} }->{RainProtection} ) | ||||||
|               && defined( |               && defined( | ||||||
|                 $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} |                 $self->{ $self->{shuttersDev} }->{RainProtection} | ||||||
|  |                   ->{UNPROTECTIONDELAYOBJVAL} | ||||||
|               ) |               ) | ||||||
|         ) |         ) | ||||||
|         ? $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} |         ? $self->{ $self->{shuttersDev} }->{RainProtection} | ||||||
|  |           ->{UNPROTECTIONDELAYOBJVAL} | ||||||
|         : 'none' |         : 'none' | ||||||
|     ); |     ); | ||||||
| } | } | ||||||
| @@ -821,7 +827,7 @@ sub getRoommatesStatus { | |||||||
|         $FHEM::Automation::ShuttersControl::shutters->setRoommate($ro); |         $FHEM::Automation::ShuttersControl::shutters->setRoommate($ro); | ||||||
|         my $currentPrio = |         my $currentPrio = | ||||||
|           $statePrio{ $FHEM::Automation::ShuttersControl::shutters |           $statePrio{ $FHEM::Automation::ShuttersControl::shutters | ||||||
|               ->_getRoommateStatus }; |               ->getRoommateStatus }; | ||||||
|         $minPrio = $currentPrio if ( $minPrio > $currentPrio ); |         $minPrio = $currentPrio if ( $minPrio > $currentPrio ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -854,7 +860,7 @@ sub getRoommatesLastStatus { | |||||||
|         $FHEM::Automation::ShuttersControl::shutters->setRoommate($ro); |         $FHEM::Automation::ShuttersControl::shutters->setRoommate($ro); | ||||||
|         my $currentPrio = |         my $currentPrio = | ||||||
|           $statePrio{ $FHEM::Automation::ShuttersControl::shutters |           $statePrio{ $FHEM::Automation::ShuttersControl::shutters | ||||||
|               ->_getRoommateLastStatus }; |               ->getRoommateLastStatus }; | ||||||
|         $minPrio = $currentPrio if ( $minPrio > $currentPrio ); |         $minPrio = $currentPrio if ( $minPrio > $currentPrio ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -899,7 +905,8 @@ sub setShadingStatus { | |||||||
|  |  | ||||||
|     $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} = $value |     $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} = $value | ||||||
|       if ( defined($value) ); |       if ( defined($value) ); | ||||||
|     $self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} = int( ::gettimeofday() ) |     $self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} = | ||||||
|  |       int( ::gettimeofday() ) | ||||||
|       if ( defined( $self->{ $self->{shuttersDev} }{ShadingStatus} ) ); |       if ( defined( $self->{ $self->{shuttersDev} }{ShadingStatus} ) ); | ||||||
|  |  | ||||||
|     return; |     return; | ||||||
| @@ -945,7 +952,7 @@ sub setShadingLastPos { | |||||||
|     return; |     return; | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setShadingBetweenTheTimeSuspend {       # Werte für value = 0, 1 | sub setShadingBetweenTheTimeSuspend {    # Werte für value = 0, 1 | ||||||
|     my $self  = shift; |     my $self  = shift; | ||||||
|     my $value = shift; |     my $value = shift; | ||||||
|  |  | ||||||
| @@ -1007,12 +1014,16 @@ sub getShadingStatus {   # Werte für value = in, out, in reserved, out reserved | |||||||
|     ); |     ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub getShadingBetweenTheTimeSuspend {   # Werte für value = 0, 1 | sub getShadingBetweenTheTimeSuspend {    # Werte für value = 0, 1 | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return ( |     return ( | ||||||
|         defined( $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend} ) |         defined( | ||||||
|           && defined( $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL} ) |             $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend} | ||||||
|  |           ) | ||||||
|  |           && defined( | ||||||
|  |             $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL} | ||||||
|  |           ) | ||||||
|         ? $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL} |         ? $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL} | ||||||
|         : 0 |         : 0 | ||||||
|     ); |     ); | ||||||
| @@ -1084,9 +1095,7 @@ sub getShadingLastPos { | |||||||
|  |  | ||||||
|     return ( |     return ( | ||||||
|         defined( $self->{ $self->{shuttersDev} }{ShadingLastPos} ) |         defined( $self->{ $self->{shuttersDev} }{ShadingLastPos} ) | ||||||
|           && defined( |           && defined( $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL} ) | ||||||
|             $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL} |  | ||||||
|           ) |  | ||||||
|         ? $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL} |         ? $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL} | ||||||
|         : $FHEM::Automation::ShuttersControl::shutters->getShadingPos |         : $FHEM::Automation::ShuttersControl::shutters->getShadingPos | ||||||
|     ); |     ); | ||||||
| @@ -1094,7 +1103,4 @@ sub getShadingLastPos { | |||||||
|  |  | ||||||
| ### Ende Beschattung | ### Ende Beschattung | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 1; | 1; | ||||||
|   | |||||||
| @@ -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-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
| @@ -46,24 +46,12 @@ use utf8; | |||||||
|  |  | ||||||
| use FHEM::Automation::ShuttersControl::Helper qw (IsAdv PerlCodeCheck); | use FHEM::Automation::ShuttersControl::Helper qw (IsAdv PerlCodeCheck); | ||||||
|  |  | ||||||
| use GPUtils qw(GP_Import); |  | ||||||
|  |  | ||||||
| ## Import der FHEM Funktionen |  | ||||||
| BEGIN { |  | ||||||
|     GP_Import( |  | ||||||
|         qw( |  | ||||||
|           AttrVal |  | ||||||
|           CommandAttr |  | ||||||
|           gettimeofday) |  | ||||||
|     ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| sub _setAttributs { | sub _setAttributs { | ||||||
|     my $shuttersDev = shift; |     my $shuttersDev = shift; | ||||||
|     my $attr        = shift; |     my $attr        = shift; | ||||||
|     my $attrVal     = shift; |     my $attrVal     = shift; | ||||||
|  |  | ||||||
|     CommandAttr( undef, $shuttersDev . ' ' . $attr . ' ' . $attrVal ); |     ::CommandAttr( undef, $shuttersDev . ' ' . $attr . ' ' . $attrVal ); | ||||||
|  |  | ||||||
|     return; |     return; | ||||||
| } | } | ||||||
| @@ -77,28 +65,28 @@ sub _getPosition { | |||||||
|     return $self->{ $self->{shuttersDev} }->{$attr}->{position} |     return $self->{ $self->{shuttersDev} }->{$attr}->{position} | ||||||
|       if ( |       if ( | ||||||
|         exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) |         exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2 |             $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
|     $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} = |     $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} = | ||||||
|       int( gettimeofday() ); |       int( ::gettimeofday() ); | ||||||
|  |  | ||||||
|     my $position; |     my $position; | ||||||
|     my $posAssignment; |     my $posAssignment; | ||||||
|  |  | ||||||
|     if ( |     if ( | ||||||
|         AttrVal( $self->{shuttersDev}, $attr, |         ::AttrVal( $self->{shuttersDev}, $attr, | ||||||
|             $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} |             $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} | ||||||
|               [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ) =~ |               [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ) =~ | ||||||
|         m{\A\{.+\}\z}xms |         m{\A\{.+\}\z}xms | ||||||
|       ) |       ) | ||||||
|     { |     { | ||||||
|         my $response = PerlCodeCheck( |         my $response = PerlCodeCheck( | ||||||
|             AttrVal( |             ::AttrVal( | ||||||
|                 $self->{shuttersDev}, |                 $self->{shuttersDev}, | ||||||
|                 $attr, |                 $attr, | ||||||
|                 $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} |                 $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} | ||||||
|                   [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] |                   [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] | ||||||
|             ) |             ) | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
| @@ -108,14 +96,14 @@ sub _getPosition { | |||||||
|               $position =~ m{\A\d+(\.\d+)?\z}xms |               $position =~ m{\A\d+(\.\d+)?\z}xms | ||||||
|             ? $position |             ? $position | ||||||
|             : $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} |             : $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} | ||||||
|               [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] |               [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         $posAssignment = ( |         $posAssignment = ( | ||||||
|                 defined($posAssignment) |             defined($posAssignment) | ||||||
|             &&  $posAssignment =~ m{\A\d+(\.\d+)?\z}xms |               && $posAssignment =~ m{\A\d+(\.\d+)?\z}xms | ||||||
|               ? $posAssignment |             ? $posAssignment | ||||||
|               : 'none' |             : 'none' | ||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
| @@ -124,7 +112,7 @@ sub _getPosition { | |||||||
|             $self->{shuttersDev}, |             $self->{shuttersDev}, | ||||||
|             $attr, |             $attr, | ||||||
|             $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} |             $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} | ||||||
|               [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] |               [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] | ||||||
|           ); |           ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -145,8 +133,7 @@ sub _getPosition { | |||||||
|       ) |       ) | ||||||
|     { |     { | ||||||
|         $self->{ $self->{shuttersDev} }->{$attr}->{position} = |         $self->{ $self->{shuttersDev} }->{$attr}->{position} = | ||||||
|           PerlCodeCheck( |           PerlCodeCheck( $self->{ $self->{shuttersDev} }->{$attr}->{position} ); | ||||||
|             $self->{ $self->{shuttersDev} }->{$attr}->{position} ); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return ( |     return ( | ||||||
| @@ -154,7 +141,7 @@ sub _getPosition { | |||||||
|           m{^\d+(\.\d+)?$}xms |           m{^\d+(\.\d+)?$}xms | ||||||
|         ? $self->{ $self->{shuttersDev} }->{$attr}->{position} |         ? $self->{ $self->{shuttersDev} }->{$attr}->{position} | ||||||
|         : $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} |         : $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} | ||||||
|           [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] |           [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] | ||||||
|     ); |     ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -167,7 +154,7 @@ sub _getPositionAssignment { | |||||||
|     return $self->{ $self->{shuttersDev} }->{$attr}->{posAssignment} |     return $self->{ $self->{shuttersDev} }->{$attr}->{posAssignment} | ||||||
|       if ( |       if ( | ||||||
|         exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) |         exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2 |             $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
|     $FHEM::Automation::ShuttersControl::shutters->$getFn; |     $FHEM::Automation::ShuttersControl::shutters->$getFn; | ||||||
| @@ -213,7 +200,7 @@ sub setShuttersPlace { | |||||||
| sub getShuttersPlace { | sub getShuttersPlace { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setSlatPosCmd { | sub setSlatPosCmd { | ||||||
| @@ -236,15 +223,15 @@ sub getSlatPosCmd { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} |             $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} |             $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}->{LASTGETTIME} |     $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}->{LASTGETTIME} | ||||||
|       = int( gettimeofday() ); |       = int( ::gettimeofday() ); | ||||||
|     my ( $slatPosCmd, $slatDevice ) = |     my ( $slatPosCmd, $slatDevice ) = | ||||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, |       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( | ||||||
|         'ASC_SlatPosCmd_SlatDevice', 'none:none' ); |         $self->{shuttersDev}, 'ASC_SlatPosCmd_SlatDevice', 'none:none' ); | ||||||
|  |  | ||||||
|     ## Erwartetes Ergebnis |     ## Erwartetes Ergebnis | ||||||
|     # upTime:upBrightnessVal |     # upTime:upBrightnessVal | ||||||
| @@ -268,7 +255,7 @@ sub getSlatDevice { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} |             $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} |             $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -299,15 +286,15 @@ sub getPrivacyUpTime { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} |             $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} |             $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} |     $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} | ||||||
|       ->{LASTGETTIME} = int( gettimeofday() ); |       ->{LASTGETTIME} = int( ::gettimeofday() ); | ||||||
|     my ( $upTime, $upBrightnessVal ) = |     my ( $upTime, $upBrightnessVal ) = | ||||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, |       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( | ||||||
|         'ASC_PrivacyUpValue_beforeDayOpen', '-1:-1' ); |         $self->{shuttersDev}, 'ASC_PrivacyUpValue_beforeDayOpen', '-1:-1' ); | ||||||
|  |  | ||||||
|     ## Erwartetes Ergebnis |     ## Erwartetes Ergebnis | ||||||
|     # upTime:upBrightnessVal |     # upTime:upBrightnessVal | ||||||
| @@ -341,7 +328,7 @@ sub getPrivacyUpBrightnessVal { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} |             $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} |             $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -378,14 +365,15 @@ sub getPrivacyDownTime { | |||||||
|             $self->{ $self->{shuttersDev} } |             $self->{ $self->{shuttersDev} } | ||||||
|               ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} |               ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} } |             $self->{ $self->{shuttersDev} } | ||||||
|             ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2 |             ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_PrivacyDownValue_beforeNightClose} |     $self->{ $self->{shuttersDev} }->{ASC_PrivacyDownValue_beforeNightClose} | ||||||
|       ->{LASTGETTIME} = int( gettimeofday() ); |       ->{LASTGETTIME} = int( ::gettimeofday() ); | ||||||
|     my ( $downTime, $downBrightnessVal ) = |     my ( $downTime, $downBrightnessVal ) = | ||||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, |       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( | ||||||
|  |         $self->{shuttersDev}, | ||||||
|         'ASC_PrivacyDownValue_beforeNightClose', '-1:-1' ); |         'ASC_PrivacyDownValue_beforeNightClose', '-1:-1' ); | ||||||
|  |  | ||||||
|     ## Erwartetes Ergebnis |     ## Erwartetes Ergebnis | ||||||
| @@ -420,7 +408,7 @@ sub getPrivacyDownBrightnessVal { | |||||||
|             $self->{ $self->{shuttersDev} } |             $self->{ $self->{shuttersDev} } | ||||||
|               ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} |               ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} } |             $self->{ $self->{shuttersDev} } | ||||||
|             ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2 |             ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -497,7 +485,7 @@ sub setSelfDefenseMode { | |||||||
| sub getSelfDefenseMode { | sub getSelfDefenseMode { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_Mode', 'gone' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_Mode', 'gone' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setSelfDefenseAbsentDelay { | sub setSelfDefenseAbsentDelay { | ||||||
| @@ -513,13 +501,14 @@ sub setSelfDefenseAbsentDelay { | |||||||
| sub getSelfDefenseAbsentDelay { | sub getSelfDefenseAbsentDelay { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_AbsentDelay', 300 ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_AbsentDelay', | ||||||
|  |         300 ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub getCommandTemplate { | sub getCommandTemplate { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_CommandTemplate', 'none' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_CommandTemplate', 'none' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setWiggleValue { | sub setWiggleValue { | ||||||
| @@ -534,7 +523,7 @@ sub setWiggleValue { | |||||||
| sub getWiggleValue { | sub getWiggleValue { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setAdv { | sub setAdv { | ||||||
| @@ -550,7 +539,7 @@ sub getAdv { | |||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return ( |     return ( | ||||||
|         AttrVal( $self->{shuttersDev}, 'ASC_Adv', 'off' ) eq 'on' |         ::AttrVal( $self->{shuttersDev}, 'ASC_Adv', 'off' ) eq 'on' | ||||||
|         ? ( IsAdv == 1 ? 1 : 0 ) |         ? ( IsAdv == 1 ? 1 : 0 ) | ||||||
|         : 0 |         : 0 | ||||||
|     ); |     ); | ||||||
| @@ -593,7 +582,7 @@ sub setShadingMode { | |||||||
| sub getShadingMode { | sub getShadingMode { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'off' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'off' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub _getTempSensor { | sub _getTempSensor { | ||||||
| @@ -604,15 +593,15 @@ sub _getTempSensor { | |||||||
|         exists( |         exists( | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} |             $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} ) |             $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} ) | ||||||
|         < 2 |         < 2 | ||||||
|       ); |       ); | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} = |     $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} = | ||||||
|       int( gettimeofday() ); |       int( ::gettimeofday() ); | ||||||
|     my ( $device, $reading ) = |     my ( $device, $reading ) = | ||||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, |       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( | ||||||
|         'ASC_TempSensor', 'none' ); |         $self->{shuttersDev}, 'ASC_TempSensor', 'none' ); | ||||||
|  |  | ||||||
|     ### erwartetes Ergebnis |     ### erwartetes Ergebnis | ||||||
|     # DEVICE:READING |     # DEVICE:READING | ||||||
| @@ -631,7 +620,7 @@ sub getTempSensorReading { | |||||||
|         exists( |         exists( | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} |             $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} ) |             $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} ) | ||||||
|         < 2 |         < 2 | ||||||
|       ); |       ); | ||||||
| @@ -664,15 +653,15 @@ sub _getIdleDetectionReading { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} |             $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} |             $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}->{LASTGETTIME} |     $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}->{LASTGETTIME} | ||||||
|       = int( gettimeofday() ); |       = int( ::gettimeofday() ); | ||||||
|     my ( $reading, $value ) = |     my ( $reading, $value ) = | ||||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, |       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( | ||||||
|         'ASC_Shutter_IdleDetection', 'none' ); |         $self->{shuttersDev}, 'ASC_Shutter_IdleDetection', 'none' ); | ||||||
|  |  | ||||||
|     ### erwartetes Ergebnis |     ### erwartetes Ergebnis | ||||||
|     # READING:VALUE |     # READING:VALUE | ||||||
| @@ -694,7 +683,7 @@ sub getIdleDetectionValue { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} |             $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} |             $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -728,15 +717,15 @@ sub _getBrightnessSensor { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} |             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} |             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}->{LASTGETTIME} = |     $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}->{LASTGETTIME} = | ||||||
|       int( gettimeofday() ); |       int( ::gettimeofday() ); | ||||||
|     my ( $device, $reading, $max, $min ) = |     my ( $device, $reading, $max, $min ) = | ||||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, |       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( | ||||||
|         'ASC_BrightnessSensor', 'none' ); |         $self->{shuttersDev}, 'ASC_BrightnessSensor', 'none' ); | ||||||
|  |  | ||||||
|     ### erwartetes Ergebnis |     ### erwartetes Ergebnis | ||||||
|     # DEVICE:READING MAX:MIN |     # DEVICE:READING MAX:MIN | ||||||
| @@ -760,7 +749,7 @@ sub getBrightnessReading { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} |             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} |             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -785,7 +774,7 @@ sub getShadingAzimuthLeft { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} |             $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} |             $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -814,15 +803,15 @@ sub getShadingAzimuthRight { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} |             $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} |             $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}->{LASTGETTIME} |     $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}->{LASTGETTIME} | ||||||
|       = int( gettimeofday() ); |       = int( ::gettimeofday() ); | ||||||
|     my ( $left, $right ) = |     my ( $left, $right ) = | ||||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, |       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( | ||||||
|         'ASC_Shading_InOutAzimuth', '95:265' ); |         $self->{shuttersDev}, 'ASC_Shading_InOutAzimuth', '95:265' ); | ||||||
|  |  | ||||||
|     ### erwartetes Ergebnis |     ### erwartetes Ergebnis | ||||||
|     # MIN:MAX |     # MIN:MAX | ||||||
| @@ -849,8 +838,8 @@ sub setShadingMinOutsideTemperature { | |||||||
| sub getShadingMinOutsideTemperature { | sub getShadingMinOutsideTemperature { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Min_OutsideTemperature', |     return ::AttrVal( $self->{shuttersDev}, | ||||||
|         18 ); |         'ASC_Shading_Min_OutsideTemperature', 18 ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setShadingMinMaxElevation { | sub setShadingMinMaxElevation { | ||||||
| @@ -873,15 +862,15 @@ sub getShadingMinElevation { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} |             $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} |             $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} |     $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} | ||||||
|       ->{LASTGETTIME} = int( gettimeofday() ); |       ->{LASTGETTIME} = int( ::gettimeofday() ); | ||||||
|     my ( $min, $max ) = |     my ( $min, $max ) = | ||||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, |       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( | ||||||
|         'ASC_Shading_MinMax_Elevation', '25.0:100.0' ); |         $self->{shuttersDev}, 'ASC_Shading_MinMax_Elevation', '25.0:100.0' ); | ||||||
|  |  | ||||||
|     ### erwartetes Ergebnis |     ### erwartetes Ergebnis | ||||||
|     # MIN:MAX |     # MIN:MAX | ||||||
| @@ -905,7 +894,7 @@ sub getShadingMaxElevation { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} |             $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} |             $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -943,15 +932,15 @@ sub getShadingStateChangeSunny { | |||||||
|             $self->{ $self->{shuttersDev} } |             $self->{ $self->{shuttersDev} } | ||||||
|               ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} |               ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} } |             $self->{ $self->{shuttersDev} } | ||||||
|             ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2 |             ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_Shading_StateChange_SunnyCloudy} |     $self->{ $self->{shuttersDev} }->{ASC_Shading_StateChange_SunnyCloudy} | ||||||
|       ->{LASTGETTIME} = int( gettimeofday() ); |       ->{LASTGETTIME} = int( ::gettimeofday() ); | ||||||
|     my ( $sunny, $cloudy, $maxBrightnessAverageArrayObjects ) = |     my ( $sunny, $cloudy, $maxBrightnessAverageArrayObjects ) = | ||||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, |       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( | ||||||
|         'ASC_Shading_StateChange_SunnyCloudy', |         $self->{shuttersDev}, 'ASC_Shading_StateChange_SunnyCloudy', | ||||||
|         '35000:20000' ); |         '35000:20000' ); | ||||||
|  |  | ||||||
|     ### erwartetes Ergebnis |     ### erwartetes Ergebnis | ||||||
| @@ -982,7 +971,7 @@ sub getShadingStateChangeCloudy { | |||||||
|             $self->{ $self->{shuttersDev} } |             $self->{ $self->{shuttersDev} } | ||||||
|               ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} |               ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} } |             $self->{ $self->{shuttersDev} } | ||||||
|             ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2 |             ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -1002,7 +991,7 @@ sub getMaxBrightnessAverageArrayObjects { | |||||||
|             $self->{ $self->{shuttersDev} } |             $self->{ $self->{shuttersDev} } | ||||||
|               ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} |               ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} } |             $self->{ $self->{shuttersDev} } | ||||||
|             ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2 |             ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -1025,7 +1014,7 @@ sub setShadingWaitingPeriod { | |||||||
| sub getShadingWaitingPeriod { | sub getShadingWaitingPeriod { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Shading_WaitingPeriod', 1200 ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_WaitingPeriod', 1200 ); | ||||||
| } | } | ||||||
| ### Ende Beschattung | ### Ende Beschattung | ||||||
| sub setExternalTrigger { | sub setExternalTrigger { | ||||||
| @@ -1046,16 +1035,16 @@ sub getExternalTriggerDevice { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{LASTGETTIME} = |     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{LASTGETTIME} = | ||||||
|       int( gettimeofday() ); |       int( ::gettimeofday() ); | ||||||
|     my ( $device, $reading, $valueActive, $valueInactive, $posActive, |     my ( $device, $reading, $valueActive, $valueInactive, $posActive, | ||||||
|         $posInactive, $valueActive2, $posActive2 ) |         $posInactive, $valueActive2, $posActive2 ) | ||||||
|       = FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, |       = FHEM::Automation::ShuttersControl::Helper::GetAttrValues( | ||||||
|         'ASC_ExternalTrigger', 'none' ); |         $self->{shuttersDev}, 'ASC_ExternalTrigger', 'none' ); | ||||||
|  |  | ||||||
|     ### erwartetes Ergebnis |     ### erwartetes Ergebnis | ||||||
| # DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE VALUEACTIVE2:POSACTIVE2 | # DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE VALUEACTIVE2:POSACTIVE2 | ||||||
| @@ -1070,10 +1059,11 @@ sub getExternalTriggerDevice { | |||||||
|       $valueInactive; |       $valueInactive; | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive} = |     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive} = | ||||||
|       $posActive; |       $posActive; | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posinactive} = |     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posinactive} = ( | ||||||
|       (   $posInactive ne 'none' |           $posInactive ne 'none' | ||||||
|         ? $posInactive |         ? $posInactive | ||||||
|         : $FHEM::Automation::ShuttersControl::shutters->getLastPos ); |         : $FHEM::Automation::ShuttersControl::shutters->getLastPos | ||||||
|  |     ); | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{valueactive2} = |     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{valueactive2} = | ||||||
|       $valueActive2; |       $valueActive2; | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive2} = |     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive2} = | ||||||
| @@ -1092,7 +1082,7 @@ sub getExternalTriggerReading { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -1110,7 +1100,7 @@ sub getExternalTriggerValueActive { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -1130,7 +1120,7 @@ sub getExternalTriggerValueActive2 { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -1150,7 +1140,7 @@ sub getExternalTriggerValueInactive { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -1169,7 +1159,7 @@ sub getExternalTriggerPosActive { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -1187,7 +1177,7 @@ sub getExternalTriggerPosActive2 { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -1205,7 +1195,7 @@ sub getExternalTriggerPosInactive { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} |             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -1227,7 +1217,7 @@ sub setDelay { | |||||||
| sub getDelay { | sub getDelay { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     my $val = AttrVal( $self->{shuttersDev}, 'ASC_Drive_Delay', -1 ); |     my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Drive_Delay', -1 ); | ||||||
|     return ( $val =~ m{^\d+$}xms ? $val : -1 ); |     return ( $val =~ m{^\d+$}xms ? $val : -1 ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1243,7 +1233,7 @@ sub setDelayStart { | |||||||
| sub getDelayStart { | sub getDelayStart { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     my $val = AttrVal( $self->{shuttersDev}, 'ASC_Drive_DelayStart', -1 ); |     my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Drive_DelayStart', -1 ); | ||||||
|     return ( ( $val > 0 && $val =~ m{^\d+$}xms ) ? $val : -1 ); |     return ( ( $val > 0 && $val =~ m{^\d+$}xms ) ? $val : -1 ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1260,7 +1250,7 @@ sub setBlockingTimeAfterManual { | |||||||
| sub getBlockingTimeAfterManual { | sub getBlockingTimeAfterManual { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_afterManual', |     return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_afterManual', | ||||||
|         1200 ); |         1200 ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1277,7 +1267,7 @@ sub setBlockingTimeBeforNightClose { | |||||||
| sub getBlockingTimeBeforNightClose { | sub getBlockingTimeBeforNightClose { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforNightClose', |     return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforNightClose', | ||||||
|         3600 ); |         3600 ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1294,7 +1284,7 @@ sub setBlockingTimeBeforDayOpen { | |||||||
| sub getBlockingTimeBeforDayOpen { | sub getBlockingTimeBeforDayOpen { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforDayOpen', |     return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforDayOpen', | ||||||
|         3600 ); |         3600 ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1310,9 +1300,9 @@ sub setPosCmd { | |||||||
| sub getPosCmd { | sub getPosCmd { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading', |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading', | ||||||
|         $FHEM::Automation::ShuttersControl::userAttrList{'ASC_Pos_Reading'} |         $FHEM::Automation::ShuttersControl::userAttrList{'ASC_Pos_Reading'} | ||||||
|           [ AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] ); |           [ ::AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setOpenPos { | sub setOpenPos { | ||||||
| @@ -1377,7 +1367,7 @@ sub setVentilatePosAfterDayClosed { | |||||||
| sub getVentilatePosAfterDayClosed { | sub getVentilatePosAfterDayClosed { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_PosAfterDayClosed', |     return ::AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_PosAfterDayClosed', | ||||||
|         'open' ); |         'open' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1442,7 +1432,7 @@ sub setVentilateOpen { | |||||||
| sub getVentilateOpen { | sub getVentilateOpen { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Window_Open', 'on' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Window_Open', 'on' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setComfortOpenPos { | sub setComfortOpenPos { | ||||||
| @@ -1482,7 +1472,7 @@ sub setPartyMode { | |||||||
| sub getPartyMode { | sub getPartyMode { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Partymode', 'off' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Partymode', 'off' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setRoommates { | sub setRoommates { | ||||||
| @@ -1497,7 +1487,7 @@ sub setRoommates { | |||||||
| sub getRoommates { | sub getRoommates { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Device', 'none' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Device', 'none' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setRoommatesReading { | sub setRoommatesReading { | ||||||
| @@ -1512,7 +1502,7 @@ sub setRoommatesReading { | |||||||
| sub getRoommatesReading { | sub getRoommatesReading { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Reading', 'state' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Reading', 'state' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub getWindPos { | sub getWindPos { | ||||||
| @@ -1525,7 +1515,7 @@ sub getWindPos { | |||||||
|         exists( |         exists( | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} |             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} |             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} | ||||||
|         ) < 2 |         ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -1544,15 +1534,15 @@ sub getWindMax { | |||||||
|         exists( |         exists( | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} |             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} |             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} | ||||||
|         ) < 2 |         ) < 2 | ||||||
|       ); |       ); | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} = |     $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} = | ||||||
|       int( gettimeofday() ); |       int( ::gettimeofday() ); | ||||||
|     my ( $max, $hyst, $pos ) = |     my ( $max, $hyst, $pos ) = | ||||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, |       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( | ||||||
|         'ASC_WindParameters', '50:20' ); |         $self->{shuttersDev}, 'ASC_WindParameters', '50:20' ); | ||||||
|  |  | ||||||
|     ## Erwartetes Ergebnis |     ## Erwartetes Ergebnis | ||||||
|     # max:hyst pos |     # max:hyst pos | ||||||
| @@ -1560,10 +1550,11 @@ sub getWindMax { | |||||||
|     $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax} = $max; |     $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax} = $max; | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggerhyst} = |     $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggerhyst} = | ||||||
|       ( $hyst ne 'none' ? $max - $hyst : $max - 20 ); |       ( $hyst ne 'none' ? $max - $hyst : $max - 20 ); | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{closedPos} = |     $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{closedPos} = ( | ||||||
|       (   $pos ne 'none' |           $pos ne 'none' | ||||||
|         ? $pos |         ? $pos | ||||||
|         : $FHEM::Automation::ShuttersControl::shutters->getOpenPos ); |         : $FHEM::Automation::ShuttersControl::shutters->getOpenPos | ||||||
|  |     ); | ||||||
|  |  | ||||||
|     return $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax}; |     return $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax}; | ||||||
| } | } | ||||||
| @@ -1587,7 +1578,7 @@ sub getWindMin { | |||||||
|         exists( |         exists( | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} |             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} |             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} | ||||||
|         ) < 2 |         ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -1608,7 +1599,7 @@ sub setWindProtection { | |||||||
| sub getWindProtection { | sub getWindProtection { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_WindProtection', 'off' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_WindProtection', 'off' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setRainProtection { | sub setRainProtection { | ||||||
| @@ -1623,7 +1614,7 @@ sub setRainProtection { | |||||||
| sub getRainProtection { | sub getRainProtection { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_RainProtection', 'off' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_RainProtection', 'off' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setModeUp { | sub setModeUp { | ||||||
| @@ -1638,7 +1629,7 @@ sub setModeUp { | |||||||
| sub getModeUp { | sub getModeUp { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Mode_Up', 'always' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Mode_Up', 'always' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setModeDown { | sub setModeDown { | ||||||
| @@ -1653,7 +1644,7 @@ sub setModeDown { | |||||||
| sub getModeDown { | sub getModeDown { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Mode_Down', 'always' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Mode_Down', 'always' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setLockOut { | sub setLockOut { | ||||||
| @@ -1668,7 +1659,7 @@ sub setLockOut { | |||||||
| sub getLockOut { | sub getLockOut { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_LockOut', 'off' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_LockOut', 'off' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setLockOutCmd { | sub setLockOutCmd { | ||||||
| @@ -1683,7 +1674,7 @@ sub setLockOutCmd { | |||||||
| sub getLockOutCmd { | sub getLockOutCmd { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_LockOut_Cmd', 'none' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_LockOut_Cmd', 'none' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setAntiFreeze { | sub setAntiFreeze { | ||||||
| @@ -1698,7 +1689,7 @@ sub setAntiFreeze { | |||||||
| sub getAntiFreeze { | sub getAntiFreeze { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Antifreeze', 'off' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Antifreeze', 'off' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setAutoAstroModeMorning { | sub setAutoAstroModeMorning { | ||||||
| @@ -1713,7 +1704,8 @@ sub setAutoAstroModeMorning { | |||||||
| sub getAutoAstroModeMorning { | sub getAutoAstroModeMorning { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorning', 'none' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorning', | ||||||
|  |         'none' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setAutoAstroModeEvening { | sub setAutoAstroModeEvening { | ||||||
| @@ -1728,7 +1720,8 @@ sub setAutoAstroModeEvening { | |||||||
| sub getAutoAstroModeEvening { | sub getAutoAstroModeEvening { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEvening', 'none' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEvening', | ||||||
|  |         'none' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setAutoAstroModeMorningHorizon { | sub setAutoAstroModeMorningHorizon { | ||||||
| @@ -1744,7 +1737,7 @@ sub setAutoAstroModeMorningHorizon { | |||||||
| sub getAutoAstroModeMorningHorizon { | sub getAutoAstroModeMorningHorizon { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorningHorizon', |     return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorningHorizon', | ||||||
|         0 ); |         0 ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1761,7 +1754,7 @@ sub setAutoAstroModeEveningHorizon { | |||||||
| sub getAutoAstroModeEveningHorizon { | sub getAutoAstroModeEveningHorizon { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEveningHorizon', |     return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEveningHorizon', | ||||||
|         0 ); |         0 ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -1777,7 +1770,7 @@ sub setUp { | |||||||
| sub getUp { | sub getUp { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Up', 'astro' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Up', 'astro' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setDown { | sub setDown { | ||||||
| @@ -1792,14 +1785,15 @@ sub setDown { | |||||||
| sub getDown { | sub getDown { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Down', 'astro' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Down', 'astro' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setShadingBetweenTheTime { | sub setShadingBetweenTheTime { | ||||||
|     my $self    = shift; |     my $self    = shift; | ||||||
|     my $attrVal = shift; |     my $attrVal = shift; | ||||||
|  |  | ||||||
|     _setAttributs( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime', $attrVal ); |     _setAttributs( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime', | ||||||
|  |         $attrVal ); | ||||||
|  |  | ||||||
|     return; |     return; | ||||||
| } | } | ||||||
| @@ -1807,7 +1801,8 @@ sub setShadingBetweenTheTime { | |||||||
| sub getShadingBetweenTheTime { | sub getShadingBetweenTheTime { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime', '00:00-24:00' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime', | ||||||
|  |         '00:00-24:00' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setTimeUpEarly { | sub setTimeUpEarly { | ||||||
| @@ -1822,7 +1817,7 @@ sub setTimeUpEarly { | |||||||
| sub getTimeUpEarly { | sub getTimeUpEarly { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Early', '05:00' ); |     my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Early', '05:00' ); | ||||||
|  |  | ||||||
|     if ( defined( PerlCodeCheck($val) ) ) { |     if ( defined( PerlCodeCheck($val) ) ) { | ||||||
|         $val = PerlCodeCheck($val); |         $val = PerlCodeCheck($val); | ||||||
| @@ -1847,7 +1842,7 @@ sub setTimeUpLate { | |||||||
| sub getTimeUpLate { | sub getTimeUpLate { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Late', '08:30' ); |     my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Late', '08:30' ); | ||||||
|  |  | ||||||
|     if ( defined( PerlCodeCheck($val) ) ) { |     if ( defined( PerlCodeCheck($val) ) ) { | ||||||
|         $val = PerlCodeCheck($val); |         $val = PerlCodeCheck($val); | ||||||
| @@ -1872,7 +1867,7 @@ sub setTimeDownEarly { | |||||||
| sub getTimeDownEarly { | sub getTimeDownEarly { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Early', '16:00' ); |     my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Early', '16:00' ); | ||||||
|  |  | ||||||
|     if ( defined( PerlCodeCheck($val) ) ) { |     if ( defined( PerlCodeCheck($val) ) ) { | ||||||
|         $val = PerlCodeCheck($val); |         $val = PerlCodeCheck($val); | ||||||
| @@ -1897,7 +1892,7 @@ sub setTimeDownLate { | |||||||
| sub getTimeDownLate { | sub getTimeDownLate { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Late', '22:00' ); |     my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Late', '22:00' ); | ||||||
|  |  | ||||||
|     if ( defined( PerlCodeCheck($val) ) ) { |     if ( defined( PerlCodeCheck($val) ) ) { | ||||||
|         $val = PerlCodeCheck($val); |         $val = PerlCodeCheck($val); | ||||||
| @@ -1923,7 +1918,7 @@ sub getTimeUpWeHoliday { | |||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     my $val = |     my $val = | ||||||
|       AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_WE_Holiday', '01:25' ); |       ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_WE_Holiday', '01:25' ); | ||||||
|  |  | ||||||
|     if ( defined( PerlCodeCheck($val) ) ) { |     if ( defined( PerlCodeCheck($val) ) ) { | ||||||
|         $val = PerlCodeCheck($val); |         $val = PerlCodeCheck($val); | ||||||
| @@ -1945,7 +1940,7 @@ sub getBrightnessMinVal { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} |             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} |             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -1964,7 +1959,7 @@ sub getBrightnessMaxVal { | |||||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} |             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||||
|               ->{LASTGETTIME} |               ->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} |             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||||
|             ->{LASTGETTIME} ) < 2 |             ->{LASTGETTIME} ) < 2 | ||||||
|       ); |       ); | ||||||
| @@ -1986,7 +1981,7 @@ sub setDriveUpMaxDuration { | |||||||
| sub getDriveUpMaxDuration { | sub getDriveUpMaxDuration { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_DriveUpMaxDuration', 60 ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_DriveUpMaxDuration', 60 ); | ||||||
| } | } | ||||||
|  |  | ||||||
| 1; | 1; | ||||||
|   | |||||||
| @@ -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-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
| @@ -44,21 +44,10 @@ use strict; | |||||||
| use warnings; | use warnings; | ||||||
| use utf8; | use utf8; | ||||||
|  |  | ||||||
| use GPUtils qw(GP_Import); |  | ||||||
|  |  | ||||||
| ## Import der FHEM Funktionen |  | ||||||
| BEGIN { |  | ||||||
|     GP_Import( |  | ||||||
|         qw( |  | ||||||
|           ReadingsVal |  | ||||||
|           ReadingsNum) |  | ||||||
|     ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| sub getBrightness { | sub getBrightness { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return ReadingsNum( |     return ::ReadingsNum( | ||||||
|         $FHEM::Automation::ShuttersControl::shutters->_getBrightnessSensor, |         $FHEM::Automation::ShuttersControl::shutters->_getBrightnessSensor, | ||||||
|         $FHEM::Automation::ShuttersControl::shutters->getBrightnessReading, |         $FHEM::Automation::ShuttersControl::shutters->getBrightnessReading, | ||||||
|         -1 ); |         -1 ); | ||||||
| @@ -67,7 +56,7 @@ sub getBrightness { | |||||||
| sub getWindStatus { | sub getWindStatus { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return ReadingsVal( |     return ::ReadingsVal( | ||||||
|         $FHEM::Automation::ShuttersControl::ascDev->_getWindSensor, |         $FHEM::Automation::ShuttersControl::ascDev->_getWindSensor, | ||||||
|         $FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading, -1 ); |         $FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading, -1 ); | ||||||
| } | } | ||||||
| @@ -75,7 +64,7 @@ sub getWindStatus { | |||||||
| sub getStatus { | sub getStatus { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return ReadingsNum( $self->{shuttersDev}, |     return ::ReadingsNum( $self->{shuttersDev}, | ||||||
|         $FHEM::Automation::ShuttersControl::shutters->getPosCmd, 0 ); |         $FHEM::Automation::ShuttersControl::shutters->getPosCmd, 0 ); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -88,7 +77,7 @@ sub getDelayCmd { | |||||||
| sub getASCenable { | sub getASCenable { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return ReadingsVal( $self->{shuttersDev}, 'ASC_Enable', 'on' ); |     return ::ReadingsVal( $self->{shuttersDev}, 'ASC_Enable', 'on' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| 1; | 1; | ||||||
|   | |||||||
| @@ -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-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -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-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
| @@ -44,17 +44,6 @@ 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 setSubTyp { | sub setSubTyp { | ||||||
|     my $self    = shift; |     my $self    = shift; | ||||||
|     my $attrVal = shift; |     my $attrVal = shift; | ||||||
| @@ -67,7 +56,8 @@ sub setSubTyp { | |||||||
| sub getSubTyp { | sub getSubTyp { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_subType', 'twostate' ); |     return ::AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_subType', | ||||||
|  |         'twostate' ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub setWinDev { | sub setWinDev { | ||||||
| @@ -87,15 +77,15 @@ sub _getWinDev { | |||||||
|         exists( |         exists( | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} |             $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) < |             $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) < | ||||||
|         2 |         2 | ||||||
|       ); |       ); | ||||||
|     $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} = |     $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} = | ||||||
|       int( gettimeofday() ); |       int( ::gettimeofday() ); | ||||||
|     my ( $device, $reading ) = |     my ( $device, $reading ) = | ||||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, |       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( | ||||||
|         'ASC_WindowRec', 'none' ); |         $self->{shuttersDev}, 'ASC_WindowRec', 'none' ); | ||||||
|  |  | ||||||
|     ### erwartetes Ergebnis |     ### erwartetes Ergebnis | ||||||
|     # DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE |     # DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE | ||||||
| @@ -116,7 +106,7 @@ sub getWinDevReading { | |||||||
|         exists( |         exists( | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} |             $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} | ||||||
|         ) |         ) | ||||||
|         && ( gettimeofday() - |         && ( ::gettimeofday() - | ||||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) < |             $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) < | ||||||
|         2 |         2 | ||||||
|       ); |       ); | ||||||
|   | |||||||
| @@ -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-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
| @@ -44,20 +44,10 @@ use strict; | |||||||
| use warnings; | use warnings; | ||||||
| use utf8; | use utf8; | ||||||
|  |  | ||||||
| use GPUtils qw(GP_Import); |  | ||||||
|  |  | ||||||
| ## Import der FHEM Funktionen |  | ||||||
| BEGIN { |  | ||||||
|     GP_Import( |  | ||||||
|         qw( |  | ||||||
|           ReadingsVal) |  | ||||||
|     ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| sub getWinStatus { | sub getWinStatus { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
|     return ReadingsVal( |     return ::ReadingsVal( | ||||||
|         $FHEM::Automation::ShuttersControl::shutters->_getWinDev, |         $FHEM::Automation::ShuttersControl::shutters->_getWinDev, | ||||||
|         $FHEM::Automation::ShuttersControl::shutters->getWinDevReading, |         $FHEM::Automation::ShuttersControl::shutters->getWinDevReading, | ||||||
|         'closed' ); |         'closed' ); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user