diff --git a/controls_AutoShuttersControl.txt b/controls_AutoShuttersControl.txt index 16f7a89..7472a3e 100644 --- a/controls_AutoShuttersControl.txt +++ b/controls_AutoShuttersControl.txt @@ -1,16 +1,16 @@ -UPD 2021-05-17_14:25:13 97974 FHEM/73_AutoShuttersControl.pm -UPD 2021-05-17_14:25:13 74350 lib/FHEM/Automation/ShuttersControl.pm +UPD 2021-05-17_14:30:37 97974 FHEM/73_AutoShuttersControl.pm +UPD 2021-05-17_14:34:49 74350 lib/FHEM/Automation/ShuttersControl.pm UPD 2020-06-22_09:41:40 2657 lib/FHEM/Automation/ShuttersControl/Dev.pm UPD 2020-07-26_17:36:29 2496 lib/FHEM/Automation/ShuttersControl/Roommate.pm -UPD 2021-02-26_14:36:10 31487 lib/FHEM/Automation/ShuttersControl/Shutters.pm -UPD 2021-05-10_08:26:03 25329 lib/FHEM/Automation/ShuttersControl/Shading.pm -UPD 2021-05-17_14:26:04 108472 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm +UPD 2021-05-18_08:41:07 31896 lib/FHEM/Automation/ShuttersControl/Shutters.pm +UPD 2021-05-17_14:30:37 25329 lib/FHEM/Automation/ShuttersControl/Shading.pm +UPD 2021-05-17_14:34:49 108472 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm UPD 2021-02-26_14:36:10 40628 lib/FHEM/Automation/ShuttersControl/Helper.pm UPD 2020-06-22_09:41:40 2175 lib/FHEM/Automation/ShuttersControl/Window.pm -UPD 2021-04-27_07:52:31 11742 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm +UPD 2021-05-18_09:00:42 11741 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm UPD 2020-07-03_11:29:10 7251 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm UPD 2021-01-29_10:06:33 52525 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm UPD 2020-06-22_09:41:40 2903 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm UPD 2021-01-29_10:06:33 3980 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm UPD 2020-06-22_09:41:40 2288 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm -UPD 2021-05-17_14:26:04 5159 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm +UPD 2021-05-18_09:57:48 6195 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm diff --git a/lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm b/lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm index 8aa1f0c..a195ea2 100644 --- a/lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm +++ b/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/lib/FHEM/Automation/ShuttersControl/Rainprotection.pm b/lib/FHEM/Automation/ShuttersControl/Rainprotection.pm index 2b94eb6..235554d 100644 --- a/lib/FHEM/Automation/ShuttersControl/Rainprotection.pm +++ b/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/lib/FHEM/Automation/ShuttersControl/Shutters.pm b/lib/FHEM/Automation/ShuttersControl/Shutters.pm index a4f2420..6d7ec48 100644 --- a/lib/FHEM/Automation/ShuttersControl/Shutters.pm +++ b/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' );