add blockAscDrivesAfterManual for complet blocking ASC drive
This commit is contained in:
		| @@ -42,7 +42,7 @@ use strict; | ||||
| use warnings; | ||||
| use FHEM::Meta; | ||||
|  | ||||
| my $version = '0.4.0.11beta47'; | ||||
| my $version = '0.4.0.11beta48'; | ||||
|  | ||||
| sub AutoShuttersControl_Initialize($) { | ||||
|     my ($hash) = @_; | ||||
| @@ -85,6 +85,7 @@ sub AutoShuttersControl_Initialize($) { | ||||
|       . 'ASC_twilightDevice ' | ||||
|       . 'ASC_windSensor ' | ||||
|       . 'ASC_expert:1 ' | ||||
|       . 'ASC_blockAscDrivesAfterManual:0,1 ' | ||||
|       . $oldAttr | ||||
|       . $readingFnAttributes; | ||||
|     $hash->{NotifyOrderPrefix} = '51-';    # Order Nummer für NotifyFn | ||||
| @@ -909,7 +910,7 @@ sub EventProcessingRoommate($@) { | ||||
|                     or $getModeUp eq 'always' | ||||
|                     or $getModeDown eq 'home' | ||||
|                     or $getModeDown eq 'always' ) | ||||
|            ) | ||||
|            and IsAfterShuttersManualBlocking($shuttersDev) ) | ||||
|         { | ||||
|             Log3( $name, 4, | ||||
| "AutoShuttersControl ($name) - EventProcessingRoommate_1: $shuttersDev und Events $events" | ||||
| @@ -983,6 +984,7 @@ sub EventProcessingRoommate($@) { | ||||
|             ) | ||||
|             and ( $1 eq 'gotosleep' or $1 eq 'asleep' ) | ||||
|             and $ascDev->getAutoShuttersControlEvening eq 'on' | ||||
|             and IsAfterShuttersManualBlocking($shuttersDev) | ||||
|           ) | ||||
|         { | ||||
|             my $position; | ||||
| @@ -1148,7 +1150,8 @@ sub EventProcessingRain($@) { | ||||
|             $shutters->setShuttersDev($shuttersDev); | ||||
|             if (    $val > $triggerMax | ||||
|                 and $shutters->getStatus != | ||||
|                     $closedPos ) | ||||
|                     $closedPos | ||||
|                 and IsAfterShuttersManualBlocking($shuttersDev) ) | ||||
|             { | ||||
|                 $shutters->setLastDrive('rain protection'); | ||||
|                 $shutters->setDriveCmd( | ||||
| @@ -1156,7 +1159,8 @@ sub EventProcessingRain($@) { | ||||
|             } | ||||
|             elsif ( ($val == 0 or $val < $triggerMax) | ||||
|                 and $shutters->getStatus == | ||||
|                     $closedPos ) | ||||
|                     $closedPos | ||||
|                 and IsAfterShuttersManualBlocking($shuttersDev) ) | ||||
|             { | ||||
|                 $shutters->setLastDrive('rain un-protection'); | ||||
|                 $shutters->setDriveCmd( $shutters->getLastPos ); | ||||
| @@ -1244,6 +1248,7 @@ sub EventProcessingBrightness($@) { | ||||
|             ) | ||||
|             and $1 > $brightnessMaxVal | ||||
|             and $shutters->getUp eq 'brightness' | ||||
|             and not $shutters->getSunrise | ||||
|           ) | ||||
|         { | ||||
|             Log3( $name, 4, | ||||
| @@ -1274,6 +1279,8 @@ sub EventProcessingBrightness($@) { | ||||
|                         and CheckIfShuttersWindowRecOpen($shuttersDev) == 0 ) | ||||
|                   ) | ||||
|                 { | ||||
|                     $shutters->setSunrise(1); | ||||
|                     $shutters->setSunset(0); | ||||
|                     ShuttersCommandSet( $hash, $shuttersDev, | ||||
|                         $shutters->getOpenPos ); | ||||
|                 } | ||||
| @@ -1292,6 +1299,7 @@ sub EventProcessingBrightness($@) { | ||||
|             ) | ||||
|             and $1 < $brightnessMinVal | ||||
|             and $shutters->getDown eq 'brightness' | ||||
|             and not $shutters->getSunset | ||||
|             and IsAfterShuttersManualBlocking($shuttersDev) | ||||
|           ) | ||||
|         { | ||||
| @@ -1325,6 +1333,8 @@ sub EventProcessingBrightness($@) { | ||||
|                 or $shutters->getModeDown eq 'always' | ||||
|               ) | ||||
|             { | ||||
|                 $shutters->setSunrise(0); | ||||
|                 $shutters->setSunset(1); | ||||
|                 ShuttersCommandSet( $hash, $shuttersDev, $posValue ); | ||||
|             } | ||||
|             else { | ||||
| @@ -1458,7 +1468,8 @@ sub ShadingProcessing($@) { | ||||
|         or $outTemp == -100 | ||||
|         or ( int( gettimeofday() ) - $shutters->getShadingTimestamp ) < | ||||
|         ( $shutters->getShadingWaitingPeriod / 2 ) | ||||
|         or not IsAfterShuttersTimeBlocking( $hash, $shuttersDev ) ); | ||||
|         or not IsAfterShuttersTimeBlocking( $hash, $shuttersDev ) | ||||
|         or not IsAfterShuttersManualBlocking($shuttersDev) ); | ||||
|  | ||||
|     Log3( $name, 4, | ||||
|             "AutoShuttersControl ($name) - Shading Processing, Rollladen: " | ||||
| @@ -1563,7 +1574,8 @@ sub EventProcessingPartyMode($) { | ||||
|     foreach my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { | ||||
|         $shutters->setShuttersDev($shuttersDev); | ||||
|         if ( not IsDay( $hash, $shuttersDev ) | ||||
|             and $shutters->getModeDown ne 'off' ) | ||||
|             and $shutters->getModeDown ne 'off' | ||||
|             and IsAfterShuttersManualBlocking($shuttersDev) ) | ||||
|         { | ||||
|             if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2 | ||||
|                 and $shutters->getSubTyp eq 'threestate' ) | ||||
| @@ -1592,7 +1604,8 @@ sub EventProcessingPartyMode($) { | ||||
|                 ); | ||||
|             } | ||||
|         } | ||||
|         elsif ( IsDay( $hash, $shuttersDev ) ) { | ||||
|         elsif ( IsDay( $hash, $shuttersDev ) | ||||
|             and IsAfterShuttersManualBlocking($shuttersDev) ) { | ||||
|             $shutters->setLastDrive('drive after party mode'); | ||||
|             ShuttersCommandSet( $hash, $shuttersDev, $shutters->getDelayCmd ); | ||||
|         } | ||||
| @@ -1893,6 +1906,7 @@ sub SunSetShuttersAfterTimerFn($) { | ||||
|                 : 'night close' | ||||
|             ) | ||||
|         ); | ||||
|         $shutters->setSunset(1); | ||||
|         ShuttersCommandSet( | ||||
|             $hash, | ||||
|             $shuttersDev, | ||||
| @@ -1940,6 +1954,7 @@ sub SunRiseShuttersAfterTimerFn($) { | ||||
|           ) | ||||
|         { | ||||
|             $shutters->setLastDrive('day open'); | ||||
|             $shutters->setSunrise(1); | ||||
|             ShuttersCommandSet( $hash, $shuttersDev, $shutters->getOpenPos ); | ||||
|         } | ||||
|     } | ||||
| @@ -2181,10 +2196,10 @@ sub IsDay($$) { | ||||
|           ShuttersSunset( $hash, $shuttersDev, 'unix' ) ? 1 : 0 ); | ||||
|     my $respIsDay = $isday; | ||||
|  | ||||
|     $respIsDay = ( ($shutters->getBrightness > $shutters->getBrightnessMinVal and $isday) ? 1 : 0 ) | ||||
|     $respIsDay = ( (($shutters->getBrightness > $shutters->getBrightnessMinVal and $isday) or $shutters->getSunset) ? 1 : 0 ) | ||||
|         if ( $shutters->getDown eq 'brightness' ); | ||||
|  | ||||
|     $respIsDay = ( (($shutters->getBrightness > $shutters->getBrightnessMaxVal and not $isday) or $respIsDay) ? 1 : 0 ) | ||||
|     $respIsDay = ( (($shutters->getBrightness > $shutters->getBrightnessMaxVal and not $isday) or $respIsDay or $shutters->getSunrise) ? 1 : 0 ) | ||||
|         if ( $shutters->getUp eq 'brightness' ); | ||||
|  | ||||
|     return $respIsDay; | ||||
| @@ -2293,6 +2308,7 @@ sub ShuttersSunrise($$$) { | ||||
|                             ) | ||||
|                         ) + 1 | ||||
|                     ); | ||||
|                     $shuttersSunriseUnixtime += 86400 if ($shutters->getSunrise); | ||||
|                 } | ||||
|             } | ||||
|             else { | ||||
| @@ -2429,7 +2445,20 @@ sub IsAfterShuttersManualBlocking($) { | ||||
|     my $shuttersDev = shift; | ||||
|     $shutters->setShuttersDev($shuttersDev); | ||||
|  | ||||
|     if ( ( int( gettimeofday() ) - $shutters->getLastManPosTimestamp ) < | ||||
|     if (  $ascDev->getblockAscDrivesAfterManual | ||||
|       and $shutters->getStatus != $shutters->getOpenPos | ||||
|       and $shutters->getStatus != $shutters->getClosedPos | ||||
|       and $shutters->getStatus != $shutters->getWindPos | ||||
|       and $shutters->getStatus != $shutters->getShadingPos | ||||
|       and $shutters->getStatus != $shutters->getComfortOpenPos | ||||
|       and $shutters->getStatus != $shutters->getVentilatePos | ||||
|       and $shutters->getStatus != $shutters->getAntiFreezePos | ||||
|       and $shutters->getLastDrive eq 'manual' | ||||
|       ) | ||||
|     { | ||||
|         return 0; | ||||
|     } | ||||
|     elsif ( ( int( gettimeofday() ) - $shutters->getLastManPosTimestamp ) < | ||||
|         $shutters->getBlockingTimeAfterManual ) | ||||
|     { | ||||
|         return 0; | ||||
| @@ -2734,6 +2763,13 @@ sub setSunsetUnixTime { | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| sub setSunset { | ||||
|     my ( $self, $value ) = @_; | ||||
|  | ||||
|     $self->{ $self->{shuttersDev} }{sunset} = $value; | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| sub setSunriseUnixTime { | ||||
|     my ( $self, $unixtime ) = @_; | ||||
|  | ||||
| @@ -2741,6 +2777,13 @@ sub setSunriseUnixTime { | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| sub setSunrise { | ||||
|     my ( $self, $value ) = @_; | ||||
|  | ||||
|     $self->{ $self->{shuttersDev} }{sunrise} = $value; | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| sub setDelayCmd { | ||||
|     my ( $self, $posValue ) = @_; | ||||
|  | ||||
| @@ -2922,12 +2965,24 @@ sub getSunsetUnixTime { | ||||
|     return $self->{ $self->{shuttersDev} }{sunsettime}; | ||||
| } | ||||
|  | ||||
| sub getSunset { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return ( defined($self->{ $self->{shuttersDev} }{sunset}) ? $self->{ $self->{shuttersDev} }{sunset} : 0 ); | ||||
| } | ||||
|  | ||||
| sub getSunriseUnixTime { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return $self->{ $self->{shuttersDev} }{sunrisetime}; | ||||
| } | ||||
|  | ||||
| sub getSunrise { | ||||
|     my $self = shift; | ||||
|  | ||||
|     return ( defined($self->{ $self->{shuttersDev} }{sunrise}) ? $self->{ $self->{shuttersDev} }{sunrise} : 0 ); | ||||
| } | ||||
|  | ||||
| sub getRoommatesStatus { | ||||
|     my $self = shift; | ||||
|     my $loop = 0; | ||||
| @@ -4009,6 +4064,13 @@ sub getWindSensorReading { | ||||
|     return ( defined($self->{ASC_windSensor}->{reading}) ? $self->{ASC_windSensor}->{reading} : 'wind' ); | ||||
| } | ||||
|  | ||||
| sub getblockAscDrivesAfterManual { | ||||
|     my $self    = shift; | ||||
|     my $name    = $self->{name}; | ||||
|      | ||||
|     return AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 ); | ||||
| } | ||||
|  | ||||
| 1; | ||||
|  | ||||
| =pod | ||||
|   | ||||
		Reference in New Issue
	
	Block a user