change modul header
This commit is contained in:
		| @@ -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 | ||||
| # | ||||
| #   Special thanks goes to: | ||||
| @@ -81,7 +81,7 @@ sub Initialize { | ||||
|     $hash->{UndefFn}    = \&FHEM::Automation::ShuttersControl::Undef; | ||||
|     $hash->{DeleteFn}   = \&FHEM::Automation::ShuttersControl::Delete; | ||||
|     $hash->{ShutdownFn} = \&FHEM::Automation::ShuttersControl::Shutdown; | ||||
|     $hash->{AttrList}   = | ||||
|     $hash->{AttrList} = | ||||
|         'ASC_tempSensor ' | ||||
|       . 'ASC_brightnessDriveUpDown ' | ||||
|       . 'ASC_autoShuttersControlMorning:on,off ' | ||||
|   | ||||
| @@ -1,16 +1,16 @@ | ||||
| UPD 2021-12-06_06:34:51 115678 FHEM/73_AutoShuttersControl.pm | ||||
| UPD 2021-11-29_15:01:56 75264 lib/FHEM/Automation/ShuttersControl.pm | ||||
| UPD 2021-10-09_07:12:54 2657 lib/FHEM/Automation/ShuttersControl/Dev.pm | ||||
| UPD 2021-10-09_07:12:54 2494 lib/FHEM/Automation/ShuttersControl/Roommate.pm | ||||
| UPD 2021-10-24_07:33:53 31900 lib/FHEM/Automation/ShuttersControl/Shutters.pm | ||||
| UPD 2021-12-11_14:23:02 25126 lib/FHEM/Automation/ShuttersControl/Shading.pm | ||||
| UPD 2021-12-11_14:23:02 112344 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm | ||||
| UPD 2021-11-14_14:03:06 40094 lib/FHEM/Automation/ShuttersControl/Helper.pm | ||||
| UPD 2021-10-09_07:12:54 2173 lib/FHEM/Automation/ShuttersControl/Window.pm | ||||
| UPD 2021-10-09_07:12:54 11739 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm | ||||
| UPD 2021-10-09_07:12:54 7249 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm | ||||
| UPD 2021-10-27_08:50:46 52649 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm | ||||
| UPD 2021-10-09_07:12:54 2901 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm | ||||
| UPD 2021-10-09_07:12:54 3978 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm | ||||
| UPD 2021-10-09_07:12:54 2286 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm | ||||
| UPD 2021-12-06_06:34:51 6965 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm | ||||
| UPD 2022-01-01_08:13:19 115707 FHEM/73_AutoShuttersControl.pm | ||||
| UPD 2022-01-01_08:49:52 75212 lib/FHEM/Automation/ShuttersControl.pm | ||||
| UPD 2022-01-01_08:30:27 2693 lib/FHEM/Automation/ShuttersControl/Dev.pm | ||||
| UPD 2022-01-01_08:47:26 2405 lib/FHEM/Automation/ShuttersControl/Roommate.pm | ||||
| UPD 2022-01-01_08:47:58 32020 lib/FHEM/Automation/ShuttersControl/Shutters.pm | ||||
| UPD 2022-01-01_08:42:08 25426 lib/FHEM/Automation/ShuttersControl/Shading.pm | ||||
| UPD 2022-01-01_08:33:11 112138 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm | ||||
| UPD 2022-01-01_08:37:31 40342 lib/FHEM/Automation/ShuttersControl/Helper.pm | ||||
| UPD 2022-01-01_08:49:33 2211 lib/FHEM/Automation/ShuttersControl/Window.pm | ||||
| UPD 2022-01-01_08:29:01 11716 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm | ||||
| UPD 2022-01-01_08:28:05 7265 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm | ||||
| UPD 2022-01-01_08:26:38 52775 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm | ||||
| UPD 2022-01-01_08:24:22 2799 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm | ||||
| UPD 2022-01-01_08:23:02 3887 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm | ||||
| UPD 2022-01-01_08:20:59 2200 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm | ||||
| UPD 2022-01-01_08:38:43 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 | ||||
| # | ||||
| #   Special thanks goes to: | ||||
| @@ -76,7 +76,8 @@ use Date::Parse; | ||||
| use FHEM::Automation::ShuttersControl::Shutters; | ||||
| 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::Helper qw (:ALL); | ||||
|  | ||||
| @@ -86,27 +87,20 @@ eval { | ||||
|     require JSON::MaybeXS; | ||||
|     import JSON::MaybeXS qw( decode_json encode_json ); | ||||
|     1; | ||||
| }; | ||||
|  | ||||
| if ($@) { | ||||
|     $@ = undef; | ||||
| } or do { | ||||
|  | ||||
|     # try to use JSON wrapper | ||||
|     #   for chance of better performance | ||||
|     eval { | ||||
|  | ||||
|         # JSON preference order | ||||
|         local $ENV{PERL_JSON_BACKEND} = | ||||
|           'Cpanel::JSON::XS,JSON::XS,JSON::PP,JSON::backportPP' | ||||
|           if ( !defined( $ENV{PERL_JSON_BACKEND} ) ); | ||||
|           unless ( defined( $ENV{PERL_JSON_BACKEND} ) ); | ||||
|  | ||||
|         require JSON; | ||||
|         import JSON qw( decode_json encode_json ); | ||||
|         1; | ||||
|     }; | ||||
|  | ||||
|     if ($@) { | ||||
|         $@ = undef; | ||||
|     } or do { | ||||
|  | ||||
|         # In rare cases, Cpanel::JSON::XS may | ||||
|         #   be installed but JSON|JSON::MaybeXS not ... | ||||
| @@ -114,10 +108,7 @@ if ($@) { | ||||
|             require Cpanel::JSON::XS; | ||||
|             import Cpanel::JSON::XS qw(decode_json encode_json); | ||||
|             1; | ||||
|         }; | ||||
|  | ||||
|         if ($@) { | ||||
|             $@ = undef; | ||||
|         } or do { | ||||
|  | ||||
|             # In rare cases, JSON::XS may | ||||
|             #   be installed but JSON not ... | ||||
| @@ -125,10 +116,7 @@ if ($@) { | ||||
|                 require JSON::XS; | ||||
|                 import JSON::XS qw(decode_json encode_json); | ||||
|                 1; | ||||
|             }; | ||||
|  | ||||
|             if ($@) { | ||||
|                 $@ = undef; | ||||
|             } or do { | ||||
|  | ||||
|                 # Fallback to built-in JSON which SHOULD | ||||
|                 #   be available since 5.014 ... | ||||
| @@ -136,20 +124,17 @@ if ($@) { | ||||
|                     require JSON::PP; | ||||
|                     import JSON::PP qw(decode_json encode_json); | ||||
|                     1; | ||||
|                 }; | ||||
|  | ||||
|                 if ($@) { | ||||
|                     $@ = undef; | ||||
|                 } or do { | ||||
|  | ||||
|                     # Fallback to JSON::backportPP in really rare cases | ||||
|                     require JSON::backportPP; | ||||
|                     import JSON::backportPP qw(decode_json encode_json); | ||||
|                     1; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|                 }; | ||||
|             }; | ||||
|         }; | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| ## Import der FHEM Funktionen | ||||
| #-- Run before package compilation | ||||
| @@ -227,8 +212,8 @@ our %userAttrList = ( | ||||
|     'ASC_LockOut:soft,hard,off'                  => '-', | ||||
|     'ASC_LockOut_Cmd:inhibit,blocked,protection' => '-', | ||||
|     'ASC_BlockingTime_afterManual'               => '-', | ||||
|     'ASC_BlockingTime_beforeNightClose'           => '-', | ||||
|     'ASC_BlockingTime_beforeDayOpen'              => '-', | ||||
|     'ASC_BlockingTime_beforeNightClose'          => '-', | ||||
|     'ASC_BlockingTime_beforeDayOpen'             => '-', | ||||
|     'ASC_BrightnessSensor'                       => '-', | ||||
|     'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100'       => [ '', 80, 20 ], | ||||
|     'ASC_Shading_Mode:absent,always,off,home'              => '-', | ||||
| @@ -366,7 +351,7 @@ sub Define { | ||||
|         $name . ' devStateIcon { ShuttersControl_DevStateIcon($name) }' ) | ||||
|       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" ); | ||||
|  | ||||
| @@ -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} ) { | ||||
|         ASC_Debug( 'Notify: ' | ||||
|               . ' ASC_Pos_Reading Event vom Rollo '  | ||||
|               . ' ASC_Pos_Reading Event vom Rollo ' | ||||
|               . $devname | ||||
|               . ' wurde erkannt ' | ||||
|               . ' - RECEIVED EVENT: ' | ||||
| @@ -572,7 +557,7 @@ sub Set { | ||||
|     elsif ( lc $cmd eq 'controlshading' ) { | ||||
|         return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); | ||||
|  | ||||
|         my $response = CheckASC_ConditionsForShadingFn($hash,$aArg->[0]); | ||||
|         my $response = CheckASC_ConditionsForShadingFn( $hash, $aArg->[0] ); | ||||
|         readingsSingleUpdate( | ||||
|             $hash, $cmd, | ||||
|             ( | ||||
| @@ -703,6 +688,7 @@ sub ShuttersDeviceScan { | ||||
|             $shutters->setAttrUpdateChanges( 'ASC_ShuttersPlace', | ||||
|                 AttrVal( $shuttersDev, 'ASC_ShuttersPlace', 'none' ) ); | ||||
|             delFromDevAttrList( $shuttersDev, 'ASC_ShuttersPlace' ); | ||||
|  | ||||
| #             $shutters->setAttrUpdateChanges( 'ASC_Down', | ||||
| #                 AttrVal( $shuttersDev, 'ASC_Down', 'none' ) ); | ||||
| #             delFromDevAttrList( $shuttersDev, 'ASC_Down' ); | ||||
| @@ -775,7 +761,8 @@ sub WriteReadingsShuttersList { | ||||
|         readingsBulkUpdate( | ||||
|             $hash, | ||||
|             'room_' | ||||
|               . ::makeReadingName( AttrVal( $shuttersDev, 'room', 'unsorted' ) ), | ||||
|               . ::makeReadingName( | ||||
|                 AttrVal( $shuttersDev, 'room', 'unsorted' ) ), | ||||
|             ReadingsVal( | ||||
|                 $name, | ||||
|                 'room_' | ||||
| @@ -801,7 +788,8 @@ sub WriteReadingsShuttersList { | ||||
|         readingsBulkUpdate( | ||||
|             $hash, | ||||
|             'room_' | ||||
|               . ::makeReadingName( AttrVal( $shuttersDev, 'room', 'unsorted' ) ), | ||||
|               . ::makeReadingName( | ||||
|                 AttrVal( $shuttersDev, 'room', 'unsorted' ) ), | ||||
|             $shuttersDev | ||||
|           ) | ||||
|           if ( | ||||
| @@ -1014,11 +1002,13 @@ sub ShuttersCommandSet { | ||||
|                     || $shutters->getLockOut eq 'hard' ) | ||||
|                 && !$shutters->getQueryShuttersPos($posValue) | ||||
|             ) | ||||
|             || (   CheckIfShuttersWindowRecOpen($shuttersDev) == 2 | ||||
|             || ( | ||||
|                    CheckIfShuttersWindowRecOpen($shuttersDev) == 2 | ||||
|                 && $shutters->getShuttersPlace eq 'terrace' | ||||
|                 && !$shutters->getQueryShuttersPos($posValue) | ||||
|                 && (   $shutters->getLockOut eq 'soft' | ||||
|                     || $shutters->getLockOut eq 'hard' ) ) | ||||
|                     || $shutters->getLockOut eq 'hard' ) | ||||
|             ) | ||||
|             || (   $shutters->getRainProtectionStatus eq 'protected' | ||||
|                 || $shutters->getWindProtectionStatus eq 'protected' ) | ||||
|         ) | ||||
| @@ -1068,7 +1058,7 @@ sub CreateSunRiseSetShuttersTimer { | ||||
|     return if ( IsDisabled($name) ); | ||||
|  | ||||
|     my $shuttersSunriseUnixtime = ShuttersSunrise( $shuttersDev, 'unix' ) + 1; | ||||
|     my $shuttersSunsetUnixtime = ShuttersSunset( $shuttersDev, 'unix' ) + 1; | ||||
|     my $shuttersSunsetUnixtime  = ShuttersSunset( $shuttersDev, 'unix' ) + 1; | ||||
|  | ||||
|     $shutters->setSunriseUnixTime($shuttersSunriseUnixtime); | ||||
|     $shutters->setSunsetUnixTime($shuttersSunsetUnixtime); | ||||
| @@ -1200,8 +1190,11 @@ sub RenewSunRiseSetShuttersTimer { | ||||
|             ) == 0 | ||||
|           ) | ||||
|         { | ||||
|             $attr{$shuttersDev}{'ASC_ShuttersPlace'} = $shutters->getAttrUpdateChanges('ASC_ShuttersPlace') | ||||
|               if ( $shutters->getAttrUpdateChanges('ASC_ShuttersPlace') ne 'none' ); | ||||
|             $attr{$shuttersDev}{'ASC_ShuttersPlace'} = | ||||
|               $shutters->getAttrUpdateChanges('ASC_ShuttersPlace') | ||||
|               if ( $shutters->getAttrUpdateChanges('ASC_ShuttersPlace') ne | ||||
|                 'none' ); | ||||
|  | ||||
| #             $attr{$shuttersDev}{'ASC_Down'} = | ||||
| #               $shutters->getAttrUpdateChanges('ASC_Down') | ||||
| #               if ( $shutters->getAttrUpdateChanges('ASC_Down') ne 'none' ); | ||||
| @@ -1228,12 +1221,16 @@ sub RenewSunRiseSetShuttersTimer { | ||||
|  | ||||
|         $attr{$shuttersDev}{ASC_BlockingTime_beforeNightClose} = | ||||
|           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' ); | ||||
|  | ||||
|         $attr{$shuttersDev}{ASC_BlockingTime_beforeDayOpen} = | ||||
|           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' ); | ||||
| # | ||||
| #         $attr{$shuttersDev}{ASC_Shading_StateChange_SunnyCloudy} = | ||||
| @@ -1708,23 +1705,31 @@ sub _DetermineSlatCmd { | ||||
|     my $value    = shift; | ||||
|     my $posValue = shift; | ||||
|  | ||||
|     return $posValue    == $shutters->getShadingPos | ||||
|             && $shutters->getShadingPositionAssignment      ne 'none'   ? $shutters->getShadingPositionAssignment | ||||
|         : $posValue     == $shutters->getVentilatePos | ||||
|             && $shutters->getVentilatePositionAssignment    ne 'none'   ? $shutters->getVentilatePositionAssignment | ||||
|         : $posValue     == $shutters->getOpenPos | ||||
|             && $shutters->getOpenPositionAssignment         ne 'none'   ? $shutters->getOpenPositionAssignment | ||||
|         : $posValue     == $shutters->getClosedPos | ||||
|             && $shutters->getClosedPositionAssignment       ne 'none'   ? $shutters->getClosedPositionAssignment | ||||
|         : $posValue     == $shutters->getSleepPos | ||||
|             && $shutters->getSleepPositionAssignment        ne 'none'   ? $shutters->getSleepPositionAssignment | ||||
|         : $posValue     == $shutters->getComfortOpenPos | ||||
|             && $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; | ||||
|     return $posValue == $shutters->getShadingPos | ||||
|       && $shutters->getShadingPositionAssignment ne 'none' | ||||
|       ? $shutters->getShadingPositionAssignment | ||||
|       : $posValue == $shutters->getVentilatePos | ||||
|       && $shutters->getVentilatePositionAssignment ne 'none' | ||||
|       ? $shutters->getVentilatePositionAssignment | ||||
|       : $posValue == $shutters->getOpenPos | ||||
|       && $shutters->getOpenPositionAssignment ne 'none' | ||||
|       ? $shutters->getOpenPositionAssignment | ||||
|       : $posValue == $shutters->getClosedPos | ||||
|       && $shutters->getClosedPositionAssignment ne 'none' | ||||
|       ? $shutters->getClosedPositionAssignment | ||||
|       : $posValue == $shutters->getSleepPos | ||||
|       && $shutters->getSleepPositionAssignment ne 'none' | ||||
|       ? $shutters->getSleepPositionAssignment | ||||
|       : $posValue == $shutters->getComfortOpenPos | ||||
|       && $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 { | ||||
| @@ -1809,12 +1814,12 @@ sub _SetCmdFn { | ||||
|             $driveCommand = _DetermineSlatCmd( $driveCommand, $posValue ); | ||||
|         } | ||||
|         elsif ($shutters->getShadingPositionAssignment =~ 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->getPrivacyUpPositionAssignment =~ 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->getPrivacyUpPositionAssignment   =~ 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->getVentilatePositionAssignment =~ 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->getComfortOpenPositionAssignment =~ | ||||
|             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 | ||||
|         # Nutzervariablen setzen | ||||
|     if ( $commandTemplate ne 'none' ) | ||||
|     { # Patch von Beta-User Forum https://forum.fhem.de/index.php/topic,123659.0.html | ||||
|             # Nutzervariablen setzen | ||||
|         my %specials = ( | ||||
|              '$name'        => $shuttersDev, | ||||
|              '$pos'       => $posValue, | ||||
|              '$slatPos'   => $slatPos, | ||||
|              '$cause'      => $shutters->getLastDrive | ||||
|             '$name'    => $shuttersDev, | ||||
|             '$pos'     => $posValue, | ||||
|             '$slatPos' => $slatPos, | ||||
|             '$cause'   => $shutters->getLastDrive | ||||
|         ); | ||||
|          | ||||
|         $commandTemplate  = ::EvalSpecials($commandTemplate, %specials); | ||||
|  | ||||
|         $commandTemplate = ::EvalSpecials( $commandTemplate, %specials ); | ||||
|  | ||||
|         # CMD ausführen | ||||
|         ::AnalyzeCommandChain( $h, $commandTemplate ); | ||||
|     } | ||||
|     else { | ||||
|         CommandSet( undef, | ||||
|                 $shuttersDev | ||||
|             . ':FILTER=' | ||||
|             . $shutters->getPosCmd . '!=' | ||||
|             . $posValue . ' ' | ||||
|             . $driveCommand ); | ||||
|               . ':FILTER=' | ||||
|               . $shutters->getPosCmd . '!=' | ||||
|               . $posValue . ' ' | ||||
|               . $driveCommand ); | ||||
|  | ||||
|         InternalTimer( | ||||
|             gettimeofday() + 3, | ||||
| @@ -1849,20 +1856,20 @@ sub _SetCmdFn { | ||||
|                 CommandSet( | ||||
|                     undef, | ||||
|                     ( | ||||
|                         $shutters->getSlatDevice ne 'none' | ||||
|                           $shutters->getSlatDevice ne 'none' | ||||
|                         ? $shutters->getSlatDevice | ||||
|                         : $shuttersDev | ||||
|                     ) | ||||
|                     . ' ' | ||||
|                     . $shutters->getSlatPosCmd . ' ' | ||||
|                     . $slatPos | ||||
|                       ) | ||||
|                       . ' ' | ||||
|                       . $shutters->getSlatPosCmd . ' ' | ||||
|                       . $slatPos | ||||
|                 ); | ||||
|             }, | ||||
|             $shuttersDev | ||||
|         ) | ||||
|         if ( $slatPos > -1 | ||||
|           ) | ||||
|           if ( $slatPos > -1 | ||||
|             && $shutters->getSlatPosCmd ne 'none' ); | ||||
|      | ||||
|  | ||||
|     } | ||||
|  | ||||
|     $shutters->setSelfDefenseAbsent( 0, 0 ) | ||||
| @@ -1888,7 +1895,7 @@ sub ASC_Debug { | ||||
|     return | ||||
|       if ( !AttrVal( $ascDev->getName, 'ASC_debug', 0 ) ); | ||||
|  | ||||
|     my $debugMsg = shift; | ||||
|     my $debugMsg       = shift; | ||||
|     my $debugTimestamp = strftime( "%Y.%m.%d %T", localtime(time) ); | ||||
|  | ||||
|     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 | ||||
| # | ||||
| #   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 | ||||
| # | ||||
| #   Special thanks goes to: | ||||
| @@ -44,23 +44,12 @@ use strict; | ||||
| use warnings; | ||||
| use utf8; | ||||
|  | ||||
| use GPUtils qw(GP_Import); | ||||
|  | ||||
| ## Import der FHEM Funktionen | ||||
| BEGIN { | ||||
|     GP_Import( | ||||
|         qw( | ||||
|           AttrVal | ||||
|           gettimeofday) | ||||
|     ); | ||||
| } | ||||
|  | ||||
| sub getShuttersOffset { | ||||
|     my $self = shift; | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return AttrVal( $name, 'ASC_shuttersDriveDelay', -1 ); | ||||
|     return ::AttrVal( $name, 'ASC_shuttersDriveDelay', -1 ); | ||||
| } | ||||
|  | ||||
| sub getBrightnessMinVal { | ||||
| @@ -70,7 +59,7 @@ sub getBrightnessMinVal { | ||||
|  | ||||
|     return $self->{ASC_brightness}->{triggermin} | ||||
|       if ( exists( $self->{ASC_brightness}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 ); | ||||
|         && ( ::gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 ); | ||||
|     $FHEM::Automation::ShuttersControl::ascDev->getBrightnessMaxVal; | ||||
|  | ||||
|     return $self->{ASC_brightness}->{triggermin}; | ||||
| @@ -83,11 +72,11 @@ sub getBrightnessMaxVal { | ||||
|  | ||||
|     return $self->{ASC_brightness}->{triggermax} | ||||
|       if ( exists( $self->{ASC_brightness}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 ); | ||||
|     $self->{ASC_brightness}->{LASTGETTIME} = int( gettimeofday() ); | ||||
|         && ( ::gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 ); | ||||
|     $self->{ASC_brightness}->{LASTGETTIME} = int( ::gettimeofday() ); | ||||
|  | ||||
|     my ( $triggermax, $triggermin ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( $name, | ||||
|         'ASC_brightnessDriveUpDown', '800:500' ); | ||||
|  | ||||
|     ## erwartetes Ergebnis | ||||
| @@ -104,7 +93,7 @@ sub _getTwilightDevice { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return AttrVal( $name, 'ASC_twilightDevice', 'none' ); | ||||
|     return ::AttrVal( $name, 'ASC_twilightDevice', 'none' ); | ||||
| } | ||||
|  | ||||
| sub getAutoAstroModeEvening { | ||||
| @@ -112,7 +101,7 @@ sub getAutoAstroModeEvening { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return AttrVal( $name, 'ASC_autoAstroModeEvening', 'REAL' ); | ||||
|     return ::AttrVal( $name, 'ASC_autoAstroModeEvening', 'REAL' ); | ||||
| } | ||||
|  | ||||
| sub getAutoAstroModeEveningHorizon { | ||||
| @@ -120,7 +109,7 @@ sub getAutoAstroModeEveningHorizon { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return AttrVal( $name, 'ASC_autoAstroModeEveningHorizon', 0 ); | ||||
|     return ::AttrVal( $name, 'ASC_autoAstroModeEveningHorizon', 0 ); | ||||
| } | ||||
|  | ||||
| sub getAutoAstroModeMorning { | ||||
| @@ -128,7 +117,7 @@ sub getAutoAstroModeMorning { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return AttrVal( $name, 'ASC_autoAstroModeMorning', 'REAL' ); | ||||
|     return ::AttrVal( $name, 'ASC_autoAstroModeMorning', 'REAL' ); | ||||
| } | ||||
|  | ||||
| sub getAutoAstroModeMorningHorizon { | ||||
| @@ -136,7 +125,7 @@ sub getAutoAstroModeMorningHorizon { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return AttrVal( $name, 'ASC_autoAstroModeMorningHorizon', 0 ); | ||||
|     return ::AttrVal( $name, 'ASC_autoAstroModeMorningHorizon', 0 ); | ||||
| } | ||||
|  | ||||
| sub getAutoShuttersControlMorning { | ||||
| @@ -144,7 +133,7 @@ sub getAutoShuttersControlMorning { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return AttrVal( $name, 'ASC_autoShuttersControlMorning', 'on' ); | ||||
|     return ::AttrVal( $name, 'ASC_autoShuttersControlMorning', 'on' ); | ||||
| } | ||||
|  | ||||
| sub getAutoShuttersControlEvening { | ||||
| @@ -152,7 +141,7 @@ sub getAutoShuttersControlEvening { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return AttrVal( $name, 'ASC_autoShuttersControlEvening', 'on' ); | ||||
|     return ::AttrVal( $name, 'ASC_autoShuttersControlEvening', 'on' ); | ||||
| } | ||||
|  | ||||
| sub getAutoShuttersControlComfort { | ||||
| @@ -160,7 +149,7 @@ sub getAutoShuttersControlComfort { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return AttrVal( $name, 'ASC_autoShuttersControlComfort', 'off' ); | ||||
|     return ::AttrVal( $name, 'ASC_autoShuttersControlComfort', 'off' ); | ||||
| } | ||||
|  | ||||
| sub getFreezeTemp { | ||||
| @@ -168,7 +157,7 @@ sub getFreezeTemp { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return AttrVal( $name, 'ASC_freezeTemp', 3 ); | ||||
|     return ::AttrVal( $name, 'ASC_freezeTemp', 3 ); | ||||
| } | ||||
|  | ||||
| sub getSlatDriveCmdInverse { | ||||
| @@ -176,7 +165,7 @@ sub getSlatDriveCmdInverse { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return AttrVal( $name, 'ASC_slatDriveCmdInverse', 0 ); | ||||
|     return ::AttrVal( $name, 'ASC_slatDriveCmdInverse', 0 ); | ||||
| } | ||||
|  | ||||
| sub _getTempSensor { | ||||
| @@ -186,11 +175,11 @@ sub _getTempSensor { | ||||
|  | ||||
|     return $self->{ASC_tempSensor}->{device} | ||||
|       if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 ); | ||||
|     $self->{ASC_tempSensor}->{LASTGETTIME} = int( gettimeofday() ); | ||||
|         && ( ::gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 ); | ||||
|     $self->{ASC_tempSensor}->{LASTGETTIME} = int( ::gettimeofday() ); | ||||
|     my ( $device, $reading ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_tempSensor', | ||||
|         'none' ); | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( $name, | ||||
|         'ASC_tempSensor', 'none' ); | ||||
|  | ||||
|     ## erwartetes Ergebnis | ||||
|     # DEVICE:READING | ||||
| @@ -208,7 +197,7 @@ sub getTempSensorReading { | ||||
|  | ||||
|     return $self->{ASC_tempSensor}->{reading} | ||||
|       if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 ); | ||||
|         && ( ::gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 ); | ||||
|     $FHEM::Automation::ShuttersControl::ascDev->_getTempSensor; | ||||
|     return $self->{ASC_tempSensor}->{reading}; | ||||
| } | ||||
| @@ -220,10 +209,11 @@ sub _getResidentsDev { | ||||
|  | ||||
|     return $self->{ASC_residentsDev}->{device} | ||||
|       if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < 2 ); | ||||
|     $self->{ASC_residentsDev}->{LASTGETTIME} = int( gettimeofday() ); | ||||
|         && ( ::gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < | ||||
|         2 ); | ||||
|     $self->{ASC_residentsDev}->{LASTGETTIME} = int( ::gettimeofday() ); | ||||
|     my ( $device, $reading ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( $name, | ||||
|         'ASC_residentsDev', 'none' ); | ||||
|  | ||||
|     $self->{ASC_residentsDev}->{device} = $device; | ||||
| @@ -240,7 +230,8 @@ sub getResidentsReading { | ||||
|  | ||||
|     return $self->{ASC_residentsDev}->{reading} | ||||
|       if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < 2 ); | ||||
|         && ( ::gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < | ||||
|         2 ); | ||||
|     $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev; | ||||
|     return $self->{ASC_residentsDev}->{reading}; | ||||
| } | ||||
| @@ -252,11 +243,11 @@ sub _getRainSensor { | ||||
|  | ||||
|     return $self->{ASC_rainSensor}->{device} | ||||
|       if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); | ||||
|     $self->{ASC_rainSensor}->{LASTGETTIME} = int( gettimeofday() ); | ||||
|         && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); | ||||
|     $self->{ASC_rainSensor}->{LASTGETTIME} = int( ::gettimeofday() ); | ||||
|     my ( $device, $reading, $max, $hyst, $pos, $wait ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_rainSensor', | ||||
|         'none' ); | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( $name, | ||||
|         'ASC_rainSensor', 'none' ); | ||||
|  | ||||
|     ## erwartetes Ergebnis | ||||
|     # DEVICE:READING MAX:HYST | ||||
| @@ -266,10 +257,10 @@ sub _getRainSensor { | ||||
|     $self->{ASC_rainSensor}->{reading} = | ||||
|       ( $reading ne 'none' ? $reading : 'rain' ); | ||||
|     $self->{ASC_rainSensor}->{triggermax} = ( | ||||
|          (   $max ne 'none' | ||||
|           && $max =~ m{\A(-?\d+(\.\d+)?)\z}xms ) | ||||
|         ( $max ne 'none' && $max =~ m{\A(-?\d+(\.\d+)?)\z}xms ) | ||||
|         ? $max | ||||
|         : 1000 ); | ||||
|         : 1000 | ||||
|     ); | ||||
|  | ||||
|     $self->{ASC_rainSensor}->{triggerhyst} = ( | ||||
|           $hyst ne 'none' | ||||
| @@ -277,10 +268,11 @@ sub _getRainSensor { | ||||
|         : ( $self->{ASC_rainSensor}->{triggermax} * 0 ) | ||||
|     ); | ||||
|  | ||||
|     $self->{ASC_rainSensor}->{shuttersClosedPos} = | ||||
|       (   $pos ne 'none' | ||||
|     $self->{ASC_rainSensor}->{shuttersClosedPos} = ( | ||||
|           $pos ne 'none' | ||||
|         ? $pos | ||||
|         : $FHEM::Automation::ShuttersControl::shutters->getClosedPos ); | ||||
|         : $FHEM::Automation::ShuttersControl::shutters->getClosedPos | ||||
|     ); | ||||
|     $self->{ASC_rainSensor}->{waitingTime} = | ||||
|       ( $wait ne 'none' ? $wait : 0 ); | ||||
|  | ||||
| @@ -294,7 +286,7 @@ sub getRainSensorReading { | ||||
|  | ||||
|     return $self->{ASC_rainSensor}->{reading} | ||||
|       if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); | ||||
|         && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); | ||||
|     $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; | ||||
|     return $self->{ASC_rainSensor}->{reading}; | ||||
| } | ||||
| @@ -306,7 +298,7 @@ sub getRainTriggerMax { | ||||
|  | ||||
|     return $self->{ASC_rainSensor}->{triggermax} | ||||
|       if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); | ||||
|         && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); | ||||
|     $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; | ||||
|     return $self->{ASC_rainSensor}->{triggermax}; | ||||
| } | ||||
| @@ -318,7 +310,7 @@ sub getRainTriggerMin { | ||||
|  | ||||
|     return $self->{ASC_rainSensor}->{triggerhyst} | ||||
|       if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); | ||||
|         && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); | ||||
|     $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; | ||||
|     return $self->{ASC_rainSensor}->{triggerhyst}; | ||||
| } | ||||
| @@ -330,7 +322,7 @@ sub getRainSensorShuttersClosedPos { | ||||
|  | ||||
|     return $self->{ASC_rainSensor}->{shuttersClosedPos} | ||||
|       if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); | ||||
|         && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); | ||||
|     $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; | ||||
|     return $self->{ASC_rainSensor}->{shuttersClosedPos}; | ||||
| } | ||||
| @@ -342,7 +334,7 @@ sub getRainWaitingTime { | ||||
|  | ||||
|     return $self->{ASC_rainSensor}->{waitingTime} | ||||
|       if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); | ||||
|         && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); | ||||
|     $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; | ||||
|     return $self->{ASC_rainSensor}->{waitingTime}; | ||||
| } | ||||
| @@ -354,11 +346,11 @@ sub _getWindSensor { | ||||
|  | ||||
|     return $self->{ASC_windSensor}->{device} | ||||
|       if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 ); | ||||
|     $self->{ASC_windSensor}->{LASTGETTIME} = int( gettimeofday() ); | ||||
|         && ( ::gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 ); | ||||
|     $self->{ASC_windSensor}->{LASTGETTIME} = int( ::gettimeofday() ); | ||||
|     my ( $device, $reading ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_windSensor', | ||||
|         'none' ); | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( $name, | ||||
|         'ASC_windSensor', 'none' ); | ||||
|  | ||||
|     return $device if ( $device eq 'none' ); | ||||
|     $self->{ASC_windSensor}->{device} = $device; | ||||
| @@ -375,7 +367,7 @@ sub getWindSensorReading { | ||||
|  | ||||
|     return $self->{ASC_windSensor}->{reading} | ||||
|       if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 ); | ||||
|         && ( ::gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 ); | ||||
|     $FHEM::Automation::ShuttersControl::ascDev->_getWindSensor; | ||||
|     return ( | ||||
|         defined( $self->{ASC_windSensor}->{reading} ) | ||||
| @@ -389,7 +381,7 @@ sub getBlockAscDrivesAfterManual { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 ); | ||||
|     return ::AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 ); | ||||
| } | ||||
|  | ||||
| sub getAdvDate { | ||||
| @@ -397,10 +389,7 @@ sub getAdvDate { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return AttrVal( $name, 'ASC_advDate', 'FirstAdvent' ); | ||||
|     return ::AttrVal( $name, 'ASC_advDate', 'FirstAdvent' ); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| 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 | ||||
| # | ||||
| #   Special thanks goes to: | ||||
| @@ -48,12 +48,7 @@ use GPUtils qw(GP_Import); | ||||
|  | ||||
| ## Import der FHEM Funktionen | ||||
| BEGIN { | ||||
|     GP_Import( | ||||
|         qw( | ||||
|           readingsSingleUpdate | ||||
|           ReadingsVal | ||||
|           defs) | ||||
|     ); | ||||
|     GP_Import(qw(defs)); | ||||
| } | ||||
|  | ||||
| sub setDelayCmdReading { | ||||
| @@ -62,7 +57,7 @@ sub setDelayCmdReading { | ||||
|     my $name = $self->{name}; | ||||
|     my $hash = $defs{$name}; | ||||
|  | ||||
|     readingsSingleUpdate( | ||||
|     ::readingsSingleUpdate( | ||||
|         $hash, | ||||
|         $FHEM::Automation::ShuttersControl::shutters->getShuttersDev | ||||
|           . '_lastDelayPosValue', | ||||
| @@ -79,7 +74,7 @@ sub setStateReading { | ||||
|     my $name = $self->{name}; | ||||
|     my $hash = $defs{$name}; | ||||
|  | ||||
|     readingsSingleUpdate( | ||||
|     ::readingsSingleUpdate( | ||||
|         $hash, 'state', | ||||
|         ( | ||||
|             defined($value) | ||||
| @@ -97,7 +92,7 @@ sub setPosReading { | ||||
|     my $name = $self->{name}; | ||||
|     my $hash = $defs{$name}; | ||||
|  | ||||
|     readingsSingleUpdate( | ||||
|     ::readingsSingleUpdate( | ||||
|         $hash, | ||||
|         $FHEM::Automation::ShuttersControl::shutters->getShuttersDev | ||||
|           . '_PosValue', | ||||
| @@ -113,7 +108,7 @@ sub setLastPosReading { | ||||
|     my $name = $self->{name}; | ||||
|     my $hash = $defs{$name}; | ||||
|  | ||||
|     readingsSingleUpdate( | ||||
|     ::readingsSingleUpdate( | ||||
|         $hash, | ||||
|         $FHEM::Automation::ShuttersControl::shutters->getShuttersDev | ||||
|           . '_lastPosValue', | ||||
| @@ -128,7 +123,7 @@ sub getPartyMode { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return ReadingsVal( $name, 'partyMode', 'off' ); | ||||
|     return ::ReadingsVal( $name, 'partyMode', 'off' ); | ||||
| } | ||||
|  | ||||
| sub getHardLockOut { | ||||
| @@ -136,7 +131,7 @@ sub getHardLockOut { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return ReadingsVal( $name, 'hardLockOut', 'none' ); | ||||
|     return ::ReadingsVal( $name, 'hardLockOut', 'none' ); | ||||
| } | ||||
|  | ||||
| sub getSunriseTimeWeHoliday { | ||||
| @@ -144,7 +139,7 @@ sub getSunriseTimeWeHoliday { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return ReadingsVal( $name, 'sunriseTimeWeHoliday', 'none' ); | ||||
|     return ::ReadingsVal( $name, 'sunriseTimeWeHoliday', 'none' ); | ||||
| } | ||||
|  | ||||
| sub getMonitoredDevs { | ||||
| @@ -152,14 +147,14 @@ sub getMonitoredDevs { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     $self->{monitoredDevs} = ReadingsVal( $name, '.monitoredDevs', 'none' ); | ||||
|     $self->{monitoredDevs} = ::ReadingsVal( $name, '.monitoredDevs', 'none' ); | ||||
|     return $self->{monitoredDevs}; | ||||
| } | ||||
|  | ||||
| sub getOutTemp { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return ReadingsVal( | ||||
|     return ::ReadingsVal( | ||||
|         $FHEM::Automation::ShuttersControl::ascDev->_getTempSensor, | ||||
|         $FHEM::Automation::ShuttersControl::ascDev->getTempSensorReading, | ||||
|         -100 ); | ||||
| @@ -169,7 +164,8 @@ sub getResidentsStatus { | ||||
|     my $self = shift; | ||||
|  | ||||
|     my $val = | ||||
|       ReadingsVal( $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev, | ||||
|       ::ReadingsVal( | ||||
|         $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev, | ||||
|         $FHEM::Automation::ShuttersControl::ascDev->getResidentsReading, | ||||
|         'none' ); | ||||
|  | ||||
| @@ -178,7 +174,7 @@ sub getResidentsStatus { | ||||
|         return $1 && $1 eq 'pet' ? 'absent' : $2; | ||||
|     } | ||||
|     elsif ( | ||||
|         ReadingsVal( | ||||
|         ::ReadingsVal( | ||||
|             $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev, | ||||
|             'homealoneType', '-' ) eq 'PET' | ||||
|       ) | ||||
| @@ -196,7 +192,8 @@ sub getResidentsLastStatus { | ||||
|     my $self = shift; | ||||
|  | ||||
|     my $val = | ||||
|       ReadingsVal( $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev, | ||||
|       ::ReadingsVal( | ||||
|         $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev, | ||||
|         'lastState', 'none' ); | ||||
|  | ||||
|     if ( $val =~ m{^(?:(.+)_)?(.+)$}xms ) { | ||||
| @@ -204,7 +201,7 @@ sub getResidentsLastStatus { | ||||
|         return $1 && $1 eq 'pet' ? 'absent' : $2; | ||||
|     } | ||||
|     elsif ( | ||||
|         ReadingsVal( | ||||
|         ::ReadingsVal( | ||||
|             $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev, | ||||
|             'lastHomealoneType', '-' ) eq 'PET' | ||||
|       ) | ||||
| @@ -223,7 +220,7 @@ sub getAutoShuttersControlShading { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return ReadingsVal( $name, 'controlShading', 'none' ); | ||||
|     return ::ReadingsVal( $name, 'controlShading', 'none' ); | ||||
| } | ||||
|  | ||||
| sub getSelfDefense { | ||||
| @@ -231,7 +228,7 @@ sub getSelfDefense { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return ReadingsVal( $name, 'selfDefense', 'none' ); | ||||
|     return ::ReadingsVal( $name, 'selfDefense', 'none' ); | ||||
| } | ||||
|  | ||||
| sub getAzimuth { | ||||
| @@ -239,13 +236,13 @@ sub getAzimuth { | ||||
|  | ||||
|     my $azimuth; | ||||
|  | ||||
|     $azimuth = ReadingsVal( | ||||
|     $azimuth = ::ReadingsVal( | ||||
|         $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice, | ||||
|         'azimuth', -1 ) | ||||
|       if ( | ||||
|         $defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice } | ||||
|         ->{TYPE} eq 'Twilight' ); | ||||
|     $azimuth = ReadingsVal( | ||||
|     $azimuth = ::ReadingsVal( | ||||
|         $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice, | ||||
|         'SunAz', -1 ) | ||||
|       if ( | ||||
| @@ -260,13 +257,13 @@ sub getElevation { | ||||
|  | ||||
|     my $elevation; | ||||
|  | ||||
|     $elevation = ReadingsVal( | ||||
|     $elevation = ::ReadingsVal( | ||||
|         $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice, | ||||
|         'elevation', -1 ) | ||||
|       if ( | ||||
|         $defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice } | ||||
|         ->{TYPE} eq 'Twilight' ); | ||||
|     $elevation = ReadingsVal( | ||||
|     $elevation = ::ReadingsVal( | ||||
|         $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice, | ||||
|         'SunAlt', -1 ) | ||||
|       if ( | ||||
| @@ -281,7 +278,7 @@ sub getASCenable { | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return ReadingsVal( $name, 'ascEnable', 'none' ); | ||||
|     return ::ReadingsVal( $name, 'ascEnable', 'none' ); | ||||
| } | ||||
|  | ||||
| 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 | ||||
| # | ||||
| #   Special thanks goes to: | ||||
| @@ -70,21 +70,6 @@ our %EXPORT_TAGS = ( | ||||
|     ], | ||||
| ); | ||||
|  | ||||
| use GPUtils qw(GP_Import); | ||||
| ## Import der FHEM Funktionen | ||||
| BEGIN { | ||||
|     GP_Import( | ||||
|         qw( | ||||
|           Log3 | ||||
|           gettimeofday | ||||
|           computeAlignTime | ||||
|           CommandSet | ||||
|           ReadingsVal | ||||
|           RemoveInternalTimer | ||||
|           ) | ||||
|     ); | ||||
| } | ||||
|  | ||||
| sub EventProcessingGeneral { | ||||
|     my $hash    = shift; | ||||
|     my $devname = shift; | ||||
| @@ -156,7 +141,7 @@ sub EventProcessingGeneral { | ||||
|         {     # wurde den Attributen unserer Rolläden ein Wert zugewiesen ? | ||||
|             FHEM::Automation::ShuttersControl::AddNotifyDev( $hash, $3, $1, $2 ) | ||||
|               if ( $3 ne 'none' ); | ||||
|             Log3( $name, 4, | ||||
|             ::Log3( $name, 4, | ||||
|                 "AutoShuttersControl ($name) - EventProcessing: ATTR" ); | ||||
|         } | ||||
|         elsif ( | ||||
| @@ -168,7 +153,7 @@ sub EventProcessingGeneral { | ||||
|                 $}xms | ||||
|           ) | ||||
|         {    # wurde das Attribut unserer Rolläden gelöscht ? | ||||
|             Log3( $name, 4, | ||||
|             ::Log3( $name, 4, | ||||
|                 "AutoShuttersControl ($name) - EventProcessing: DELETEATTR" ); | ||||
|             FHEM::Automation::ShuttersControl::DeleteNotifyDev( $hash, $1, $2 ); | ||||
|         } | ||||
| @@ -235,8 +220,9 @@ m{^(DELETEATTR|ATTR)         #global ATTR myASC ASC_tempSensor Cellar | ||||
|                     \%funcHash ); | ||||
|             } | ||||
|             else { | ||||
|                 CommandSet( undef, $name . ' controlShading on' ) | ||||
|                   if ( ReadingsVal( $name, 'controlShading', 'off' ) ne 'off' ); | ||||
|                 ::CommandSet( undef, $name . ' controlShading on' ) | ||||
|                   if ( | ||||
|                     ::ReadingsVal( $name, 'controlShading', 'off' ) ne 'off' ); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @@ -259,11 +245,12 @@ sub EventProcessingWindowRec { | ||||
|         m{.*$reading:.*?([Oo]pen(?>ed)?|[Cc]losed?|tilt(?>ed)?|true|false)}xms ) | ||||
|     { | ||||
|         return | ||||
|           if ( !IsAfterShuttersManualBlocking($shuttersDev) | ||||
|           if ( | ||||
|             !IsAfterShuttersManualBlocking($shuttersDev) | ||||
|             && ( $FHEM::Automation::ShuttersControl::shutters->getLockOut eq | ||||
|             'off' | ||||
|               || $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace | ||||
|             ne 'terrace' ) | ||||
|                 'off' | ||||
|                 || $FHEM::Automation::ShuttersControl::shutters | ||||
|                 ->getShuttersPlace ne 'terrace' ) | ||||
|           ); | ||||
|  | ||||
|         my $match = $1; | ||||
| @@ -280,7 +267,6 @@ sub EventProcessingWindowRec { | ||||
|  | ||||
|         $FHEM::Automation::ShuttersControl::shutters->setShuttersDev( | ||||
|             $shuttersDev); | ||||
|          | ||||
|  | ||||
|         #### Hardware Lock der Rollläden | ||||
|         $FHEM::Automation::ShuttersControl::shutters->setHardLockOut('off') | ||||
| @@ -299,18 +285,14 @@ sub EventProcessingWindowRec { | ||||
|             ) | ||||
|           ); | ||||
|  | ||||
|  | ||||
|         return | ||||
|           if ( !IsAfterShuttersManualBlocking($shuttersDev) ); | ||||
|  | ||||
|  | ||||
|  | ||||
|            | ||||
|         my $homemode = | ||||
|           $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus; | ||||
|         $homemode = | ||||
|           $FHEM::Automation::ShuttersControl::ascDev->getResidentsStatus | ||||
|           if ( $homemode eq 'none' );   | ||||
|           if ( $homemode eq 'none' ); | ||||
|  | ||||
|         FHEM::Automation::ShuttersControl::ASC_Debug( | ||||
|                 'EventProcessingWindowRec: ' | ||||
| @@ -535,11 +517,16 @@ sub EventProcessingWindowRec { | ||||
|             ) | ||||
|             && $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen | ||||
|             eq 'on' | ||||
|             && ( $FHEM::Automation::ShuttersControl::shutters | ||||
|             ->getQueryShuttersPos( | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->getVentilatePos) | ||||
|               || ( $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace eq 'terrace' | ||||
|                 && $FHEM::Automation::ShuttersControl::shutters->getSubTyp eq 'twostate' ) | ||||
|             && ( | ||||
|                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                 ->getQueryShuttersPos( | ||||
|                     $FHEM::Automation::ShuttersControl::shutters | ||||
|                       ->getVentilatePos | ||||
|                 ) | ||||
|                 || ( $FHEM::Automation::ShuttersControl::shutters | ||||
|                     ->getShuttersPlace eq 'terrace' | ||||
|                     && $FHEM::Automation::ShuttersControl::shutters->getSubTyp | ||||
|                     eq 'twostate' ) | ||||
|             ) | ||||
|           ) | ||||
|         { | ||||
| @@ -622,42 +609,46 @@ sub EventProcessingRoommate { | ||||
|       $FHEM::Automation::ShuttersControl::shutters->getRoommatesReading; | ||||
|  | ||||
|     if ( $events =~ m{$reading:\s(absent|gotosleep|asleep|awoken|home)}xms ) { | ||||
|         Log3( $name, 4, | ||||
|         ::Log3( $name, 4, | ||||
|             "AutoShuttersControl ($name) - EventProcessingRoommate: " | ||||
|               . $FHEM::Automation::ShuttersControl::shutters | ||||
|               ->getRoommatesReading ); | ||||
|         Log3( $name, 4, | ||||
|         ::Log3( $name, 4, | ||||
| "AutoShuttersControl ($name) - EventProcessingRoommate: $shuttersDev und Events $events" | ||||
|         ); | ||||
|  | ||||
|          | ||||
|         my $event                   = $1; | ||||
|         my $getModeUp               = $FHEM::Automation::ShuttersControl::shutters->getModeUp; | ||||
|         my $getModeDown             = $FHEM::Automation::ShuttersControl::shutters->getModeDown; | ||||
|         my $getRoommatesStatus      = $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus; | ||||
|         my $getRoommatesLastStatus  = $FHEM::Automation::ShuttersControl::shutters->getRoommatesLastStatus; | ||||
|         my $getUp                   = $FHEM::Automation::ShuttersControl::shutters->getUp; | ||||
|         my $getDown                 = $FHEM::Automation::ShuttersControl::shutters->getDown; | ||||
|         my $getIsDay                = $FHEM::Automation::ShuttersControl::shutters->getIsDay; | ||||
|          | ||||
|         my $posValue                = $FHEM::Automation::ShuttersControl::shutters->getStatus;          # !!! ACHTUNG!!! | ||||
|          | ||||
|         my $event     = $1; | ||||
|         my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp; | ||||
|         my $getModeDown = | ||||
|           $FHEM::Automation::ShuttersControl::shutters->getModeDown; | ||||
|         my $getRoommatesStatus = | ||||
|           $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus; | ||||
|         my $getRoommatesLastStatus = | ||||
|           $FHEM::Automation::ShuttersControl::shutters->getRoommatesLastStatus; | ||||
|         my $getUp    = $FHEM::Automation::ShuttersControl::shutters->getUp; | ||||
|         my $getDown  = $FHEM::Automation::ShuttersControl::shutters->getDown; | ||||
|         my $getIsDay = $FHEM::Automation::ShuttersControl::shutters->getIsDay; | ||||
|  | ||||
|         my $posValue = $FHEM::Automation::ShuttersControl::shutters | ||||
|           ->getStatus;    # !!! ACHTUNG!!! | ||||
|  | ||||
|         if ( | ||||
|             ( $event eq 'home' || $event eq 'awoken' ) | ||||
|             && (   $getRoommatesStatus eq 'home' | ||||
|                 || $getRoommatesStatus eq 'awoken' ) | ||||
|             && ( $FHEM::Automation::ShuttersControl::ascDev | ||||
|             && ( | ||||
|                 $FHEM::Automation::ShuttersControl::ascDev | ||||
|                 ->getAutoShuttersControlMorning eq 'on' | ||||
|                 || ( $getUp eq 'roommate' | ||||
|                   &&  ( $getRoommatesLastStatus eq 'asleep' | ||||
|                     ||  $getRoommatesLastStatus ne 'awoken' ) | ||||
|                    ) | ||||
|                ) | ||||
|                 || ( | ||||
|                     $getUp eq 'roommate' | ||||
|                     && (   $getRoommatesLastStatus eq 'asleep' | ||||
|                         || $getRoommatesLastStatus ne 'awoken' ) | ||||
|                 ) | ||||
|             ) | ||||
|             && IsAfterShuttersManualBlocking($shuttersDev) | ||||
|           ) | ||||
|         { | ||||
|             Log3( $name, 4, | ||||
|             ::Log3( $name, 4, | ||||
| "AutoShuttersControl ($name) - EventProcessingRoommate_1: $shuttersDev und Events $events" | ||||
|             ); | ||||
|             if ( | ||||
| @@ -683,7 +674,7 @@ sub EventProcessingRoommate { | ||||
|                     || $getUp eq 'roommate' ) | ||||
|               ) | ||||
|             { | ||||
|                 Log3( $name, 4, | ||||
|                 ::Log3( $name, 4, | ||||
| "AutoShuttersControl ($name) - EventProcessingRoommate_2: $shuttersDev und Events $events" | ||||
|                 ); | ||||
|  | ||||
| @@ -709,7 +700,7 @@ sub EventProcessingRoommate { | ||||
|                       $FHEM::Automation::ShuttersControl::shutters->getOpenPos; | ||||
|                 } | ||||
|  | ||||
|                 FHEM::Automation::ShuttersControl::ShuttersCommandSet( $hash, | ||||
|                 FHEM::Automation::ShuttersControl::Shutters::CommandSet( $hash, | ||||
|                     $shuttersDev, $posValue ); | ||||
|             } | ||||
|             elsif ( | ||||
| @@ -745,8 +736,7 @@ sub EventProcessingRoommate { | ||||
|                     && IsAfterShuttersTimeBlocking($shuttersDev) | ||||
|                     && (   $getModeDown eq 'home' | ||||
|                         || $getModeDown eq 'always' ) | ||||
|                     && $getDown ne | ||||
|                     'roommate' | ||||
|                     && $getDown ne 'roommate' | ||||
|                   ) | ||||
|                 { | ||||
|                     $FHEM::Automation::ShuttersControl::shutters->setLastDrive( | ||||
| @@ -780,14 +770,11 @@ sub EventProcessingRoommate { | ||||
|                               ->getLastDrive . ' - ventilate mode' ); | ||||
|                     } | ||||
|  | ||||
|                     FHEM::Automation::ShuttersControl::ShuttersCommandSet( | ||||
|                     FHEM::Automation::ShuttersControl::Shutters::CommandSet( | ||||
|                         $hash, $shuttersDev, $posValue ); | ||||
|                 } | ||||
|                 elsif ( | ||||
|                     ( | ||||
|                         $getIsDay | ||||
|                         || $getUp eq 'roommate' | ||||
|                     ) | ||||
|                        ( $getIsDay || $getUp eq 'roommate' ) | ||||
|                     && IsAfterShuttersTimeBlocking($shuttersDev) | ||||
|                     && (   $getModeUp eq 'home' | ||||
|                         || $getModeUp eq 'always' ) | ||||
| @@ -807,7 +794,7 @@ sub EventProcessingRoommate { | ||||
|                     { | ||||
|                         $FHEM::Automation::ShuttersControl::shutters | ||||
|                           ->setLastDrive('shading in'); | ||||
|                         FHEM::Automation::ShuttersControl::ShuttersCommandSet( | ||||
|                         FHEM::Automation::ShuttersControl::Shutters::CommandSet( | ||||
|                             $hash, | ||||
|                             $shuttersDev, | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -853,7 +840,7 @@ sub EventProcessingRoommate { | ||||
|                             ) | ||||
|                           ); | ||||
|  | ||||
|                         FHEM::Automation::ShuttersControl::ShuttersCommandSet( | ||||
|                         FHEM::Automation::ShuttersControl::Shutters::CommandSet( | ||||
|                             $hash, | ||||
|                             $shuttersDev, | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -869,11 +856,9 @@ sub EventProcessingRoommate { | ||||
|             'absent' | ||||
|             && ( $FHEM::Automation::ShuttersControl::ascDev | ||||
|                 ->getAutoShuttersControlEvening eq 'on' | ||||
|                 || $getDown eq | ||||
|                 'roommate' ) | ||||
|                 || $getDown eq 'roommate' ) | ||||
|             && ( IsAfterShuttersManualBlocking($shuttersDev) | ||||
|                 || $getDown eq | ||||
|                 'roommate' ) | ||||
|                 || $getDown eq 'roommate' ) | ||||
|           ) | ||||
|         { | ||||
|             $FHEM::Automation::ShuttersControl::shutters->setLastDrive( | ||||
| @@ -898,14 +883,13 @@ sub EventProcessingRoommate { | ||||
|                       . ' - ventilate mode' ); | ||||
|             } | ||||
|  | ||||
|             FHEM::Automation::ShuttersControl::ShuttersCommandSet( $hash, | ||||
|             FHEM::Automation::ShuttersControl::Shutters::CommandSet( $hash, | ||||
|                 $shuttersDev, $posValue ); | ||||
|         } | ||||
|         elsif ( | ||||
|             $event eq 'absent' | ||||
|             && (  !$getIsDay | ||||
|                 || $getDown eq | ||||
|                 'roommate' | ||||
|                 || $getDown eq 'roommate' | ||||
|                 || $FHEM::Automation::ShuttersControl::shutters->getShadingMode | ||||
|                 eq 'absent' | ||||
|                 || $FHEM::Automation::ShuttersControl::shutters->getModeUp eq | ||||
| @@ -914,7 +898,7 @@ sub EventProcessingRoommate { | ||||
|                 'absent' ) | ||||
|           ) | ||||
|         { | ||||
|             Log3( $name, 4, | ||||
|             ::Log3( $name, 4, | ||||
| "AutoShuttersControl ($name) - EventProcessingRoommate absent: $shuttersDev" | ||||
|             ); | ||||
|  | ||||
| @@ -922,42 +906,36 @@ sub EventProcessingRoommate { | ||||
|                    $getIsDay | ||||
|                 && $FHEM::Automation::ShuttersControl::shutters->getIfInShading | ||||
|                 && !$FHEM::Automation::ShuttersControl::shutters | ||||
|                   ->getQueryShuttersPos( | ||||
|                       $FHEM::Automation::ShuttersControl::shutters->getShadingPos | ||||
|                   ) | ||||
|                 ->getQueryShuttersPos( | ||||
|                     $FHEM::Automation::ShuttersControl::shutters->getShadingPos | ||||
|                 ) | ||||
|                 && $FHEM::Automation::ShuttersControl::shutters->getShadingMode | ||||
|                 eq 'absent' | ||||
|               ) | ||||
|             { | ||||
|                 Log3( $name, 4, | ||||
|                 ::Log3( $name, 4, | ||||
| "AutoShuttersControl ($name) - EventProcessingRoommate Shading: $shuttersDev" | ||||
|                 ); | ||||
|  | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->setLastDrive( | ||||
|                     'shading in'); | ||||
|                 FHEM::Automation::ShuttersControl::ShuttersCommandSet( | ||||
|                 FHEM::Automation::ShuttersControl::Shutters::CommandSet( | ||||
|                     $hash, | ||||
|                     $shuttersDev, | ||||
|                     $FHEM::Automation::ShuttersControl::shutters->getShadingPos | ||||
|                 ); | ||||
|             } | ||||
|             elsif ( | ||||
|                 ( | ||||
|                       !$getIsDay | ||||
|                     || $getDown eq | ||||
|                     'roommate' | ||||
|                 ) | ||||
|             elsif (( !$getIsDay || $getDown eq 'roommate' ) | ||||
|                 && $getModeDown eq 'absent' | ||||
|                 && $getRoommatesStatus eq 'absent' | ||||
|               ) | ||||
|                 && $getRoommatesStatus eq 'absent' ) | ||||
|             { | ||||
|                 Log3( $name, 4, | ||||
|                 ::Log3( $name, 4, | ||||
| "AutoShuttersControl ($name) - EventProcessingRoommate Down: $shuttersDev" | ||||
|                 ); | ||||
|  | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->setLastDrive( | ||||
|                     'roommate absent'); | ||||
|                 FHEM::Automation::ShuttersControl::ShuttersCommandSet( | ||||
|                 FHEM::Automation::ShuttersControl::Shutters::CommandSet( | ||||
|                     $hash, | ||||
|                     $shuttersDev, | ||||
|                     $FHEM::Automation::ShuttersControl::shutters->getClosedPos | ||||
| @@ -968,18 +946,18 @@ sub EventProcessingRoommate { | ||||
|                 'absent' | ||||
|                 && $getRoommatesStatus eq 'absent' ) | ||||
|             { | ||||
|                 Log3( $name, 4, | ||||
|                 ::Log3( $name, 4, | ||||
| "AutoShuttersControl ($name) - EventProcessingRoommate Up: $shuttersDev" | ||||
|                 ); | ||||
|  | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->setLastDrive( | ||||
|                     'roommate absent'); | ||||
|                 FHEM::Automation::ShuttersControl::ShuttersCommandSet( $hash, | ||||
|                 FHEM::Automation::ShuttersControl::Shutters::CommandSet( $hash, | ||||
|                     $shuttersDev, | ||||
|                     $FHEM::Automation::ShuttersControl::shutters->getOpenPos ); | ||||
|             } | ||||
|  | ||||
|             Log3( $name, 4, | ||||
|             ::Log3( $name, 4, | ||||
| "AutoShuttersControl ($name) - EventProcessingRoommate NICHTS: $shuttersDev" | ||||
|             ); | ||||
|         } | ||||
| @@ -1247,7 +1225,7 @@ sub EventProcessingResidents { | ||||
|                 ->getSelfDefenseState | ||||
|               ) | ||||
|             { | ||||
|                 RemoveInternalTimer( | ||||
|                 ::RemoveInternalTimer( | ||||
|                     $FHEM::Automation::ShuttersControl::shutters | ||||
|                       ->getSelfDefenseAbsentTimerhash ) | ||||
|                   if ( $getResidentsLastStatus eq 'absent' | ||||
| @@ -1508,8 +1486,8 @@ sub EventProcessingBrightness { | ||||
|                 ( | ||||
|                     ( | ||||
|                         ( | ||||
|                             int( gettimeofday() / 86400 ) == int( | ||||
|                                 computeAlignTime( | ||||
|                             int( ::gettimeofday() / 86400 ) == int( | ||||
|                                 ::computeAlignTime( | ||||
|                                     '24:00', | ||||
|                                     $FHEM::Automation::ShuttersControl::shutters | ||||
|                                       ->getTimeUpEarly | ||||
| @@ -1530,8 +1508,8 @@ sub EventProcessingBrightness { | ||||
|                             ) | ||||
|                         ) | ||||
|                         || ( | ||||
|                             int( gettimeofday() / 86400 ) == int( | ||||
|                                 computeAlignTime( | ||||
|                             int( ::gettimeofday() / 86400 ) == int( | ||||
|                                 ::computeAlignTime( | ||||
|                                     '24:00', | ||||
|                                     $FHEM::Automation::ShuttersControl::shutters | ||||
|                                       ->getTimeUpWeHoliday | ||||
| @@ -1544,8 +1522,8 @@ sub EventProcessingBrightness { | ||||
|                             ->getTimeUpWeHoliday ne '01:25' | ||||
|                         ) | ||||
|                     ) | ||||
|                     && int( gettimeofday() / 86400 ) == int( | ||||
|                         computeAlignTime( | ||||
|                     && int( ::gettimeofday() / 86400 ) == int( | ||||
|                         ::computeAlignTime( | ||||
|                             '24:00', | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getTimeUpLate | ||||
| @@ -1554,8 +1532,8 @@ sub EventProcessingBrightness { | ||||
|  | ||||
|                     || ( | ||||
|                         ( | ||||
|                             int( gettimeofday() / 86400 ) != int( | ||||
|                                 computeAlignTime( | ||||
|                             int( ::gettimeofday() / 86400 ) != int( | ||||
|                                 ::computeAlignTime( | ||||
|                                     '24:00', | ||||
|                                     $FHEM::Automation::ShuttersControl::shutters | ||||
|                                       ->getTimeUpEarly | ||||
| @@ -1576,8 +1554,8 @@ sub EventProcessingBrightness { | ||||
|                             ) | ||||
|                         ) | ||||
|                         || ( | ||||
|                             int( gettimeofday() / 86400 ) != int( | ||||
|                                 computeAlignTime( | ||||
|                             int( ::gettimeofday() / 86400 ) != int( | ||||
|                                 ::computeAlignTime( | ||||
|                                     '24:00', | ||||
|                                     $FHEM::Automation::ShuttersControl::shutters | ||||
|                                       ->getTimeUpWeHoliday | ||||
| @@ -1590,8 +1568,8 @@ sub EventProcessingBrightness { | ||||
|                             ->getTimeUpWeHoliday ne '01:25' | ||||
|                         ) | ||||
|                     ) | ||||
|                     && int( gettimeofday() / 86400 ) != int( | ||||
|                         computeAlignTime( | ||||
|                     && int( ::gettimeofday() / 86400 ) != int( | ||||
|                         ::computeAlignTime( | ||||
|                             '24:00', | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getTimeUpLate | ||||
| @@ -1600,15 +1578,15 @@ sub EventProcessingBrightness { | ||||
|                 ) | ||||
|                 && ( | ||||
|                     ( | ||||
|                         int( gettimeofday() / 86400 ) == int( | ||||
|                             computeAlignTime( | ||||
|                         int( ::gettimeofday() / 86400 ) == int( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                                   ->getTimeDownEarly | ||||
|                             ) / 86400 | ||||
|                         ) | ||||
|                         && int( gettimeofday() / 86400 ) == int( | ||||
|                             computeAlignTime( | ||||
|                         && int( ::gettimeofday() / 86400 ) == int( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                                   ->getTimeDownLate | ||||
| @@ -1616,15 +1594,15 @@ sub EventProcessingBrightness { | ||||
|                         ) | ||||
|                     ) | ||||
|                     || ( | ||||
|                         int( gettimeofday() / 86400 ) != int( | ||||
|                             computeAlignTime( | ||||
|                         int( ::gettimeofday() / 86400 ) != int( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                                   ->getTimeDownEarly | ||||
|                             ) / 86400 | ||||
|                         ) | ||||
|                         && int( gettimeofday() / 86400 ) != int( | ||||
|                             computeAlignTime( | ||||
|                         && int( ::gettimeofday() / 86400 ) != int( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                                   ->getTimeDownLate | ||||
| @@ -1697,8 +1675,8 @@ sub EventProcessingBrightness { | ||||
|             ( | ||||
|                 ( | ||||
|                     ( | ||||
|                         int( gettimeofday() / 86400 ) != int( | ||||
|                             computeAlignTime( | ||||
|                         int( ::gettimeofday() / 86400 ) != int( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                                   ->getTimeUpEarly | ||||
| @@ -1718,8 +1696,8 @@ sub EventProcessingBrightness { | ||||
|                         ) | ||||
|                     ) | ||||
|                     || ( | ||||
|                         int( gettimeofday() / 86400 ) != int( | ||||
|                             computeAlignTime( | ||||
|                         int( ::gettimeofday() / 86400 ) != int( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                                   ->getTimeUpWeHoliday | ||||
| @@ -1732,8 +1710,8 @@ sub EventProcessingBrightness { | ||||
|                         ->getTimeUpWeHoliday ne '01:25' | ||||
|                     ) | ||||
|                 ) | ||||
|                 && int( gettimeofday() / 86400 ) == int( | ||||
|                     computeAlignTime( | ||||
|                 && int( ::gettimeofday() / 86400 ) == int( | ||||
|                     ::computeAlignTime( | ||||
|                         '24:00', | ||||
|                         $FHEM::Automation::ShuttersControl::shutters | ||||
|                           ->getTimeUpLate | ||||
| @@ -1763,7 +1741,7 @@ sub EventProcessingBrightness { | ||||
|             ) | ||||
|           ) | ||||
|         { | ||||
|             Log3( $name, 4, | ||||
|             ::Log3( $name, 4, | ||||
| "AutoShuttersControl ($shuttersDev) - EventProcessingBrightness: Steuerung für Morgens" | ||||
|             ); | ||||
|  | ||||
| @@ -1822,7 +1800,7 @@ sub EventProcessingBrightness { | ||||
|                           ->setPrivacyUpStatus(2); | ||||
|                         $FHEM::Automation::ShuttersControl::shutters | ||||
|                           ->setLastDrive('brightness privacy day open'); | ||||
|                         FHEM::Automation::ShuttersControl::ShuttersCommandSet( | ||||
|                         FHEM::Automation::ShuttersControl::Shutters::CommandSet( | ||||
|                             $hash, | ||||
|                             $shuttersDev, | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -1840,7 +1818,7 @@ sub EventProcessingBrightness { | ||||
|                             'EventProcessingBrightness: ' | ||||
|                               . $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getShuttersDev | ||||
|                               . ' - Verarbeitung für Sunrise Privacy Down. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::ShuttersCommandSet gesendet. Grund des fahrens: ' | ||||
|                               . ' - Verarbeitung für Sunrise Privacy Down. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::Shutters::CommandSet gesendet. Grund des fahrens: ' | ||||
|                               . $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getLastDrive ); | ||||
|  | ||||
| @@ -1859,7 +1837,7 @@ sub EventProcessingBrightness { | ||||
|                           ->setPrivacyUpStatus(0) | ||||
|                           if ( $FHEM::Automation::ShuttersControl::shutters | ||||
|                             ->getPrivacyUpStatus == 2 ); | ||||
|                         FHEM::Automation::ShuttersControl::ShuttersCommandSet( | ||||
|                         FHEM::Automation::ShuttersControl::Shutters::CommandSet( | ||||
|                             $hash, | ||||
|                             $shuttersDev, | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -1870,7 +1848,7 @@ sub EventProcessingBrightness { | ||||
|                             'EventProcessingBrightness: ' | ||||
|                               . $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getShuttersDev | ||||
|                               . ' - Verarbeitung für Sunrise. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::ShuttersCommandSet gesendet. Grund des fahrens: ' | ||||
|                               . ' - Verarbeitung für Sunrise. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::Shutters::CommandSet gesendet. Grund des fahrens: ' | ||||
|                               . $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getLastDrive ); | ||||
|                     } | ||||
| @@ -1888,13 +1866,15 @@ sub EventProcessingBrightness { | ||||
|             } | ||||
|         } | ||||
|         elsif ( | ||||
|             int( gettimeofday() / 86400 ) != int( | ||||
|                 computeAlignTime( '24:00', | ||||
|             int( ::gettimeofday() / 86400 ) != int( | ||||
|                 ::computeAlignTime( | ||||
|                     '24:00', | ||||
|                     $FHEM::Automation::ShuttersControl::shutters | ||||
|                       ->getTimeDownEarly ) / 86400 | ||||
|                       ->getTimeDownEarly | ||||
|                 ) / 86400 | ||||
|             ) | ||||
|             && int( gettimeofday() / 86400 ) == int( | ||||
|                 computeAlignTime( | ||||
|             && int( ::gettimeofday() / 86400 ) == int( | ||||
|                 ::computeAlignTime( | ||||
|                     '24:00', | ||||
|                     $FHEM::Automation::ShuttersControl::shutters | ||||
|                       ->getTimeDownLate | ||||
| @@ -1914,7 +1894,7 @@ sub EventProcessingBrightness { | ||||
|             ->getAutoShuttersControlEvening eq 'on' | ||||
|           ) | ||||
|         { | ||||
|             Log3( $name, 4, | ||||
|             ::Log3( $name, 4, | ||||
| "AutoShuttersControl ($shuttersDev) - EventProcessingBrightness: Steuerung für Abends" | ||||
|             ); | ||||
|  | ||||
| @@ -1973,7 +1953,7 @@ sub EventProcessingBrightness { | ||||
|                         'EventProcessingBrightness: ' | ||||
|                           . $FHEM::Automation::ShuttersControl::shutters | ||||
|                           ->getShuttersDev | ||||
|                           . ' - Verarbeitung für Sunset Privacy Down. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::ShuttersCommandSet gesendet. Grund des fahrens: ' | ||||
|                           . ' - Verarbeitung für Sunset Privacy Down. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::Shutters::CommandSet gesendet. Grund des fahrens: ' | ||||
|                           . $FHEM::Automation::ShuttersControl::shutters | ||||
|                           ->getLastDrive ); | ||||
|                 } | ||||
| @@ -2029,14 +2009,14 @@ sub EventProcessingBrightness { | ||||
|                     $FHEM::Automation::ShuttersControl::shutters->setSunset(1); | ||||
|                 } | ||||
|  | ||||
|                 FHEM::Automation::ShuttersControl::ShuttersCommandSet( $hash, | ||||
|                 FHEM::Automation::ShuttersControl::Shutters::CommandSet( $hash, | ||||
|                     $shuttersDev, $posValue ); | ||||
|  | ||||
|                 FHEM::Automation::ShuttersControl::ASC_Debug( | ||||
|                     'EventProcessingBrightness: ' | ||||
|                       . $FHEM::Automation::ShuttersControl::shutters | ||||
|                       ->getShuttersDev | ||||
|                       . ' - Verarbeitung für Sunset. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::ShuttersCommandSet gesendet. Zielposition: ' | ||||
|                       . ' - Verarbeitung für Sunset. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::Shutters::CommandSet gesendet. Zielposition: ' | ||||
|                       . $posValue | ||||
|                       . ' Grund des fahrens: ' | ||||
|                       . $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -2093,7 +2073,7 @@ sub EventProcessingShadingBrightness { | ||||
|         : $FHEM::Automation::ShuttersControl::ascDev->getOutTemp | ||||
|     ); | ||||
|  | ||||
|     Log3( $name, 4, | ||||
|     ::Log3( $name, 4, | ||||
|         "AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness" | ||||
|     ); | ||||
|  | ||||
| @@ -2104,7 +2084,7 @@ sub EventProcessingShadingBrightness { | ||||
|     ); | ||||
|  | ||||
|     if ( $events =~ m{$reading:\s(\d+(\.\d+)?)}xms ) { | ||||
|         Log3( | ||||
|         ::Log3( | ||||
|             $name, 4, | ||||
| "AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness | ||||
|             Brightness: " . $1 | ||||
| @@ -2271,23 +2251,23 @@ sub EventProcessingPartyMode { | ||||
|                 && $FHEM::Automation::ShuttersControl::shutters->getSubTyp eq | ||||
|                 'threestate' ) | ||||
|             { | ||||
|                 Log3( $name, 4, | ||||
|                 ::Log3( $name, 4, | ||||
| "AutoShuttersControl ($name) - EventProcessingPartyMode Fenster offen" | ||||
|                 ); | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->setDelayCmd( | ||||
|                     $FHEM::Automation::ShuttersControl::shutters->getClosedPos | ||||
|                 ); | ||||
|                 Log3( $name, 4, | ||||
|                 ::Log3( $name, 4, | ||||
| "AutoShuttersControl ($name) - EventProcessingPartyMode - Spring in ShuttersCommandDelaySet" | ||||
|                 ); | ||||
|             } | ||||
|             else { | ||||
|                 Log3( $name, 4, | ||||
|                 ::Log3( $name, 4, | ||||
| "AutoShuttersControl ($name) - EventProcessingPartyMode Fenster nicht offen" | ||||
|                 ); | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->setLastDrive( | ||||
|                     'drive after party mode'); | ||||
|                 FHEM::Automation::ShuttersControl::ShuttersCommandSet( | ||||
|                 FHEM::Automation::ShuttersControl::Shutters::CommandSet( | ||||
|                     $hash, | ||||
|                     $shuttersDev, | ||||
|                     ( | ||||
| @@ -2313,7 +2293,7 @@ sub EventProcessingPartyMode { | ||||
|         { | ||||
|             $FHEM::Automation::ShuttersControl::shutters->setLastDrive( | ||||
|                 'drive after party mode'); | ||||
|             FHEM::Automation::ShuttersControl::ShuttersCommandSet( $hash, | ||||
|             FHEM::Automation::ShuttersControl::Shutters::CommandSet( $hash, | ||||
|                 $shuttersDev, | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->getDelayCmd ); | ||||
|         } | ||||
| @@ -2337,7 +2317,7 @@ sub EventProcessingAdvShuttersClose { | ||||
|         $FHEM::Automation::ShuttersControl::shutters->setLastDrive( | ||||
|             'adv delay close'); | ||||
|         $FHEM::Automation::ShuttersControl::shutters->setAdvDelay(1); | ||||
|         FHEM::Automation::ShuttersControl::ShuttersCommandSet( | ||||
|         FHEM::Automation::ShuttersControl::Shutters::CommandSet( | ||||
|             $hash, | ||||
|             $shuttersDev, | ||||
|             ( | ||||
| @@ -2373,8 +2353,8 @@ sub EventProcessingShutters { | ||||
|                 'EventProcessingShutters: ' | ||||
|               . $FHEM::Automation::ShuttersControl::shutters->getShuttersDev | ||||
|               . ' - Event vom Rollo erkannt. Es wird nun eine etwaige manuelle Fahrt ausgewertet.' | ||||
|               . ' Int von gettimeofday: ' | ||||
|               . int( gettimeofday() ) | ||||
|               . ' Int von ::gettimeofday: ' | ||||
|               . int( ::gettimeofday() ) | ||||
|               . ' Last Position Timestamp: ' | ||||
|               . $FHEM::Automation::ShuttersControl::shutters | ||||
|               ->getLastPosTimestamp | ||||
| @@ -2388,13 +2368,13 @@ sub EventProcessingShutters { | ||||
|  | ||||
|         if ( | ||||
|             ( | ||||
|                 int( gettimeofday() ) - | ||||
|                 int( ::gettimeofday() ) - | ||||
|                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                 ->getLastPosTimestamp | ||||
|             ) > | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration | ||||
|             && ( | ||||
|                 int( gettimeofday() ) - | ||||
|                 int( ::gettimeofday() ) - | ||||
|                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                 ->getLastManPosTimestamp ) > | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration | ||||
| @@ -2497,7 +2477,7 @@ sub EventProcessingExternalTriggerDevice { | ||||
|             $FHEM::Automation::ShuttersControl::shutters->setNoDelay(1); | ||||
|             $FHEM::Automation::ShuttersControl::shutters | ||||
|               ->setExternalTriggerStatus(1); | ||||
|             FHEM::Automation::ShuttersControl::ShuttersCommandSet( $hash, | ||||
|             FHEM::Automation::ShuttersControl::Shutters::CommandSet( $hash, | ||||
|                 $shuttersDev, $triggerPosActive2 ); | ||||
|         } | ||||
|         else { | ||||
| @@ -2506,7 +2486,7 @@ sub EventProcessingExternalTriggerDevice { | ||||
|             $FHEM::Automation::ShuttersControl::shutters->setNoDelay(1); | ||||
|             $FHEM::Automation::ShuttersControl::shutters | ||||
|               ->setExternalTriggerStatus(1); | ||||
|             FHEM::Automation::ShuttersControl::ShuttersCommandSet( $hash, | ||||
|             FHEM::Automation::ShuttersControl::Shutters::CommandSet( $hash, | ||||
|                 $shuttersDev, $triggerPosActive ); | ||||
|         } | ||||
|     } | ||||
| @@ -2530,7 +2510,7 @@ sub EventProcessingExternalTriggerDevice { | ||||
|         $FHEM::Automation::ShuttersControl::shutters->setNoDelay(1); | ||||
|         $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus( | ||||
|             0); | ||||
|         FHEM::Automation::ShuttersControl::ShuttersCommandSet( | ||||
|         FHEM::Automation::ShuttersControl::Shutters::CommandSet( | ||||
|             $hash, | ||||
|             $shuttersDev, | ||||
|             ( | ||||
|   | ||||
| @@ -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 | ||||
| # | ||||
| #   Special thanks goes to: | ||||
| @@ -50,7 +50,7 @@ our @ISA       = qw(Exporter); | ||||
| our @EXPORT_OK = qw( | ||||
|   PositionValueWindowRec | ||||
|   AutoSearchTwilightDev | ||||
|   GetAttrValues | ||||
|   Get::AttrValues | ||||
|   CheckIfShuttersWindowRecOpen | ||||
|   ExtractNotifyDevFromEvent | ||||
|   ShuttersSunrise | ||||
| @@ -69,7 +69,7 @@ our %EXPORT_TAGS = ( | ||||
|         qw( | ||||
|           PositionValueWindowRec | ||||
|           AutoSearchTwilightDev | ||||
|           GetAttrValues | ||||
|           Get::AttrValues | ||||
|           CheckIfShuttersWindowRecOpen | ||||
|           ExtractNotifyDevFromEvent | ||||
|           ShuttersSunrise | ||||
| @@ -89,21 +89,7 @@ our %EXPORT_TAGS = ( | ||||
| use GPUtils qw(GP_Import); | ||||
| ## Import der FHEM Funktionen | ||||
| BEGIN { | ||||
|     GP_Import( | ||||
|         qw( | ||||
|           devspec2array | ||||
|           CommandAttr | ||||
|           AttrVal | ||||
|           Log3 | ||||
|           computeAlignTime | ||||
|           gettimeofday | ||||
|           sunset | ||||
|           sunset_abs | ||||
|           sunrise | ||||
|           sunrise_abs | ||||
|           cmdFromAnalyze | ||||
|           ) | ||||
|     ); | ||||
|     GP_Import(qw(cmdFromAnalyze)); | ||||
| } | ||||
|  | ||||
| sub PositionValueWindowRec { | ||||
| @@ -156,24 +142,26 @@ sub AutoSearchTwilightDev { | ||||
|  | ||||
|     my $name = $hash->{NAME}; | ||||
|  | ||||
|     if ( devspec2array('TYPE=(Astro|Twilight)') > 0 ) { | ||||
|         CommandAttr( undef, | ||||
|     if ( ::devspec2array('TYPE=(Astro|Twilight)') > 0 ) { | ||||
|         ::CommandAttr( undef, | ||||
|                 $name | ||||
|               . ' ASC_twilightDevice ' | ||||
|               . ( devspec2array('TYPE=(Astro|Twilight)') )[0] ) | ||||
|           if ( AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' ); | ||||
|               . ( ::devspec2array('TYPE=(Astro|Twilight)') )[0] ) | ||||
|           if ( ::AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' ); | ||||
|     } | ||||
|  | ||||
|     return; | ||||
| } | ||||
|  | ||||
| sub GetAttrValues { | ||||
| sub Get::AttrValues { | ||||
|     my $dev      = shift; | ||||
|     my $attribut = shift; | ||||
|     my $default  = shift; | ||||
|  | ||||
|     my @values = split( ' ', | ||||
|         AttrVal( $dev, $attribut, ( defined($default) ? $default : 'none' ) ) ); | ||||
|     my @values = split( | ||||
|         ' ', | ||||
|         ::AttrVal( $dev, $attribut, ( defined($default) ? $default : 'none' ) ) | ||||
|     ); | ||||
|     my ( $value1, $value2 ) = split( ':', $values[0] ); | ||||
|  | ||||
|     my ( $value3, $value4, $value5, $value6, $value7, $value8 ); | ||||
| @@ -227,10 +215,10 @@ sub ExtractNotifyDevFromEvent { | ||||
|  | ||||
|     my %notifyDevs; | ||||
|     while ( my $notifyDev = each %{ $hash->{monitoredDevs} } ) { | ||||
|         Log3( $hash->{NAME}, 4, | ||||
|         ::Log3( $hash->{NAME}, 4, | ||||
| "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - NotifyDev: " | ||||
|               . $notifyDev ); | ||||
|         Log3( $hash->{NAME}, 5, | ||||
|         ::Log3( $hash->{NAME}, 5, | ||||
| "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDev: " | ||||
|               . $shuttersDev ); | ||||
|  | ||||
| @@ -238,10 +226,10 @@ sub ExtractNotifyDevFromEvent { | ||||
|             && $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} eq | ||||
|             $shuttersAttr ) | ||||
|         { | ||||
|             Log3( $hash->{NAME}, 4, | ||||
|             ::Log3( $hash->{NAME}, 4, | ||||
| "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDevHash: " | ||||
|                   . $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} ); | ||||
|             Log3( $hash->{NAME}, 5, | ||||
|             ::Log3( $hash->{NAME}, 5, | ||||
| "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - return ShuttersDev: " | ||||
|                   . $notifyDev ); | ||||
|             $notifyDevs{$notifyDev} = $shuttersDev; | ||||
| @@ -279,24 +267,27 @@ sub _IsDay { | ||||
|         ( | ||||
|             ( | ||||
|                 ( | ||||
|                     int( gettimeofday() / 86400 ) != int( | ||||
|                         computeAlignTime( '24:00', | ||||
|                     int( ::gettimeofday() / 86400 ) != int( | ||||
|                         ::computeAlignTime( | ||||
|                             '24:00', | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getTimeUpEarly ) / 86400 | ||||
|                               ->getTimeUpEarly | ||||
|                         ) / 86400 | ||||
|                     ) | ||||
|                     && ( !IsWe() | ||||
|                       || ( IsWe() | ||||
|                         && ( $FHEM::Automation::ShuttersControl::ascDev | ||||
|                           ->getSunriseTimeWeHoliday eq 'off' | ||||
|                           || $FHEM::Automation::ShuttersControl::shutters | ||||
|                             ->getTimeUpWeHoliday eq '01:25' | ||||
|                            ) | ||||
|                          ) | ||||
|                     && ( | ||||
|                         !IsWe() | ||||
|                         || ( | ||||
|                             IsWe() | ||||
|                             && ( $FHEM::Automation::ShuttersControl::ascDev | ||||
|                                 ->getSunriseTimeWeHoliday eq 'off' | ||||
|                                 || $FHEM::Automation::ShuttersControl::shutters | ||||
|                                 ->getTimeUpWeHoliday eq '01:25' ) | ||||
|                         ) | ||||
|                     ) | ||||
|                 ) | ||||
|                 || ( | ||||
|                     int( gettimeofday() / 86400 ) != int( | ||||
|                         computeAlignTime( | ||||
|                     int( ::gettimeofday() / 86400 ) != int( | ||||
|                         ::computeAlignTime( | ||||
|                             '24:00', | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getTimeUpWeHoliday | ||||
| @@ -309,23 +300,23 @@ sub _IsDay { | ||||
|                     ->getTimeUpWeHoliday ne '01:25' | ||||
|                 ) | ||||
|             ) | ||||
|             && int( gettimeofday() / 86400 ) == int( | ||||
|                 computeAlignTime( | ||||
|             && int( ::gettimeofday() / 86400 ) == int( | ||||
|                 ::computeAlignTime( | ||||
|                     '24:00', | ||||
|                     $FHEM::Automation::ShuttersControl::shutters->getTimeUpLate | ||||
|                 ) / 86400 | ||||
|             ) | ||||
|         ) | ||||
|         || ( | ||||
|             int( gettimeofday() / 86400 ) != int( | ||||
|                 computeAlignTime( | ||||
|             int( ::gettimeofday() / 86400 ) != int( | ||||
|                 ::computeAlignTime( | ||||
|                     '24:00', | ||||
|                     $FHEM::Automation::ShuttersControl::shutters | ||||
|                       ->getTimeDownEarly | ||||
|                 ) / 86400 | ||||
|             ) | ||||
|             && int( gettimeofday() / 86400 ) == int( | ||||
|                 computeAlignTime( | ||||
|             && int( ::gettimeofday() / 86400 ) == int( | ||||
|                 ::computeAlignTime( | ||||
|                     '24:00', | ||||
|                     $FHEM::Automation::ShuttersControl::shutters | ||||
|                       ->getTimeDownLate | ||||
| @@ -390,19 +381,24 @@ sub _IsDay { | ||||
|               . $FHEM::Automation::ShuttersControl::shutters->getSunrise ); | ||||
|     } | ||||
|  | ||||
|      | ||||
|     $respIsDay = 1 | ||||
|       if ( | ||||
|            (  $FHEM::Automation::ShuttersControl::shutters->getDown eq 'roommate' | ||||
|              and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'asleep' | ||||
|                 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' ) | ||||
|            ) | ||||
|         ( | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getDown eq 'roommate' | ||||
|             and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne | ||||
|                 'asleep' | ||||
|                 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; | ||||
| } | ||||
|  | ||||
| @@ -436,7 +432,7 @@ sub ShuttersSunrise { | ||||
|     my $oldFuncHash = | ||||
|       $FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash; | ||||
|     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 ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'astro' ) { | ||||
| @@ -449,11 +445,11 @@ sub ShuttersSunrise { | ||||
|                 if ( !IsWe('tomorrow') ) { | ||||
|                     if ( | ||||
|                         IsWe() | ||||
|                         && int( gettimeofday() / 86400 ) == int( | ||||
|                         && int( ::gettimeofday() / 86400 ) == int( | ||||
|                             ( | ||||
|                                 computeAlignTime( | ||||
|                                 ::computeAlignTime( | ||||
|                                     '24:00', | ||||
|                                     sunrise_abs( | ||||
|                                     ::sunrise_abs( | ||||
|                                         $autoAstroMode, | ||||
|                                         0, | ||||
|                                         $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -465,9 +461,9 @@ sub ShuttersSunrise { | ||||
|                       ) | ||||
|                     { | ||||
|                         $shuttersSunriseUnixtime = ( | ||||
|                             computeAlignTime( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 sunrise_abs( | ||||
|                                 ::sunrise_abs( | ||||
|                                     $autoAstroMode, | ||||
|                                     0, | ||||
|                                     $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -477,11 +473,11 @@ sub ShuttersSunrise { | ||||
|                         ); | ||||
|                     } | ||||
|                     elsif ( | ||||
|                         int( gettimeofday() / 86400 ) == int( | ||||
|                         int( ::gettimeofday() / 86400 ) == int( | ||||
|                             ( | ||||
|                                 computeAlignTime( | ||||
|                                 ::computeAlignTime( | ||||
|                                     '24:00', | ||||
|                                     sunrise_abs( | ||||
|                                     ::sunrise_abs( | ||||
|                                         $autoAstroMode, | ||||
|                                         0, | ||||
|                                         $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -495,9 +491,9 @@ sub ShuttersSunrise { | ||||
|                       ) | ||||
|                     { | ||||
|                         $shuttersSunriseUnixtime = ( | ||||
|                             computeAlignTime( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 sunrise_abs( | ||||
|                                 ::sunrise_abs( | ||||
|                                     $autoAstroMode, | ||||
|                                     0, | ||||
|                                     $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -508,9 +504,9 @@ sub ShuttersSunrise { | ||||
|                     } | ||||
|                     else { | ||||
|                         $shuttersSunriseUnixtime = ( | ||||
|                             computeAlignTime( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 sunrise_abs( | ||||
|                                 ::sunrise_abs( | ||||
|                                     $autoAstroMode, | ||||
|                                     0, | ||||
|                                     $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -526,11 +522,11 @@ sub ShuttersSunrise { | ||||
|                     if ( | ||||
|                         IsWe() | ||||
|                         && ( | ||||
|                             int( gettimeofday() / 86400 ) == int( | ||||
|                             int( ::gettimeofday() / 86400 ) == int( | ||||
|                                 ( | ||||
|                                     computeAlignTime( | ||||
|                                     ::computeAlignTime( | ||||
|                                         '24:00', | ||||
|                                         sunrise_abs( | ||||
|                                         ::sunrise_abs( | ||||
|                                             $autoAstroMode, | ||||
|                                             0, | ||||
|                                             $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -539,11 +535,11 @@ sub ShuttersSunrise { | ||||
|                                     ) + 1 | ||||
|                                 ) / 86400 | ||||
|                             ) | ||||
|                             || int( gettimeofday() / 86400 ) != int( | ||||
|                             || int( ::gettimeofday() / 86400 ) != int( | ||||
|                                 ( | ||||
|                                     computeAlignTime( | ||||
|                                     ::computeAlignTime( | ||||
|                                         '24:00', | ||||
|                                         sunrise_abs( | ||||
|                                         ::sunrise_abs( | ||||
|                                             $autoAstroMode, | ||||
|                                             0, | ||||
|                                             $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -556,9 +552,9 @@ sub ShuttersSunrise { | ||||
|                       ) | ||||
|                     { | ||||
|                         $shuttersSunriseUnixtime = ( | ||||
|                             computeAlignTime( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 sunrise_abs( | ||||
|                                 ::sunrise_abs( | ||||
|                                     $autoAstroMode, | ||||
|                                     0, | ||||
|                                     $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -568,11 +564,11 @@ sub ShuttersSunrise { | ||||
|                         ); | ||||
|                     } | ||||
|                     elsif ( | ||||
|                         int( gettimeofday() / 86400 ) == int( | ||||
|                         int( ::gettimeofday() / 86400 ) == int( | ||||
|                             ( | ||||
|                                 computeAlignTime( | ||||
|                                 ::computeAlignTime( | ||||
|                                     '24:00', | ||||
|                                     sunrise_abs( | ||||
|                                     ::sunrise_abs( | ||||
|                                         $autoAstroMode, | ||||
|                                         0, | ||||
|                                         $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -586,9 +582,9 @@ sub ShuttersSunrise { | ||||
|                       ) | ||||
|                     { | ||||
|                         $shuttersSunriseUnixtime = ( | ||||
|                             computeAlignTime( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 sunrise_abs( | ||||
|                                 ::sunrise_abs( | ||||
|                                     $autoAstroMode, | ||||
|                                     0, | ||||
|                                     $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -601,11 +597,11 @@ sub ShuttersSunrise { | ||||
|                     } | ||||
|                     else { | ||||
|                         if ( | ||||
|                             int( gettimeofday() / 86400 ) == int( | ||||
|                             int( ::gettimeofday() / 86400 ) == int( | ||||
|                                 ( | ||||
|                                     computeAlignTime( | ||||
|                                     ::computeAlignTime( | ||||
|                                         '24:00', | ||||
|                                         sunrise_abs( | ||||
|                                         ::sunrise_abs( | ||||
|                                             $autoAstroMode, | ||||
|                                             0, | ||||
|                                             $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -617,9 +613,9 @@ sub ShuttersSunrise { | ||||
|                           ) | ||||
|                         { | ||||
|                             $shuttersSunriseUnixtime = ( | ||||
|                                 computeAlignTime( | ||||
|                                 ::computeAlignTime( | ||||
|                                     '24:00', | ||||
|                                     sunrise_abs( | ||||
|                                     ::sunrise_abs( | ||||
|                                         $autoAstroMode, | ||||
|                                         0, | ||||
|                                         $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -630,9 +626,9 @@ sub ShuttersSunrise { | ||||
|                         } | ||||
|                         else { | ||||
|                             $shuttersSunriseUnixtime = ( | ||||
|                                 computeAlignTime( | ||||
|                                 ::computeAlignTime( | ||||
|                                     '24:00', | ||||
|                                     sunrise_abs( | ||||
|                                     ::sunrise_abs( | ||||
|                                         $autoAstroMode, | ||||
|                                         0, | ||||
|                                         $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -646,9 +642,9 @@ sub ShuttersSunrise { | ||||
|             } | ||||
|             else { | ||||
|                 $shuttersSunriseUnixtime = ( | ||||
|                     computeAlignTime( | ||||
|                     ::computeAlignTime( | ||||
|                         '24:00', | ||||
|                         sunrise_abs( | ||||
|                         ::sunrise_abs( | ||||
|                             $autoAstroMode, | ||||
|                             0, | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -669,11 +665,11 @@ sub ShuttersSunrise { | ||||
|             { | ||||
|                 if ( !IsWe('tomorrow') ) { | ||||
|                     if ( | ||||
|                         int( gettimeofday() / 86400 ) == int( | ||||
|                         int( ::gettimeofday() / 86400 ) == int( | ||||
|                             ( | ||||
|                                 computeAlignTime( | ||||
|                                 ::computeAlignTime( | ||||
|                                     '24:00', | ||||
|                                     sunrise_abs( | ||||
|                                     ::sunrise_abs( | ||||
|                                         $autoAstroMode, | ||||
|                                         0, | ||||
|                                         $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -689,16 +685,17 @@ sub ShuttersSunrise { | ||||
|                         $shuttersSunriseUnixtime = | ||||
|                           ( $shuttersSunriseUnixtime + 86400 ) | ||||
|                           if ( $shuttersSunriseUnixtime < | ||||
|                             ( $oldFuncHash->{sunrisetime} + 180 ) | ||||
|                             && $oldFuncHash->{sunrisetime} < gettimeofday() ); | ||||
|                             ( $oldFuncHash->{::sunrisetime} + 180 ) | ||||
|                             && $oldFuncHash->{::sunrisetime} < | ||||
|                             ::gettimeofday() ); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             elsif ( defined($oldFuncHash) && ref($oldFuncHash) eq 'HASH' ) { | ||||
|                 $shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime + 86400 ) | ||||
|                   if ( $shuttersSunriseUnixtime < | ||||
|                     ( $oldFuncHash->{sunrisetime} + 180 ) | ||||
|                     && $oldFuncHash->{sunrisetime} < gettimeofday() ); | ||||
|                     ( $oldFuncHash->{::sunrisetime} + 180 ) | ||||
|                     && $oldFuncHash->{::sunrisetime} < ::gettimeofday() ); | ||||
|             } | ||||
|         } | ||||
|         elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'time' ) | ||||
| @@ -711,8 +708,8 @@ sub ShuttersSunrise { | ||||
|             { | ||||
|                 if ( !IsWe('tomorrow') ) { | ||||
|                     if ( | ||||
|                         int( gettimeofday() / 86400 ) == int( | ||||
|                             computeAlignTime( | ||||
|                         int( ::gettimeofday() / 86400 ) == int( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                                   ->getTimeUpWeHoliday | ||||
| @@ -720,13 +717,13 @@ sub ShuttersSunrise { | ||||
|                         ) | ||||
|                       ) | ||||
|                     { | ||||
|                         $shuttersSunriseUnixtime = computeAlignTime( '24:00', | ||||
|                         $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getTimeUpWeHoliday ); | ||||
|                     } | ||||
|                     elsif ( | ||||
|                         int( gettimeofday() / 86400 ) == int( | ||||
|                             computeAlignTime( | ||||
|                         int( ::gettimeofday() / 86400 ) == int( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                                   ->getTimeUpEarly | ||||
| @@ -736,12 +733,12 @@ sub ShuttersSunrise { | ||||
|                         ->getSunrise | ||||
|                       ) | ||||
|                     { | ||||
|                         $shuttersSunriseUnixtime = computeAlignTime( '24:00', | ||||
|                         $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getTimeUpEarly ) + 86400; | ||||
|                     } | ||||
|                     else { | ||||
|                         $shuttersSunriseUnixtime = computeAlignTime( '24:00', | ||||
|                         $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getTimeUpEarly ); | ||||
|                     } | ||||
| @@ -749,8 +746,8 @@ sub ShuttersSunrise { | ||||
|                 else { | ||||
|                     if ( | ||||
|                         IsWe() | ||||
|                         && int( gettimeofday() / 86400 ) == int( | ||||
|                             computeAlignTime( | ||||
|                         && int( ::gettimeofday() / 86400 ) == int( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                                   ->getTimeUpWeHoliday | ||||
| @@ -758,13 +755,13 @@ sub ShuttersSunrise { | ||||
|                         ) | ||||
|                       ) | ||||
|                     { | ||||
|                         $shuttersSunriseUnixtime = computeAlignTime( '24:00', | ||||
|                         $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getTimeUpWeHoliday ); | ||||
|                     } | ||||
|                     elsif ( | ||||
|                         int( gettimeofday() / 86400 ) == int( | ||||
|                             computeAlignTime( | ||||
|                         int( ::gettimeofday() / 86400 ) == int( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                                   ->getTimeUpEarly | ||||
| @@ -772,13 +769,13 @@ sub ShuttersSunrise { | ||||
|                         ) | ||||
|                       ) | ||||
|                     { | ||||
|                         $shuttersSunriseUnixtime = computeAlignTime( '24:00', | ||||
|                         $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getTimeUpEarly ); | ||||
|                     } | ||||
|                     elsif ( | ||||
|                         int( gettimeofday() / 86400 ) != int( | ||||
|                             computeAlignTime( | ||||
|                         int( ::gettimeofday() / 86400 ) != int( | ||||
|                             ::computeAlignTime( | ||||
|                                 '24:00', | ||||
|                                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                                   ->getTimeUpWeHoliday | ||||
| @@ -786,19 +783,19 @@ sub ShuttersSunrise { | ||||
|                         ) | ||||
|                       ) | ||||
|                     { | ||||
|                         $shuttersSunriseUnixtime = computeAlignTime( '24:00', | ||||
|                         $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getTimeUpWeHoliday ); | ||||
|                     } | ||||
|                     else { | ||||
|                         $shuttersSunriseUnixtime = computeAlignTime( '24:00', | ||||
|                         $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||
|                             $FHEM::Automation::ShuttersControl::shutters | ||||
|                               ->getTimeUpWeHoliday ) + 86400; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             else { | ||||
|                 $shuttersSunriseUnixtime = computeAlignTime( '24:00', | ||||
|                 $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||
|                     $FHEM::Automation::ShuttersControl::shutters | ||||
|                       ->getTimeUpEarly ); | ||||
|             } | ||||
| @@ -806,15 +803,14 @@ sub ShuttersSunrise { | ||||
|         elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq | ||||
|             'brightness' ) | ||||
|         { | ||||
|             $shuttersSunriseUnixtime = computeAlignTime( '24:00', | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->getTimeUpLate | ||||
|             ); | ||||
|             $shuttersSunriseUnixtime = ::computeAlignTime( '24:00', | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->getTimeUpLate ); | ||||
|         } | ||||
|  | ||||
|         return $shuttersSunriseUnixtime; | ||||
|     } | ||||
|     elsif ( $tm eq 'real' ) { | ||||
|         return sunrise_abs( | ||||
|         return ::sunrise_abs( | ||||
|             $autoAstroMode, | ||||
|             0, | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getTimeUpEarly, | ||||
| @@ -858,15 +854,15 @@ sub ShuttersSunset { | ||||
|     my $oldFuncHash = | ||||
|       $FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash; | ||||
|     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 ( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'astro' ) | ||||
|         { | ||||
|             $shuttersSunsetUnixtime = ( | ||||
|                 computeAlignTime( | ||||
|                 ::computeAlignTime( | ||||
|                     '24:00', | ||||
|                     sunset_abs( | ||||
|                     ::sunset_abs( | ||||
|                         $autoAstroMode, | ||||
|                         0, | ||||
|                         $FHEM::Automation::ShuttersControl::shutters | ||||
| @@ -879,14 +875,14 @@ sub ShuttersSunset { | ||||
|             if ( defined($oldFuncHash) && ref($oldFuncHash) eq 'HASH' ) { | ||||
|                 $shuttersSunsetUnixtime += 86400 | ||||
|                   if ( $shuttersSunsetUnixtime < | ||||
|                     ( $oldFuncHash->{sunsettime} + 180 ) | ||||
|                     && $oldFuncHash->{sunsettime} < gettimeofday() ); | ||||
|                     ( $oldFuncHash->{::sunsettime} + 180 ) | ||||
|                     && $oldFuncHash->{::sunsettime} < ::gettimeofday() ); | ||||
|             } | ||||
|         } | ||||
|         elsif ( | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getDown eq 'time' ) | ||||
|         { | ||||
|             $shuttersSunsetUnixtime = computeAlignTime( '24:00', | ||||
|             $shuttersSunsetUnixtime = ::computeAlignTime( '24:00', | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly | ||||
|             ); | ||||
|         } | ||||
| @@ -894,13 +890,13 @@ sub ShuttersSunset { | ||||
|             'brightness' ) | ||||
|         { | ||||
|             $shuttersSunsetUnixtime = | ||||
|               computeAlignTime( '24:00', | ||||
|               ::computeAlignTime( '24:00', | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->getTimeDownLate ); | ||||
|         } | ||||
|         return $shuttersSunsetUnixtime; | ||||
|     } | ||||
|     elsif ( $tm eq 'real' ) { | ||||
|         return sunset_abs( | ||||
|         return ::sunset_abs( | ||||
|             $autoAstroMode, | ||||
|             0, | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly, | ||||
| @@ -923,7 +919,7 @@ sub IsAfterShuttersTimeBlocking { | ||||
|  | ||||
|     if ( | ||||
|         ( | ||||
|             int( gettimeofday() ) - | ||||
|             int( ::gettimeofday() ) - | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp | ||||
|         ) < | ||||
|         $FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual | ||||
| @@ -933,7 +929,7 @@ sub IsAfterShuttersTimeBlocking { | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime | ||||
|             ) | ||||
|             && $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime | ||||
|             - ( int( gettimeofday() ) ) < | ||||
|             - ( int( ::gettimeofday() ) ) < | ||||
|             $FHEM::Automation::ShuttersControl::shutters | ||||
|             ->getBlockingTimeBeforDayOpen | ||||
|         ) | ||||
| @@ -943,7 +939,7 @@ sub IsAfterShuttersTimeBlocking { | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime | ||||
|             ) | ||||
|             && $FHEM::Automation::ShuttersControl::shutters->getSunsetUnixTime | ||||
|             - ( int( gettimeofday() ) ) < | ||||
|             - ( int( ::gettimeofday() ) ) < | ||||
|             $FHEM::Automation::ShuttersControl::shutters | ||||
|             ->getBlockingTimeBeforNightClose | ||||
|         ) | ||||
| @@ -982,7 +978,7 @@ sub IsAfterShuttersManualBlocking { | ||||
|     } | ||||
|     elsif ( | ||||
|         ( | ||||
|             int( gettimeofday() ) - | ||||
|             int( ::gettimeofday() ) - | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp | ||||
|         ) < | ||||
|         $FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual | ||||
| @@ -1019,7 +1015,7 @@ sub PerlCodeCheck { | ||||
| sub IsAdv { | ||||
|     use HTTP::Date; | ||||
|     my ( undef, undef, undef, $monthday, $month, $year, undef, undef, undef ) = | ||||
|       localtime( gettimeofday() ); | ||||
|       localtime( ::gettimeofday() ); | ||||
|     my $adv = 0; | ||||
|     $year += 1900; | ||||
|  | ||||
| @@ -1032,11 +1028,12 @@ sub IsAdv { | ||||
|         my $time = str2time( $year . '-12-25' ); | ||||
|         my $wday = ( localtime($time) )[6]; | ||||
|         $wday = $wday ? $wday : 7; | ||||
|         $time -= ( $FHEM::Automation::ShuttersControl::ascDev | ||||
|             ->getAdvDate eq 'DeadSunday' | ||||
|               ? ($wday + 27) * 86400 | ||||
|               : ($wday + 21) * 86400 | ||||
|           ); | ||||
|         $time -= ( | ||||
|             $FHEM::Automation::ShuttersControl::ascDev->getAdvDate eq | ||||
|               'DeadSunday' | ||||
|             ? ( $wday + 27 ) * 86400 | ||||
|             : ( $wday + 21 ) * 86400 | ||||
|         ); | ||||
|         $adv = 1 if ( $time < time ); | ||||
|     } | ||||
|  | ||||
| @@ -1046,18 +1043,19 @@ sub IsAdv { | ||||
| sub IsInTime { | ||||
|     my $dfi = shift; | ||||
|  | ||||
|     $dfi =~ s/{([^\x7d]*)}/$cmdFromAnalyze=$1; eval $1/ge; # Forum #69787 | ||||
|     my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(gettimeofday()); | ||||
|     my $dhms = sprintf("%s\@%02d:%02d:%02d", $wday, $hour, $min, $sec); | ||||
|     foreach my $ft (split(" ", $dfi)) { | ||||
|         my ($from, $to) = split("-", $ft); | ||||
|         if(defined($from) && defined($to)) { | ||||
|             $from = "$wday\@$from" if(index($from,"@") < 0); | ||||
|             $to   = "$wday\@$to"   if(index($to,  "@") < 0); | ||||
|             return 1 if($from le $dhms && $dhms le $to); | ||||
|     $dfi =~ s/{([^\x7d]*)}/$cmdFromAnalyze=$1; eval $1/ge;    # Forum #69787 | ||||
|     my ( $sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst ) = | ||||
|       localtime( ::gettimeofday() ); | ||||
|     my $dhms = sprintf( "%s\@%02d:%02d:%02d", $wday, $hour, $min, $sec ); | ||||
|     foreach my $ft ( split( " ", $dfi ) ) { | ||||
|         my ( $from, $to ) = split( "-", $ft ); | ||||
|         if ( defined($from) && defined($to) ) { | ||||
|             $from = "$wday\@$from" if ( index( $from, "@" ) < 0 ); | ||||
|             $to   = "$wday\@$to"   if ( index( $to,   "@" ) < 0 ); | ||||
|             return 1 if ( $from le $dhms && $dhms le $to ); | ||||
|         } | ||||
|     } | ||||
|      | ||||
|  | ||||
|     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 | ||||
| # | ||||
| #   Special thanks goes to: | ||||
| @@ -59,12 +59,11 @@ our %EXPORT_TAGS = ( | ||||
|     ], | ||||
| ); | ||||
|  | ||||
|  | ||||
| sub RainProcessing { | ||||
|     my ( $hash, $val, $triggerMax, $triggerMin ) = @_; | ||||
|      | ||||
|  | ||||
|     my $rainClosedPos = $FHEM::Automation::ShuttersControl::ascDev | ||||
|           ->getRainSensorShuttersClosedPos; | ||||
|       ->getRainSensorShuttersClosedPos; | ||||
|  | ||||
|     for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { | ||||
|         $FHEM::Automation::ShuttersControl::shutters->setShuttersDev( | ||||
| @@ -75,49 +74,53 @@ sub RainProcessing { | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getRainProtection eq | ||||
|             'off' ); | ||||
|  | ||||
|         if (   $val > $triggerMax | ||||
|         if ( | ||||
|                $val > $triggerMax | ||||
|             && $FHEM::Automation::ShuttersControl::shutters->getStatus != | ||||
|             $rainClosedPos | ||||
|             && $FHEM::Automation::ShuttersControl::shutters | ||||
|                  ->getRainProtectionStatus eq 'unprotected' | ||||
|             ->getRainProtectionStatus eq 'unprotected' | ||||
|             || ( $FHEM::Automation::ShuttersControl::shutters | ||||
|                    ->getRainProtectionStatus eq 'unprotected' | ||||
|               && $FHEM::Automation::ShuttersControl::shutters | ||||
|                    ->getRainUnprotectionDelayObj ne 'none') | ||||
|                 ->getRainProtectionStatus eq 'unprotected' | ||||
|                 && $FHEM::Automation::ShuttersControl::shutters | ||||
|                 ->getRainUnprotectionDelayObj ne 'none' ) | ||||
|           ) | ||||
|         { | ||||
|             _RainProtected(); | ||||
|         } | ||||
|         elsif ( ( $val == 0 || $val < $triggerMin ) | ||||
|             && $FHEM::Automation::ShuttersControl::shutters->getStatus == | ||||
|               $rainClosedPos | ||||
|             $rainClosedPos | ||||
|             && IsAfterShuttersManualBlocking($shuttersDev) | ||||
|             && $FHEM::Automation::ShuttersControl::shutters | ||||
|                  ->getRainProtectionStatus eq 'protected' ) | ||||
|             ->getRainProtectionStatus eq 'protected' ) | ||||
|         { | ||||
|             my %funcHash = ( | ||||
|                 shuttersdevice => $shuttersDev, | ||||
|             my %funcHash = ( 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 | ||||
|                 ->setRainProtectionStatus('unprotected'); | ||||
|               ->setRainProtectionStatus('unprotected'); | ||||
|         } | ||||
|         else { | ||||
|             if (  $FHEM::Automation::ShuttersControl::shutters->getStatus != $rainClosedPos | ||||
|               && ($val == 0 || $val < $triggerMin) ) | ||||
|             if ( $FHEM::Automation::ShuttersControl::shutters->getStatus != | ||||
|                 $rainClosedPos | ||||
|                 && ( $val == 0 || $val < $triggerMin ) ) | ||||
|             { | ||||
|                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                   ->setRainProtectionStatus('unprotected'); | ||||
|             } | ||||
|             elsif ($val > $triggerMax) { | ||||
|             elsif ( $val > $triggerMax ) { | ||||
|                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                   ->setRainProtectionStatus('protected'); | ||||
|             }      | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -126,63 +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 | ||||
| sub _RainProtected { | ||||
|     ::RemoveInternalTimer($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj) | ||||
|         if($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj ne 'none'); | ||||
|          | ||||
|     $FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none'); | ||||
|     ::RemoveInternalTimer( $FHEM::Automation::ShuttersControl::shutters | ||||
|           ->getRainUnprotectionDelayObj ) | ||||
|       if ( $FHEM::Automation::ShuttersControl::shutters | ||||
|         ->getRainUnprotectionDelayObj ne 'none' ); | ||||
|  | ||||
|     $FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj( | ||||
|         'none'); | ||||
|  | ||||
|     $FHEM::Automation::ShuttersControl::shutters->setLastDrive( | ||||
|             'rain protected'); | ||||
|         'rain protected'); | ||||
|  | ||||
|     $FHEM::Automation::ShuttersControl::shutters->setDriveCmd( | ||||
|         $FHEM::Automation::ShuttersControl::ascDev | ||||
|     ->getRainSensorShuttersClosedPos); | ||||
|           ->getRainSensorShuttersClosedPos ); | ||||
|  | ||||
|     $FHEM::Automation::ShuttersControl::shutters | ||||
|         ->setRainProtectionStatus('protected'); | ||||
|     $FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus( | ||||
|         'protected'); | ||||
|  | ||||
|     return; | ||||
| } | ||||
|  | ||||
| sub _RainUnprotected { | ||||
|     my $h = shift; | ||||
|      | ||||
|  | ||||
|     my $shuttersDev = $h->{shuttersdevice}; | ||||
|     $FHEM::Automation::ShuttersControl::shutters->setShuttersDev( | ||||
|             $shuttersDev); | ||||
|     $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev); | ||||
|  | ||||
|     $FHEM::Automation::ShuttersControl::shutters->setLastDrive( | ||||
|             'rain un-protected'); | ||||
|         'rain un-protected'); | ||||
|  | ||||
|     if ( $FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj ne 'none' ) { | ||||
|         ::RemoveInternalTimer($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj); | ||||
|         $FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none'); | ||||
|     if ( $FHEM::Automation::ShuttersControl::shutters | ||||
|         ->getRainUnprotectionDelayObj ne 'none' ) | ||||
|     { | ||||
|         ::RemoveInternalTimer( $FHEM::Automation::ShuttersControl::shutters | ||||
|               ->getRainUnprotectionDelayObj ); | ||||
|         $FHEM::Automation::ShuttersControl::shutters | ||||
|           ->setRainUnprotectionDelayObj('none'); | ||||
|     } | ||||
|  | ||||
|     $FHEM::Automation::ShuttersControl::shutters->setDriveCmd( | ||||
|         ( | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->getIsDay | ||||
|               $FHEM::Automation::ShuttersControl::shutters->getIsDay | ||||
|             ? $FHEM::Automation::ShuttersControl::shutters->getLastPos | ||||
|             : ( $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace | ||||
|                 eq 'awning' | ||||
|                 ? $FHEM::Automation::ShuttersControl::shutters | ||||
|                     ->getOpenPos | ||||
|             : ( | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace | ||||
|                   eq 'awning' | ||||
|                 ? $FHEM::Automation::ShuttersControl::shutters->getOpenPos | ||||
|                 : ( | ||||
|                     $FHEM::Automation::ShuttersControl::shutters | ||||
|                         ->getPrivacyDownStatus == 2 | ||||
|                       ->getPrivacyDownStatus == 2 | ||||
|                     ? $FHEM::Automation::ShuttersControl::shutters | ||||
|                         ->getPrivacyDownPos | ||||
|                       ->getPrivacyDownPos | ||||
|                     : $FHEM::Automation::ShuttersControl::shutters | ||||
|                         ->getClosedPos | ||||
|                       ->getClosedPos | ||||
|                 ) | ||||
|             ) | ||||
|         ) | ||||
|     ) | ||||
|     if (IsAfterShuttersTimeBlocking($shuttersDev)); | ||||
|     ) if ( IsAfterShuttersTimeBlocking($shuttersDev) ); | ||||
|  | ||||
|     $FHEM::Automation::ShuttersControl::shutters | ||||
|         ->setRainProtectionStatus('unprotected'); | ||||
|     $FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus( | ||||
|         'unprotected'); | ||||
|  | ||||
|     return; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| 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 | ||||
| # | ||||
| #   Special thanks goes to: | ||||
| @@ -44,37 +44,24 @@ use strict; | ||||
| use warnings; | ||||
| use utf8; | ||||
|  | ||||
| use GPUtils qw(GP_Import); | ||||
|  | ||||
| ## Import der FHEM Funktionen | ||||
| BEGIN { | ||||
|     GP_Import( | ||||
|         qw( | ||||
|           ReadingsVal) | ||||
|     ); | ||||
| } | ||||
|  | ||||
| sub _getRoommateStatus { | ||||
| sub getRoommateStatus { | ||||
|     my $self = shift; | ||||
|  | ||||
|     my $roommate = $self->{roommate}; | ||||
|  | ||||
|     return ReadingsVal( $roommate, | ||||
|     return ::ReadingsVal( $roommate, | ||||
|         $FHEM::Automation::ShuttersControl::shutters->getRoommatesReading, | ||||
|         'none' ); | ||||
| } | ||||
|  | ||||
| sub _getRoommateLastStatus { | ||||
| sub getRoommateLastStatus { | ||||
|     my $self = shift; | ||||
|  | ||||
|     my $roommate = $self->{roommate}; | ||||
|     my $default  = $self->{defaultarg}; | ||||
|  | ||||
|     $default = 'none' if ( !defined($default) ); | ||||
|     return ReadingsVal( $roommate, 'lastState', $default ); | ||||
|     return ::ReadingsVal( $roommate, 'lastState', $default ); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| 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 | ||||
| # | ||||
| #   Special thanks goes to: | ||||
| @@ -64,10 +64,9 @@ our %EXPORT_TAGS = ( | ||||
|     ], | ||||
| ); | ||||
|  | ||||
|  | ||||
| sub CheckASC_ConditionsForShadingFn { | ||||
|     my $hash    = shift; | ||||
|     my $value   = shift; | ||||
|     my $hash  = shift; | ||||
|     my $value = shift; | ||||
|  | ||||
|     my $error; | ||||
|  | ||||
| @@ -81,10 +80,10 @@ sub CheckASC_ConditionsForShadingFn { | ||||
|     my $count = 1; | ||||
|     for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { | ||||
|         my %funcHash = ( | ||||
|             hash            => $hash, | ||||
|             shuttersdevice  => $shuttersDev, | ||||
|             value           => $value, | ||||
|             attrEvent       => 0, | ||||
|             hash           => $hash, | ||||
|             shuttersdevice => $shuttersDev, | ||||
|             value          => $value, | ||||
|             attrEvent      => 0, | ||||
|         ); | ||||
|  | ||||
|         ::InternalTimer( | ||||
| @@ -104,8 +103,8 @@ sub CheckASC_ConditionsForShadingFn { | ||||
| } | ||||
|  | ||||
| sub _CheckShuttersConditionsForShadingFn { | ||||
|     my $funcHash    = shift; | ||||
|      | ||||
|     my $funcHash = shift; | ||||
|  | ||||
|     my $hash        = $funcHash->{hash}; | ||||
|     my $shuttersDev = $funcHash->{shuttersdevice}; | ||||
|     my $value       = $funcHash->{value}; | ||||
| @@ -116,67 +115,72 @@ sub _CheckShuttersConditionsForShadingFn { | ||||
|     my $errorMessage; | ||||
|     my $warnMessage; | ||||
|     my $infoMessage; | ||||
|      | ||||
|  | ||||
|     if ( $value eq 'off' ) { | ||||
|         $FHEM::Automation::ShuttersControl::shutters->setShadingStatus('out'); | ||||
|         $infoMessage    .= ' shading was deactivated ' . ($funcHash->{attrEvent} ? 'in the device' : 'globally'); | ||||
|         $errorMessage   .= ''; | ||||
|         $infoMessage .= ' shading was deactivated ' | ||||
|           . ( $funcHash->{attrEvent} ? 'in the device' : 'globally' ); | ||||
|         $errorMessage .= ''; | ||||
|         ShadingProcessingDriveCommand( $hash, $shuttersDev ); | ||||
|     } | ||||
|     else { | ||||
|         $infoMessage .= ( | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne 'off' | ||||
|             && $FHEM::Automation::ShuttersControl::ascDev | ||||
|             ->getAutoShuttersControlShading eq 'on' | ||||
|             && $FHEM::Automation::ShuttersControl::shutters->getOutTemp == -100 | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne | ||||
|               'off' | ||||
|               && $FHEM::Automation::ShuttersControl::ascDev | ||||
|               ->getAutoShuttersControlShading eq 'on' | ||||
|               && $FHEM::Automation::ShuttersControl::shutters->getOutTemp == | ||||
|               -100 | ||||
|             ? ' shading active, global temp sensor is set, but shutters temperature sensor is not set' | ||||
|             : '' | ||||
|         ); | ||||
|  | ||||
|         $warnMessage .= ( | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off' | ||||
|             && $FHEM::Automation::ShuttersControl::ascDev | ||||
|             ->getAutoShuttersControlShading eq 'on' | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq | ||||
|               'off' | ||||
|               && $FHEM::Automation::ShuttersControl::ascDev | ||||
|               ->getAutoShuttersControlShading eq 'on' | ||||
|             ? ' global shading active but ASC_Shading_Mode attribut is not set or off' | ||||
|             : '' | ||||
|         ); | ||||
|  | ||||
|         $errorMessage .= ( | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne 'off' | ||||
|             && $FHEM::Automation::ShuttersControl::ascDev | ||||
|             ->getAutoShuttersControlShading ne 'on' | ||||
|             && $FHEM::Automation::ShuttersControl::ascDev | ||||
|             ->getAutoShuttersControlShading ne 'off' | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne | ||||
|               'off' | ||||
|               && $FHEM::Automation::ShuttersControl::ascDev | ||||
|               ->getAutoShuttersControlShading ne 'on' | ||||
|               && $FHEM::Automation::ShuttersControl::ascDev | ||||
|               ->getAutoShuttersControlShading ne 'off' | ||||
|             ? ' ASC_Shading_Mode attribut is set but global shading has errors, look at ASC device ' | ||||
|             . '<a href="' | ||||
|             . '/fhem?detail=' | ||||
|             . ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' ) | ||||
|             . $::FW_CSRF . '">' | ||||
|             . ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' ) | ||||
|             . '</a>' | ||||
|               . '<a href="' | ||||
|               . '/fhem?detail=' | ||||
|               . ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' ) | ||||
|               . $::FW_CSRF . '">' | ||||
|               . ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' ) | ||||
|               . '</a>' | ||||
|             : '' | ||||
|         ); | ||||
|  | ||||
|         $errorMessage .= ( | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getBrightness == -1 | ||||
|             && $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne | ||||
|             'off' | ||||
|               && $FHEM::Automation::ShuttersControl::shutters->getShadingMode | ||||
|               ne 'off' | ||||
|             ? ' no brightness sensor found, please set ASC_BrightnessSensor attribut' | ||||
|             : '' | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     $message .= ' ERROR: ' . $errorMessage | ||||
|     if ( defined($errorMessage) | ||||
|       if ( defined($errorMessage) | ||||
|         && $errorMessage ne '' ); | ||||
|  | ||||
|     $message .= ' WARN: ' . $warnMessage | ||||
|     if ( defined($warnMessage) | ||||
|       if ( defined($warnMessage) | ||||
|         && $warnMessage ne '' | ||||
|         && $errorMessage eq '' ); | ||||
|  | ||||
|     $message .= ' INFO: ' . $infoMessage | ||||
|     if ( defined($infoMessage) | ||||
|       if ( defined($infoMessage) | ||||
|         && $infoMessage ne '' | ||||
|         && $errorMessage eq '' ); | ||||
|  | ||||
| @@ -184,6 +188,8 @@ sub _CheckShuttersConditionsForShadingFn { | ||||
|     ::readingsBulkUpdateIfChanged( $shuttersDevHash, 'ASC_ShadingMessage', | ||||
|         '<html>' . $message . ' </html>' ); | ||||
|     ::readingsEndUpdate( $shuttersDevHash, 1 ); | ||||
|  | ||||
|     return; | ||||
| } | ||||
|  | ||||
| sub ShadingProcessing { | ||||
| @@ -198,12 +204,18 @@ sub ShadingProcessing { | ||||
|     $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev); | ||||
|     my $brightness = | ||||
|       $FHEM::Automation::ShuttersControl::shutters->getBrightnessAverage; | ||||
|        | ||||
|     $FHEM::Automation::ShuttersControl::shutters->setShadingBetweenTheTimeSuspend( | ||||
|           ( IsInTime($FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTime) | ||||
|         ? 0 | ||||
|         : 1 ) | ||||
|     ); | ||||
|  | ||||
|     $FHEM::Automation::ShuttersControl::shutters | ||||
|       ->setShadingBetweenTheTimeSuspend( | ||||
|         ( | ||||
|             IsInTime( | ||||
|                 $FHEM::Automation::ShuttersControl::shutters | ||||
|                   ->getShadingBetweenTheTime | ||||
|               ) | ||||
|             ? 0 | ||||
|             : 1 | ||||
|         ) | ||||
|       ); | ||||
|  | ||||
|     FHEM::Automation::ShuttersControl::ASC_Debug( | ||||
|             'ShadingProcessing: ' | ||||
| @@ -268,10 +280,11 @@ sub ShadingProcessing { | ||||
|             $FHEM::Automation::ShuttersControl::shutters | ||||
|               ->getShadingWaitingPeriod / 2 | ||||
|             ) | ||||
|         || $FHEM::Automation::ShuttersControl::shutters->getExternalTriggerStatus | ||||
|         || $FHEM::Automation::ShuttersControl::shutters | ||||
|         ->getExternalTriggerStatus | ||||
|         || $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off' | ||||
|         || $FHEM::Automation::ShuttersControl::ascDev | ||||
|               ->getAutoShuttersControlShading eq 'off' | ||||
|         ->getAutoShuttersControlShading eq 'off' | ||||
|       ); | ||||
|  | ||||
|     ::Log3( $name, 4, | ||||
| @@ -300,9 +313,9 @@ sub ShadingProcessing { | ||||
|             ->getShadingMinOutsideTemperature - 4 | ||||
|             || $azimuth < $azimuthLeft | ||||
|             || $azimuth > $azimuthRight | ||||
|             || (   !$FHEM::Automation::ShuttersControl::shutters->getIsDay | ||||
|                 && $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime | ||||
|                   - ( int( ::gettimeofday() ) ) > 7200 ) | ||||
|             || (  !$FHEM::Automation::ShuttersControl::shutters->getIsDay | ||||
|                 && $FHEM::Automation::ShuttersControl::shutters | ||||
|                 ->getSunriseUnixTime - ( int( ::gettimeofday() ) ) > 7200 ) | ||||
|         ) | ||||
|         && $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ne | ||||
|         'out' | ||||
| @@ -452,16 +465,12 @@ sub ShadingProcessing { | ||||
|             || $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq | ||||
|             $homemode ) | ||||
|         && ( | ||||
|             $getModeUp eq 'always' | ||||
|             || $getModeUp eq | ||||
|             $homemode | ||||
|                $getModeUp eq 'always' | ||||
|             || $getModeUp eq $homemode | ||||
|             || $getModeUp eq 'off' | ||||
|             || $getModeUp eq | ||||
|             'absent' | ||||
|             || $getModeUp eq | ||||
|             'gone' | ||||
|             || ( $getModeUp eq | ||||
|                 'home' | ||||
|             || $getModeUp eq 'absent' | ||||
|             || $getModeUp eq 'gone' | ||||
|             || (   $getModeUp eq 'home' | ||||
|                 && $homemode ne 'asleep' ) | ||||
|         ) | ||||
|         && ( | ||||
| @@ -481,11 +490,11 @@ sub ShadingProcessing { | ||||
|                 ) | ||||
|                 && $FHEM::Automation::ShuttersControl::shutters->getIfInShading | ||||
|             ) | ||||
|             || (   !$FHEM::Automation::ShuttersControl::shutters->getIfInShading | ||||
|             || (  !$FHEM::Automation::ShuttersControl::shutters->getIfInShading | ||||
|                 && $FHEM::Automation::ShuttersControl::shutters->getStatus == | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->getShadingPos | ||||
|             ) | ||||
|             || (   !$FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTimeSuspend | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->getShadingPos ) | ||||
|             || ( !$FHEM::Automation::ShuttersControl::shutters | ||||
|                 ->getShadingBetweenTheTimeSuspend | ||||
|                 && $FHEM::Automation::ShuttersControl::shutters->getStatus != | ||||
|                 $FHEM::Automation::ShuttersControl::shutters->getShadingPos ) | ||||
|         ) | ||||
| @@ -535,19 +544,28 @@ sub ShadingProcessingDriveCommand { | ||||
|     $FHEM::Automation::ShuttersControl::shutters->setShadingStatus( | ||||
|         $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ); | ||||
|  | ||||
|     if (   IsInTime($FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTime) | ||||
|         && $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'in' | ||||
|     if ( | ||||
|         IsInTime( | ||||
|             $FHEM::Automation::ShuttersControl::shutters | ||||
|               ->getShadingBetweenTheTime | ||||
|         ) | ||||
|         && $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq | ||||
|         'in' | ||||
|         && $getShadingPos != $getStatus | ||||
|         && ( $getStatus != $FHEM::Automation::ShuttersControl::shutters->getClosedPos | ||||
|           || ( $getStatus == $FHEM::Automation::ShuttersControl::shutters->getClosedPos | ||||
|             && $marker | ||||
|             ) | ||||
|           ) | ||||
|         && ( $getStatus != $FHEM::Automation::ShuttersControl::shutters->getSleepPos | ||||
|           || ( $getStatus == $FHEM::Automation::ShuttersControl::shutters->getSleepPos | ||||
|             && $marker | ||||
|             ) | ||||
|           ) | ||||
|         && ( | ||||
|             $getStatus != | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getClosedPos | ||||
|             || ( $getStatus == | ||||
|                    $FHEM::Automation::ShuttersControl::shutters->getClosedPos | ||||
|                 && $marker ) | ||||
|         ) | ||||
|         && ( | ||||
|             $getStatus != | ||||
|             $FHEM::Automation::ShuttersControl::shutters->getSleepPos | ||||
|             || ( $getStatus == | ||||
|                    $FHEM::Automation::ShuttersControl::shutters->getSleepPos | ||||
|                 && $marker ) | ||||
|         ) | ||||
|         && ( | ||||
|             FHEM::Automation::ShuttersControl::CheckIfShuttersWindowRecOpen( | ||||
|                 $shuttersDev) != 2 | ||||
| @@ -586,10 +604,10 @@ sub ShadingProcessingDriveCommand { | ||||
|             ( | ||||
|                 ( | ||||
|                     $getShadingPos == | ||||
|                          $FHEM::Automation::ShuttersControl::shutters->getLastPos | ||||
|                       $FHEM::Automation::ShuttersControl::shutters->getLastPos | ||||
|                       || $getShadingPos == | ||||
|                          $FHEM::Automation::ShuttersControl::shutters | ||||
|                          ->getShadingLastPos | ||||
|                       $FHEM::Automation::ShuttersControl::shutters | ||||
|                       ->getShadingLastPos | ||||
|                 ) | ||||
|                 ? $FHEM::Automation::ShuttersControl::shutters->getOpenPos | ||||
|                 : ( | ||||
| @@ -610,8 +628,10 @@ sub ShadingProcessingDriveCommand { | ||||
|                     : $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( | ||||
|                 'ShadingProcessingDriveCommand: ' | ||||
|   | ||||
| @@ -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 | ||||
| # | ||||
| #   Special thanks goes to: | ||||
| @@ -45,6 +45,10 @@ | ||||
|  | ||||
| package FHEM::Automation::ShuttersControl::Shutters; | ||||
|  | ||||
| use strict; | ||||
| use warnings; | ||||
| use utf8; | ||||
|  | ||||
| use FHEM::Automation::ShuttersControl::Shutters::Readings; | ||||
| use FHEM::Automation::ShuttersControl::Shutters::Attr; | ||||
| use FHEM::Automation::ShuttersControl::Roommate; | ||||
| @@ -53,10 +57,6 @@ use FHEM::Automation::ShuttersControl::Window; | ||||
| our @ISA = | ||||
|   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 { | ||||
|     my $class = shift; | ||||
|     my $self  = { | ||||
| @@ -161,6 +161,7 @@ sub setDriveCmd { | ||||
|         $FHEM::Automation::ShuttersControl::shutters->setDelayCmd($posValue); | ||||
|         $FHEM::Automation::ShuttersControl::ascDev->setDelayCmdReading; | ||||
|         $FHEM::Automation::ShuttersControl::shutters->setNoDelay(0); | ||||
|  | ||||
| #         $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0) | ||||
| #           if ( $FHEM::Automation::ShuttersControl::shutters | ||||
| #             ->getExternalTriggerStatus ); | ||||
| @@ -177,7 +178,8 @@ sub setDriveCmd { | ||||
|           if ( $FHEM::Automation::ShuttersControl::shutters->getDelayCmd ne | ||||
|             'none' ) | ||||
|           ; # 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 | ||||
|             ->getExternalTriggerStatus ); | ||||
|  | ||||
| @@ -460,7 +462,8 @@ sub setRainUnprotectionDelayObj { | ||||
|     my $self  = shift; | ||||
|     my $value = shift; | ||||
|  | ||||
|     $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} = $value | ||||
|     $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} | ||||
|       = $value | ||||
|       if ( defined($value) ); | ||||
|     return; | ||||
| } | ||||
| @@ -545,12 +548,13 @@ sub getAttrUpdateChanges { | ||||
| sub getIsDay { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return FHEM::Automation::ShuttersControl::Helper::_IsDay( $self->{shuttersDev} ); | ||||
|     return FHEM::Automation::ShuttersControl::Helper::_IsDay( | ||||
|         $self->{shuttersDev} ); | ||||
| } | ||||
|  | ||||
| sub getAntiFreezeStatus { | ||||
|     use POSIX qw(strftime); | ||||
|     my $self = shift; | ||||
|     my $self    = shift; | ||||
|     my $daytime = strftime( "%P", localtime() ); | ||||
|     $daytime = ( | ||||
|         defined($daytime) && $daytime | ||||
| @@ -756,10 +760,12 @@ sub getRainUnprotectionDelayObj { | ||||
|         ( | ||||
|             defined( $self->{ $self->{shuttersDev} }->{RainProtection} ) | ||||
|               && defined( | ||||
|                 $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} | ||||
|                 $self->{ $self->{shuttersDev} }->{RainProtection} | ||||
|                   ->{UNPROTECTIONDELAYOBJVAL} | ||||
|               ) | ||||
|         ) | ||||
|         ? $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} | ||||
|         ? $self->{ $self->{shuttersDev} }->{RainProtection} | ||||
|           ->{UNPROTECTIONDELAYOBJVAL} | ||||
|         : 'none' | ||||
|     ); | ||||
| } | ||||
| @@ -821,7 +827,7 @@ sub getRoommatesStatus { | ||||
|         $FHEM::Automation::ShuttersControl::shutters->setRoommate($ro); | ||||
|         my $currentPrio = | ||||
|           $statePrio{ $FHEM::Automation::ShuttersControl::shutters | ||||
|               ->_getRoommateStatus }; | ||||
|               ->getRoommateStatus }; | ||||
|         $minPrio = $currentPrio if ( $minPrio > $currentPrio ); | ||||
|     } | ||||
|  | ||||
| @@ -854,7 +860,7 @@ sub getRoommatesLastStatus { | ||||
|         $FHEM::Automation::ShuttersControl::shutters->setRoommate($ro); | ||||
|         my $currentPrio = | ||||
|           $statePrio{ $FHEM::Automation::ShuttersControl::shutters | ||||
|               ->_getRoommateLastStatus }; | ||||
|               ->getRoommateLastStatus }; | ||||
|         $minPrio = $currentPrio if ( $minPrio > $currentPrio ); | ||||
|     } | ||||
|  | ||||
| @@ -899,7 +905,8 @@ sub setShadingStatus { | ||||
|  | ||||
|     $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} = $value | ||||
|       if ( defined($value) ); | ||||
|     $self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} = int( ::gettimeofday() ) | ||||
|     $self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} = | ||||
|       int( ::gettimeofday() ) | ||||
|       if ( defined( $self->{ $self->{shuttersDev} }{ShadingStatus} ) ); | ||||
|  | ||||
|     return; | ||||
| @@ -945,7 +952,7 @@ sub setShadingLastPos { | ||||
|     return; | ||||
| } | ||||
|  | ||||
| sub setShadingBetweenTheTimeSuspend {       # Werte für value = 0, 1 | ||||
| sub setShadingBetweenTheTimeSuspend {    # Werte für value = 0, 1 | ||||
|     my $self  = 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; | ||||
|  | ||||
|     return ( | ||||
|         defined( $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend} ) | ||||
|           && defined( $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL} ) | ||||
|         defined( | ||||
|             $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend} | ||||
|           ) | ||||
|           && defined( | ||||
|             $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL} | ||||
|           ) | ||||
|         ? $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL} | ||||
|         : 0 | ||||
|     ); | ||||
| @@ -1084,9 +1095,7 @@ sub getShadingLastPos { | ||||
|  | ||||
|     return ( | ||||
|         defined( $self->{ $self->{shuttersDev} }{ShadingLastPos} ) | ||||
|           && defined( | ||||
|             $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL} | ||||
|           ) | ||||
|           && defined( $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL} ) | ||||
|         ? $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL} | ||||
|         : $FHEM::Automation::ShuttersControl::shutters->getShadingPos | ||||
|     ); | ||||
| @@ -1094,7 +1103,4 @@ sub getShadingLastPos { | ||||
|  | ||||
| ### Ende Beschattung | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| 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 | ||||
| # | ||||
| #   Special thanks goes to: | ||||
| @@ -46,24 +46,12 @@ use utf8; | ||||
|  | ||||
| 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 { | ||||
|     my $shuttersDev = shift; | ||||
|     my $attr        = shift; | ||||
|     my $attrVal     = shift; | ||||
|  | ||||
|     CommandAttr( undef, $shuttersDev . ' ' . $attr . ' ' . $attrVal ); | ||||
|     ::CommandAttr( undef, $shuttersDev . ' ' . $attr . ' ' . $attrVal ); | ||||
|  | ||||
|     return; | ||||
| } | ||||
| @@ -77,28 +65,28 @@ sub _getPosition { | ||||
|     return $self->{ $self->{shuttersDev} }->{$attr}->{position} | ||||
|       if ( | ||||
|         exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
|     $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} = | ||||
|       int( gettimeofday() ); | ||||
|       int( ::gettimeofday() ); | ||||
|  | ||||
|     my $position; | ||||
|     my $posAssignment; | ||||
|  | ||||
|     if ( | ||||
|         AttrVal( $self->{shuttersDev}, $attr, | ||||
|         ::AttrVal( $self->{shuttersDev}, $attr, | ||||
|             $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} | ||||
|               [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ) =~ | ||||
|               [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ) =~ | ||||
|         m{\A\{.+\}\z}xms | ||||
|       ) | ||||
|     { | ||||
|         my $response = PerlCodeCheck( | ||||
|             AttrVal( | ||||
|             ::AttrVal( | ||||
|                 $self->{shuttersDev}, | ||||
|                 $attr, | ||||
|                 $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} | ||||
|                   [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] | ||||
|                   [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] | ||||
|             ) | ||||
|         ); | ||||
|  | ||||
| @@ -108,23 +96,23 @@ sub _getPosition { | ||||
|               $position =~ m{\A\d+(\.\d+)?\z}xms | ||||
|             ? $position | ||||
|             : $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} | ||||
|               [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] | ||||
|               [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] | ||||
|         ); | ||||
|  | ||||
|         $posAssignment = ( | ||||
|                 defined($posAssignment) | ||||
|             &&  $posAssignment =~ m{\A\d+(\.\d+)?\z}xms | ||||
|               ? $posAssignment | ||||
|               : 'none' | ||||
|             defined($posAssignment) | ||||
|               && $posAssignment =~ m{\A\d+(\.\d+)?\z}xms | ||||
|             ? $posAssignment | ||||
|             : 'none' | ||||
|         ); | ||||
|     } | ||||
|     else { | ||||
|         ( $position, $posAssignment ) = | ||||
|           FHEM::Automation::ShuttersControl::Helper::GetAttrValues( | ||||
|           FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( | ||||
|             $self->{shuttersDev}, | ||||
|             $attr, | ||||
|             $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} = | ||||
|           PerlCodeCheck( | ||||
|             $self->{ $self->{shuttersDev} }->{$attr}->{position} ); | ||||
|           PerlCodeCheck( $self->{ $self->{shuttersDev} }->{$attr}->{position} ); | ||||
|     } | ||||
|  | ||||
|     return ( | ||||
| @@ -154,7 +141,7 @@ sub _getPosition { | ||||
|           m{^\d+(\.\d+)?$}xms | ||||
|         ? $self->{ $self->{shuttersDev} }->{$attr}->{position} | ||||
|         : $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} | ||||
|       if ( | ||||
|         exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
|     $FHEM::Automation::ShuttersControl::shutters->$getFn; | ||||
| @@ -213,7 +200,7 @@ sub setShuttersPlace { | ||||
| sub getShuttersPlace { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' ); | ||||
| } | ||||
|  | ||||
| sub setSlatPosCmd { | ||||
| @@ -236,15 +223,15 @@ sub getSlatPosCmd { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}->{LASTGETTIME} | ||||
|       = int( gettimeofday() ); | ||||
|       = int( ::gettimeofday() ); | ||||
|     my ( $slatPosCmd, $slatDevice ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, | ||||
|         'ASC_SlatPosCmd_SlatDevice', 'none:none' ); | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( | ||||
|         $self->{shuttersDev}, 'ASC_SlatPosCmd_SlatDevice', 'none:none' ); | ||||
|  | ||||
|     ## Erwartetes Ergebnis | ||||
|     # upTime:upBrightnessVal | ||||
| @@ -268,7 +255,7 @@ sub getSlatDevice { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -299,15 +286,15 @@ sub getPrivacyUpTime { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} | ||||
|       ->{LASTGETTIME} = int( gettimeofday() ); | ||||
|       ->{LASTGETTIME} = int( ::gettimeofday() ); | ||||
|     my ( $upTime, $upBrightnessVal ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, | ||||
|         'ASC_PrivacyUpValue_beforeDayOpen', '-1:-1' ); | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( | ||||
|         $self->{shuttersDev}, 'ASC_PrivacyUpValue_beforeDayOpen', '-1:-1' ); | ||||
|  | ||||
|     ## Erwartetes Ergebnis | ||||
|     # upTime:upBrightnessVal | ||||
| @@ -341,7 +328,7 @@ sub getPrivacyUpBrightnessVal { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -378,14 +365,15 @@ sub getPrivacyDownTime { | ||||
|             $self->{ $self->{shuttersDev} } | ||||
|               ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} } | ||||
|             ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_PrivacyDownValue_beforeNightClose} | ||||
|       ->{LASTGETTIME} = int( gettimeofday() ); | ||||
|       ->{LASTGETTIME} = int( ::gettimeofday() ); | ||||
|     my ( $downTime, $downBrightnessVal ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( | ||||
|         $self->{shuttersDev}, | ||||
|         'ASC_PrivacyDownValue_beforeNightClose', '-1:-1' ); | ||||
|  | ||||
|     ## Erwartetes Ergebnis | ||||
| @@ -420,7 +408,7 @@ sub getPrivacyDownBrightnessVal { | ||||
|             $self->{ $self->{shuttersDev} } | ||||
|               ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} } | ||||
|             ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -497,7 +485,7 @@ sub setSelfDefenseMode { | ||||
| sub getSelfDefenseMode { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_Mode', 'gone' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_Mode', 'gone' ); | ||||
| } | ||||
|  | ||||
| sub setSelfDefenseAbsentDelay { | ||||
| @@ -513,13 +501,14 @@ sub setSelfDefenseAbsentDelay { | ||||
| sub getSelfDefenseAbsentDelay { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_AbsentDelay', 300 ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_AbsentDelay', | ||||
|         300 ); | ||||
| } | ||||
|  | ||||
| sub getCommandTemplate { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_CommandTemplate', 'none' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_CommandTemplate', 'none' ); | ||||
| } | ||||
|  | ||||
| sub setWiggleValue { | ||||
| @@ -534,7 +523,7 @@ sub setWiggleValue { | ||||
| sub getWiggleValue { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 ); | ||||
| } | ||||
|  | ||||
| sub setAdv { | ||||
| @@ -550,7 +539,7 @@ sub getAdv { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return ( | ||||
|         AttrVal( $self->{shuttersDev}, 'ASC_Adv', 'off' ) eq 'on' | ||||
|         ::AttrVal( $self->{shuttersDev}, 'ASC_Adv', 'off' ) eq 'on' | ||||
|         ? ( IsAdv == 1 ? 1 : 0 ) | ||||
|         : 0 | ||||
|     ); | ||||
| @@ -593,7 +582,7 @@ sub setShadingMode { | ||||
| sub getShadingMode { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'off' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'off' ); | ||||
| } | ||||
|  | ||||
| sub _getTempSensor { | ||||
| @@ -604,15 +593,15 @@ sub _getTempSensor { | ||||
|         exists( | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} ) | ||||
|         < 2 | ||||
|       ); | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} = | ||||
|       int( gettimeofday() ); | ||||
|       int( ::gettimeofday() ); | ||||
|     my ( $device, $reading ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, | ||||
|         'ASC_TempSensor', 'none' ); | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( | ||||
|         $self->{shuttersDev}, 'ASC_TempSensor', 'none' ); | ||||
|  | ||||
|     ### erwartetes Ergebnis | ||||
|     # DEVICE:READING | ||||
| @@ -631,7 +620,7 @@ sub getTempSensorReading { | ||||
|         exists( | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} ) | ||||
|         < 2 | ||||
|       ); | ||||
| @@ -664,15 +653,15 @@ sub _getIdleDetectionReading { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}->{LASTGETTIME} | ||||
|       = int( gettimeofday() ); | ||||
|       = int( ::gettimeofday() ); | ||||
|     my ( $reading, $value ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, | ||||
|         'ASC_Shutter_IdleDetection', 'none' ); | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( | ||||
|         $self->{shuttersDev}, 'ASC_Shutter_IdleDetection', 'none' ); | ||||
|  | ||||
|     ### erwartetes Ergebnis | ||||
|     # READING:VALUE | ||||
| @@ -694,7 +683,7 @@ sub getIdleDetectionValue { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -728,15 +717,15 @@ sub _getBrightnessSensor { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}->{LASTGETTIME} = | ||||
|       int( gettimeofday() ); | ||||
|       int( ::gettimeofday() ); | ||||
|     my ( $device, $reading, $max, $min ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, | ||||
|         'ASC_BrightnessSensor', 'none' ); | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( | ||||
|         $self->{shuttersDev}, 'ASC_BrightnessSensor', 'none' ); | ||||
|  | ||||
|     ### erwartetes Ergebnis | ||||
|     # DEVICE:READING MAX:MIN | ||||
| @@ -760,7 +749,7 @@ sub getBrightnessReading { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -785,7 +774,7 @@ sub getShadingAzimuthLeft { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -814,15 +803,15 @@ sub getShadingAzimuthRight { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}->{LASTGETTIME} | ||||
|       = int( gettimeofday() ); | ||||
|       = int( ::gettimeofday() ); | ||||
|     my ( $left, $right ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, | ||||
|         'ASC_Shading_InOutAzimuth', '95:265' ); | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( | ||||
|         $self->{shuttersDev}, 'ASC_Shading_InOutAzimuth', '95:265' ); | ||||
|  | ||||
|     ### erwartetes Ergebnis | ||||
|     # MIN:MAX | ||||
| @@ -849,8 +838,8 @@ sub setShadingMinOutsideTemperature { | ||||
| sub getShadingMinOutsideTemperature { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Min_OutsideTemperature', | ||||
|         18 ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, | ||||
|         'ASC_Shading_Min_OutsideTemperature', 18 ); | ||||
| } | ||||
|  | ||||
| sub setShadingMinMaxElevation { | ||||
| @@ -873,15 +862,15 @@ sub getShadingMinElevation { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} | ||||
|       ->{LASTGETTIME} = int( gettimeofday() ); | ||||
|       ->{LASTGETTIME} = int( ::gettimeofday() ); | ||||
|     my ( $min, $max ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, | ||||
|         'ASC_Shading_MinMax_Elevation', '25.0:100.0' ); | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( | ||||
|         $self->{shuttersDev}, 'ASC_Shading_MinMax_Elevation', '25.0:100.0' ); | ||||
|  | ||||
|     ### erwartetes Ergebnis | ||||
|     # MIN:MAX | ||||
| @@ -905,7 +894,7 @@ sub getShadingMaxElevation { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -943,15 +932,15 @@ sub getShadingStateChangeSunny { | ||||
|             $self->{ $self->{shuttersDev} } | ||||
|               ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} } | ||||
|             ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_Shading_StateChange_SunnyCloudy} | ||||
|       ->{LASTGETTIME} = int( gettimeofday() ); | ||||
|       ->{LASTGETTIME} = int( ::gettimeofday() ); | ||||
|     my ( $sunny, $cloudy, $maxBrightnessAverageArrayObjects ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, | ||||
|         'ASC_Shading_StateChange_SunnyCloudy', | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( | ||||
|         $self->{shuttersDev}, 'ASC_Shading_StateChange_SunnyCloudy', | ||||
|         '35000:20000' ); | ||||
|  | ||||
|     ### erwartetes Ergebnis | ||||
| @@ -982,7 +971,7 @@ sub getShadingStateChangeCloudy { | ||||
|             $self->{ $self->{shuttersDev} } | ||||
|               ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} } | ||||
|             ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -1002,7 +991,7 @@ sub getMaxBrightnessAverageArrayObjects { | ||||
|             $self->{ $self->{shuttersDev} } | ||||
|               ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} } | ||||
|             ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -1025,7 +1014,7 @@ sub setShadingWaitingPeriod { | ||||
| sub getShadingWaitingPeriod { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Shading_WaitingPeriod', 1200 ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_WaitingPeriod', 1200 ); | ||||
| } | ||||
| ### Ende Beschattung | ||||
| sub setExternalTrigger { | ||||
| @@ -1046,16 +1035,16 @@ sub getExternalTriggerDevice { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{LASTGETTIME} = | ||||
|       int( gettimeofday() ); | ||||
|       int( ::gettimeofday() ); | ||||
|     my ( $device, $reading, $valueActive, $valueInactive, $posActive, | ||||
|         $posInactive, $valueActive2, $posActive2 ) | ||||
|       = FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, | ||||
|         'ASC_ExternalTrigger', 'none' ); | ||||
|       = FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( | ||||
|         $self->{shuttersDev}, 'ASC_ExternalTrigger', 'none' ); | ||||
|  | ||||
|     ### erwartetes Ergebnis | ||||
| # DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE VALUEACTIVE2:POSACTIVE2 | ||||
| @@ -1070,10 +1059,11 @@ sub getExternalTriggerDevice { | ||||
|       $valueInactive; | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive} = | ||||
|       $posActive; | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posinactive} = | ||||
|       (   $posInactive ne 'none' | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posinactive} = ( | ||||
|           $posInactive ne 'none' | ||||
|         ? $posInactive | ||||
|         : $FHEM::Automation::ShuttersControl::shutters->getLastPos ); | ||||
|         : $FHEM::Automation::ShuttersControl::shutters->getLastPos | ||||
|     ); | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{valueactive2} = | ||||
|       $valueActive2; | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive2} = | ||||
| @@ -1092,7 +1082,7 @@ sub getExternalTriggerReading { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -1110,7 +1100,7 @@ sub getExternalTriggerValueActive { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -1130,7 +1120,7 @@ sub getExternalTriggerValueActive2 { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -1150,7 +1140,7 @@ sub getExternalTriggerValueInactive { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -1169,7 +1159,7 @@ sub getExternalTriggerPosActive { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -1187,7 +1177,7 @@ sub getExternalTriggerPosActive2 { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -1205,7 +1195,7 @@ sub getExternalTriggerPosInactive { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -1227,7 +1217,7 @@ sub setDelay { | ||||
| sub getDelay { | ||||
|     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 ); | ||||
| } | ||||
|  | ||||
| @@ -1243,7 +1233,7 @@ sub setDelayStart { | ||||
| sub getDelayStart { | ||||
|     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 ); | ||||
| } | ||||
|  | ||||
| @@ -1260,7 +1250,7 @@ sub setBlockingTimeAfterManual { | ||||
| sub getBlockingTimeAfterManual { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_afterManual', | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_afterManual', | ||||
|         1200 ); | ||||
| } | ||||
|  | ||||
| @@ -1277,7 +1267,7 @@ sub setBlockingTimeBeforNightClose { | ||||
| sub getBlockingTimeBeforNightClose { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforNightClose', | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforNightClose', | ||||
|         3600 ); | ||||
| } | ||||
|  | ||||
| @@ -1294,7 +1284,7 @@ sub setBlockingTimeBeforDayOpen { | ||||
| sub getBlockingTimeBeforDayOpen { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforDayOpen', | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforDayOpen', | ||||
|         3600 ); | ||||
| } | ||||
|  | ||||
| @@ -1310,9 +1300,9 @@ sub setPosCmd { | ||||
| sub getPosCmd { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading', | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading', | ||||
|         $FHEM::Automation::ShuttersControl::userAttrList{'ASC_Pos_Reading'} | ||||
|           [ AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] ); | ||||
|           [ ::AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] ); | ||||
| } | ||||
|  | ||||
| sub setOpenPos { | ||||
| @@ -1377,7 +1367,7 @@ sub setVentilatePosAfterDayClosed { | ||||
| sub getVentilatePosAfterDayClosed { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_PosAfterDayClosed', | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_PosAfterDayClosed', | ||||
|         'open' ); | ||||
| } | ||||
|  | ||||
| @@ -1442,7 +1432,7 @@ sub setVentilateOpen { | ||||
| sub getVentilateOpen { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Window_Open', 'on' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Window_Open', 'on' ); | ||||
| } | ||||
|  | ||||
| sub setComfortOpenPos { | ||||
| @@ -1482,7 +1472,7 @@ sub setPartyMode { | ||||
| sub getPartyMode { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Partymode', 'off' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_Partymode', 'off' ); | ||||
| } | ||||
|  | ||||
| sub setRoommates { | ||||
| @@ -1497,7 +1487,7 @@ sub setRoommates { | ||||
| sub getRoommates { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Device', 'none' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Device', 'none' ); | ||||
| } | ||||
|  | ||||
| sub setRoommatesReading { | ||||
| @@ -1512,7 +1502,7 @@ sub setRoommatesReading { | ||||
| sub getRoommatesReading { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Reading', 'state' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Reading', 'state' ); | ||||
| } | ||||
|  | ||||
| sub getWindPos { | ||||
| @@ -1525,7 +1515,7 @@ sub getWindPos { | ||||
|         exists( | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} | ||||
|         ) < 2 | ||||
|       ); | ||||
| @@ -1544,15 +1534,15 @@ sub getWindMax { | ||||
|         exists( | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} | ||||
|         ) < 2 | ||||
|       ); | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} = | ||||
|       int( gettimeofday() ); | ||||
|       int( ::gettimeofday() ); | ||||
|     my ( $max, $hyst, $pos ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, | ||||
|         'ASC_WindParameters', '50:20' ); | ||||
|       FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( | ||||
|         $self->{shuttersDev}, 'ASC_WindParameters', '50:20' ); | ||||
|  | ||||
|     ## Erwartetes Ergebnis | ||||
|     # max:hyst pos | ||||
| @@ -1560,10 +1550,11 @@ sub getWindMax { | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax} = $max; | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggerhyst} = | ||||
|       ( $hyst ne 'none' ? $max - $hyst : $max - 20 ); | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{closedPos} = | ||||
|       (   $pos ne 'none' | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{closedPos} = ( | ||||
|           $pos ne 'none' | ||||
|         ? $pos | ||||
|         : $FHEM::Automation::ShuttersControl::shutters->getOpenPos ); | ||||
|         : $FHEM::Automation::ShuttersControl::shutters->getOpenPos | ||||
|     ); | ||||
|  | ||||
|     return $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax}; | ||||
| } | ||||
| @@ -1587,7 +1578,7 @@ sub getWindMin { | ||||
|         exists( | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} | ||||
|         ) < 2 | ||||
|       ); | ||||
| @@ -1608,7 +1599,7 @@ sub setWindProtection { | ||||
| sub getWindProtection { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_WindProtection', 'off' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_WindProtection', 'off' ); | ||||
| } | ||||
|  | ||||
| sub setRainProtection { | ||||
| @@ -1623,7 +1614,7 @@ sub setRainProtection { | ||||
| sub getRainProtection { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_RainProtection', 'off' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_RainProtection', 'off' ); | ||||
| } | ||||
|  | ||||
| sub setModeUp { | ||||
| @@ -1638,7 +1629,7 @@ sub setModeUp { | ||||
| sub getModeUp { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Mode_Up', 'always' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_Mode_Up', 'always' ); | ||||
| } | ||||
|  | ||||
| sub setModeDown { | ||||
| @@ -1653,7 +1644,7 @@ sub setModeDown { | ||||
| sub getModeDown { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Mode_Down', 'always' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_Mode_Down', 'always' ); | ||||
| } | ||||
|  | ||||
| sub setLockOut { | ||||
| @@ -1668,7 +1659,7 @@ sub setLockOut { | ||||
| sub getLockOut { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_LockOut', 'off' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_LockOut', 'off' ); | ||||
| } | ||||
|  | ||||
| sub setLockOutCmd { | ||||
| @@ -1683,7 +1674,7 @@ sub setLockOutCmd { | ||||
| sub getLockOutCmd { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_LockOut_Cmd', 'none' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_LockOut_Cmd', 'none' ); | ||||
| } | ||||
|  | ||||
| sub setAntiFreeze { | ||||
| @@ -1698,7 +1689,7 @@ sub setAntiFreeze { | ||||
| sub getAntiFreeze { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Antifreeze', 'off' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_Antifreeze', 'off' ); | ||||
| } | ||||
|  | ||||
| sub setAutoAstroModeMorning { | ||||
| @@ -1713,7 +1704,8 @@ sub setAutoAstroModeMorning { | ||||
| sub getAutoAstroModeMorning { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorning', 'none' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorning', | ||||
|         'none' ); | ||||
| } | ||||
|  | ||||
| sub setAutoAstroModeEvening { | ||||
| @@ -1728,7 +1720,8 @@ sub setAutoAstroModeEvening { | ||||
| sub getAutoAstroModeEvening { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEvening', 'none' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEvening', | ||||
|         'none' ); | ||||
| } | ||||
|  | ||||
| sub setAutoAstroModeMorningHorizon { | ||||
| @@ -1744,7 +1737,7 @@ sub setAutoAstroModeMorningHorizon { | ||||
| sub getAutoAstroModeMorningHorizon { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorningHorizon', | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorningHorizon', | ||||
|         0 ); | ||||
| } | ||||
|  | ||||
| @@ -1761,7 +1754,7 @@ sub setAutoAstroModeEveningHorizon { | ||||
| sub getAutoAstroModeEveningHorizon { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEveningHorizon', | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEveningHorizon', | ||||
|         0 ); | ||||
| } | ||||
|  | ||||
| @@ -1777,7 +1770,7 @@ sub setUp { | ||||
| sub getUp { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Up', 'astro' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_Up', 'astro' ); | ||||
| } | ||||
|  | ||||
| sub setDown { | ||||
| @@ -1792,14 +1785,15 @@ sub setDown { | ||||
| sub getDown { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_Down', 'astro' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_Down', 'astro' ); | ||||
| } | ||||
|  | ||||
| sub setShadingBetweenTheTime { | ||||
|     my $self    = shift; | ||||
|     my $attrVal = shift; | ||||
|  | ||||
|     _setAttributs( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime', $attrVal ); | ||||
|     _setAttributs( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime', | ||||
|         $attrVal ); | ||||
|  | ||||
|     return; | ||||
| } | ||||
| @@ -1807,7 +1801,8 @@ sub setShadingBetweenTheTime { | ||||
| sub getShadingBetweenTheTime { | ||||
|     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 { | ||||
| @@ -1822,7 +1817,7 @@ sub setTimeUpEarly { | ||||
| sub getTimeUpEarly { | ||||
|     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) ) ) { | ||||
|         $val = PerlCodeCheck($val); | ||||
| @@ -1847,7 +1842,7 @@ sub setTimeUpLate { | ||||
| sub getTimeUpLate { | ||||
|     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) ) ) { | ||||
|         $val = PerlCodeCheck($val); | ||||
| @@ -1872,7 +1867,7 @@ sub setTimeDownEarly { | ||||
| sub getTimeDownEarly { | ||||
|     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) ) ) { | ||||
|         $val = PerlCodeCheck($val); | ||||
| @@ -1897,7 +1892,7 @@ sub setTimeDownLate { | ||||
| sub getTimeDownLate { | ||||
|     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) ) ) { | ||||
|         $val = PerlCodeCheck($val); | ||||
| @@ -1923,7 +1918,7 @@ sub getTimeUpWeHoliday { | ||||
|     my $self = shift; | ||||
|  | ||||
|     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) ) ) { | ||||
|         $val = PerlCodeCheck($val); | ||||
| @@ -1945,7 +1940,7 @@ sub getBrightnessMinVal { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -1964,7 +1959,7 @@ sub getBrightnessMaxVal { | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||
|               ->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} | ||||
|             ->{LASTGETTIME} ) < 2 | ||||
|       ); | ||||
| @@ -1986,7 +1981,7 @@ sub setDriveUpMaxDuration { | ||||
| sub getDriveUpMaxDuration { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_DriveUpMaxDuration', 60 ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_DriveUpMaxDuration', 60 ); | ||||
| } | ||||
|  | ||||
| 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 | ||||
| # | ||||
| #   Special thanks goes to: | ||||
| @@ -44,21 +44,10 @@ use strict; | ||||
| use warnings; | ||||
| use utf8; | ||||
|  | ||||
| use GPUtils qw(GP_Import); | ||||
|  | ||||
| ## Import der FHEM Funktionen | ||||
| BEGIN { | ||||
|     GP_Import( | ||||
|         qw( | ||||
|           ReadingsVal | ||||
|           ReadingsNum) | ||||
|     ); | ||||
| } | ||||
|  | ||||
| sub getBrightness { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return ReadingsNum( | ||||
|     return ::ReadingsNum( | ||||
|         $FHEM::Automation::ShuttersControl::shutters->_getBrightnessSensor, | ||||
|         $FHEM::Automation::ShuttersControl::shutters->getBrightnessReading, | ||||
|         -1 ); | ||||
| @@ -67,7 +56,7 @@ sub getBrightness { | ||||
| sub getWindStatus { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return ReadingsVal( | ||||
|     return ::ReadingsVal( | ||||
|         $FHEM::Automation::ShuttersControl::ascDev->_getWindSensor, | ||||
|         $FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading, -1 ); | ||||
| } | ||||
| @@ -75,7 +64,7 @@ sub getWindStatus { | ||||
| sub getStatus { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return ReadingsNum( $self->{shuttersDev}, | ||||
|     return ::ReadingsNum( $self->{shuttersDev}, | ||||
|         $FHEM::Automation::ShuttersControl::shutters->getPosCmd, 0 ); | ||||
| } | ||||
|  | ||||
| @@ -88,7 +77,7 @@ sub getDelayCmd { | ||||
| sub getASCenable { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return ReadingsVal( $self->{shuttersDev}, 'ASC_Enable', 'on' ); | ||||
|     return ::ReadingsVal( $self->{shuttersDev}, 'ASC_Enable', 'on' ); | ||||
| } | ||||
|  | ||||
| 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 | ||||
| # | ||||
| #   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 | ||||
| # | ||||
| #   Special thanks goes to: | ||||
| @@ -44,17 +44,6 @@ use strict; | ||||
| use warnings; | ||||
| use utf8; | ||||
|  | ||||
| use GPUtils qw(GP_Import); | ||||
|  | ||||
| ## Import der FHEM Funktionen | ||||
| BEGIN { | ||||
|     GP_Import( | ||||
|         qw( | ||||
|           AttrVal | ||||
|           gettimeofday) | ||||
|     ); | ||||
| } | ||||
|  | ||||
| sub setSubTyp { | ||||
|     my $self    = shift; | ||||
|     my $attrVal = shift; | ||||
| @@ -67,7 +56,8 @@ sub setSubTyp { | ||||
| sub getSubTyp { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_subType', 'twostate' ); | ||||
|     return ::AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_subType', | ||||
|         'twostate' ); | ||||
| } | ||||
|  | ||||
| sub setWinDev { | ||||
| @@ -87,15 +77,15 @@ sub _getWinDev { | ||||
|         exists( | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) < | ||||
|         2 | ||||
|       ); | ||||
|     $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} = | ||||
|       int( gettimeofday() ); | ||||
|       int( ::gettimeofday() ); | ||||
|     my ( $device, $reading ) = | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, | ||||
|         'ASC_WindowRec', 'none' ); | ||||
|       FHEM::Automation::ShuttersControl::Helper::GetAttrValues( | ||||
|         $self->{shuttersDev}, 'ASC_WindowRec', 'none' ); | ||||
|  | ||||
|     ### erwartetes Ergebnis | ||||
|     # DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE | ||||
| @@ -116,7 +106,7 @@ sub getWinDevReading { | ||||
|         exists( | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} | ||||
|         ) | ||||
|         && ( gettimeofday() - | ||||
|         && ( ::gettimeofday() - | ||||
|             $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) < | ||||
|         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 | ||||
| # | ||||
| #   Special thanks goes to: | ||||
| @@ -44,20 +44,10 @@ use strict; | ||||
| use warnings; | ||||
| use utf8; | ||||
|  | ||||
| use GPUtils qw(GP_Import); | ||||
|  | ||||
| ## Import der FHEM Funktionen | ||||
| BEGIN { | ||||
|     GP_Import( | ||||
|         qw( | ||||
|           ReadingsVal) | ||||
|     ); | ||||
| } | ||||
|  | ||||
| sub getWinStatus { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return ReadingsVal( | ||||
|     return ::ReadingsVal( | ||||
|         $FHEM::Automation::ShuttersControl::shutters->_getWinDev, | ||||
|         $FHEM::Automation::ShuttersControl::shutters->getWinDevReading, | ||||
|         'closed' ); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user