change hardBlock action if shutters pos close

This commit is contained in:
Marko Oldenburg 2021-12-04 20:48:53 +01:00
parent a44fffe94e
commit 89431a2af3
2 changed files with 159 additions and 116 deletions

View File

@ -3,8 +3,8 @@ UPD 2021-11-29_15:01:56 75264 lib/FHEM/Automation/ShuttersControl.pm
UPD 2021-10-09_07:12:54 2657 lib/FHEM/Automation/ShuttersControl/Dev.pm
UPD 2021-10-09_07:12:54 2494 lib/FHEM/Automation/ShuttersControl/Roommate.pm
UPD 2021-10-24_07:33:53 31900 lib/FHEM/Automation/ShuttersControl/Shutters.pm
UPD 2021-12-04_09:50:00 25333 lib/FHEM/Automation/ShuttersControl/Shading.pm
UPD 2021-12-04_10:54:53 111003 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
UPD 2021-12-04_10:58:06 25333 lib/FHEM/Automation/ShuttersControl/Shading.pm
UPD 2021-12-04_20:47:39 112341 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
UPD 2021-11-14_14:03:06 40094 lib/FHEM/Automation/ShuttersControl/Helper.pm
UPD 2021-10-09_07:12:54 2173 lib/FHEM/Automation/ShuttersControl/Window.pm
UPD 2021-10-09_07:12:54 11739 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm

View File

@ -54,18 +54,18 @@ use FHEM::Automation::ShuttersControl::Rainprotection qw (:ALL);
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
EventProcessingPartyMode
EventProcessingGeneral
EventProcessingShutters
EventProcessingAdvShuttersClose
EventProcessingPartyMode
EventProcessingGeneral
EventProcessingShutters
EventProcessingAdvShuttersClose
);
our %EXPORT_TAGS = (
ALL => [
qw(
EventProcessingPartyMode
EventProcessingGeneral
EventProcessingShutters
EventProcessingAdvShuttersClose
EventProcessingPartyMode
EventProcessingGeneral
EventProcessingShutters
EventProcessingAdvShuttersClose
)
],
);
@ -75,12 +75,12 @@ use GPUtils qw(GP_Import);
BEGIN {
GP_Import(
qw(
Log3
gettimeofday
computeAlignTime
CommandSet
ReadingsVal
RemoveInternalTimer
Log3
gettimeofday
computeAlignTime
CommandSet
ReadingsVal
RemoveInternalTimer
)
);
}
@ -94,8 +94,12 @@ sub EventProcessingGeneral {
if ( defined($devname) && ($devname) )
{ # es wird lediglich der Devicename der Funktion mitgegeben wenn es sich nicht um global handelt daher hier die Unterscheidung
my $windReading = $FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading // 'none';
my $rainReading = $FHEM::Automation::ShuttersControl::ascDev->getRainSensorReading // 'none';
my $windReading =
$FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading
// 'none';
my $rainReading =
$FHEM::Automation::ShuttersControl::ascDev->getRainSensorReading
// 'none';
while ( my ( $device, $deviceAttr ) =
each %{ $hash->{monitoredDevs}{$devname} } )
@ -122,13 +126,16 @@ sub EventProcessingGeneral {
EventProcessingExternalTriggerDevice( $hash, $device, $events )
if ( $deviceAttr eq 'ASC_ExternalTrigger' );
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($device)
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
$device)
if ( $deviceAttr eq 'ASC_BrightnessSensor' );
if (
$deviceAttr eq 'ASC_BrightnessSensor'
&& ( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'brightness'
|| $FHEM::Automation::ShuttersControl::shutters->getUp eq 'brightness' )
&& ( $FHEM::Automation::ShuttersControl::shutters->getDown eq
'brightness'
|| $FHEM::Automation::ShuttersControl::shutters->getUp eq
'brightness' )
)
{
EventProcessingBrightness( $hash, $device, $events );
@ -147,7 +154,8 @@ sub EventProcessingGeneral {
\s(.*)$}xms
)
{ # wurde den Attributen unserer Rolläden ein Wert zugewiesen ?
FHEM::Automation::ShuttersControl::AddNotifyDev( $hash, $3, $1, $2 ) if ( $3 ne 'none' );
FHEM::Automation::ShuttersControl::AddNotifyDev( $hash, $3, $1, $2 )
if ( $3 ne 'none' );
Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessing: ATTR" );
}
@ -175,11 +183,13 @@ sub EventProcessingGeneral {
(.*)?}xms
)
{
FHEM::Automation::ShuttersControl::CreateSunRiseSetShuttersTimer( $hash, $2 )
FHEM::Automation::ShuttersControl::CreateSunRiseSetShuttersTimer(
$hash, $2 )
if (
$3 ne 'ASC_Time_Up_WE_Holiday'
|| ( $3 eq 'ASC_Time_Up_WE_Holiday'
&& $FHEM::Automation::ShuttersControl::ascDev->getSunriseTimeWeHoliday eq 'on' )
&& $FHEM::Automation::ShuttersControl::ascDev
->getSunriseTimeWeHoliday eq 'on' )
);
}
elsif (
@ -189,7 +199,8 @@ sub EventProcessingGeneral {
(.*)?}xms
)
{
FHEM::Automation::ShuttersControl::RenewSunRiseSetShuttersTimer($hash);
FHEM::Automation::ShuttersControl::RenewSunRiseSetShuttersTimer(
$hash);
}
elsif (
$events =~ m{^(DELETEATTR|ATTR)
@ -197,7 +208,8 @@ sub EventProcessingGeneral {
(.*)?}xms
)
{
$FHEM::Automation::ShuttersControl::shutters->deleteShadingStateChangeSunny;
$FHEM::Automation::ShuttersControl::shutters
->deleteShadingStateChangeSunny;
}
if (
@ -210,20 +222,21 @@ m{^(DELETEATTR|ATTR) #global ATTR myASC ASC_tempSensor Cellar
(.*)?}xms
)
{
# ATTR RolloKinZimSteven_F1 ASC_Shading_Mode off
# ATTR RolloKinZimSteven_F1 ASC_Shading_Mode off
if ( $events =~ m{^ATTR\s(.*)\sASC_Shading_Mode\s(off)}xms ) {
my %funcHash = (
hash => $hash,
shuttersdevice => $1,
value => $2,
attrEvent => 1,
hash => $hash,
shuttersdevice => $1,
value => $2,
attrEvent => 1,
);
FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn(\%funcHash);
FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn(
\%funcHash );
}
else {
CommandSet( undef, $name . ' controlShading on' )
if ( ReadingsVal( $name, 'controlShading', 'off' ) ne 'off' );
if ( ReadingsVal( $name, 'controlShading', 'off' ) ne 'off' );
}
}
}
@ -247,9 +260,8 @@ sub EventProcessingWindowRec {
{
return
if ( !IsAfterShuttersManualBlocking($shuttersDev)
&& $FHEM::Automation::ShuttersControl::shutters->getLockOut
eq 'off' );
&& $FHEM::Automation::ShuttersControl::shutters->getLockOut eq
'off' );
my $match = $1;
@ -279,7 +291,11 @@ sub EventProcessingWindowRec {
$FHEM::Automation::ShuttersControl::shutters->setHardLockOut('on')
if ( $match =~ m{[Oo]pen|false}xms
&& $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
eq 'terrace' );
eq 'terrace'
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
$FHEM::Automation::ShuttersControl::shutters->getOpenPos
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
$FHEM::Automation::ShuttersControl::shutters->getComfortOpenPos );
FHEM::Automation::ShuttersControl::ASC_Debug(
'EventProcessingWindowRec: '
@ -288,12 +304,12 @@ sub EventProcessingWindowRec {
. $homemode
. ' QueryShuttersPosWinRecTilted:'
. $FHEM::Automation::ShuttersControl::shutters
->getQueryShuttersPos(
->getQueryShuttersPos(
$FHEM::Automation::ShuttersControl::shutters->getVentilatePos
)
. ' QueryShuttersPosWinRecComfort: '
. $FHEM::Automation::ShuttersControl::shutters
->getQueryShuttersPos(
->getQueryShuttersPos(
$FHEM::Automation::ShuttersControl::shutters->getComfortOpenPos
)
);
@ -306,41 +322,40 @@ sub EventProcessingWindowRec {
$FHEM::Automation::ShuttersControl::shutters->getVentilatePos
|| $FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters->getComfortOpenPos
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters->getOpenPos
&& $FHEM::Automation::ShuttersControl::shutters->getLastDrive
eq 'ventilate - window open'
&& $FHEM::Automation::ShuttersControl::shutters
->getLastDrive eq 'ventilate - window open'
&& $FHEM::Automation::ShuttersControl::shutters->getSubTyp
eq 'twostate'
&& $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen
eq 'on' )
eq 'twostate'
&& $FHEM::Automation::ShuttersControl::shutters
->getVentilateOpen eq 'on' )
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters
->getPrivacyDownPos
->getPrivacyDownPos
&& $FHEM::Automation::ShuttersControl::shutters
->getPrivacyDownStatus != 2
->getPrivacyDownStatus != 2
&& !$FHEM::Automation::ShuttersControl::shutters->getIsDay )
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters
->getOpenPos
&& ( $FHEM::Automation::ShuttersControl::shutters
->getLockOut ne 'off'
|| (
$FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters->getOpenPos
&& ( $FHEM::Automation::ShuttersControl::shutters
->getLockOut ne 'off'
|| $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'terrace'
)
&& !$FHEM::Automation::ShuttersControl::shutters->getIsDay )
->getShuttersPlace eq 'terrace' )
&& !$FHEM::Automation::ShuttersControl::shutters->getIsDay
)
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters
->getOpenPos
$FHEM::Automation::ShuttersControl::shutters->getOpenPos
&& $FHEM::Automation::ShuttersControl::shutters
->getDelayCmd ne 'none'
->getDelayCmd ne 'none'
&& $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'terrace' )
->getShuttersPlace eq 'terrace' )
)
&& ( $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen
eq 'on'
|| $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlComfort eq 'on' )
->getAutoShuttersControlComfort eq 'on' )
)
{
FHEM::Automation::ShuttersControl::ASC_Debug(
@ -376,18 +391,19 @@ sub EventProcessingWindowRec {
elsif (
!$FHEM::Automation::ShuttersControl::shutters
->getIfInShading
&& ( $FHEM::Automation::ShuttersControl::shutters->getStatus
&& (
$FHEM::Automation::ShuttersControl::shutters->getStatus
!= $FHEM::Automation::ShuttersControl::shutters
->getOpenPos
|| $FHEM::Automation::ShuttersControl::shutters
->getStatus !=
$FHEM::Automation::ShuttersControl::shutters
->getLastManPos
|| ( $FHEM::Automation::ShuttersControl::shutters
->getDelayCmd ne 'none'
|| ( $FHEM::Automation::ShuttersControl::shutters
->getDelayCmd ne 'none'
&& $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'terrace' )
)
->getShuttersPlace eq 'terrace' )
)
)
{
if ( $FHEM::Automation::ShuttersControl::shutters
@ -412,40 +428,44 @@ sub EventProcessingWindowRec {
->setDriveCmd(
(
$FHEM::Automation::ShuttersControl::shutters
->getDelayCmd ne 'none'
->getDelayCmd ne 'none'
&& $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'terrace'
->getShuttersPlace eq 'terrace'
? $FHEM::Automation::ShuttersControl::shutters
->getDelayCmd
: ( $FHEM::Automation::ShuttersControl::shutters
->getDelayCmd
: (
$FHEM::Automation::ShuttersControl::shutters
->getVentilatePosAfterDayClosed eq 'open'
? $FHEM::Automation::ShuttersControl::shutters
->getOpenPos
: $FHEM::Automation::ShuttersControl::shutters
->getLastManPos )
? $FHEM::Automation::ShuttersControl::shutters
->getOpenPos
: $FHEM::Automation::ShuttersControl::shutters
->getLastManPos
)
)
);
}
}
}
elsif (
!$FHEM::Automation::ShuttersControl::shutters->getIsDay
&& $FHEM::Automation::ShuttersControl::shutters->getModeDown eq 'roommate'
&& ( $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus eq 'home'
|| $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus eq 'awoken' )
!$FHEM::Automation::ShuttersControl::shutters->getIsDay
&& $FHEM::Automation::ShuttersControl::shutters->getModeDown eq
'roommate'
&& ( $FHEM::Automation::ShuttersControl::shutters
->getRoommatesStatus eq 'home'
|| $FHEM::Automation::ShuttersControl::shutters
->getRoommatesStatus eq 'awoken' )
)
{
$FHEM::Automation::ShuttersControl::shutters
->setDriveCmd(
(
$FHEM::Automation::ShuttersControl::shutters
->getVentilatePosAfterDayClosed eq 'open'
? $FHEM::Automation::ShuttersControl::shutters
->getOpenPos
: $FHEM::Automation::ShuttersControl::shutters
->getLastManPos
)
);
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
(
$FHEM::Automation::ShuttersControl::shutters
->getVentilatePosAfterDayClosed eq 'open'
? $FHEM::Automation::ShuttersControl::shutters
->getOpenPos
: $FHEM::Automation::ShuttersControl::shutters
->getLastManPos
)
);
}
elsif (
$FHEM::Automation::ShuttersControl::shutters->getModeDown ne
@ -826,7 +846,7 @@ sub EventProcessingRoommate {
elsif (
( $event eq 'gotosleep' || $event eq 'asleep' )
&& $FHEM::Automation::ShuttersControl::shutters->getModeDown ne
'absent'
'absent'
&& ( $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlEvening eq 'on'
|| $FHEM::Automation::ShuttersControl::shutters->getDown eq
@ -980,6 +1000,7 @@ sub EventProcessingResidents {
&& $FHEM::Automation::ShuttersControl::shutters
->getSelfDefenseMode ne 'off'
|| $getModeDown eq 'absent'
# || $getModeDown eq 'always' ) Wird zu Testzwecken auskommentiert, siehe #90 Github
|| ( $FHEM::Automation::ShuttersControl::shutters
->getShadingMode eq 'absent'
@ -997,15 +1018,17 @@ sub EventProcessingResidents {
&& (
$FHEM::Automation::ShuttersControl::shutters
->getSelfDefenseMode eq 'absent'
|| ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2
|| (
CheckIfShuttersWindowRecOpen($shuttersDev) == 2
&& $FHEM::Automation::ShuttersControl::shutters
->getSelfDefenseMode eq 'gone'
&& ( $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'terrace'
|| $FHEM::Automation::ShuttersControl::shutters
|| $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'EG_window' )
&& $FHEM::Automation::ShuttersControl::shutters
->getSelfDefenseMode ne 'off' )
->getSelfDefenseMode ne 'off'
)
)
)
{
@ -1056,11 +1079,14 @@ sub EventProcessingResidents {
$FHEM::Automation::ShuttersControl::shutters
->getLastPos );
}
elsif ( $getModeDown eq 'absent' # || $getModeDown eq 'always' ) Wird zu Testzwecken auskommentiert, siehe #90 Github
elsif (
$getModeDown eq
'absent' # || $getModeDown eq 'always' ) Wird zu Testzwecken auskommentiert, siehe #90 Github
&& !$FHEM::Automation::ShuttersControl::shutters->getIsDay
&& IsAfterShuttersTimeBlocking($shuttersDev)
&& $FHEM::Automation::ShuttersControl::shutters
->getRoommatesStatus eq 'none' )
->getRoommatesStatus eq 'none'
)
{
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'residents absent');
@ -1120,7 +1146,8 @@ sub EventProcessingResidents {
->getRoommatesStatus eq 'none'
&& ( $getModeDown eq 'home'
|| $getModeDown eq 'always' )
&& $FHEM::Automation::ShuttersControl::ascDev->getAutoShuttersControlEvening eq 'on'
&& $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlEvening eq 'on'
&& $getResidentsLastStatus ne 'asleep'
&& $getResidentsLastStatus ne 'awoken'
&& IsAfterShuttersTimeBlocking($shuttersDev)
@ -1268,7 +1295,8 @@ sub EventProcessingResidents {
->getRoommatesStatus eq 'none'
&& ( $getModeUp eq 'home'
|| $getModeUp eq 'always' )
&& $FHEM::Automation::ShuttersControl::ascDev->getAutoShuttersControlMorning eq 'on'
&& $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlMorning eq 'on'
&& IsAfterShuttersTimeBlocking($shuttersDev)
&& !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
&& !$FHEM::Automation::ShuttersControl::shutters
@ -1387,8 +1415,9 @@ sub EventProcessingWind {
$FHEM::Automation::ShuttersControl::shutters->getIsDay
? $FHEM::Automation::ShuttersControl::shutters
->getLastPos
: ( $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
eq 'awning'
: (
$FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'awning'
? $FHEM::Automation::ShuttersControl::shutters
->getOpenPos
: (
@ -1799,7 +1828,8 @@ sub EventProcessingBrightness {
. $FHEM::Automation::ShuttersControl::shutters
->getLastDrive );
FHEM::Automation::ShuttersControl::CreateSunRiseSetShuttersTimer( $hash, $shuttersDev );
FHEM::Automation::ShuttersControl::CreateSunRiseSetShuttersTimer(
$hash, $shuttersDev );
}
else {
$FHEM::Automation::ShuttersControl::shutters
@ -1976,10 +2006,8 @@ sub EventProcessingBrightness {
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
$lastDrive);
if (
$FHEM::Automation::ShuttersControl::shutters
->getPrivacyDownStatus != 2
)
if ( $FHEM::Automation::ShuttersControl::shutters
->getPrivacyDownStatus != 2 )
{
$FHEM::Automation::ShuttersControl::shutters->setSunrise(0);
$FHEM::Automation::ShuttersControl::shutters->setSunset(1);
@ -2169,17 +2197,17 @@ sub EventProcessingTwilightDevice {
. $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
. ' RainProtection: '
. $FHEM::Automation::ShuttersControl::shutters
->getRainProtectionStatus
->getRainProtectionStatus
. ' WindProtection: '
. $FHEM::Automation::ShuttersControl::shutters
->getWindProtectionStatus );
->getWindProtectionStatus );
if ( $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading eq 'on'
if ( $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading eq 'on'
&& $FHEM::Automation::ShuttersControl::shutters
->getRainProtectionStatus eq 'unprotected'
->getRainProtectionStatus eq 'unprotected'
&& $FHEM::Automation::ShuttersControl::shutters
->getWindProtectionStatus eq 'unprotected' )
->getWindProtectionStatus eq 'unprotected' )
{
ShadingProcessing(
$hash,
@ -2248,12 +2276,14 @@ sub EventProcessingPartyMode {
$shuttersDev,
(
CheckIfShuttersWindowRecOpen($shuttersDev) == 0
? ($FHEM::Automation::ShuttersControl::shutters
? (
$FHEM::Automation::ShuttersControl::shutters
->getSleepPos > 0
? $FHEM::Automation::ShuttersControl::shutters
->getSleepPos
->getSleepPos
: $FHEM::Automation::ShuttersControl::shutters
->getClosedPos)
->getClosedPos
)
: $FHEM::Automation::ShuttersControl::shutters
->getVentilatePos
)
@ -2261,7 +2291,7 @@ sub EventProcessingPartyMode {
}
}
elsif (
$FHEM::Automation::ShuttersControl::shutters->getDelayCmd ne 'none'
$FHEM::Automation::ShuttersControl::shutters->getDelayCmd ne 'none'
&& $FHEM::Automation::ShuttersControl::shutters->getIsDay
&& IsAfterShuttersManualBlocking($shuttersDev) )
{
@ -2373,6 +2403,22 @@ sub EventProcessingShutters {
$FHEM::Automation::ShuttersControl::shutters->setLastDriveReading;
$FHEM::Automation::ShuttersControl::ascDev->setStateReading;
$FHEM::Automation::ShuttersControl::shutters->setHardLockOut('on')
if (
(
$FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters
->getComfortOpenPos
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus
== $FHEM::Automation::ShuttersControl::shutters
->getOpenPos
&& $FHEM::Automation::ShuttersControl::shutters
->getLastDrive eq 'ventilate - window open' )
)
&& $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'terrace'
);
FHEM::Automation::ShuttersControl::ASC_Debug(
'EventProcessingShutters: eine automatisierte Fahrt durch ASC wurde erkannt! Es werden nun die LastDriveReading und StateReading Werte gesetzt!'
);
@ -2485,7 +2531,4 @@ sub EventProcessingExternalTriggerDevice {
return;
}
1;