From b74141899f90448256eb221c90e152aadecf0fb3 Mon Sep 17 00:00:00 2001
From: LeonGaultier
Date: Mon, 29 Aug 2022 08:57:14 +0000
Subject: [PATCH] 73_AutoShuttersControl: fix many reported bugs
git-svn-id: https://svn.fhem.de/fhem/trunk@26357 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/CHANGED | 1 +
fhem/FHEM/73_AutoShuttersControl.pm | 10 ++--
fhem/lib/FHEM/Automation/ShuttersControl.pm | 6 +-
.../EventProcessingFunctions.pm | 56 ++++++++++---------
.../ShuttersControl/Rainprotection.pm | 47 +++++++++-------
.../Automation/ShuttersControl/Shading.pm | 2 +
6 files changed, 70 insertions(+), 52 deletions(-)
diff --git a/fhem/CHANGED b/fhem/CHANGED
index 57cd99d2b..588cd8dfd 100644
--- a/fhem/CHANGED
+++ b/fhem/CHANGED
@@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it.
+ - bugfix: 73_AutoShuttersControl: fix many reported bugs
- feature: 93_DbRep: reduceLog - add max, max=day, min, min=day, sum, sum=day
some fixes of reduceLog routine
- feature: 50_Signalbot: support to link 2 FHEM instance under the same number
diff --git a/fhem/FHEM/73_AutoShuttersControl.pm b/fhem/FHEM/73_AutoShuttersControl.pm
index b45756de5..c5e15b590 100644
--- a/fhem/FHEM/73_AutoShuttersControl.pm
+++ b/fhem/FHEM/73_AutoShuttersControl.pm
@@ -707,7 +707,7 @@ __END__
are used for shading. Defaults to 120.
- ASC_Shading_BetweenTheTime - Limit the time slots for shading functionality. Example: 9:00-13:00 11:25-15:30
+ ASC_Shading_BetweenTheTime - Limit the time slots for shading functionality. Example: 09:00-13:00 11:25-15:30
@@ -1137,7 +1137,7 @@ __END__
ASC_Shading_WaitingPeriod - wie viele Sekunden soll gewartet werden bevor eine weitere Auswertung der Sensordaten für die Beschattung stattfinden soll (default: 1200)
- ASC_Shading_BetweenTheTime - das Fahren in die Beschattung erfolgt bei Angabe nur innerhalb des Zeitraumes, Bsp: 9:00-13:00 11:25-15:30
+ ASC_Shading_BetweenTheTime - das Fahren in die Beschattung erfolgt bei Angabe nur innerhalb des Zeitraumes, Bsp: 09:00-13:00 11:25-15:30
ASC_ShuttersPlace - window/terrace/awning - Wenn dieses Attribut auf terrace gesetzt ist, das Residence Device in den Status "gone" geht und SelfDefense aktiv ist (ohne das das Reading selfDefense gesetzt sein muss), wird das Rollo geschlossen. awning steht für Markise und wirkt sich auf die Beschattungssteuerung aus. (default: window)
@@ -1158,7 +1158,7 @@ __END__
ASC_WiggleValue - Wert um welchen sich die Position des Rollladens ändern soll (default: 5)
- ASC_WindParameters - TRIGGERMAX[:HYSTERESE] [DRIVEPOSITION] / Angabe von Max Wert ab dem für Wind getriggert werden soll, Hytsrese Wert ab dem der Windschutz aufgehoben werden soll TRIGGERMAX - HYSTERESE / Ist es bei einigen Rollläden nicht gewünscht das gefahren werden soll, so ist der TRIGGERMAX Wert mit -1 an zu geben. (default: '50:20 ClosedPosition')
+ ASC_WindParameters - TRIGGERMAX[:HYSTERESE] [DRIVEPOSITION] / ACHTUNG! Wird nur beachtet wenn ASC_WindProtection auf on gesetzt ist. - Angabe von Max Wert ab dem für Wind getriggert werden soll, Hytsrese Wert ab dem der Windschutz aufgehoben werden soll TRIGGERMAX - HYSTERESE / Ist es bei einigen Rollläden nicht gewünscht das gefahren werden soll, so ist der TRIGGERMAX Wert mit -1 an zu geben. (default: '50:20 ASC_Closed_Pos')
ASC_WindowRec_PosAfterDayClosed - open,lastManual / auf welche Position soll das Rollo nach dem schließen am Tag fahren. Open Position oder letzte gespeicherte manuelle Position (default: open)
@@ -1323,7 +1323,7 @@ __END__
Sunrise | 1=Morgenfahrt wurde durchgeführt, 0=noch keine Morgenfahrt durchgeführt |
RoommatesStatus | aktueller Status der/des Roommate/s für den Rollladen |
RoommatesLastStatus | letzter Status der/des Roommate/s für den Rollladen |
- ShadingStatus | Ausgabe des aktuellen Shading Status, „in“, „out“, „in reserved“, „out reserved“ |
+ ShadingStatus | Ausgabe des aktuellen Shading Status, „in“, �����out“, „in reserved“, „out reserved“ |
ShadingStatusTimestamp | Timestamp des letzten Beschattungsstatus |
IfInShading | Befindet sich der Rollladen, in Abhängigkeit des Shading Mode, in der Beschattung |
DelayCmd | letzter Fahrbefehl welcher in die Warteschlange kam. Grund z.B. Partymodus. |
@@ -1462,7 +1462,7 @@ __END__
],
"release_status": "stable",
"license": "GPL_2",
- "version": "v0.10.23",
+ "version": "v0.10.24",
"author": [
"Marko Oldenburg "
],
diff --git a/fhem/lib/FHEM/Automation/ShuttersControl.pm b/fhem/lib/FHEM/Automation/ShuttersControl.pm
index 2e96e635b..277326c55 100644
--- a/fhem/lib/FHEM/Automation/ShuttersControl.pm
+++ b/fhem/lib/FHEM/Automation/ShuttersControl.pm
@@ -1764,7 +1764,11 @@ sub SetCmdFn {
return
if ( $shutters->getASCenable eq 'off'
|| $ascDev->getASCenable eq 'off'
- || $idleDetection !~ m{^$idleDetectionValue$}xms );
+ || $idleDetection !~ m{^$idleDetectionValue$}xms
+ || $FHEM::Automation::ShuttersControl::shutters
+ ->getWindProtectionStatus eq 'protected'
+ || $FHEM::Automation::ShuttersControl::shutters
+ ->getRaindProtectionStatus eq 'protected' );
if ( $shutters->getStatus != $posValue ) {
$shutters->setLastPos( $shutters->getStatus );
diff --git a/fhem/lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm b/fhem/lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
index f22cb20c4..e92a756ad 100644
--- a/fhem/lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
+++ b/fhem/lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
@@ -1363,6 +1363,7 @@ sub EventProcessingWind {
my $name = $hash->{NAME};
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
+ my $targetPos = $FHEM::Automation::ShuttersControl::shutters->getLastPos;
my $reading =
$FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading
@@ -1414,35 +1415,38 @@ sub EventProcessingWind {
{
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'wind un-protected');
- $FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
- (
- $FHEM::Automation::ShuttersControl::shutters->getIsDay
+
+ if ( $FHEM::Automation::ShuttersControl::shutters->getIsDay
+ && !$FHEM::Automation::ShuttersControl::shutters
+ ->getIfInShading
+ && $FHEM::Automation::ShuttersControl::shutters->getLastPos
+ == $FHEM::Automation::ShuttersControl::shutters
+ ->getShadingPos )
+ {
+ $targetPos =
+ $FHEM::Automation::ShuttersControl::shutters->getOpenPos;
+ }
+ else {
+ $targetPos =
+ $FHEM::Automation::ShuttersControl::shutters->getLastPos;
+ }
+
+ if ( !$FHEM::Automation::ShuttersControl::shutters->getIsDay ) {
+ $targetPos = (
+ $FHEM::Automation::ShuttersControl::shutters
+ ->getPrivacyDownStatus == 2
? $FHEM::Automation::ShuttersControl::shutters
- ->getLastPos
- : (
- $FHEM::Automation::ShuttersControl::shutters
- ->getShuttersPlace eq 'awning'
- ? $FHEM::Automation::ShuttersControl::shutters
- ->getOpenPos
- : (
- $FHEM::Automation::ShuttersControl::shutters
- ->getPrivacyDownStatus == 2
- ? $FHEM::Automation::ShuttersControl::shutters
- ->getPrivacyDownPos
- : (
- $FHEM::Automation::ShuttersControl::shutters
- ->getSleepPos > 0
- ? $FHEM::Automation::ShuttersControl::shutters
- ->getSleepPos
- : $FHEM::Automation::ShuttersControl::shutters
- ->getClosedPos
- )
- )
- )
- )
- );
+ ->getPrivacyDownPos
+ : $FHEM::Automation::ShuttersControl::shutters
+ ->getClosedPos
+ );
+ }
+
$FHEM::Automation::ShuttersControl::shutters
->setWindProtectionStatus('unprotected');
+
+ $FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
+ $targetPos);
}
FHEM::Automation::ShuttersControl::ASC_Debug(
diff --git a/fhem/lib/FHEM/Automation/ShuttersControl/Rainprotection.pm b/fhem/lib/FHEM/Automation/ShuttersControl/Rainprotection.pm
index e351dd8bb..52e85d78b 100644
--- a/fhem/lib/FHEM/Automation/ShuttersControl/Rainprotection.pm
+++ b/fhem/lib/FHEM/Automation/ShuttersControl/Rainprotection.pm
@@ -153,7 +153,8 @@ sub _RainProtected {
}
sub _RainUnprotected {
- my $h = shift;
+ my $h = shift;
+ my $targetPos = $FHEM::Automation::ShuttersControl::shutters->getLastPos;
my $shuttersDev = $h->{shuttersdevice};
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
@@ -170,29 +171,35 @@ sub _RainUnprotected {
->setRainUnprotectionDelayObj('none');
}
- $FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
- (
- $FHEM::Automation::ShuttersControl::shutters->getIsDay
- ? $FHEM::Automation::ShuttersControl::shutters->getLastPos
- : (
- $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
- eq 'awning'
- ? $FHEM::Automation::ShuttersControl::shutters->getOpenPos
- : (
- $FHEM::Automation::ShuttersControl::shutters
- ->getPrivacyDownStatus == 2
- ? $FHEM::Automation::ShuttersControl::shutters
- ->getPrivacyDownPos
- : $FHEM::Automation::ShuttersControl::shutters
- ->getClosedPos
- )
- )
- )
- ) if ( IsAfterShuttersTimeBlocking($shuttersDev) );
+ if ( $FHEM::Automation::ShuttersControl::shutters->getIsDay
+ && !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
+ && $FHEM::Automation::ShuttersControl::shutters->getLastPos ==
+ $FHEM::Automation::ShuttersControl::shutters->getShadingPos )
+ {
+ $targetPos = $FHEM::Automation::ShuttersControl::shutters->getOpenPos;
+ }
+ else {
+ $targetPos = $FHEM::Automation::ShuttersControl::shutters->getLastPos;
+ }
+
+ if ( !$FHEM::Automation::ShuttersControl::shutters->getIsDay
+ && $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace ne
+ 'awning' )
+ {
+ $targetPos = (
+ $FHEM::Automation::ShuttersControl::shutters->getPrivacyDownStatus
+ == 2
+ ? $FHEM::Automation::ShuttersControl::shutters->getPrivacyDownPos
+ : $FHEM::Automation::ShuttersControl::shutters->getClosedPos
+ );
+ }
$FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus(
'unprotected');
+ $FHEM::Automation::ShuttersControl::shutters->setDriveCmd($targetPos)
+ if ( IsAfterShuttersTimeBlocking($shuttersDev) );
+
return;
}
diff --git a/fhem/lib/FHEM/Automation/ShuttersControl/Shading.pm b/fhem/lib/FHEM/Automation/ShuttersControl/Shading.pm
index 207918715..8f5aae5e7 100644
--- a/fhem/lib/FHEM/Automation/ShuttersControl/Shading.pm
+++ b/fhem/lib/FHEM/Automation/ShuttersControl/Shading.pm
@@ -287,6 +287,8 @@ sub ShadingProcessing {
|| $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off'
|| $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading eq 'off'
+ || $FHEM::Automation::ShuttersControl::shutters
+ ->getExternalTriggerStatus
);
::Log3( $name, 4,