2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-01 01:09:47 +00:00

73_AutoShuttersControl: add abort rain unprotection waiting time

git-svn-id: https://svn.fhem.de/fhem/trunk@24470 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
LeonGaultier 2021-05-18 08:47:42 +00:00
parent b2cd54325f
commit 73989fdb8c
4 changed files with 79 additions and 51 deletions

View File

@ -1265,7 +1265,7 @@ sub Initialize {
],
"release_status": "stable",
"license": "GPL_2",
"version": "v0.10.13",
"version": "v0.10.14",
"author": [
"Marko Oldenburg <fhemdevelopment@cooltux.net>"
],

View File

@ -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};
}

View File

@ -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');

View File

@ -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' );