check blockingTimeAfterManual

This commit is contained in:
Marko Oldenburg
2019-01-01 18:54:08 +01:00
parent 460885c30a
commit d39d9725cd

View File

@@ -41,7 +41,7 @@ package main;
use strict; use strict;
use warnings; use warnings;
my $version = '0.2.2'; my $version = '0.2.3';
sub AutoShuttersControl_Initialize($) { sub AutoShuttersControl_Initialize($) {
my ($hash) = @_; my ($hash) = @_;
@@ -55,9 +55,7 @@ sub AutoShuttersControl_Initialize($) {
$hash->{UndefFn} = 'AutoShuttersControl::Undef'; $hash->{UndefFn} = 'AutoShuttersControl::Undef';
$hash->{AttrFn} = 'AutoShuttersControl::Attr'; $hash->{AttrFn} = 'AutoShuttersControl::Attr';
$hash->{AttrList} = $hash->{AttrList} =
'disable:0,1 ' 'ASC_guestPresence:on,off '
. 'disabledForIntervals '
. 'ASC_guestPresence:on,off '
. 'ASC_temperatureSensor ' . 'ASC_temperatureSensor '
. 'ASC_temperatureReading ' . 'ASC_temperatureReading '
. 'ASC_brightnessMinVal ' . 'ASC_brightnessMinVal '
@@ -76,8 +74,6 @@ sub AutoShuttersControl_Initialize($) {
. 'ASC_autoAstroModeEvening:REAL,CIVIL,NAUTIC,ASTRONOMIC,HORIZON ' . 'ASC_autoAstroModeEvening:REAL,CIVIL,NAUTIC,ASTRONOMIC,HORIZON '
. 'ASC_autoAstroModeEveningHorizon:-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9 ' . 'ASC_autoAstroModeEveningHorizon:-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9 '
. 'ASC_freezeTemp:-5,-4,-3,-2,-1,0,1,2,3,4,5 ' . 'ASC_freezeTemp:-5,-4,-3,-2,-1,0,1,2,3,4,5 '
. 'ASC_timeUpHolidayDevice '
. 'ASC_timeUpHolidayReading '
. 'ASC_shuttersDriveOffset ' . 'ASC_shuttersDriveOffset '
. 'ASC_twilightDevice ' . 'ASC_twilightDevice '
. 'ASC_expert:1 ' . 'ASC_expert:1 '
@@ -298,37 +294,13 @@ sub Attr(@) {
my ( $cmd, $name, $attrName, $attrVal ) = @_; my ( $cmd, $name, $attrName, $attrVal ) = @_;
my $hash = $defs{$name}; my $hash = $defs{$name};
if ( $attrName eq 'disable' ) {
if ( $cmd eq 'set' and $attrVal eq '1' ) {
Log3( $name, 3, "AutoShuttersControl ($name) - disabled" );
}
elsif ( $cmd eq 'del' ) {
Log3( $name, 3, "AutoShuttersControl ($name) - enabled" );
}
}
elsif ( $attrName eq 'disabledForIntervals' ) {
if ( $cmd eq 'set' ) {
return
'check disabledForIntervals Syntax HH:MM-HH:MM or \'HH:MM-HH:MM HH:MM-HH:MM ...\''
unless ( $attrVal =~ /^((\d{2}:\d{2})-(\d{2}:\d{2})\s?)+$/ );
Log3( $name, 3,
"AutoShuttersControl ($name) - disabledForIntervals" );
#readingsSingleUpdate ($hash,"state","disabled",1);
}
elsif ( $cmd eq 'del' ) {
Log3( $name, 3, "AutoShuttersControl ($name) - enabled" );
#readingsSingleUpdate ($hash,"state","active",1);
}
}
return undef; return undef;
} }
sub Notify($$) { sub Notify($$) {
my ( $hash, $dev ) = @_; my ( $hash, $dev ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
return if ( IsDisabled($name) );
my $devname = $dev->{NAME}; my $devname = $dev->{NAME};
my $devtype = $dev->{TYPE}; my $devtype = $dev->{TYPE};
@@ -1466,7 +1438,9 @@ sub EventProcessingPartyMode($) {
foreach my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { foreach my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
if ( not IsDay( $hash, $shuttersDev ) ) { if ( not IsDay( $hash, $shuttersDev )
and $shutters->getModeDown ne 'off' )
{
if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2 if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2
and $shutters->getSubTyp eq 'threestate' ) and $shutters->getSubTyp eq 'threestate' )
{ {
@@ -1494,6 +1468,14 @@ sub EventProcessingPartyMode($) {
); );
} }
} }
elsif ( IsDay( $hash, $shuttersDev ) ) {
$shutters->setLastDrive('drive after party mode');
ShuttersCommandSet(
$hash,
$shuttersDev,
$shutters->getDelayCmd
);
}
} }
} }
@@ -1528,7 +1510,6 @@ sub ShuttersCommandSet($$$) {
); );
if ( if (
(
$posValue != $shutters->getShadingPos $posValue != $shutters->getShadingPos
and ( $shutters->getPartyMode eq 'on' and ( $shutters->getPartyMode eq 'on'
and $ascDev->getPartyMode eq 'on' ) and $ascDev->getPartyMode eq 'on' )
@@ -1544,7 +1525,6 @@ sub ShuttersCommandSet($$$) {
and not $queryShuttersPosValue and not $queryShuttersPosValue
) )
) )
)
{ {
$shutters->setDelayCmd($posValue); $shutters->setDelayCmd($posValue);
$ascDev->setDelayCmdReading; $ascDev->setDelayCmdReading;
@@ -2236,6 +2216,21 @@ sub IsAfterShuttersTimeBlocking($$) {
else { return 1 } else { return 1 }
} }
sub IsAfterShuttersManualBlocking($) {
my $shuttersDev = shift;
$shutters->setShuttersDev($shuttersDev);
if (
( int( gettimeofday() ) - $shutters->getLastManPosTimestamp ) <
$shutters->getBlockingTimeAfterManual
)
{
return 0;
}
else { return 1 }
}
sub ShuttersSunset($$$) { sub ShuttersSunset($$$) {
my ( $hash, $shuttersDev, $tm ) = my ( $hash, $shuttersDev, $tm ) =
@_; # Tm steht für Timemode und bedeutet Realzeit oder Unixzeit @_; # Tm steht für Timemode und bedeutet Realzeit oder Unixzeit
@@ -2525,7 +2520,7 @@ sub setDriveCmd {
$offSet = $shutters->getOffset if ( $shutters->getOffset > 0 ); $offSet = $shutters->getOffset if ( $shutters->getOffset > 0 );
$offSet = $ascDev->getShuttersOffset if ( $shutters->getOffset == -1 ); $offSet = $ascDev->getShuttersOffset if ( $shutters->getOffset == -1 );
InternalTimer( gettimeofday() + int( rand($offSet) ), InternalTimer( gettimeofday() + int( rand($offSet) + 3 ),
'AutoShuttersControl::SetCmdFn', \%h ) 'AutoShuttersControl::SetCmdFn', \%h )
if ( $offSet > 0 and not $shutters->getNoOffset ); if ( $offSet > 0 and not $shutters->getNoOffset );
AutoShuttersControl::SetCmdFn( \%h ) AutoShuttersControl::SetCmdFn( \%h )
@@ -3722,8 +3717,6 @@ sub getRainSensorShuttersClosedPos {
<li>ASC_autoShuttersControlMorning - on/off if the shutters shall be controlled by time in the morning.</li> <li>ASC_autoShuttersControlMorning - on/off if the shutters shall be controlled by time in the morning.</li>
<li>ASC_temperatureReading - Reading for outside temperature.</li> <li>ASC_temperatureReading - Reading for outside temperature.</li>
<li>ASC_temperatureSensor - Device for outside temperature.</li> <li>ASC_temperatureSensor - Device for outside temperature.</li>
<li>ASC_timeUpHolidayDevice - Device for holiday detection or similar.</li>
<li>ASC_timeUpHolidayReading - corrsponding reading for ASC_timeUpHolidayDevice to detect holiday or similar / has to content 0 or 1.</li>
<li>ASC_residentsDevice - devicename of the residents device</li> <li>ASC_residentsDevice - devicename of the residents device</li>
<li>ASC_residentsDeviceReading - state of the residents device</li> <li>ASC_residentsDeviceReading - state of the residents device</li>
<li>ASC_brightnessMinVal - minimum brightness value to activate check of conditions</li> <li>ASC_brightnessMinVal - minimum brightness value to activate check of conditions</li>
@@ -3862,8 +3855,6 @@ sub getRainSensorShuttersClosedPos {
<li>ASC_autoShuttersControlMorning - on/off - ob Morgens die Rolll&auml;den automatisch nach Zeit gesteuert werden sollen</li> <li>ASC_autoShuttersControlMorning - on/off - ob Morgens die Rolll&auml;den automatisch nach Zeit gesteuert werden sollen</li>
<li>ASC_temperatureReading - Reading f&uuml;r die Aussentemperatur</li> <li>ASC_temperatureReading - Reading f&uuml;r die Aussentemperatur</li>
<li>ASC_temperatureSensor - Device f&uuml;r die Aussentemperatur</li> <li>ASC_temperatureSensor - Device f&uuml;r die Aussentemperatur</li>
<li>ASC_timeUpHolidayDevice - Device zur Urlaubserkennung oder Sonstiges / muss 0 oder 1 im Reading beinhalten.</li>
<li>ASC_timeUpHolidayReading - passendes Reading zum ASC_timeUpHolidayDevice zur Urlaubserkennung oder Sonstiges / muss 0 oder 1 beinhalten.</li>
<li>ASC_residentsDevice - Devicenamen des Residents Device der obersten Ebene</li> <li>ASC_residentsDevice - Devicenamen des Residents Device der obersten Ebene</li>
<li>ASC_residentsDeviceReading - Status Reading vom Residents Device der obersten Ebene</li> <li>ASC_residentsDeviceReading - Status Reading vom Residents Device der obersten Ebene</li>
<li>ASC_brightnessMinVal - minimaler Lichtwert, bei dem Schaltbedingungen gepr&uuml;ft werden sollen</li> <li>ASC_brightnessMinVal - minimaler Lichtwert, bei dem Schaltbedingungen gepr&uuml;ft werden sollen</li>