add blockAscDrivesAfterManual for complet blocking ASC drive
This commit is contained in:
@ -42,7 +42,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use FHEM::Meta;
|
use FHEM::Meta;
|
||||||
|
|
||||||
my $version = '0.4.0.11beta47';
|
my $version = '0.4.0.11beta48';
|
||||||
|
|
||||||
sub AutoShuttersControl_Initialize($) {
|
sub AutoShuttersControl_Initialize($) {
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
@ -85,6 +85,7 @@ sub AutoShuttersControl_Initialize($) {
|
|||||||
. 'ASC_twilightDevice '
|
. 'ASC_twilightDevice '
|
||||||
. 'ASC_windSensor '
|
. 'ASC_windSensor '
|
||||||
. 'ASC_expert:1 '
|
. 'ASC_expert:1 '
|
||||||
|
. 'ASC_blockAscDrivesAfterManual:0,1 '
|
||||||
. $oldAttr
|
. $oldAttr
|
||||||
. $readingFnAttributes;
|
. $readingFnAttributes;
|
||||||
$hash->{NotifyOrderPrefix} = '51-'; # Order Nummer für NotifyFn
|
$hash->{NotifyOrderPrefix} = '51-'; # Order Nummer für NotifyFn
|
||||||
@ -909,7 +910,7 @@ sub EventProcessingRoommate($@) {
|
|||||||
or $getModeUp eq 'always'
|
or $getModeUp eq 'always'
|
||||||
or $getModeDown eq 'home'
|
or $getModeDown eq 'home'
|
||||||
or $getModeDown eq 'always' )
|
or $getModeDown eq 'always' )
|
||||||
)
|
and IsAfterShuttersManualBlocking($shuttersDev) )
|
||||||
{
|
{
|
||||||
Log3( $name, 4,
|
Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessingRoommate_1: $shuttersDev und Events $events"
|
"AutoShuttersControl ($name) - EventProcessingRoommate_1: $shuttersDev und Events $events"
|
||||||
@ -983,6 +984,7 @@ sub EventProcessingRoommate($@) {
|
|||||||
)
|
)
|
||||||
and ( $1 eq 'gotosleep' or $1 eq 'asleep' )
|
and ( $1 eq 'gotosleep' or $1 eq 'asleep' )
|
||||||
and $ascDev->getAutoShuttersControlEvening eq 'on'
|
and $ascDev->getAutoShuttersControlEvening eq 'on'
|
||||||
|
and IsAfterShuttersManualBlocking($shuttersDev)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
my $position;
|
my $position;
|
||||||
@ -1148,7 +1150,8 @@ sub EventProcessingRain($@) {
|
|||||||
$shutters->setShuttersDev($shuttersDev);
|
$shutters->setShuttersDev($shuttersDev);
|
||||||
if ( $val > $triggerMax
|
if ( $val > $triggerMax
|
||||||
and $shutters->getStatus !=
|
and $shutters->getStatus !=
|
||||||
$closedPos )
|
$closedPos
|
||||||
|
and IsAfterShuttersManualBlocking($shuttersDev) )
|
||||||
{
|
{
|
||||||
$shutters->setLastDrive('rain protection');
|
$shutters->setLastDrive('rain protection');
|
||||||
$shutters->setDriveCmd(
|
$shutters->setDriveCmd(
|
||||||
@ -1156,7 +1159,8 @@ sub EventProcessingRain($@) {
|
|||||||
}
|
}
|
||||||
elsif ( ($val == 0 or $val < $triggerMax)
|
elsif ( ($val == 0 or $val < $triggerMax)
|
||||||
and $shutters->getStatus ==
|
and $shutters->getStatus ==
|
||||||
$closedPos )
|
$closedPos
|
||||||
|
and IsAfterShuttersManualBlocking($shuttersDev) )
|
||||||
{
|
{
|
||||||
$shutters->setLastDrive('rain un-protection');
|
$shutters->setLastDrive('rain un-protection');
|
||||||
$shutters->setDriveCmd( $shutters->getLastPos );
|
$shutters->setDriveCmd( $shutters->getLastPos );
|
||||||
@ -1244,6 +1248,7 @@ sub EventProcessingBrightness($@) {
|
|||||||
)
|
)
|
||||||
and $1 > $brightnessMaxVal
|
and $1 > $brightnessMaxVal
|
||||||
and $shutters->getUp eq 'brightness'
|
and $shutters->getUp eq 'brightness'
|
||||||
|
and not $shutters->getSunrise
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Log3( $name, 4,
|
Log3( $name, 4,
|
||||||
@ -1274,6 +1279,8 @@ sub EventProcessingBrightness($@) {
|
|||||||
and CheckIfShuttersWindowRecOpen($shuttersDev) == 0 )
|
and CheckIfShuttersWindowRecOpen($shuttersDev) == 0 )
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
$shutters->setSunrise(1);
|
||||||
|
$shutters->setSunset(0);
|
||||||
ShuttersCommandSet( $hash, $shuttersDev,
|
ShuttersCommandSet( $hash, $shuttersDev,
|
||||||
$shutters->getOpenPos );
|
$shutters->getOpenPos );
|
||||||
}
|
}
|
||||||
@ -1292,6 +1299,7 @@ sub EventProcessingBrightness($@) {
|
|||||||
)
|
)
|
||||||
and $1 < $brightnessMinVal
|
and $1 < $brightnessMinVal
|
||||||
and $shutters->getDown eq 'brightness'
|
and $shutters->getDown eq 'brightness'
|
||||||
|
and not $shutters->getSunset
|
||||||
and IsAfterShuttersManualBlocking($shuttersDev)
|
and IsAfterShuttersManualBlocking($shuttersDev)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -1325,6 +1333,8 @@ sub EventProcessingBrightness($@) {
|
|||||||
or $shutters->getModeDown eq 'always'
|
or $shutters->getModeDown eq 'always'
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
$shutters->setSunrise(0);
|
||||||
|
$shutters->setSunset(1);
|
||||||
ShuttersCommandSet( $hash, $shuttersDev, $posValue );
|
ShuttersCommandSet( $hash, $shuttersDev, $posValue );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -1458,7 +1468,8 @@ sub ShadingProcessing($@) {
|
|||||||
or $outTemp == -100
|
or $outTemp == -100
|
||||||
or ( int( gettimeofday() ) - $shutters->getShadingTimestamp ) <
|
or ( int( gettimeofday() ) - $shutters->getShadingTimestamp ) <
|
||||||
( $shutters->getShadingWaitingPeriod / 2 )
|
( $shutters->getShadingWaitingPeriod / 2 )
|
||||||
or not IsAfterShuttersTimeBlocking( $hash, $shuttersDev ) );
|
or not IsAfterShuttersTimeBlocking( $hash, $shuttersDev )
|
||||||
|
or not IsAfterShuttersManualBlocking($shuttersDev) );
|
||||||
|
|
||||||
Log3( $name, 4,
|
Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
|
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
|
||||||
@ -1563,7 +1574,8 @@ 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' )
|
and $shutters->getModeDown ne 'off'
|
||||||
|
and IsAfterShuttersManualBlocking($shuttersDev) )
|
||||||
{
|
{
|
||||||
if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2
|
if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2
|
||||||
and $shutters->getSubTyp eq 'threestate' )
|
and $shutters->getSubTyp eq 'threestate' )
|
||||||
@ -1592,7 +1604,8 @@ sub EventProcessingPartyMode($) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ( IsDay( $hash, $shuttersDev ) ) {
|
elsif ( IsDay( $hash, $shuttersDev )
|
||||||
|
and IsAfterShuttersManualBlocking($shuttersDev) ) {
|
||||||
$shutters->setLastDrive('drive after party mode');
|
$shutters->setLastDrive('drive after party mode');
|
||||||
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getDelayCmd );
|
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getDelayCmd );
|
||||||
}
|
}
|
||||||
@ -1893,6 +1906,7 @@ sub SunSetShuttersAfterTimerFn($) {
|
|||||||
: 'night close'
|
: 'night close'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
$shutters->setSunset(1);
|
||||||
ShuttersCommandSet(
|
ShuttersCommandSet(
|
||||||
$hash,
|
$hash,
|
||||||
$shuttersDev,
|
$shuttersDev,
|
||||||
@ -1940,6 +1954,7 @@ sub SunRiseShuttersAfterTimerFn($) {
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
$shutters->setLastDrive('day open');
|
$shutters->setLastDrive('day open');
|
||||||
|
$shutters->setSunrise(1);
|
||||||
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getOpenPos );
|
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getOpenPos );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2181,10 +2196,10 @@ sub IsDay($$) {
|
|||||||
ShuttersSunset( $hash, $shuttersDev, 'unix' ) ? 1 : 0 );
|
ShuttersSunset( $hash, $shuttersDev, 'unix' ) ? 1 : 0 );
|
||||||
my $respIsDay = $isday;
|
my $respIsDay = $isday;
|
||||||
|
|
||||||
$respIsDay = ( ($shutters->getBrightness > $shutters->getBrightnessMinVal and $isday) ? 1 : 0 )
|
$respIsDay = ( (($shutters->getBrightness > $shutters->getBrightnessMinVal and $isday) or $shutters->getSunset) ? 1 : 0 )
|
||||||
if ( $shutters->getDown eq 'brightness' );
|
if ( $shutters->getDown eq 'brightness' );
|
||||||
|
|
||||||
$respIsDay = ( (($shutters->getBrightness > $shutters->getBrightnessMaxVal and not $isday) or $respIsDay) ? 1 : 0 )
|
$respIsDay = ( (($shutters->getBrightness > $shutters->getBrightnessMaxVal and not $isday) or $respIsDay or $shutters->getSunrise) ? 1 : 0 )
|
||||||
if ( $shutters->getUp eq 'brightness' );
|
if ( $shutters->getUp eq 'brightness' );
|
||||||
|
|
||||||
return $respIsDay;
|
return $respIsDay;
|
||||||
@ -2293,6 +2308,7 @@ sub ShuttersSunrise($$$) {
|
|||||||
)
|
)
|
||||||
) + 1
|
) + 1
|
||||||
);
|
);
|
||||||
|
$shuttersSunriseUnixtime += 86400 if ($shutters->getSunrise);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -2429,7 +2445,20 @@ sub IsAfterShuttersManualBlocking($) {
|
|||||||
my $shuttersDev = shift;
|
my $shuttersDev = shift;
|
||||||
$shutters->setShuttersDev($shuttersDev);
|
$shutters->setShuttersDev($shuttersDev);
|
||||||
|
|
||||||
if ( ( int( gettimeofday() ) - $shutters->getLastManPosTimestamp ) <
|
if ( $ascDev->getblockAscDrivesAfterManual
|
||||||
|
and $shutters->getStatus != $shutters->getOpenPos
|
||||||
|
and $shutters->getStatus != $shutters->getClosedPos
|
||||||
|
and $shutters->getStatus != $shutters->getWindPos
|
||||||
|
and $shutters->getStatus != $shutters->getShadingPos
|
||||||
|
and $shutters->getStatus != $shutters->getComfortOpenPos
|
||||||
|
and $shutters->getStatus != $shutters->getVentilatePos
|
||||||
|
and $shutters->getStatus != $shutters->getAntiFreezePos
|
||||||
|
and $shutters->getLastDrive eq 'manual'
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
elsif ( ( int( gettimeofday() ) - $shutters->getLastManPosTimestamp ) <
|
||||||
$shutters->getBlockingTimeAfterManual )
|
$shutters->getBlockingTimeAfterManual )
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@ -2734,6 +2763,13 @@ sub setSunsetUnixTime {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub setSunset {
|
||||||
|
my ( $self, $value ) = @_;
|
||||||
|
|
||||||
|
$self->{ $self->{shuttersDev} }{sunset} = $value;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
sub setSunriseUnixTime {
|
sub setSunriseUnixTime {
|
||||||
my ( $self, $unixtime ) = @_;
|
my ( $self, $unixtime ) = @_;
|
||||||
|
|
||||||
@ -2741,6 +2777,13 @@ sub setSunriseUnixTime {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub setSunrise {
|
||||||
|
my ( $self, $value ) = @_;
|
||||||
|
|
||||||
|
$self->{ $self->{shuttersDev} }{sunrise} = $value;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
sub setDelayCmd {
|
sub setDelayCmd {
|
||||||
my ( $self, $posValue ) = @_;
|
my ( $self, $posValue ) = @_;
|
||||||
|
|
||||||
@ -2922,12 +2965,24 @@ sub getSunsetUnixTime {
|
|||||||
return $self->{ $self->{shuttersDev} }{sunsettime};
|
return $self->{ $self->{shuttersDev} }{sunsettime};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub getSunset {
|
||||||
|
my $self = shift;
|
||||||
|
|
||||||
|
return ( defined($self->{ $self->{shuttersDev} }{sunset}) ? $self->{ $self->{shuttersDev} }{sunset} : 0 );
|
||||||
|
}
|
||||||
|
|
||||||
sub getSunriseUnixTime {
|
sub getSunriseUnixTime {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return $self->{ $self->{shuttersDev} }{sunrisetime};
|
return $self->{ $self->{shuttersDev} }{sunrisetime};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub getSunrise {
|
||||||
|
my $self = shift;
|
||||||
|
|
||||||
|
return ( defined($self->{ $self->{shuttersDev} }{sunrise}) ? $self->{ $self->{shuttersDev} }{sunrise} : 0 );
|
||||||
|
}
|
||||||
|
|
||||||
sub getRoommatesStatus {
|
sub getRoommatesStatus {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $loop = 0;
|
my $loop = 0;
|
||||||
@ -4009,6 +4064,13 @@ sub getWindSensorReading {
|
|||||||
return ( defined($self->{ASC_windSensor}->{reading}) ? $self->{ASC_windSensor}->{reading} : 'wind' );
|
return ( defined($self->{ASC_windSensor}->{reading}) ? $self->{ASC_windSensor}->{reading} : 'wind' );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub getblockAscDrivesAfterManual {
|
||||||
|
my $self = shift;
|
||||||
|
my $name = $self->{name};
|
||||||
|
|
||||||
|
return AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 );
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
=pod
|
=pod
|
||||||
|
Reference in New Issue
Block a user