export shading function in seperated file
This commit is contained in:
		| @@ -1,5 +1,5 @@ | |||||||
| UPD 2020-07-02_12:28:09 96885 FHEM/73_AutoShuttersControl.pm | UPD 2020-07-02_14:06:51 96885 FHEM/73_AutoShuttersControl.pm | ||||||
| UPD 2020-06-30_12:47:15 188585 lib/FHEM/Automation/ShuttersControl.pm | UPD 2020-07-02_14:06:22 177312 lib/FHEM/Automation/ShuttersControl.pm | ||||||
| UPD 2020-06-22_09:41:40 2657 lib/FHEM/Automation/ShuttersControl/Dev.pm | UPD 2020-06-22_09:41:40 2657 lib/FHEM/Automation/ShuttersControl/Dev.pm | ||||||
| UPD 2020-06-22_09:41:40 2493 lib/FHEM/Automation/ShuttersControl/Roommate.pm | UPD 2020-06-22_09:41:40 2493 lib/FHEM/Automation/ShuttersControl/Roommate.pm | ||||||
| UPD 2020-06-30_12:47:15 30157 lib/FHEM/Automation/ShuttersControl/Shutters.pm | UPD 2020-06-30_12:47:15 30157 lib/FHEM/Automation/ShuttersControl/Shutters.pm | ||||||
|   | |||||||
| @@ -75,6 +75,7 @@ use Date::Parse; | |||||||
|  |  | ||||||
| use FHEM::Automation::ShuttersControl::Shutters; | use FHEM::Automation::ShuttersControl::Shutters; | ||||||
| use FHEM::Automation::ShuttersControl::Dev; | use FHEM::Automation::ShuttersControl::Dev; | ||||||
|  | use FHEM::Automation::ShuttersControl::Shading; | ||||||
|  |  | ||||||
| require Exporter; | require Exporter; | ||||||
| our @ISA    = qw(Exporter); | our @ISA    = qw(Exporter); | ||||||
| @@ -1347,7 +1348,7 @@ sub EventProcessingRoommate { | |||||||
|                     && !$shutters->getSelfDefenseState |                     && !$shutters->getSelfDefenseState | ||||||
|                   ) |                   ) | ||||||
|                 { |                 { | ||||||
|                     ShadingProcessingDriveCommand( $hash, $shuttersDev ); |                     \&FHEM::Automation::ShuttersControl::Shading::ShadingProcessingDriveCommand( $hash, $shuttersDev ); | ||||||
|                 } |                 } | ||||||
|                 elsif ( |                 elsif ( | ||||||
|                        !$shutters->getIsDay |                        !$shutters->getIsDay | ||||||
| @@ -1559,7 +1560,7 @@ sub EventProcessingResidents { | |||||||
|                     && $shutters->getShadingMode eq 'absent' |                     && $shutters->getShadingMode eq 'absent' | ||||||
|                     && $shutters->getRoommatesStatus eq 'none' ) |                     && $shutters->getRoommatesStatus eq 'none' ) | ||||||
|                 { |                 { | ||||||
|                     ShadingProcessingDriveCommand( $hash, $shuttersDev ); |                     \&FHEM::Automation::ShuttersControl::Shading::ShadingProcessingDriveCommand( $hash, $shuttersDev ); | ||||||
|                 } |                 } | ||||||
|                 elsif ( |                 elsif ( | ||||||
|                        $shutters->getShadingMode eq 'home' |                        $shutters->getShadingMode eq 'home' | ||||||
| @@ -1656,7 +1657,7 @@ sub EventProcessingResidents { | |||||||
|                 && !$shutters->getSelfDefenseState |                 && !$shutters->getSelfDefenseState | ||||||
|               ) |               ) | ||||||
|             { |             { | ||||||
|                 ShadingProcessingDriveCommand( $hash, $shuttersDev ); |                 \&FHEM::Automation::ShuttersControl::Shading::ShadingProcessingDriveCommand( $hash, $shuttersDev ); | ||||||
|             } |             } | ||||||
|             elsif ( |             elsif ( | ||||||
|                    $shutters->getShadingMode eq 'absent' |                    $shutters->getShadingMode eq 'absent' | ||||||
| @@ -2372,7 +2373,7 @@ sub EventProcessingShadingBrightness { | |||||||
|             && $shutters->getRainProtectionStatus eq 'unprotected' |             && $shutters->getRainProtectionStatus eq 'unprotected' | ||||||
|             && $shutters->getWindProtectionStatus eq 'unprotected' ) |             && $shutters->getWindProtectionStatus eq 'unprotected' ) | ||||||
|         { |         { | ||||||
|             ShadingProcessing( |             \&FHEM::Automation::ShuttersControl::Shading::ShadingProcessing( | ||||||
|                 $hash, |                 $hash, | ||||||
|                 $shuttersDev, |                 $shuttersDev, | ||||||
|                 $ascDev->getAzimuth, |                 $ascDev->getAzimuth, | ||||||
| @@ -2445,7 +2446,7 @@ sub EventProcessingTwilightDevice { | |||||||
|                 && $shutters->getRainProtectionStatus eq 'unprotected' |                 && $shutters->getRainProtectionStatus eq 'unprotected' | ||||||
|                 && $shutters->getWindProtectionStatus eq 'unprotected' ) |                 && $shutters->getWindProtectionStatus eq 'unprotected' ) | ||||||
|             { |             { | ||||||
|                 ShadingProcessing( |                 \&FHEM::Automation::ShuttersControl::Shading::ShadingProcessing( | ||||||
|                     $hash, |                     $hash, | ||||||
|                     $shuttersDev, |                     $shuttersDev, | ||||||
|                     $azimuth, |                     $azimuth, | ||||||
| @@ -2466,329 +2467,6 @@ sub EventProcessingTwilightDevice { | |||||||
|     return; |     return; | ||||||
| } | } | ||||||
|  |  | ||||||
| sub ShadingProcessing { |  | ||||||
| ### angleMinus ist $shutters->getShadingAzimuthLeft |  | ||||||
| ### anglePlus ist $shutters->getShadingAzimuthRight |  | ||||||
| ### winPos ist die Fensterposition $shutters->getDirection |  | ||||||
|     my ( $hash, $shuttersDev, $azimuth, $elevation, $outTemp, |  | ||||||
|         $azimuthLeft, $azimuthRight ) |  | ||||||
|       = @_; |  | ||||||
|  |  | ||||||
|     my $name = $hash->{NAME}; |  | ||||||
|     $shutters->setShuttersDev($shuttersDev); |  | ||||||
|     my $brightness = $shutters->getBrightnessAverage; |  | ||||||
|  |  | ||||||
|     ASC_Debug( |  | ||||||
|             'ShadingProcessing: ' |  | ||||||
|           . $shutters->getShuttersDev |  | ||||||
|           . ' - Übergebende Werte - Azimuth:' |  | ||||||
|           . $azimuth |  | ||||||
|           . ', Elevation: ' |  | ||||||
|           . $elevation |  | ||||||
|           . ', Brightness: ' |  | ||||||
|           . $brightness |  | ||||||
|           . ', OutTemp: ' |  | ||||||
|           . $outTemp |  | ||||||
|           . ', Azimut Beschattung: ' |  | ||||||
|           . $azimuthLeft |  | ||||||
|           . ', Azimut Endschattung: ' |  | ||||||
|           . $azimuthRight |  | ||||||
|           . ', Ist es nach der Zeitblockadezeit: ' |  | ||||||
|           . ( IsAfterShuttersTimeBlocking($shuttersDev) ? 'JA' : 'NEIN' ) |  | ||||||
|           . ', Das Rollo ist in der Beschattung und wurde manuell gefahren: ' |  | ||||||
|           . ( $shutters->getShadingManualDriveStatus ? 'JA' : 'NEIN' ) |  | ||||||
|           . ', Ist es nach der Hälfte der Beschattungswartezeit: ' |  | ||||||
|           . ( |  | ||||||
|             ( int( gettimeofday() ) - $shutters->getShadingStatusTimestamp ) < |  | ||||||
|               ( $shutters->getShadingWaitingPeriod / 2 ) ? 'NEIN' : 'JA' |  | ||||||
|           ) |  | ||||||
|     ); |  | ||||||
|  |  | ||||||
|     Log3( $name, 4, |  | ||||||
|             "AutoShuttersControl ($name) - Shading Processing, Rollladen: " |  | ||||||
|           . $shuttersDev |  | ||||||
|           . " Azimuth: " |  | ||||||
|           . $azimuth |  | ||||||
|           . " Elevation: " |  | ||||||
|           . $elevation |  | ||||||
|           . " Brightness: " |  | ||||||
|           . $brightness |  | ||||||
|           . " OutTemp: " |  | ||||||
|           . $outTemp ); |  | ||||||
|  |  | ||||||
|     return |  | ||||||
|       if ( $azimuth == -1 |  | ||||||
|         || $elevation == -1 |  | ||||||
|         || $brightness == -1 |  | ||||||
|         || $outTemp == -100 |  | ||||||
|         || ( int( gettimeofday() ) - $shutters->getShadingStatusTimestamp ) < |  | ||||||
|         ( $shutters->getShadingWaitingPeriod / 2 ) |  | ||||||
|         || $shutters->getShadingMode eq 'off' ); |  | ||||||
|  |  | ||||||
|     Log3( $name, 4, |  | ||||||
|             "AutoShuttersControl ($name) - Shading Processing, Rollladen: " |  | ||||||
|           . $shuttersDev |  | ||||||
|           . " Nach dem return" ); |  | ||||||
|  |  | ||||||
|     my $getShadingPos    = $shutters->getShadingPos; |  | ||||||
|     my $getStatus        = $shutters->getStatus; |  | ||||||
|     my $oldShadingStatus = $shutters->getShadingStatus; |  | ||||||
|     my $shuttersDevHash  = $defs{$shuttersDev}; |  | ||||||
|  |  | ||||||
|     my $getModeUp = $shutters->getModeUp; |  | ||||||
|     my $homemode  = $shutters->getHomemode; |  | ||||||
|  |  | ||||||
|     ASC_Debug( 'ShadingProcessing: ' |  | ||||||
|           . $shutters->getShuttersDev |  | ||||||
|           . ' - Alle Werte für die weitere Verarbeitung sind korrekt vorhanden und es wird nun mit der Beschattungsverarbeitung begonnen' |  | ||||||
|     ); |  | ||||||
|  |  | ||||||
|     if ( |  | ||||||
|         ( |  | ||||||
|                $outTemp < $shutters->getShadingMinOutsideTemperature - 4 |  | ||||||
|             || $azimuth < $azimuthLeft |  | ||||||
|             || $azimuth > $azimuthRight |  | ||||||
|             || !$shutters->getIsDay |  | ||||||
|         ) |  | ||||||
|         && $shutters->getShadingStatus ne 'out' |  | ||||||
|       ) |  | ||||||
|     { |  | ||||||
|         #         $shutters->setShadingLastStatus('in'); |  | ||||||
|         $shutters->setShadingStatus('out'); |  | ||||||
|  |  | ||||||
|         ASC_Debug( 'ShadingProcessing: ' |  | ||||||
|               . $shutters->getShuttersDev |  | ||||||
|               . ' - Es ist Nacht oder die Aussentemperatur unterhalb der Shading Temperatur. Die Beschattung wird Zwangsbeendet' |  | ||||||
|         ); |  | ||||||
|  |  | ||||||
|         Log3( $name, 4, |  | ||||||
| "AutoShuttersControl ($name) - Shading Processing - Der Sonnenstand ist ausserhalb der Winkelangaben oder die Aussentemperatur unterhalb der Shading Temperatur " |  | ||||||
|         ); |  | ||||||
|     } |  | ||||||
|     elsif ($azimuth < $azimuthLeft |  | ||||||
|         || $azimuth > $azimuthRight |  | ||||||
|         || $elevation < $shutters->getShadingMinElevation |  | ||||||
|         || $elevation > $shutters->getShadingMaxElevation |  | ||||||
|         || $brightness < $shutters->getShadingStateChangeCloudy |  | ||||||
|         || $outTemp < $shutters->getShadingMinOutsideTemperature - 1 ) |  | ||||||
|     { |  | ||||||
|         $shutters->setShadingStatus('out reserved') |  | ||||||
|           if ( $shutters->getShadingStatus eq 'in' |  | ||||||
|             || $shutters->getShadingStatus eq 'in reserved' ); |  | ||||||
|  |  | ||||||
|         if ( |  | ||||||
|             ( |  | ||||||
|                 $shutters->getShadingStatus eq 'out reserved' |  | ||||||
|                 and |  | ||||||
|                 ( int( gettimeofday() ) - $shutters->getShadingStatusTimestamp ) |  | ||||||
|             ) > $shutters->getShadingWaitingPeriod |  | ||||||
|           ) |  | ||||||
|         { |  | ||||||
|             $shutters->setShadingStatus('out'); |  | ||||||
|  |  | ||||||
|             #             $shutters->setShadingLastStatus('in') |  | ||||||
|             #               if ( $shutters->getShadingLastStatus eq 'out' ); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         Log3( $name, 4, |  | ||||||
|                 "AutoShuttersControl ($name) - Shading Processing, Rollladen: " |  | ||||||
|               . $shuttersDev |  | ||||||
|               . " In der Out Abfrage, Shadingwert: " |  | ||||||
|               . $shutters->getShadingStatus |  | ||||||
|               . ", Zeitstempel: " |  | ||||||
|               . $shutters->getShadingStatusTimestamp ); |  | ||||||
|  |  | ||||||
|         ASC_Debug( 'ShadingProcessing: ' |  | ||||||
|               . $shutters->getShuttersDev |  | ||||||
|               . ' - Einer der Beschattungsbedingungen wird nicht mehr erfüllt und somit wird der Beschattungsstatus um eine Stufe reduziert. Alter Status: ' |  | ||||||
|               . $oldShadingStatus |  | ||||||
|               . ' Neuer Status: ' |  | ||||||
|               . $shutters->getShadingStatus ); |  | ||||||
|     } |  | ||||||
|     elsif ($azimuth > $azimuthLeft |  | ||||||
|         && $azimuth < $azimuthRight |  | ||||||
|         && $elevation > $shutters->getShadingMinElevation |  | ||||||
|         && $elevation < $shutters->getShadingMaxElevation |  | ||||||
|         && $brightness > $shutters->getShadingStateChangeSunny |  | ||||||
|         && $outTemp > $shutters->getShadingMinOutsideTemperature ) |  | ||||||
|     { |  | ||||||
|         if (   $shutters->getShadingStatus eq 'out' |  | ||||||
|             || $shutters->getShadingStatus eq 'out reserved' ) |  | ||||||
|         { |  | ||||||
|             $shutters->setShadingStatus('in reserved'); |  | ||||||
|  |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         if ( $shutters->getShadingStatus eq 'in reserved' |  | ||||||
|             and |  | ||||||
|             ( int( gettimeofday() ) - $shutters->getShadingStatusTimestamp ) > |  | ||||||
|             ( $shutters->getShadingWaitingPeriod / 2 ) ) |  | ||||||
|         { |  | ||||||
|             $shutters->setShadingStatus('in'); |  | ||||||
|  |  | ||||||
|             #             $shutters->setShadingLastStatus('out') |  | ||||||
|             #               if ( $shutters->getShadingLastStatus eq 'in' ); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         Log3( $name, 4, |  | ||||||
|                 "AutoShuttersControl ($name) - Shading Processing, Rollladen: " |  | ||||||
|               . $shuttersDev |  | ||||||
|               . " In der In Abfrage, Shadingwert: " |  | ||||||
|               . $shutters->getShadingStatus |  | ||||||
|               . ", Zeitstempel: " |  | ||||||
|               . $shutters->getShadingStatusTimestamp ); |  | ||||||
|  |  | ||||||
|         ASC_Debug( 'ShadingProcessing: ' |  | ||||||
|               . $shutters->getShuttersDev |  | ||||||
|               . ' - Alle Beschattungsbedingungen wurden erfüllt und somit wird der Beschattungsstatus um eine Stufe angehoben. Alter Status: ' |  | ||||||
|               . $oldShadingStatus |  | ||||||
|               . ' Neuer Status: ' |  | ||||||
|               . $shutters->getShadingStatus ); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     ShadingProcessingDriveCommand( $hash, $shuttersDev ) |  | ||||||
|       if ( |  | ||||||
|            IsAfterShuttersTimeBlocking($shuttersDev) |  | ||||||
|         && !$shutters->getShadingManualDriveStatus |  | ||||||
|         && $shutters->getRoommatesStatus ne 'gotosleep' |  | ||||||
|         && $shutters->getRoommatesStatus ne 'asleep' |  | ||||||
|         && ( |  | ||||||
|             ( |  | ||||||
|                    $shutters->getShadingStatus eq 'out' |  | ||||||
|                 && $shutters->getShadingLastStatus eq 'in' |  | ||||||
|             ) |  | ||||||
|             || (   $shutters->getShadingStatus eq 'in' |  | ||||||
|                 && $shutters->getShadingLastStatus eq 'out' ) |  | ||||||
|         ) |  | ||||||
|         && (   $shutters->getShadingMode eq 'always' |  | ||||||
|             || $shutters->getShadingMode eq $homemode ) |  | ||||||
|         && ( |  | ||||||
|                $shutters->getModeUp eq 'always' |  | ||||||
|             || $shutters->getModeUp eq $homemode |  | ||||||
|             || $shutters->getModeUp eq 'off' |  | ||||||
|             || $shutters->getModeUp eq 'absent' |  | ||||||
|             || (   $shutters->getModeUp eq 'home' |  | ||||||
|                 && $homemode ne 'asleep' ) |  | ||||||
|         ) |  | ||||||
|         && ( |  | ||||||
|             ( |  | ||||||
|                 ( |  | ||||||
|                     int( gettimeofday() ) - |  | ||||||
|                     $shutters->getShadingStatusTimestamp |  | ||||||
|                 ) < 2 |  | ||||||
|                 && $shutters->getStatus != $shutters->getClosedPos |  | ||||||
|             ) |  | ||||||
|             || (  !$shutters->getQueryShuttersPos( $shutters->getShadingPos ) |  | ||||||
|                 && $shutters->getIfInShading ) |  | ||||||
|             || (  !$shutters->getIfInShading |  | ||||||
|                 && $shutters->getStatus == $shutters->getShadingPos ) |  | ||||||
|         ) |  | ||||||
|       ); |  | ||||||
|  |  | ||||||
|     readingsBeginUpdate($shuttersDevHash); |  | ||||||
|     readingsBulkUpdate( |  | ||||||
|         $shuttersDevHash, |  | ||||||
|         'ASC_ShadingMessage', |  | ||||||
|         'INFO: current shading status is \'' |  | ||||||
|           . $shutters->getShadingStatus . '\'' |  | ||||||
|           . ' - next check in ' |  | ||||||
|           . ( |  | ||||||
|             ( |  | ||||||
|                 ( |  | ||||||
|                          $shutters->getShadingLastStatus eq 'out reserved' |  | ||||||
|                       || $shutters->getShadingLastStatus eq 'out' |  | ||||||
|                 ) |  | ||||||
|                 ? $shutters->getShadingWaitingPeriod |  | ||||||
|                 : $shutters->getShadingWaitingPeriod / 2 |  | ||||||
|             ) |  | ||||||
|           ) / 60 |  | ||||||
|           . 'm' |  | ||||||
|     ); |  | ||||||
|     readingsEndUpdate( $shuttersDevHash, 1 ); |  | ||||||
|  |  | ||||||
|     return; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| sub ShadingProcessingDriveCommand { |  | ||||||
|     my $hash        = shift; |  | ||||||
|     my $shuttersDev = shift; |  | ||||||
|  |  | ||||||
|     my $name = $hash->{NAME}; |  | ||||||
|     $shutters->setShuttersDev($shuttersDev); |  | ||||||
|  |  | ||||||
|     my $getShadingPos = $shutters->getShadingPos; |  | ||||||
|     my $getStatus     = $shutters->getStatus; |  | ||||||
|  |  | ||||||
|     $shutters->setShadingStatus( $shutters->getShadingStatus ); |  | ||||||
|  |  | ||||||
|     if ( |  | ||||||
|            $shutters->getShadingStatus eq 'in' |  | ||||||
|         && $getShadingPos != $getStatus |  | ||||||
|         && ( CheckIfShuttersWindowRecOpen($shuttersDev) != 2 |  | ||||||
|             || $shutters->getShuttersPlace ne 'terrace' ) |  | ||||||
|       ) |  | ||||||
|     { |  | ||||||
|         $shutters->setLastDrive('shading in'); |  | ||||||
|         ShuttersCommandSet( $hash, $shuttersDev, $getShadingPos ); |  | ||||||
|  |  | ||||||
|         ASC_Debug( 'ShadingProcessingDriveCommand: ' |  | ||||||
|               . $shutters->getShuttersDev |  | ||||||
|               . ' - Der aktuelle Beschattungsstatus ist: ' |  | ||||||
|               . $shutters->getShadingStatus |  | ||||||
|               . ' und somit wird nun in die Position: ' |  | ||||||
|               . $getShadingPos |  | ||||||
|               . ' zum Beschatten gefahren' ); |  | ||||||
|     } |  | ||||||
|     elsif ($shutters->getShadingStatus eq 'out' |  | ||||||
|         && $getShadingPos == $getStatus ) |  | ||||||
|     { |  | ||||||
|         $shutters->setLastDrive('shading out'); |  | ||||||
|  |  | ||||||
|         ShuttersCommandSet( |  | ||||||
|             $hash, |  | ||||||
|             $shuttersDev, |  | ||||||
|             ( |  | ||||||
|                   $getShadingPos == $shutters->getLastPos |  | ||||||
|                 ? $shutters->getOpenPos |  | ||||||
|                 : ( |  | ||||||
|                     $shutters->getQueryShuttersPos( $shutters->getLastPos ) |  | ||||||
|                     ? ( |  | ||||||
|                           $shutters->getLastPos == $shutters->getSleepPos |  | ||||||
|                         ? $shutters->getOpenPos |  | ||||||
|                         : $shutters->getLastPos |  | ||||||
|                       ) |  | ||||||
|                     : $shutters->getOpenPos |  | ||||||
|                 ) |  | ||||||
|             ) |  | ||||||
|         ); |  | ||||||
|  |  | ||||||
|         ASC_Debug( 'ShadingProcessingDriveCommand: ' |  | ||||||
|               . $shutters->getShuttersDev |  | ||||||
|               . ' - Der aktuelle Beschattungsstatus ist: ' |  | ||||||
|               . $shutters->getShadingStatus |  | ||||||
|               . ' und somit wird nun in die Position: ' |  | ||||||
|               . $getShadingPos |  | ||||||
|               . ' zum beenden der Beschattung gefahren' ); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     Log3( $name, 4, |  | ||||||
| "AutoShuttersControl ($name) - Shading Processing - In der Routine zum fahren der Rollläden, Shading Wert: " |  | ||||||
|           . $shutters->getShadingStatus ); |  | ||||||
|  |  | ||||||
|     ASC_Debug( |  | ||||||
|             'ShadingProcessingDriveCommand: ' |  | ||||||
|           . $shutters->getShuttersDev |  | ||||||
|           . ' - Der aktuelle Beschattungsstatus ist: ' |  | ||||||
|           . $shutters->getShadingStatus |  | ||||||
|           . ', Beschattungsstatus Zeitstempel: ' |  | ||||||
|           . strftime( |  | ||||||
|             "%Y.%m.%e %T", localtime( $shutters->getShadingStatusTimestamp ) |  | ||||||
|           ) |  | ||||||
|     ); |  | ||||||
|  |  | ||||||
|     return; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| sub EventProcessingPartyMode { | sub EventProcessingPartyMode { | ||||||
|     my $hash = shift; |     my $hash = shift; | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										385
									
								
								lib/FHEM/Automation/ShuttersControl/Shading.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										385
									
								
								lib/FHEM/Automation/ShuttersControl/Shading.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,385 @@ | |||||||
|  | ############################################################################### | ||||||
|  | # | ||||||
|  | # Developed with Kate | ||||||
|  | # | ||||||
|  | #  (c) 2018-2020 Copyright: Marko Oldenburg (fhemsupport@cooltux.net) | ||||||
|  | #  All rights reserved | ||||||
|  | # | ||||||
|  | #   Special thanks goes to: | ||||||
|  | #       - Bernd (Cluni) this module is based on the logic of his script "Rollladensteuerung für HM/ROLLO inkl. Abschattung und Komfortfunktionen in Perl" (https://forum.fhem.de/index.php/topic,73964.0.html) | ||||||
|  | #       - Beta-User for many tests, many suggestions and good discussions | ||||||
|  | #       - pc1246 write english commandref | ||||||
|  | #       - FunkOdyssey commandref style | ||||||
|  | #       - sledge fix many typo in commandref | ||||||
|  | #       - many User that use with modul and report bugs | ||||||
|  | #       - Christoph (christoph.kaiser.in) Patch that expand RegEx for Window Events | ||||||
|  | #       - Julian (Loredo) expand Residents Events for new Residents functions | ||||||
|  | #       - Christoph (Christoph Morrison) for fix Commandref, many suggestions and good discussions | ||||||
|  | # | ||||||
|  | # | ||||||
|  | #  This script is free software; you can redistribute it and/or modify | ||||||
|  | #  it under the terms of the GNU General Public License as published by | ||||||
|  | #  the Free Software Foundation; either version 2 of the License,or | ||||||
|  | #  any later version. | ||||||
|  | # | ||||||
|  | #  The GNU General Public License can be found at | ||||||
|  | #  http://www.gnu.org/copyleft/gpl.html. | ||||||
|  | #  A copy is found in the textfile GPL.txt and important notices to the license | ||||||
|  | #  from the author is found in LICENSE.txt distributed with these scripts. | ||||||
|  | # | ||||||
|  | #  This script is distributed in the hope that it will be useful, | ||||||
|  | #  but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | #  GNU General Public License for more details. | ||||||
|  | # | ||||||
|  | # | ||||||
|  | # $Id$ | ||||||
|  | # | ||||||
|  | ############################################################################### | ||||||
|  |  | ||||||
|  | ## unserer packagename | ||||||
|  | package FHEM::Automation::ShuttersControl::Shading; | ||||||
|  |  | ||||||
|  | use strict; | ||||||
|  | use warnings; | ||||||
|  | use POSIX qw(strftime); | ||||||
|  | use utf8; | ||||||
|  |  | ||||||
|  | use GPUtils qw(GP_Import); | ||||||
|  |  | ||||||
|  | ## Import der FHEM Funktionen | ||||||
|  | BEGIN { | ||||||
|  |     GP_Import( | ||||||
|  |         qw( | ||||||
|  |           Log3 | ||||||
|  |           gettimeofday | ||||||
|  |           readingsBeginUpdate | ||||||
|  |           readingsBulkUpdate | ||||||
|  |           readingsEndUpdate | ||||||
|  |         ) | ||||||
|  |     ); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | sub ShadingProcessing { | ||||||
|  | ### angleMinus ist $FHEM::Automation::ShuttersControl::shutters->getShadingAzimuthLeft | ||||||
|  | ### anglePlus ist $FHEM::Automation::ShuttersControl::shutters->getShadingAzimuthRight | ||||||
|  | ### winPos ist die Fensterposition $FHEM::Automation::ShuttersControl::shutters->getDirection | ||||||
|  |     my ( $hash, $shuttersDev, $azimuth, $elevation, $outTemp, | ||||||
|  |         $azimuthLeft, $azimuthRight ) | ||||||
|  |       = @_; | ||||||
|  |  | ||||||
|  |     my $name = $hash->{NAME}; | ||||||
|  |     $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev); | ||||||
|  |     my $brightness = $FHEM::Automation::ShuttersControl::shutters->getBrightnessAverage; | ||||||
|  |  | ||||||
|  |     \&FHEM::Automation::ShuttersControl::ASC_Debug( | ||||||
|  |             'ShadingProcessing: ' | ||||||
|  |           . $FHEM::Automation::ShuttersControl::shutters->getShuttersDev | ||||||
|  |           . ' - Übergebende Werte - Azimuth:' | ||||||
|  |           . $azimuth | ||||||
|  |           . ', Elevation: ' | ||||||
|  |           . $elevation | ||||||
|  |           . ', Brightness: ' | ||||||
|  |           . $brightness | ||||||
|  |           . ', OutTemp: ' | ||||||
|  |           . $outTemp | ||||||
|  |           . ', Azimut Beschattung: ' | ||||||
|  |           . $azimuthLeft | ||||||
|  |           . ', Azimut Endschattung: ' | ||||||
|  |           . $azimuthRight | ||||||
|  |           . ', Ist es nach der Zeitblockadezeit: ' | ||||||
|  |           . ( IsAfterShuttersTimeBlocking($shuttersDev) ? 'JA' : 'NEIN' ) | ||||||
|  |           . ', Das Rollo ist in der Beschattung und wurde manuell gefahren: ' | ||||||
|  |           . ( $FHEM::Automation::ShuttersControl::shutters->getShadingManualDriveStatus ? 'JA' : 'NEIN' ) | ||||||
|  |           . ', Ist es nach der Hälfte der Beschattungswartezeit: ' | ||||||
|  |           . ( | ||||||
|  |             ( int( gettimeofday() ) - $FHEM::Automation::ShuttersControl::shutters->getShadingStatusTimestamp ) < | ||||||
|  |               ( $FHEM::Automation::ShuttersControl::shutters->getShadingWaitingPeriod / 2 ) ? 'NEIN' : 'JA' | ||||||
|  |           ) | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     Log3( $name, 4, | ||||||
|  |             "AutoShuttersControl ($name) - Shading Processing, Rollladen: " | ||||||
|  |           . $shuttersDev | ||||||
|  |           . " Azimuth: " | ||||||
|  |           . $azimuth | ||||||
|  |           . " Elevation: " | ||||||
|  |           . $elevation | ||||||
|  |           . " Brightness: " | ||||||
|  |           . $brightness | ||||||
|  |           . " OutTemp: " | ||||||
|  |           . $outTemp ); | ||||||
|  |  | ||||||
|  |     return | ||||||
|  |       if ( $azimuth == -1 | ||||||
|  |         || $elevation == -1 | ||||||
|  |         || $brightness == -1 | ||||||
|  |         || $outTemp == -100 | ||||||
|  |         || ( int( gettimeofday() ) - $FHEM::Automation::ShuttersControl::shutters->getShadingStatusTimestamp ) < | ||||||
|  |         ( $FHEM::Automation::ShuttersControl::shutters->getShadingWaitingPeriod / 2 ) | ||||||
|  |         || $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off' ); | ||||||
|  |  | ||||||
|  |     Log3( $name, 4, | ||||||
|  |             "AutoShuttersControl ($name) - Shading Processing, Rollladen: " | ||||||
|  |           . $shuttersDev | ||||||
|  |           . " Nach dem return" ); | ||||||
|  |  | ||||||
|  |     my $getShadingPos    = $FHEM::Automation::ShuttersControl::shutters->getShadingPos; | ||||||
|  |     my $getStatus        = $FHEM::Automation::ShuttersControl::shutters->getStatus; | ||||||
|  |     my $oldShadingStatus = $FHEM::Automation::ShuttersControl::shutters->getShadingStatus; | ||||||
|  |     my $shuttersDevHash  = $defs{$shuttersDev}; | ||||||
|  |  | ||||||
|  |     my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp; | ||||||
|  |     my $homemode  = $FHEM::Automation::ShuttersControl::shutters->getHomemode; | ||||||
|  |  | ||||||
|  |     \&FHEM::Automation::ShuttersControl::ASC_Debug( 'ShadingProcessing: ' | ||||||
|  |           . $FHEM::Automation::ShuttersControl::shutters->getShuttersDev | ||||||
|  |           . ' - Alle Werte für die weitere Verarbeitung sind korrekt vorhanden und es wird nun mit der Beschattungsverarbeitung begonnen' | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     if ( | ||||||
|  |         ( | ||||||
|  |                $outTemp < $FHEM::Automation::ShuttersControl::shutters->getShadingMinOutsideTemperature - 4 | ||||||
|  |             || $azimuth < $azimuthLeft | ||||||
|  |             || $azimuth > $azimuthRight | ||||||
|  |             || !$FHEM::Automation::ShuttersControl::shutters->getIsDay | ||||||
|  |         ) | ||||||
|  |         && $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ne 'out' | ||||||
|  |       ) | ||||||
|  |     { | ||||||
|  |         #         $FHEM::Automation::ShuttersControl::shutters->setShadingLastStatus('in'); | ||||||
|  |         $FHEM::Automation::ShuttersControl::shutters->setShadingStatus('out'); | ||||||
|  |  | ||||||
|  |         \&FHEM::Automation::ShuttersControl::ASC_Debug( 'ShadingProcessing: ' | ||||||
|  |               . $FHEM::Automation::ShuttersControl::shutters->getShuttersDev | ||||||
|  |               . ' - Es ist Nacht oder die Aussentemperatur unterhalb der Shading Temperatur. Die Beschattung wird Zwangsbeendet' | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         Log3( $name, 4, | ||||||
|  | "AutoShuttersControl ($name) - Shading Processing - Der Sonnenstand ist ausserhalb der Winkelangaben oder die Aussentemperatur unterhalb der Shading Temperatur " | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |     elsif ($azimuth < $azimuthLeft | ||||||
|  |         || $azimuth > $azimuthRight | ||||||
|  |         || $elevation < $FHEM::Automation::ShuttersControl::shutters->getShadingMinElevation | ||||||
|  |         || $elevation > $FHEM::Automation::ShuttersControl::shutters->getShadingMaxElevation | ||||||
|  |         || $brightness < $FHEM::Automation::ShuttersControl::shutters->getShadingStateChangeCloudy | ||||||
|  |         || $outTemp < $FHEM::Automation::ShuttersControl::shutters->getShadingMinOutsideTemperature - 1 ) | ||||||
|  |     { | ||||||
|  |         $FHEM::Automation::ShuttersControl::shutters->setShadingStatus('out reserved') | ||||||
|  |           if ( $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'in' | ||||||
|  |             || $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'in reserved' ); | ||||||
|  |  | ||||||
|  |         if ( | ||||||
|  |             ( | ||||||
|  |                 $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'out reserved' | ||||||
|  |                 and | ||||||
|  |                 ( int( gettimeofday() ) - $FHEM::Automation::ShuttersControl::shutters->getShadingStatusTimestamp ) | ||||||
|  |             ) > $FHEM::Automation::ShuttersControl::shutters->getShadingWaitingPeriod | ||||||
|  |           ) | ||||||
|  |         { | ||||||
|  |             $FHEM::Automation::ShuttersControl::shutters->setShadingStatus('out'); | ||||||
|  |  | ||||||
|  |             #             $FHEM::Automation::ShuttersControl::shutters->setShadingLastStatus('in') | ||||||
|  |             #               if ( $FHEM::Automation::ShuttersControl::shutters->getShadingLastStatus eq 'out' ); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         Log3( $name, 4, | ||||||
|  |                 "AutoShuttersControl ($name) - Shading Processing, Rollladen: " | ||||||
|  |               . $shuttersDev | ||||||
|  |               . " In der Out Abfrage, Shadingwert: " | ||||||
|  |               . $FHEM::Automation::ShuttersControl::shutters->getShadingStatus | ||||||
|  |               . ", Zeitstempel: " | ||||||
|  |               . $FHEM::Automation::ShuttersControl::shutters->getShadingStatusTimestamp ); | ||||||
|  |  | ||||||
|  |         \&FHEM::Automation::ShuttersControl::ASC_Debug( 'ShadingProcessing: ' | ||||||
|  |               . $FHEM::Automation::ShuttersControl::shutters->getShuttersDev | ||||||
|  |               . ' - Einer der Beschattungsbedingungen wird nicht mehr erfüllt und somit wird der Beschattungsstatus um eine Stufe reduziert. Alter Status: ' | ||||||
|  |               . $oldShadingStatus | ||||||
|  |               . ' Neuer Status: ' | ||||||
|  |               . $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ); | ||||||
|  |     } | ||||||
|  |     elsif ($azimuth > $azimuthLeft | ||||||
|  |         && $azimuth < $azimuthRight | ||||||
|  |         && $elevation > $FHEM::Automation::ShuttersControl::shutters->getShadingMinElevation | ||||||
|  |         && $elevation < $FHEM::Automation::ShuttersControl::shutters->getShadingMaxElevation | ||||||
|  |         && $brightness > $FHEM::Automation::ShuttersControl::shutters->getShadingStateChangeSunny | ||||||
|  |         && $outTemp > $FHEM::Automation::ShuttersControl::shutters->getShadingMinOutsideTemperature ) | ||||||
|  |     { | ||||||
|  |         if (   $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'out' | ||||||
|  |             || $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'out reserved' ) | ||||||
|  |         { | ||||||
|  |             $FHEM::Automation::ShuttersControl::shutters->setShadingStatus('in reserved'); | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if ( $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'in reserved' | ||||||
|  |             and | ||||||
|  |             ( int( gettimeofday() ) - $FHEM::Automation::ShuttersControl::shutters->getShadingStatusTimestamp ) > | ||||||
|  |             ( $FHEM::Automation::ShuttersControl::shutters->getShadingWaitingPeriod / 2 ) ) | ||||||
|  |         { | ||||||
|  |             $FHEM::Automation::ShuttersControl::shutters->setShadingStatus('in'); | ||||||
|  |  | ||||||
|  |             #             $FHEM::Automation::ShuttersControl::shutters->setShadingLastStatus('out') | ||||||
|  |             #               if ( $FHEM::Automation::ShuttersControl::shutters->getShadingLastStatus eq 'in' ); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         Log3( $name, 4, | ||||||
|  |                 "AutoShuttersControl ($name) - Shading Processing, Rollladen: " | ||||||
|  |               . $shuttersDev | ||||||
|  |               . " In der In Abfrage, Shadingwert: " | ||||||
|  |               . $FHEM::Automation::ShuttersControl::shutters->getShadingStatus | ||||||
|  |               . ", Zeitstempel: " | ||||||
|  |               . $FHEM::Automation::ShuttersControl::shutters->getShadingStatusTimestamp ); | ||||||
|  |  | ||||||
|  |         \&FHEM::Automation::ShuttersControl::ASC_Debug( 'ShadingProcessing: ' | ||||||
|  |               . $FHEM::Automation::ShuttersControl::shutters->getShuttersDev | ||||||
|  |               . ' - Alle Beschattungsbedingungen wurden erfüllt und somit wird der Beschattungsstatus um eine Stufe angehoben. Alter Status: ' | ||||||
|  |               . $oldShadingStatus | ||||||
|  |               . ' Neuer Status: ' | ||||||
|  |               . $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     ShadingProcessingDriveCommand( $hash, $shuttersDev ) | ||||||
|  |       if ( | ||||||
|  |            \&FHEM::Automation::ShuttersControl::IsAfterShuttersTimeBlocking($shuttersDev) | ||||||
|  |         && !$FHEM::Automation::ShuttersControl::shutters->getShadingManualDriveStatus | ||||||
|  |         && $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus ne 'gotosleep' | ||||||
|  |         && $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus ne 'asleep' | ||||||
|  |         && ( | ||||||
|  |             ( | ||||||
|  |                    $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'out' | ||||||
|  |                 && $FHEM::Automation::ShuttersControl::shutters->getShadingLastStatus eq 'in' | ||||||
|  |             ) | ||||||
|  |             || (   $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'in' | ||||||
|  |                 && $FHEM::Automation::ShuttersControl::shutters->getShadingLastStatus eq 'out' ) | ||||||
|  |         ) | ||||||
|  |         && (   $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'always' | ||||||
|  |             || $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq $homemode ) | ||||||
|  |         && ( | ||||||
|  |                $FHEM::Automation::ShuttersControl::shutters->getModeUp eq 'always' | ||||||
|  |             || $FHEM::Automation::ShuttersControl::shutters->getModeUp eq $homemode | ||||||
|  |             || $FHEM::Automation::ShuttersControl::shutters->getModeUp eq 'off' | ||||||
|  |             || $FHEM::Automation::ShuttersControl::shutters->getModeUp eq 'absent' | ||||||
|  |             || (   $FHEM::Automation::ShuttersControl::shutters->getModeUp eq 'home' | ||||||
|  |                 && $homemode ne 'asleep' ) | ||||||
|  |         ) | ||||||
|  |         && ( | ||||||
|  |             ( | ||||||
|  |                 ( | ||||||
|  |                     int( gettimeofday() ) - | ||||||
|  |                     $FHEM::Automation::ShuttersControl::shutters->getShadingStatusTimestamp | ||||||
|  |                 ) < 2 | ||||||
|  |                 && $FHEM::Automation::ShuttersControl::shutters->getStatus != $FHEM::Automation::ShuttersControl::shutters->getClosedPos | ||||||
|  |             ) | ||||||
|  |             || (  !$FHEM::Automation::ShuttersControl::shutters->getQueryShuttersPos( $FHEM::Automation::ShuttersControl::shutters->getShadingPos ) | ||||||
|  |                 && $FHEM::Automation::ShuttersControl::shutters->getIfInShading ) | ||||||
|  |             || (  !$FHEM::Automation::ShuttersControl::shutters->getIfInShading | ||||||
|  |                 && $FHEM::Automation::ShuttersControl::shutters->getStatus == $FHEM::Automation::ShuttersControl::shutters->getShadingPos ) | ||||||
|  |         ) | ||||||
|  |       ); | ||||||
|  |  | ||||||
|  |     readingsBeginUpdate($shuttersDevHash); | ||||||
|  |     readingsBulkUpdate( | ||||||
|  |         $shuttersDevHash, | ||||||
|  |         'ASC_ShadingMessage', | ||||||
|  |         'INFO: current shading status is \'' | ||||||
|  |           . $FHEM::Automation::ShuttersControl::shutters->getShadingStatus . '\'' | ||||||
|  |           . ' - next check in ' | ||||||
|  |           . ( | ||||||
|  |             ( | ||||||
|  |                 ( | ||||||
|  |                          $FHEM::Automation::ShuttersControl::shutters->getShadingLastStatus eq 'out reserved' | ||||||
|  |                       || $FHEM::Automation::ShuttersControl::shutters->getShadingLastStatus eq 'out' | ||||||
|  |                 ) | ||||||
|  |                 ? $FHEM::Automation::ShuttersControl::shutters->getShadingWaitingPeriod | ||||||
|  |                 : $FHEM::Automation::ShuttersControl::shutters->getShadingWaitingPeriod / 2 | ||||||
|  |             ) | ||||||
|  |           ) / 60 | ||||||
|  |           . 'm' | ||||||
|  |     ); | ||||||
|  |     readingsEndUpdate( $shuttersDevHash, 1 ); | ||||||
|  |  | ||||||
|  |     return; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | sub ShadingProcessingDriveCommand { | ||||||
|  |     my $hash        = shift; | ||||||
|  |     my $shuttersDev = shift; | ||||||
|  |  | ||||||
|  |     my $name = $hash->{NAME}; | ||||||
|  |     $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev); | ||||||
|  |  | ||||||
|  |     my $getShadingPos = $FHEM::Automation::ShuttersControl::shutters->getShadingPos; | ||||||
|  |     my $getStatus     = $FHEM::Automation::ShuttersControl::shutters->getStatus; | ||||||
|  |  | ||||||
|  |     $FHEM::Automation::ShuttersControl::shutters->setShadingStatus( $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ); | ||||||
|  |  | ||||||
|  |     if ( | ||||||
|  |            $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'in' | ||||||
|  |         && $getShadingPos != $getStatus | ||||||
|  |         && ( \&FHEM::Automation::ShuttersControl::CheckIfShuttersWindowRecOpen($shuttersDev) != 2 | ||||||
|  |             || $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace ne 'terrace' ) | ||||||
|  |       ) | ||||||
|  |     { | ||||||
|  |         $FHEM::Automation::ShuttersControl::shutters->setLastDrive('shading in'); | ||||||
|  |         ShuttersCommandSet( $hash, $shuttersDev, $getShadingPos ); | ||||||
|  |  | ||||||
|  |         \&FHEM::Automation::ShuttersControl::ASC_Debug( 'ShadingProcessingDriveCommand: ' | ||||||
|  |               . $FHEM::Automation::ShuttersControl::shutters->getShuttersDev | ||||||
|  |               . ' - Der aktuelle Beschattungsstatus ist: ' | ||||||
|  |               . $FHEM::Automation::ShuttersControl::shutters->getShadingStatus | ||||||
|  |               . ' und somit wird nun in die Position: ' | ||||||
|  |               . $getShadingPos | ||||||
|  |               . ' zum Beschatten gefahren' ); | ||||||
|  |     } | ||||||
|  |     elsif ($FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'out' | ||||||
|  |         && $getShadingPos == $getStatus ) | ||||||
|  |     { | ||||||
|  |         $FHEM::Automation::ShuttersControl::shutters->setLastDrive('shading out'); | ||||||
|  |  | ||||||
|  |         \&FHEM::Automation::ShuttersControl::ShuttersCommandSet( | ||||||
|  |             $hash, | ||||||
|  |             $shuttersDev, | ||||||
|  |             ( | ||||||
|  |                   $getShadingPos == $FHEM::Automation::ShuttersControl::shutters->getLastPos | ||||||
|  |                 ? $FHEM::Automation::ShuttersControl::shutters->getOpenPos | ||||||
|  |                 : ( | ||||||
|  |                     $FHEM::Automation::ShuttersControl::shutters->getQueryShuttersPos( $FHEM::Automation::ShuttersControl::shutters->getLastPos ) | ||||||
|  |                     ? ( | ||||||
|  |                           $FHEM::Automation::ShuttersControl::shutters->getLastPos == $FHEM::Automation::ShuttersControl::shutters->getSleepPos | ||||||
|  |                         ? $FHEM::Automation::ShuttersControl::shutters->getOpenPos | ||||||
|  |                         : $FHEM::Automation::ShuttersControl::shutters->getLastPos | ||||||
|  |                       ) | ||||||
|  |                     : $FHEM::Automation::ShuttersControl::shutters->getOpenPos | ||||||
|  |                 ) | ||||||
|  |             ) | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         \&FHEM::Automation::ShuttersControl::ASC_Debug( 'ShadingProcessingDriveCommand: ' | ||||||
|  |               . $FHEM::Automation::ShuttersControl::shutters->getShuttersDev | ||||||
|  |               . ' - Der aktuelle Beschattungsstatus ist: ' | ||||||
|  |               . $FHEM::Automation::ShuttersControl::shutters->getShadingStatus | ||||||
|  |               . ' und somit wird nun in die Position: ' | ||||||
|  |               . $getShadingPos | ||||||
|  |               . ' zum beenden der Beschattung gefahren' ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     Log3( $name, 4, | ||||||
|  | "AutoShuttersControl ($name) - Shading Processing - In der Routine zum fahren der Rollläden, Shading Wert: " | ||||||
|  |           . $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ); | ||||||
|  |  | ||||||
|  |     \&FHEM::Automation::ShuttersControl::ASC_Debug( | ||||||
|  |             'ShadingProcessingDriveCommand: ' | ||||||
|  |           . $FHEM::Automation::ShuttersControl::shutters->getShuttersDev | ||||||
|  |           . ' - Der aktuelle Beschattungsstatus ist: ' | ||||||
|  |           . $FHEM::Automation::ShuttersControl::shutters->getShadingStatus | ||||||
|  |           . ', Beschattungsstatus Zeitstempel: ' | ||||||
|  |           . strftime( | ||||||
|  |             "%Y.%m.%e %T", localtime( $FHEM::Automation::ShuttersControl::shutters->getShadingStatusTimestamp ) | ||||||
|  |           ) | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     return; | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user