From 73989fdb8cc6b86a1c2c965d9cd2713aee4e4d7d Mon Sep 17 00:00:00 2001 From: LeonGaultier Date: Tue, 18 May 2021 08:47:42 +0000 Subject: [PATCH] 73_AutoShuttersControl: add abort rain unprotection waiting time git-svn-id: https://svn.fhem.de/fhem/trunk@24470 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/73_AutoShuttersControl.pm | 2 +- .../Automation/ShuttersControl/Dev/Attr.pm | 2 +- .../ShuttersControl/Rainprotection.pm | 52 +++++++++---- .../Automation/ShuttersControl/Shutters.pm | 74 ++++++++++--------- 4 files changed, 79 insertions(+), 51 deletions(-) diff --git a/fhem/FHEM/73_AutoShuttersControl.pm b/fhem/FHEM/73_AutoShuttersControl.pm index 6b9f8a627..2cd211511 100644 --- a/fhem/FHEM/73_AutoShuttersControl.pm +++ b/fhem/FHEM/73_AutoShuttersControl.pm @@ -1265,7 +1265,7 @@ sub Initialize { ], "release_status": "stable", "license": "GPL_2", - "version": "v0.10.13", + "version": "v0.10.14", "author": [ "Marko Oldenburg " ], diff --git a/fhem/lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm b/fhem/lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm index 8aa1f0c39..a195ea25f 100644 --- a/fhem/lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm +++ b/fhem/lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm @@ -282,7 +282,7 @@ sub _getRainSensor { ? $pos : $FHEM::Automation::ShuttersControl::shutters->getClosedPos ); $self->{ASC_rainSensor}->{waitingTime} = - ( $pos ne 'none' ? $wait : 900 ); + ( $wait ne 'none' ? $wait : 0 ); return $self->{ASC_rainSensor}->{device}; } diff --git a/fhem/lib/FHEM/Automation/ShuttersControl/Rainprotection.pm b/fhem/lib/FHEM/Automation/ShuttersControl/Rainprotection.pm index 2b94eb6bb..235554d82 100644 --- a/fhem/lib/FHEM/Automation/ShuttersControl/Rainprotection.pm +++ b/fhem/lib/FHEM/Automation/ShuttersControl/Rainprotection.pm @@ -79,24 +79,33 @@ sub RainProcessing { && $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') + ) { _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, ); + $FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj(\%funcHash); ::InternalTimer( ::gettimeofday() + $FHEM::Automation::ShuttersControl::ascDev->getRainWaitingTime , \&_RainUnprotected , \%funcHash ); + + $FHEM::Automation::ShuttersControl::shutters + ->setRainProtectionStatus('unprotected'); } } @@ -105,6 +114,11 @@ 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'); + $FHEM::Automation::ShuttersControl::shutters->setLastDrive( 'rain protected'); $FHEM::Automation::ShuttersControl::shutters->setDriveCmd( @@ -123,20 +137,26 @@ sub _RainUnprotected { $FHEM::Automation::ShuttersControl::shutters->setLastDrive( 'rain un-protected'); - $FHEM::Automation::ShuttersControl::shutters->setDriveCmd( - ( - $FHEM::Automation::ShuttersControl::shutters->getIsDay - ? $FHEM::Automation::ShuttersControl::shutters->getLastPos - : ( - $FHEM::Automation::ShuttersControl::shutters - ->getPrivacyDownStatus == 2 - ? $FHEM::Automation::ShuttersControl::shutters - ->getPrivacyDownPos - : $FHEM::Automation::ShuttersControl::shutters - ->getClosedPos - ) + + 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->getLastPos + : ( + $FHEM::Automation::ShuttersControl::shutters + ->getPrivacyDownStatus == 2 + ? $FHEM::Automation::ShuttersControl::shutters + ->getPrivacyDownPos + : $FHEM::Automation::ShuttersControl::shutters + ->getClosedPos ) - ); + ) + ); $FHEM::Automation::ShuttersControl::shutters ->setRainProtectionStatus('unprotected'); diff --git a/fhem/lib/FHEM/Automation/ShuttersControl/Shutters.pm b/fhem/lib/FHEM/Automation/ShuttersControl/Shutters.pm index a4f242086..6d7ec4875 100644 --- a/fhem/lib/FHEM/Automation/ShuttersControl/Shutters.pm +++ b/fhem/lib/FHEM/Automation/ShuttersControl/Shutters.pm @@ -57,22 +57,6 @@ use strict; use warnings; use utf8; -use GPUtils qw(GP_Import); - -## Import der FHEM Funktionen -BEGIN { - GP_Import( - qw( - defs - ReadingsVal - readingsSingleUpdate - gettimeofday - InternalTimer - CommandSet - Log3) - ); -} - sub new { my $class = shift; my $self = { @@ -114,15 +98,15 @@ sub setHardLockOut { && $FHEM::Automation::ShuttersControl::shutters->getLockOutCmd ne 'none' ) { - CommandSet( undef, $self->{shuttersDev} . ' inhibit ' . $cmd ) + ::CommandSet( undef, $self->{shuttersDev} . ' inhibit ' . $cmd ) if ( $FHEM::Automation::ShuttersControl::shutters->getLockOutCmd eq 'inhibit' ); - CommandSet( undef, + ::CommandSet( undef, $self->{shuttersDev} . ' ' . ( $cmd eq 'on' ? 'blocked' : 'unblocked' ) ) if ( $FHEM::Automation::ShuttersControl::shutters->getLockOutCmd eq 'blocked' ); - CommandSet( undef, + ::CommandSet( undef, $self->{shuttersDev} . ' ' . ( $cmd eq 'on' ? 'protectionOn' : 'protectionOff' ) ) if ( $FHEM::Automation::ShuttersControl::shutters->getLockOutCmd eq @@ -245,8 +229,8 @@ sub setDriveCmd { && $FHEM::Automation::ShuttersControl::ascDev->getSelfDefense eq 'on' ) { - InternalTimer( - gettimeofday() + + ::InternalTimer( + ::gettimeofday() + $FHEM::Automation::ShuttersControl::shutters ->getSelfDefenseAbsentDelay, \&FHEM::Automation::ShuttersControl::_SetCmdFn, \%h @@ -257,8 +241,8 @@ sub setDriveCmd { elsif ( $offSetStart > 0 && !$FHEM::Automation::ShuttersControl::shutters->getNoDelay ) { - InternalTimer( - gettimeofday() + int( + ::InternalTimer( + ::gettimeofday() + int( rand($offSet) + $FHEM::Automation::ShuttersControl::shutters ->getDelayStart @@ -354,14 +338,14 @@ sub setPosSetCmd { sub setLastDriveReading { my $self = shift; - my $shuttersDevHash = $defs{ $self->{shuttersDev} }; + my $shuttersDevHash = $::defs{ $self->{shuttersDev} }; my %h = ( devHash => $shuttersDevHash, lastDrive => $FHEM::Automation::ShuttersControl::shutters->getLastDrive, ); - InternalTimer( gettimeofday() + 0.1, + ::InternalTimer( ::gettimeofday() + 0.1, \&FHEM::Automation::ShuttersControl::_setShuttersLastDriveDelayed, \%h ); return; @@ -375,7 +359,7 @@ sub setLastPos { $self->{ $self->{shuttersDev} }{lastPos}{VAL} = $position if ( defined($position) ); - $self->{ $self->{shuttersDev} }{lastPos}{TIME} = int( gettimeofday() ) + $self->{ $self->{shuttersDev} }{lastPos}{TIME} = int( ::gettimeofday() ) if ( defined( $self->{ $self->{shuttersDev} }{lastPos} ) ); return; } @@ -386,11 +370,11 @@ sub setLastManPos { $self->{ $self->{shuttersDev} }{lastManPos}{VAL} = $position if ( defined($position) ); - $self->{ $self->{shuttersDev} }{lastManPos}{TIME} = int( gettimeofday() ) + $self->{ $self->{shuttersDev} }{lastManPos}{TIME} = int( ::gettimeofday() ) if ( defined( $self->{ $self->{shuttersDev} }{lastManPos} ) && defined( $self->{ $self->{shuttersDev} }{lastManPos}{TIME} ) ); $self->{ $self->{shuttersDev} }{lastManPos}{TIME} = - int( gettimeofday() ) - 86400 + int( ::gettimeofday() ) - 86400 if ( defined( $self->{ $self->{shuttersDev} }{lastManPos} ) && !defined( $self->{ $self->{shuttersDev} }{lastManPos}{TIME} ) ); return; @@ -472,6 +456,15 @@ sub setRainProtectionStatus { # Werte protected, unprotected return; } +sub setRainUnprotectionDelayObj { + my $self = shift; + my $value = shift; + + $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} = $value + if ( defined($value) ); + return; +} + sub setExternalTriggerStatus { my $self = shift; my $value = shift; @@ -666,7 +659,7 @@ sub getLastDrive { my $self = shift; $self->{ $self->{shuttersDev} }{lastDrive} = - ReadingsVal( $self->{shuttersDev}, 'ASC_ShuttersLastDrive', 'none' ) + ::ReadingsVal( $self->{shuttersDev}, 'ASC_ShuttersLastDrive', 'none' ) if ( !defined( $self->{ $self->{shuttersDev} }{lastDrive} ) ); return $self->{ $self->{shuttersDev} }{lastDrive}; @@ -756,6 +749,21 @@ sub getRainProtectionStatus { # Werte protected, unprotected ); } +sub getRainUnprotectionDelayObj { + my $self = shift; + + return ( + ( + defined( $self->{ $self->{shuttersDev} }->{RainProtection} ) + && defined( + $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} + ) + ) + ? $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} + : 'none' + ); +} + sub getSunsetUnixTime { my $self = shift; @@ -857,7 +865,7 @@ sub getRoommatesLastStatus { sub getOutTemp { my $self = shift; - return ReadingsVal( + return ::ReadingsVal( $FHEM::Automation::ShuttersControl::shutters->_getTempSensor, $FHEM::Automation::ShuttersControl::shutters->getTempSensorReading, -100 ); @@ -866,7 +874,7 @@ sub getOutTemp { sub getIdleDetection { my $self = shift; - return ReadingsVal( + return ::ReadingsVal( $self->{shuttersDev}, $FHEM::Automation::ShuttersControl::shutters->_getIdleDetectionReading, 'none' @@ -891,7 +899,7 @@ 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; @@ -909,7 +917,7 @@ sub setShadingLastStatus { $self->{ $self->{shuttersDev} }{ShadingLastStatus}{VAL} = $value if ( defined($value) ); $self->{ $self->{shuttersDev} }{ShadingLastStatus}{TIME} = - int( gettimeofday() ) + int( ::gettimeofday() ) if ( defined( $self->{ $self->{shuttersDev} }{ShadingLastStatus} ) ); $self->{ $self->{shuttersDev} }{ShadingManualDriveStatus}{VAL} = 0 if ( $value eq 'out' );