From 72633c9fb17f91c2bc19eeb085086c23860dcf14 Mon Sep 17 00:00:00 2001 From: Marko Oldenburg Date: Thu, 13 Jun 2019 15:41:03 +0200 Subject: [PATCH] add ShadingLastStatus to compare shading in and shading out --- 73_AutoShuttersControl.pm | 46 ++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/73_AutoShuttersControl.pm b/73_AutoShuttersControl.pm index bd4b731..f1d58b6 100644 --- a/73_AutoShuttersControl.pm +++ b/73_AutoShuttersControl.pm @@ -48,7 +48,7 @@ use strict; use warnings; use FHEM::Meta; -my $version = '0.6.17'; +my $version = '0.6.17.3'; sub AutoShuttersControl_Initialize($) { my ($hash) = @_; @@ -718,6 +718,9 @@ sub ShuttersDeviceScan($) { $shutters->setShadingStatus( ( $shutters->getStatus != $shutters->getShadingPos ? 'out' : 'in' ) ); + $shutters->setShadingLastStatus( + ( $shutters->getStatus != $shutters->getShadingPos ? 'in' : 'out' ) + ); readingsSingleUpdate( $defs{$_}, 'ASC_Enable', 'on', 0 ) if ( ReadingsVal( $_, 'ASC_Enable', 'none' ) eq 'none' ); } @@ -1823,6 +1826,7 @@ sub EventProcessingShadingBrightness($@) { and $shutters->getWindProtectionStatus eq 'unprotected' ) { $shutters->setShadingStatus('out'); + $shutters->setShadingLastStatus('in'); ShadingProcessingDriveCommand( $hash, $shuttersDev ); } } @@ -1903,9 +1907,12 @@ sub EventProcessingTwilightDevice($@) { ); } - $shutters->setShadingStatus('out') - if ( not IsDay($shuttersDev) - and $shutters->getShadingStatus ne 'out' ); + if ( not IsDay($shuttersDev) + and $shutters->getShadingStatus ne 'out' ) + { + $shutters->setShadingStatus('out') + $shutters->setShadingLastStatus('in') + } } } } @@ -1920,6 +1927,11 @@ sub ShadingProcessing($@) { ) = @_; my $name = $hash->{NAME}; $shutters->setShuttersDev($shuttersDev); + $shutters->setShadingLastStatus($shutters->getShadingStatus) + if ( $shutters->getShadingLastStatus ne $shutters->getShadingStatus + and ($shutters->getShadingStatus eq 'in' + or $shutters->getShadingStatus eq 'out') + ); ASC_Debug( 'ShadingProcessing: ' @@ -2088,8 +2100,11 @@ sub ShadingProcessing($@) { } ShadingProcessingDriveCommand( $hash, $shuttersDev ) - if ( $shutters->getShadingStatus eq 'out' - or $shutters->getShadingStatus eq 'in' ); + if ( ($shutters->getShadingStatus eq 'out' + and $shutters->getShadingLastStatus eq 'in') + or ($shutters->getShadingStatus eq 'in' + and $shutters->getShadingLastStatus eq 'out') + ); } sub ShadingProcessingDriveCommand($$) { @@ -4003,6 +4018,17 @@ sub setShadingStatus { return 0; } +sub setShadingLastStatus { + my ( $self, $value ) = @_; + ### Werte für value = in, out + + $self->{ $self->{shuttersDev} }{ShadingLastStatus}{VAL} = $value + if ( defined($value) ); + $self->{ $self->{shuttersDev} }{ShadingLastStatus}{TIME} = int( gettimeofday() ) + if ( defined( $self->{ $self->{shuttersDev} }{ShadingLastStatus} ) ); + return 0; +} + sub setWindProtectionStatus { # Werte protected, unprotected my ( $self, $value ) = @_; @@ -4027,6 +4053,14 @@ sub getShadingStatus { # Werte für value = in, out, in reserved, out reserved and defined( $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} ) ); } +sub getShadingLastStatus { # Werte für value = in, out + my $self = shift; + + return $self->{ $self->{shuttersDev} }{ShadingLastStatus}{VAL} + if ( defined( $self->{ $self->{shuttersDev} }{ShadingLastStatus} ) + and defined( $self->{ $self->{shuttersDev} }{ShadingLastStatus}{VAL} ) ); +} + sub getIfInShading { my $self = shift;