From 1a2b8f52cdb29ccb0f4bcf8e2c171ba80ad92cbd Mon Sep 17 00:00:00 2001
From: Marko Oldenburg
Date: Mon, 11 May 2020 18:57:22 +0200
Subject: [PATCH] roleback to 0.6.x version
---
73_AutoShuttersControl.pm | 690 ++++++++++++--------------------------
1 file changed, 206 insertions(+), 484 deletions(-)
diff --git a/73_AutoShuttersControl.pm b/73_AutoShuttersControl.pm
index 807bf65..2db45a0 100644
--- a/73_AutoShuttersControl.pm
+++ b/73_AutoShuttersControl.pm
@@ -33,7 +33,7 @@
# GNU General Public License for more details.
#
#
-# $Id$
+# $Id: 73_AutoShuttersControl.pm 21670 2020-04-14 10:09:09Z CoolTux $
#
###############################################################################
@@ -202,7 +202,7 @@ my %userAttrList = (
=> '-',
'ASC_Open_Pos:0,10,20,30,40,50,60,70,80,90,100' => [ '', 0, 100 ],
'ASC_Closed_Pos:0,10,20,30,40,50,60,70,80,90,100' => [ '', 100, 0 ],
- 'ASC_Sleep_Pos:0,10,20,30,40,50,60,70,80,90,100' => [ '', -1, -1 ],
+ 'ASC_Sleep_Pos:0,10,20,30,40,50,60,70,80,90,100' => '-',
'ASC_Pos_Reading' => [ '', 'position', 'pct' ],
'ASC_Time_Up_Early' => '-',
'ASC_Time_Up_Late' => '-',
@@ -211,8 +211,8 @@ my %userAttrList = (
'ASC_Time_Down_Late' => '-',
'ASC_PrivacyUpValue_beforeDayOpen' => '-',
'ASC_PrivacyDownValue_beforeNightClose' => '-',
- 'ASC_PrivacyUp_Pos' => [ '', 50, 50 ],
- 'ASC_PrivacyDown_Pos' => [ '', 50, 50 ],
+ 'ASC_PrivacyUp_Pos' => '-',
+ 'ASC_PrivacyDown_Pos' => '-',
'ASC_TempSensor' => '-',
'ASC_Ventilate_Window_Open:on,off' => '-',
'ASC_LockOut:soft,hard,off' => '-',
@@ -252,8 +252,7 @@ my %userAttrList = (
'ASC_WindProtection:on,off' => '-',
'ASC_RainProtection:on,off' => '-',
'ASC_ExternalTrigger' => '-',
- 'ASC_Adv:on,off' => '-',
- 'ASC_SlatPosCmd_SlatDevice' => '-',
+ 'ASC_Adv:on,off' => '-'
);
my %posSetCmds = (
@@ -412,15 +411,15 @@ sub Notify {
if (
(
grep m{^DEFINED.$name$}xms,
- @{$events} && $devname eq 'global' && $init_done
+ @{$events} and $devname eq 'global' and $init_done
)
- || (
+ or (
grep m{^INITIALIZED$}xms,
@{$events} or grep m{^REREADCFG$}xms,
@{$events} or grep m{^MODIFIED.$name$}xms,
@{$events}
)
- && $devname eq 'global'
+ and $devname eq 'global'
)
{
readingsSingleUpdate( $hash, 'partyMode', 'off', 0 )
@@ -457,7 +456,7 @@ sub Notify {
}
return
unless ( ref( $hash->{helper}{shuttersList} ) eq 'ARRAY'
- && scalar( @{ $hash->{helper}{shuttersList} } ) > 0 );
+ and scalar( @{ $hash->{helper}{shuttersList} } ) > 0 );
my $posReading = $shutters->getPosCmd;
@@ -491,7 +490,7 @@ m{^(ATTR|DELETEATTR)\s(.*ASC_Time_Up_WE_Holiday|.*ASC_Up|.*ASC_Down|.*ASC_AutoAs
EventProcessingGeneral( $hash, undef, join( ' ', @{$events} ) );
}
}
- elsif ( grep m{^($posReading):\s\d{1,3}$}xms, @{$events} ) {
+ elsif ( grep m{^($posReading):\s\d+$}xms, @{$events} ) {
ASC_Debug( 'Notify: '
. ' ASC_Pos_Reading Event vom Rollo wurde erkannt '
. ' - RECEIVED EVENT: '
@@ -780,10 +779,9 @@ sub ShuttersDeviceScan {
$shutters->setShadingStatus(
( $shutters->getStatus != $shutters->getShadingPos ? 'out' : 'in' )
);
-
-# $shutters->setShadingLastStatus(
-# ( $shutters->getStatus != $shutters->getShadingPos ? 'in' : 'out' )
-# );
+ $shutters->setShadingLastStatus(
+ ( $shutters->getStatus != $shutters->getShadingPos ? 'in' : 'out' )
+ );
$shutters->setPushBrightnessInArray( $shutters->getBrightness );
readingsSingleUpdate( $defs{$_}, 'ASC_Enable', 'on', 0 )
if ( ReadingsVal( $_, 'ASC_Enable', 'none' ) eq 'none' );
@@ -1234,7 +1232,7 @@ sub EventProcessingRoommate {
$shutters->setLastDrive('shading in');
$posValue = $shutters->getShadingPos;
}
- elsif ( !$shutters->getIfInShading ) {
+ else {
$shutters->setLastDrive('roommate awoken');
$posValue = $shutters->getOpenPos;
}
@@ -2346,9 +2344,6 @@ sub ShadingProcessing {
my $getStatus = $shutters->getStatus;
my $oldShadingStatus = $shutters->getShadingStatus;
- my $getModeUp = $shutters->getModeUp;
- my $homemode = $shutters->getHomemode;
-
ASC_Debug( 'ShadingProcessing: '
. $shutters->getShuttersDev
. ' - Alle Werte für die weitere Verarbeitung sind korrekt vorhanden und es wird nun mit der Beschattungsverarbeitung begonnen'
@@ -2364,7 +2359,7 @@ sub ShadingProcessing {
&& $shutters->getShadingStatus ne 'out'
)
{
- # $shutters->setShadingLastStatus('in');
+ $shutters->setShadingLastStatus('in');
$shutters->setShadingStatus('out');
ASC_Debug( 'ShadingProcessing: '
@@ -2396,9 +2391,8 @@ sub ShadingProcessing {
)
{
$shutters->setShadingStatus('out');
-
- # $shutters->setShadingLastStatus('in')
- # if ( $shutters->getShadingLastStatus eq 'out' );
+ $shutters->setShadingLastStatus('in')
+ if ( $shutters->getShadingLastStatus eq 'out' );
}
Log3( $name, 4,
@@ -2433,9 +2427,8 @@ sub ShadingProcessing {
( $shutters->getShadingWaitingPeriod / 2 ) )
{
$shutters->setShadingStatus('in');
-
- # $shutters->setShadingLastStatus('out')
- # if ( $shutters->getShadingLastStatus eq 'in' );
+ $shutters->setShadingLastStatus('out')
+ if ( $shutters->getShadingLastStatus eq 'in' );
}
Log3( $name, 4,
@@ -2466,17 +2459,9 @@ sub ShadingProcessing {
|| ( $shutters->getShadingStatus eq 'in'
&& $shutters->getShadingLastStatus eq 'out' )
)
- && ( $shutters->getShadingMode eq 'always'
- || $shutters->getShadingMode eq $homemode )
- && ( $shutters->getModeUp eq 'always'
- || $shutters->getModeUp eq $homemode
- || $shutters->getModeUp eq 'off' )
- && (
- ( int( gettimeofday() ) - $shutters->getShadingStatusTimestamp ) < 2
- || ( !$shutters->getQueryShuttersPos( $shutters->getShadingPos )
- && $shutters->getIfInShading
- && $shutters->getStatus != $shutters->getShadingPos )
- )
+ && $shutters->getRoommatesStatus ne 'asleep'
+ && $shutters->getRoommatesStatus ne 'gotosleep'
+ && ( int( gettimeofday() ) - $shutters->getShadingStatusTimestamp ) < 2
);
return;
@@ -2492,72 +2477,79 @@ sub ShadingProcessingDriveCommand {
my $getShadingPos = $shutters->getShadingPos;
my $getStatus = $shutters->getStatus;
- $shutters->setShadingStatus( $shutters->getShadingStatus );
+ my $homemode = $shutters->getRoommatesStatus;
+ $homemode = $ascDev->getResidentsStatus if ( $homemode eq 'none' );
- if (
- $shutters->getShadingStatus eq 'in'
- && $getShadingPos != $getStatus
- && ( CheckIfShuttersWindowRecOpen($shuttersDev) != 2
- || $shutters->getShuttersPlace ne 'terrace' )
- )
+ if ( $shutters->getShadingMode eq 'always'
+ || $shutters->getShadingMode eq $homemode )
{
- $shutters->setLastDrive('shading in');
- ShuttersCommandSet( $hash, $shuttersDev, $getShadingPos );
+ $shutters->setShadingStatus( $shutters->getShadingStatus );
- ASC_Debug( 'ShadingProcessingDriveCommand: '
- . $shutters->getShuttersDev
- . ' - Der aktuelle Beschattungsstatus ist: '
- . $shutters->getShadingStatus
- . ' und somit wird nun in die Position: '
- . $getShadingPos
- . ' zum Beschatten gefahren' );
- }
- elsif ($shutters->getShadingStatus eq 'out'
- && $getShadingPos == $getStatus )
- {
- $shutters->setLastDrive('shading out');
-
- ShuttersCommandSet(
- $hash,
- $shuttersDev,
- (
- $getShadingPos == $shutters->getLastPos
- ? $shutters->getOpenPos
- : (
- $shutters->getQueryShuttersPos( $shutters->getLastPos )
- ? (
- $shutters->getLastPos == $shutters->getSleepPos
- ? $shutters->getOpenPos
- : $shutters->getLastPos
- )
- : $shutters->getOpenPos
- )
- )
- );
-
- ASC_Debug( 'ShadingProcessingDriveCommand: '
- . $shutters->getShuttersDev
- . ' - Der aktuelle Beschattungsstatus ist: '
- . $shutters->getShadingStatus
- . ' und somit wird nun in die Position: '
- . $getShadingPos
- . ' zum beenden der Beschattung gefahren' );
- }
-
- Log3( $name, 4,
-"AutoShuttersControl ($name) - Shading Processing - In der Routine zum fahren der Rollläden, Shading Wert: "
- . $shutters->getShadingStatus );
-
- ASC_Debug(
- 'ShadingProcessingDriveCommand: '
- . $shutters->getShuttersDev
- . ' - Der aktuelle Beschattungsstatus ist: '
- . $shutters->getShadingStatus
- . ', Beschattungsstatus Zeitstempel: '
- . strftime(
- "%Y.%m.%e %T", localtime( $shutters->getShadingStatusTimestamp )
+ if (
+ $shutters->getShadingStatus eq 'in'
+ && $getShadingPos != $getStatus
+ && ( CheckIfShuttersWindowRecOpen($shuttersDev) != 2
+ || $shutters->getShuttersPlace ne 'terrace' )
)
- );
+ {
+ $shutters->setLastDrive('shading in');
+ ShuttersCommandSet( $hash, $shuttersDev, $getShadingPos );
+
+ ASC_Debug( 'ShadingProcessingDriveCommand: '
+ . $shutters->getShuttersDev
+ . ' - Der aktuelle Beschattungsstatus ist: '
+ . $shutters->getShadingStatus
+ . ' und somit wird nun in die Position: '
+ . $getShadingPos
+ . ' zum Beschatten gefahren' );
+ }
+ elsif ($shutters->getShadingStatus eq 'out'
+ && $getShadingPos == $getStatus )
+ {
+ $shutters->setLastDrive('shading out');
+
+ ShuttersCommandSet(
+ $hash,
+ $shuttersDev,
+ (
+ $getShadingPos == $shutters->getLastPos
+ ? $shutters->getOpenPos
+ : (
+ $shutters->getQueryShuttersPos( $shutters->getLastPos )
+ ? (
+ $shutters->getLastPos == $shutters->getSleepPos
+ ? $shutters->getOpenPos
+ : $shutters->getLastPos
+ )
+ : $shutters->getOpenPos
+ )
+ )
+ );
+
+ ASC_Debug( 'ShadingProcessingDriveCommand: '
+ . $shutters->getShuttersDev
+ . ' - Der aktuelle Beschattungsstatus ist: '
+ . $shutters->getShadingStatus
+ . ' und somit wird nun in die Position: '
+ . $getShadingPos
+ . ' zum beenden der Beschattung gefahren' );
+ }
+
+ Log3( $name, 4,
+"AutoShuttersControl ($name) - Shading Processing - In der Routine zum fahren der Rollläden, Shading Wert: "
+ . $shutters->getShadingStatus );
+
+ ASC_Debug(
+ 'ShadingProcessingDriveCommand: '
+ . $shutters->getShuttersDev
+ . ' - Der aktuelle Beschattungsstatus ist: '
+ . $shutters->getShadingStatus
+ . ', Beschattungsstatus Zeitstempel: '
+ . strftime(
+ "%Y.%m.%e %T", localtime( $shutters->getShadingStatusTimestamp )
+ )
+ );
+ }
return;
}
@@ -2782,48 +2774,47 @@ sub ShuttersCommandSet {
if (
(
- # $posValue == $shutters->getShadingPos &&
- CheckIfShuttersWindowRecOpen($shuttersDev) == 2
+ $posValue == $shutters->getShadingPos
+ && CheckIfShuttersWindowRecOpen($shuttersDev) == 2
&& $shutters->getShuttersPlace eq 'terrace'
&& ( $shutters->getLockOut eq 'soft'
|| $shutters->getLockOut eq 'hard' )
&& !$shutters->getQueryShuttersPos($posValue)
)
|| (
- # $posValue != $shutters->getShadingPos
- # && (
- (
- $shutters->getPartyMode eq 'on'
- && $ascDev->getPartyMode eq 'on'
+ $posValue != $shutters->getShadingPos
+ && (
+ (
+ $shutters->getPartyMode eq 'on'
+ && $ascDev->getPartyMode eq 'on'
+ )
+ || (
+ CheckIfShuttersWindowRecOpen($shuttersDev) == 2
+ && $shutters->getSubTyp eq 'threestate'
+ && ( $ascDev->getAutoShuttersControlComfort eq 'off'
+ || $shutters->getComfortOpenPos != $posValue )
+ && $shutters->getVentilateOpen eq 'on'
+ && $shutters->getShuttersPlace eq 'window'
+ && $shutters->getLockOut ne 'off'
+ )
+ || ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2
+ && $shutters->getSubTyp eq 'threestate'
+ && $ascDev->getAutoShuttersControlComfort eq 'on'
+ && $shutters->getVentilateOpen eq 'off'
+ && $shutters->getShuttersPlace eq 'window'
+ && $shutters->getLockOut ne 'off' )
+ || (
+ CheckIfShuttersWindowRecOpen($shuttersDev) == 2
+ && ( $shutters->getLockOut eq 'soft'
+ || $shutters->getLockOut eq 'hard' )
+ && !$shutters->getQueryShuttersPos($posValue)
+ )
+ || ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2
+ && $shutters->getShuttersPlace eq 'terrace'
+ && !$shutters->getQueryShuttersPos($posValue) )
+ || ( $shutters->getRainProtectionStatus eq 'protected'
+ && $shutters->getWindProtectionStatus eq 'protected' )
)
- || (
- CheckIfShuttersWindowRecOpen($shuttersDev) == 2
- && $shutters->getSubTyp eq 'threestate'
- && ( $ascDev->getAutoShuttersControlComfort eq 'off'
- || $shutters->getComfortOpenPos != $posValue )
- && $shutters->getVentilateOpen eq 'on'
- && $shutters->getShuttersPlace eq 'window'
- && $shutters->getLockOut ne 'off'
- )
- || ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2
- && $shutters->getSubTyp eq 'threestate'
- && $ascDev->getAutoShuttersControlComfort eq 'on'
- && $shutters->getVentilateOpen eq 'off'
- && $shutters->getShuttersPlace eq 'window'
- && $shutters->getLockOut ne 'off' )
- || (
- CheckIfShuttersWindowRecOpen($shuttersDev) == 2
- && ( $shutters->getLockOut eq 'soft'
- || $shutters->getLockOut eq 'hard' )
- && !$shutters->getQueryShuttersPos($posValue)
- )
- || ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2
- && $shutters->getShuttersPlace eq 'terrace'
- && !$shutters->getQueryShuttersPos($posValue) )
- || ( $shutters->getRainProtectionStatus eq 'protected'
- && $shutters->getWindProtectionStatus eq 'protected' )
-
- # )
)
)
{
@@ -4347,29 +4338,6 @@ sub IsWe {
return main::IsWe( shift, shift );
}
-sub _DetermineSlatCmd {
- my $value = shift;
- my $posValue = shift;
-
- return $posValue == $shutters->getShadingPos
- && $shutters->getShadingPositionAssignment ne 'none' ? $shutters->getShadingPositionAssignment
- : $posValue == $shutters->getVentilatePos
- && $shutters->getVentilatePositionAssignment ne 'none' ? $shutters->getVentilatePositionAssignment
- : $posValue == $shutters->getOpenPos
- && $shutters->getOpenPositionAssignment ne 'none' ? $shutters->getOpenPositionAssignment
- : $posValue == $shutters->getClosedPos
- && $shutters->getClosedPositionAssignment ne 'none' ? $shutters->getClosedPositionAssignment
- : $posValue == $shutters->getSleepPos
- && $shutters->getSleepPositionAssignment ne 'none' ? $shutters->getSleepPositionAssignment
- : $posValue == $shutters->getComfortOpenPos
- && $shutters->getComfortOpenPositionAssignment ne 'none' ? $shutters->getComfortOpenPositionAssignment
- : $posValue == $shutters->getPrivacyUpPos
- && $shutters->getPrivacyUpPositionAssignment ne 'none' ? $shutters->getPrivacyUpPositionAssignment
- : $posValue == $shutters->getPrivacyDownPos
- && $shutters->getPrivacyDownPositionAssignment ne 'none' ? $shutters->getPrivacyDownPositionAssignment
- : $value;
-}
-
sub _SetCmdFn {
my $h = shift;
@@ -4382,7 +4350,6 @@ sub _SetCmdFn {
my $idleDetectionValue = $shutters->getIdleDetectionValue;
my $idleDetection = $shutters->getIdleDetection;
-
return
unless (
$shutters->getASCenable eq 'on'
@@ -4414,79 +4381,13 @@ sub _SetCmdFn {
. '. Grund der Fahrt: '
. $shutters->getLastDrive );
- my $driveCommand = $shutters->getPosSetCmd . ' ' . $posValue;
- my $slatPos = -1;
-
- if ( $shutters->getShadingPositionAssignment ne 'none'
- || $shutters->getOpenPositionAssignment ne 'none'
- || $shutters->getClosedPositionAssignment ne 'none'
- || $shutters->getPrivacyUpPositionAssignment ne 'none'
- || $shutters->getPrivacyDownPositionAssignment ne 'none'
- || $shutters->getSleepPositionAssignment ne 'none'
- || $shutters->getVentilatePositionAssignment ne 'none'
- || $shutters->getComfortOpenPositionAssignment ne 'none' )
- {
- if (
- (
- $shutters->getShadingPositionAssignment =~ m{\A[a-zA-Z]+\z}xms
- && $shutters->getShadingPositionAssignment ne 'none'
- )
- || ( $shutters->getOpenPositionAssignment =~ m{\A[a-zA-Z]+\z}xms
- && $shutters->getOpenPositionAssignment ne 'none' )
- || ( $shutters->getClosedPositionAssignment =~ m{\A[a-zA-Z]+\z}xms
- && $shutters->getClosedPositionAssignment ne 'none' )
- || (
- $shutters->getPrivacyUpPositionAssignment =~ m{\A[a-zA-Z]+\z}xms
- && $shutters->getPrivacyUpPositionAssignment ne 'none' )
- || ( $shutters->getPrivacyDownPositionAssignment =~
- m{\A[a-zA-Z]+\z}xms
- && $shutters->getPrivacyDownPositionAssignment ne 'none' )
- || ( $shutters->getSleepPositionAssignment =~ m{\A[a-zA-Z]+\z}xms
- && $shutters->getSleepPositionAssignment ne 'none' )
- || (
- $shutters->getVentilatePositionAssignment =~ m{\A[a-zA-Z]+\z}xms
- && $shutters->getVentilatePositionAssignment ne 'none' )
- || ( $shutters->getComfortOpenPositionAssignment =~
- m{\A[a-zA-Z]+\z}xms
- && $shutters->getComfortOpenPositionAssignment ne 'none' )
- )
- {
- $driveCommand = _DetermineSlatCmd( $driveCommand, $posValue );
- }
- elsif ($shutters->getShadingPositionAssignment =~ m{\A\d{1,3}\z}xms
- || $shutters->getOpenPositionAssignment =~ m{\A\d{1,3}\z}xms
- || $shutters->getClosedPositionAssignment =~ m{\A\d{1,3}\z}xms
- || $shutters->getPrivacyUpPositionAssignment =~ m{\A\d{1,3}\z}xms
- || $shutters->getPrivacyDownPositionAssignment =~ m{\A\d{1,3}\z}xms
- || $shutters->getSleepPositionAssignment =~ m{\A\d{1,3}\z}xms
- || $shutters->getVentilatePositionAssignment =~ m{\A\d{1,3}\z}xms
- || $shutters->getComfortOpenPositionAssignment =~
- m{\A\d{1,3}\z}xms )
- {
- $slatPos = _DetermineSlatCmd( $slatPos, $posValue );
- }
- }
-
CommandSet( undef,
$shuttersDev
. ':FILTER='
. $shutters->getPosCmd . '!='
. $posValue . ' '
- . $driveCommand );
-
- CommandSet(
- undef,
- (
- $shutters->getSlatDevice ne 'none'
- ? $shutters->getSlatDevice
- : $shuttersDev
- )
- . ' '
- . $shutters->getSlatPosCmd . ' '
- . $slatPos
- )
- if ( $slatPos > -1
- && $shutters->getSlatPosCmd ne 'none' );
+ . $shutters->getPosSetCmd . ' '
+ . $posValue );
$shutters->setSelfDefenseAbsent( 0, 0 )
if (!$shutters->getSelfDefenseAbsent
@@ -4534,7 +4435,7 @@ sub _perlCodeCheck {
my $exec = shift;
my $val = undef;
- if ( $exec =~ m{\A\{(.+)\}\z}xms ) {
+ if ( $exec =~ m{^\{(.+)\}$}xms ) {
$val = main::AnalyzePerlCommand( undef, $1 );
}
@@ -5071,15 +4972,6 @@ sub setAdvDelay {
return;
}
-sub getHomemode {
- my $self = shift;
-
- my $homemode = $shutters->getRoommatesStatus;
- $homemode = $ascDev->getResidentsStatus
- if ( $homemode eq 'none' );
- return $homemode;
-}
-
sub getAdvDelay {
my $self = shift;
@@ -5398,10 +5290,6 @@ sub setShadingStatus {
&& exists( $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} )
&& $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} eq $value );
- $shutters->setShadingLastStatus( ( $value eq 'in' ? 'out' : 'in' ) )
- if ( $value eq 'in'
- || $value eq 'out' );
-
$self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} = $value
if ( defined($value) );
$self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} = int( gettimeofday() )
@@ -5626,125 +5514,26 @@ BEGIN {
);
}
-sub _getPosition {
- my $self = shift;
-
- my $attr = shift;
- my $userAttrList = shift;
-
- return $self->{ $self->{shuttersDev} }->{$attr}->{position}
- if (
- exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} )
- && ( gettimeofday() -
- $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2
- );
- $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} =
- int( gettimeofday() );
-
- my $position;
- my $posAssignment;
-
- if (
- AttrVal( $self->{shuttersDev}, $attr,
- $userAttrList{$userAttrList}
- [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ) =~
- m{\A\{.+\}\z}xms
- )
- {
- my $response = FHEM::AutoShuttersControl::_perlCodeCheck(
- AttrVal(
- $self->{shuttersDev},
- $attr,
- $userAttrList{$userAttrList}
- [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
- )
- );
-
- ( $position, $posAssignment ) = split ':', $response;
-
- $position = (
- $position =~ m{\A\d+(\.\d+)?\z}xms
- ? $position
- : $userAttrList{$userAttrList}
- [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
- );
-
- $posAssignment = (
- $posAssignment =~ m{\A\d+(\.\d+)?\z}xms
- ? $posAssignment
- : 'none'
- );
- }
- else {
- ( $position, $posAssignment ) =
- FHEM::AutoShuttersControl::GetAttrValues(
- $self->{shuttersDev},
- $attr,
- $userAttrList{$userAttrList}
- [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
- );
- }
-
- ### erwartetes Ergebnis
- # DEVICE:READING
- $self->{ $self->{shuttersDev} }->{$attr}->{position} = $position;
- $self->{ $self->{shuttersDev} }->{$attr}->{posAssignment} =
- $posAssignment;
-
- return $self->{ $self->{shuttersDev} }->{$attr}->{position};
-
- if (
- defined(
- FHEM::AutoShuttersControl::_perlCodeCheck(
- $self->{ $self->{shuttersDev} }->{$attr}->{position}
- )
- )
- )
- {
- $self->{ $self->{shuttersDev} }->{$attr}->{position} =
- FHEM::AutoShuttersControl::_perlCodeCheck(
- $self->{ $self->{shuttersDev} }->{$attr}->{position} );
- }
-
- return (
- $self->{ $self->{shuttersDev} }->{$attr}->{position} =~
- m{^\d+(\.\d+)?$}xms
- ? $self->{ $self->{shuttersDev} }->{$attr}->{position}
- : $userAttrList{$userAttrList}
- [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
- );
-}
-
-sub _getPositionAssignment {
- my $self = shift;
-
- my $attr = shift;
- my $getFn = shift;
-
- return $self->{ $self->{shuttersDev} }->{$attr}->{posAssignment}
- if (
- exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} )
- && ( gettimeofday() -
- $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2
- );
- $shutters->$getFn;
-
- return ( $self->{ $self->{shuttersDev} }->{$attr}->{posAssignment} );
-}
-
sub getAntiFreezePos {
my $self = shift;
- return $shutters->_getPosition( 'ASC_Antifreeze_Pos',
+ my $val = AttrVal(
+ $self->{shuttersDev},
+ 'ASC_Antifreeze_Pos',
+ $userAttrList{
'ASC_Antifreeze_Pos:5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100'
+ }[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
);
-}
-sub getAntiFreezePosAssignment {
- my $self = shift;
+ if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
+ $val = FHEM::AutoShuttersControl::_perlCodeCheck($val);
+ }
- return $shutters->_getPositionAssignment( 'ASC_Antifreeze_Pos',
- 'getAntiFreezePos' );
+ return (
+ $val =~ m{^\d+(\.\d+)?$}xms ? $val : $userAttrList{
+'ASC_Antifreeze_Pos:5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100'
+ }[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
+ );
}
sub getShuttersPlace {
@@ -5753,59 +5542,6 @@ sub getShuttersPlace {
return AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' );
}
-sub getSlatPosCmd {
- my $self = shift;
-
- return $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
- ->{poscmd}
- if (
- exists(
- $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
- ->{LASTGETTIME}
- )
- && ( gettimeofday() -
- $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
- ->{LASTGETTIME} ) < 2
- );
- $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}->{LASTGETTIME}
- = int( gettimeofday() );
- my ( $slatPosCmd, $slatDevice ) =
- FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev},
- 'ASC_SlatPosCmd_SlatDevice', 'none:none' );
-
- ## Erwartetes Ergebnis
- # upTime:upBrightnessVal
-
- $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}->{poscmd} =
- $slatPosCmd;
- $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}->{device} =
- $slatDevice;
-
- return $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
- ->{poscmd};
-}
-
-sub getSlatDevice {
- my $self = shift;
-
- return $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
- ->{device}
- if (
- exists(
- $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
- ->{LASTGETTIME}
- )
- && ( gettimeofday() -
- $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
- ->{LASTGETTIME} ) < 2
- );
- $shutters->getSlatPosCmd;
-
- return (
- $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}->{device}
- );
-}
-
sub getPrivacyUpTime {
my $self = shift;
@@ -5939,28 +5675,25 @@ sub getPrivacyDownBrightnessVal {
sub getPrivacyUpPos {
my $self = shift;
- return $shutters->_getPosition( 'ASC_PrivacyUp_Pos', 'ASC_PrivacyUp_Pos' );
-}
+ my $val = AttrVal( $self->{shuttersDev}, 'ASC_PrivacyUp_Pos', 50 );
-sub getPrivacyUpPositionAssignment {
- my $self = shift;
+ if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
+ $val = FHEM::AutoShuttersControl::_perlCodeCheck($val);
+ }
- return $shutters->_getPositionAssignment( 'ASC_PrivacyUp_Pos',
- 'getPrivacyUpPos' );
+ return ( $val =~ m{^\d+(\.\d+)?$}xms ? $val : 50 );
}
sub getPrivacyDownPos {
my $self = shift;
- return $shutters->_getPosition( 'ASC_PrivacyDown_Pos',
- 'ASC_PrivacyDown_Pos' );
-}
+ my $val = AttrVal( $self->{shuttersDev}, 'ASC_PrivacyDown_Pos', 50 );
-sub getPrivacyDownPositionAssignment {
- my $self = shift;
+ if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
+ $val = FHEM::AutoShuttersControl::_perlCodeCheck($val);
+ }
- return $shutters->_getPositionAssignment( 'ASC_PrivacyDown_Pos',
- 'getPrivacyDownPos' );
+ return ( $val =~ m{^\d+(\.\d+)?$}xms ? $val : 50 );
}
sub getSelfDefenseMode {
@@ -5995,21 +5728,26 @@ sub getAdv {
sub getShadingPos {
my $self = shift;
- return $shutters->_getPosition( 'ASC_Shading_Pos',
- 'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100' );
-}
+ my $val = AttrVal( $self->{shuttersDev}, 'ASC_Shading_Pos',
+ $userAttrList{'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100'}
+ [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] );
-sub getShadingPositionAssignment {
- my $self = shift;
+ if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
+ $val = FHEM::AutoShuttersControl::_perlCodeCheck($val);
+ }
- return $shutters->_getPositionAssignment( 'ASC_Shading_Pos',
- 'getShadingPos' );
+ return (
+ $val =~ m{^\d+(\.\d+)?$}xms
+ ? $val
+ : $userAttrList{'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100'}
+ [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
+ );
}
sub getShadingMode {
my $self = shift;
- return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'always' );
+ return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'off' );
}
sub _getTempSensor {
@@ -6597,36 +6335,34 @@ sub getBlockingTimeBeforDayOpen {
sub getPosCmd {
my $self = shift;
- return AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading',
- $userAttrList{'ASC_Pos_Reading'}
- [ AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] );
+ return AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading', 'pct' );
}
sub getOpenPos {
my $self = shift;
- return $shutters->_getPosition( 'ASC_Open_Pos',
- 'ASC_Open_Pos:0,10,20,30,40,50,60,70,80,90,100' );
-}
-
-sub getOpenPositionAssignment {
- my $self = shift;
-
- return $shutters->_getPositionAssignment( 'ASC_Open_Pos', 'getOpenPos' );
+ return AttrVal( $self->{shuttersDev}, 'ASC_Open_Pos',
+ $userAttrList{'ASC_Open_Pos:0,10,20,30,40,50,60,70,80,90,100'}
+ [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] );
}
sub getVentilatePos {
my $self = shift;
- return $shutters->_getPosition( 'ASC_Ventilate_Pos',
- 'ASC_Ventilate_Pos:10,20,30,40,50,60,70,80,90,100' );
-}
+ my $val = AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Pos',
+ $userAttrList{'ASC_Ventilate_Pos:10,20,30,40,50,60,70,80,90,100'}
+ [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] );
-sub getVentilatePositionAssignment {
- my $self = shift;
+ if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
+ $val = FHEM::AutoShuttersControl::_perlCodeCheck($val);
+ }
- return $shutters->_getPositionAssignment( 'ASC_Ventilate_Pos',
- 'getVentilatePos' );
+ return (
+ $val =~ m{^\d+(\.\d+)?$}xms
+ ? $val
+ : $userAttrList{'ASC_Ventilate_Pos:10,20,30,40,50,60,70,80,90,100'}
+ [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
+ );
}
sub getVentilatePosAfterDayClosed {
@@ -6639,28 +6375,21 @@ sub getVentilatePosAfterDayClosed {
sub getClosedPos {
my $self = shift;
- return $shutters->_getPosition( 'ASC_Closed_Pos',
- 'ASC_Closed_Pos:0,10,20,30,40,50,60,70,80,90,100' );
-}
-
-sub getClosedPositionAssignment {
- my $self = shift;
-
- return $shutters->_getPositionAssignment( 'ASC_Closed_Pos',
- 'getClosedPos' );
+ return AttrVal( $self->{shuttersDev}, 'ASC_Closed_Pos',
+ $userAttrList{'ASC_Closed_Pos:0,10,20,30,40,50,60,70,80,90,100'}
+ [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] );
}
sub getSleepPos {
my $self = shift;
- return $shutters->_getPosition( 'ASC_Sleep_Pos',
- 'ASC_Sleep_Pos:0,10,20,30,40,50,60,70,80,90,100' );
-}
+ my $val = AttrVal( $self->{shuttersDev}, 'ASC_Sleep_Pos', -1 );
-sub getSleepPositionAssignment {
- my $self = shift;
+ if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
+ $val = FHEM::AutoShuttersControl::_perlCodeCheck($val);
+ }
- return $shutters->_getPositionAssignment( 'ASC_Sleep_Pos', 'getSleepPos' );
+ return ( $val =~ m{^\d+(\.\d+)?$}xms ? $val : -1 );
}
sub getVentilateOpen {
@@ -6671,16 +6400,20 @@ sub getVentilateOpen {
sub getComfortOpenPos {
my $self = shift;
+ my $val = AttrVal( $self->{shuttersDev}, 'ASC_ComfortOpen_Pos',
+ $userAttrList{'ASC_ComfortOpen_Pos:0,10,20,30,40,50,60,70,80,90,100'}
+ [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] );
- return $shutters->_getPosition( 'ASC_ComfortOpen_Pos',
- 'ASC_ComfortOpen_Pos:0,10,20,30,40,50,60,70,80,90,100' );
-}
+ if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
+ $val = FHEM::AutoShuttersControl::_perlCodeCheck($val);
+ }
-sub getComfortOpenPositionAssignment {
- my $self = shift;
-
- return $shutters->_getPositionAssignment( 'ASC_ComfortOpen_Pos',
- 'getComfortOpenPos' );
+ return (
+ $val =~ m{^\d+(\.\d+)?$}xms
+ ? $val
+ : $userAttrList{'ASC_ComfortOpen_Pos:0,10,20,30,40,50,60,70,80,90,100'}
+ [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
+ );
}
sub getPartyMode {
@@ -8538,22 +8271,11 @@ sub getBlockAscDrivesAfterManual {
ASC_BlockingTime_beforDayOpen - wie viel Sekunden vor dem morgendlichen öffnen soll keine schließen Fahrt mehr stattfinden. (default: 3600)
ASC_BlockingTime_beforNightClose - wie viel Sekunden vor dem nächtlichen schließen soll keine öffnen Fahrt mehr stattfinden. (default: 3600)
ASC_BrightnessSensor - DEVICE[:READING] WERT-MORGENS:WERT-ABENDS / 'Sensorname[:brightness [400:800]]' Angaben zum Helligkeitssensor mit (Readingname, optional) für die Beschattung und dem Fahren der Rollladen nach brightness und den optionalen Brightnesswerten für Sonnenauf- und Sonnenuntergang. (default: none)
+ ASC_Closed_Pos - in 10 Schritten von 0 bis 100 (Default: ist abhängig vom AttributASC 0/100)
+ ASC_Open_Pos - in 10 Schritten von 0 bis 100 (default: ist abhängig vom AttributASC 100/0)
+ ASC_Sleep_Pos - in 10 Schritten von 0 bis 100 (default: ist abhängig vom AttributASC 75/25) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
+ ASC_ComfortOpen_Pos - in 10 Schritten von 0 bis 100 (Default: ist abhängig vom AttributASC 20/80) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
ASC_Down - astro/time/brightness - bei astro wird Sonnenuntergang berechnet, bei time wird der Wert aus ASC_Time_Down_Early als Fahrzeit verwendet und bei brightness muss ASC_Time_Down_Early und ASC_Time_Down_Late korrekt gesetzt werden. Der Timer läuft dann nach ASC_Time_Down_Late Zeit, es wird aber in der Zeit zwischen ASC_Time_Down_Early und ASC_Time_Down_Late geschaut, ob die als Attribut im Moduldevice hinterlegte ASC_brightnessDriveUpDown der Down Wert erreicht wurde. Wenn ja, wird der Rollladen runter gefahren (default: astro)
-
- Beschreibung der besonderen Positionsattribute
- ASC_Closed_Pos - in 10 Schritten von 0 bis 100 (Default: ist abhängig vom AttributASC 0/100)
- ASC_Open_Pos - in 10 Schritten von 0 bis 100 (default: ist abhängig vom AttributASC 100/0)
- ASC_Sleep_Pos - in 10 Schritten von 0 bis 100 (default: ist abhängig vom AttributASC 75/25) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
- ASC_ComfortOpen_Pos - in 10 Schritten von 0 bis 100 (Default: ist abhängig vom AttributASC 20/80) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
- ASC_Shading_Pos - Position des Rollladens für die Beschattung (Default: ist abhängig vom AttributASC 80/20) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
- ASC_Ventilate_Pos - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut ASC 70/30) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
-
- In Bezug auf die Verwendung mit Lamellen gibt es folgende ergänzende Parameter.
-
- - Wird die gesamte Position inklusive der Lamellen mit Hilfe einer "festen Zurdnung" angefahren, so z.B. set ROLLONAME Beschattung dann wird hinter dem Positionswert mittels : getrennt die "feste Zuordnung" geschrieben. Beispiel: attr ROLLONAME ASC_Shading_Pos 30:Beschattung
- - Wird hingegen ein ander Command verwendet z.B. slatPct oder ähnliches dann muss hinter der normalen Positionsangebe noch die Position für die Lamellen mit angegeb werden. Beispiel: attr ROLLONAME ASC_Shading_Pos 30:75. Bitte beachtet in diesem Zusammenhang auch das Attribut ASC_SlatPosCmd_SlatDevice wo mindesten die Angabe des SlatPosCMD Voraussetzung ist.
-
-
ASC_Shutter_IdleDetection - READING:VALUE gibt das Reading an welches Auskunft über den Fahrstatus des Rollos gibt, sowie als zweites den Wert im Reading welcher aus sagt das das Rollo nicht fährt
ASC_DriveUpMaxDuration - die Dauer des Hochfahrens des Rollladens plus 5 Sekunden (default: 60)
ASC_Drive_Delay - maximaler Wert für einen zufällig ermittelte Verzögerungswert in Sekunden bei der Berechnung der Fahrzeiten.
@@ -8598,13 +8320,13 @@ sub getBlockAscDrivesAfterManual {
ASC_Time_Up_Late - Sonnenaufgang späteste Zeit zum Hochfahren (default: 08:30) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!
ASC_Time_Up_WE_Holiday - Sonnenaufgang frühste Zeit zum Hochfahren am Wochenende und/oder Urlaub (holiday2we wird beachtet). (default: 08:00) ACHTUNG!!! in Verbindung mit Brightness für ASC_Up muss die Uhrzeit kleiner sein wie die Uhrzeit aus ASC_Time_Up_Late !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!
ASC_Up - astro/time/brightness - bei astro wird Sonnenaufgang berechnet, bei time wird der Wert aus ASC_Time_Up_Early als Fahrzeit verwendet und bei brightness muss ASC_Time_Up_Early und ASC_Time_Up_Late korrekt gesetzt werden. Der Timer läuft dann nach ASC_Time_Up_Late Zeit, es wird aber in der Zeit zwischen ASC_Time_Up_Early und ASC_Time_Up_Late geschaut, ob die als Attribut im Moduldevice hinterlegte Down Wert von ASC_brightnessDriveUpDown erreicht wurde. Wenn ja, wird der Rollladen hoch gefahren (default: astro)
+ ASC_Ventilate_Pos - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut ASC 70/30) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
ASC_Ventilate_Window_Open - auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist (default: on)
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_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)
ASC_WindowRec - WINDOWREC:[READING], Name des Fensterkontaktes, an dessen Fenster der Rollladen angebracht ist (default: none). Reading ist optional
ASC_WindowRec_subType - Typ des verwendeten Fensterkontaktes: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt) (default: twostate)
- ASC_SlatPosCmd_SlatDevice - Angaben zu einem Slat (Lamellen) CMD und sofern diese Lamellen über ein anderes Device gesteuert werden zum Slat Device. Beispiel: attr ROLLO ASC_SlatPosCmd_SlatDevice slatPct[:ROLLOSLATDEVICE] [ ] bedeutet optinal. Kann also auch weg gelassen werden. Wenn Ihr das SLAT Device mit angibt dann bitte ohne []. Beispiel: attr ROLLO ASC_SlatPosCmd_SlatDevice slatPct:ROLLOSLATDEVICE. Damit das ganze dann auch greift muss in den 6 Positionsangaben ASC_Open_Pos, ASC_Closed_Pos, ASC_Ventilate_Pos, ASC_ComfortOpen_Pos, ASC_Shading_Pos und ASC_Sleep_Pos ein weiterer Parameter für die Lamellenstellung mit angegeben werden.
@@ -8688,7 +8410,7 @@ sub getBlockAscDrivesAfterManual {
],
"release_status": "testing",
"license": "GPL_2",
- "version": "v0.9.9",
+ "version": "v0.8.27",
"author": [
"Marko Oldenburg "
],