add more Positions for Slat Support

This commit is contained in:
Marko Oldenburg 2020-04-17 08:28:27 +02:00
parent f50f20f197
commit 1f99f0fbd7

View File

@ -202,7 +202,7 @@ my %userAttrList = (
=> '-', => '-',
'ASC_Open_Pos:0,10,20,30,40,50,60,70,80,90,100' => [ '', 0, 100 ], '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_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' => '-', 'ASC_Sleep_Pos:0,10,20,30,40,50,60,70,80,90,100' => [ '', 75, 25 ],
'ASC_Pos_Reading' => [ '', 'position', 'pct' ], 'ASC_Pos_Reading' => [ '', 'position', 'pct' ],
'ASC_Time_Up_Early' => '-', 'ASC_Time_Up_Early' => '-',
'ASC_Time_Up_Late' => '-', 'ASC_Time_Up_Late' => '-',
@ -252,7 +252,8 @@ my %userAttrList = (
'ASC_WindProtection:on,off' => '-', 'ASC_WindProtection:on,off' => '-',
'ASC_RainProtection:on,off' => '-', 'ASC_RainProtection:on,off' => '-',
'ASC_ExternalTrigger' => '-', 'ASC_ExternalTrigger' => '-',
'ASC_Adv:on,off' => '-' 'ASC_Adv:on,off' => '-',
'ASC_SlatPosCmd_SlatDevice' => '-',
); );
my %posSetCmds = ( my %posSetCmds = (
@ -779,9 +780,10 @@ sub ShuttersDeviceScan {
$shutters->setShadingStatus( $shutters->setShadingStatus(
( $shutters->getStatus != $shutters->getShadingPos ? 'out' : 'in' ) ( $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 ); $shutters->setPushBrightnessInArray( $shutters->getBrightness );
readingsSingleUpdate( $defs{$_}, 'ASC_Enable', 'on', 0 ) readingsSingleUpdate( $defs{$_}, 'ASC_Enable', 'on', 0 )
if ( ReadingsVal( $_, 'ASC_Enable', 'none' ) eq 'none' ); if ( ReadingsVal( $_, 'ASC_Enable', 'none' ) eq 'none' );
@ -2344,6 +2346,9 @@ sub ShadingProcessing {
my $getStatus = $shutters->getStatus; my $getStatus = $shutters->getStatus;
my $oldShadingStatus = $shutters->getShadingStatus; my $oldShadingStatus = $shutters->getShadingStatus;
my $getModeUp = $shutters->getModeUp;
my $homemode = $shutters->getHomemode;
ASC_Debug( 'ShadingProcessing: ' ASC_Debug( 'ShadingProcessing: '
. $shutters->getShuttersDev . $shutters->getShuttersDev
. ' - Alle Werte für die weitere Verarbeitung sind korrekt vorhanden und es wird nun mit der Beschattungsverarbeitung begonnen' . ' - Alle Werte für die weitere Verarbeitung sind korrekt vorhanden und es wird nun mit der Beschattungsverarbeitung begonnen'
@ -2359,7 +2364,7 @@ sub ShadingProcessing {
&& $shutters->getShadingStatus ne 'out' && $shutters->getShadingStatus ne 'out'
) )
{ {
$shutters->setShadingLastStatus('in'); # $shutters->setShadingLastStatus('in');
$shutters->setShadingStatus('out'); $shutters->setShadingStatus('out');
ASC_Debug( 'ShadingProcessing: ' ASC_Debug( 'ShadingProcessing: '
@ -2391,8 +2396,9 @@ sub ShadingProcessing {
) )
{ {
$shutters->setShadingStatus('out'); $shutters->setShadingStatus('out');
$shutters->setShadingLastStatus('in')
if ( $shutters->getShadingLastStatus eq 'out' ); # $shutters->setShadingLastStatus('in')
# if ( $shutters->getShadingLastStatus eq 'out' );
} }
Log3( $name, 4, Log3( $name, 4,
@ -2427,8 +2433,9 @@ sub ShadingProcessing {
( $shutters->getShadingWaitingPeriod / 2 ) ) ( $shutters->getShadingWaitingPeriod / 2 ) )
{ {
$shutters->setShadingStatus('in'); $shutters->setShadingStatus('in');
$shutters->setShadingLastStatus('out')
if ( $shutters->getShadingLastStatus eq 'in' ); # $shutters->setShadingLastStatus('out')
# if ( $shutters->getShadingLastStatus eq 'in' );
} }
Log3( $name, 4, Log3( $name, 4,
@ -2459,8 +2466,10 @@ sub ShadingProcessing {
|| ( $shutters->getShadingStatus eq 'in' || ( $shutters->getShadingStatus eq 'in'
&& $shutters->getShadingLastStatus eq 'out' ) && $shutters->getShadingLastStatus eq 'out' )
) )
&& $shutters->getRoommatesStatus ne 'asleep' && ( $shutters->getShadingMode eq 'always'
&& $shutters->getRoommatesStatus ne 'gotosleep' || $shutters->getShadingMode eq $homemode )
&& ( $shutters->getModeUp eq 'always'
|| $shutters->getModeUp eq $homemode )
&& ( int( gettimeofday() ) - $shutters->getShadingStatusTimestamp ) < 2 && ( int( gettimeofday() ) - $shutters->getShadingStatusTimestamp ) < 2
); );
@ -2477,79 +2486,72 @@ sub ShadingProcessingDriveCommand {
my $getShadingPos = $shutters->getShadingPos; my $getShadingPos = $shutters->getShadingPos;
my $getStatus = $shutters->getStatus; my $getStatus = $shutters->getStatus;
my $homemode = $shutters->getRoommatesStatus; $shutters->setShadingStatus( $shutters->getShadingStatus );
$homemode = $ascDev->getResidentsStatus if ( $homemode eq 'none' );
if ( $shutters->getShadingMode eq 'always' if (
|| $shutters->getShadingMode eq $homemode ) $shutters->getShadingStatus eq 'in'
&& $getShadingPos != $getStatus
&& ( CheckIfShuttersWindowRecOpen($shuttersDev) != 2
|| $shutters->getShuttersPlace ne 'terrace' )
)
{ {
$shutters->setShadingStatus( $shutters->getShadingStatus ); $shutters->setLastDrive('shading in');
ShuttersCommandSet( $hash, $shuttersDev, $getShadingPos );
if ( ASC_Debug( 'ShadingProcessingDriveCommand: '
$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 . $shutters->getShuttersDev
. ' - Der aktuelle Beschattungsstatus ist: ' . ' - Der aktuelle Beschattungsstatus ist: '
. $shutters->getShadingStatus . $shutters->getShadingStatus
. ', Beschattungsstatus Zeitstempel: ' . ' und somit wird nun in die Position: '
. strftime( . $getShadingPos
"%Y.%m.%e %T", localtime( $shutters->getShadingStatusTimestamp ) . ' 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; return;
} }
@ -4338,6 +4340,25 @@ sub IsWe {
return main::IsWe( shift, shift ); 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
: $value;
}
sub _SetCmdFn { sub _SetCmdFn {
my $h = shift; my $h = shift;
@ -4382,12 +4403,53 @@ sub _SetCmdFn {
. '. Grund der Fahrt: ' . '. Grund der Fahrt: '
. $shutters->getLastDrive ); . $shutters->getLastDrive );
my $driveCommand = my $driveCommand = $shutters->getPosSetCmd . ' ' . $posValue;
$posValue == $shutters->getShadingPos my $slatPos = undef;
&& $shutters->getShadingPositionAssignment ne 'none' ? $shutters->getShadingPositionAssignment
: $posValue == $shutters->getVentilatePos if ( $shutters->getShadingPositionAssignment ne 'none'
&& $shutters->getVentilatePositionAssignment ne 'none' ? $shutters->getVentilatePositionAssignment && $shutters->getShadingPositionAssignment =~ m{\A[a-zA-Z]+\z}xms )
: $shutters->getPosSetCmd . ' ' . $posValue; {
$driveCommand = _DetermineSlatCmd( $driveCommand, $posValue );
# $driveCommand =
# $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->getAntiFreezePos
# && $shutters->getAntiFreezePosAssignment ne 'none' ? $shutters->getAntiFreezePosAssignment
# : $driveCommand;
}
elsif ($shutters->getShadingPositionAssignment ne 'none'
&& $shutters->getShadingPositionAssignment =~ m{\A\d{1,3}\z}xms )
{
$slatPos = _DetermineSlatCmd( $slatPos, $posValue );
# $slatPos =
# $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->getAntiFreezePos
# && $shutters->getAntiFreezePosAssignment ne 'none' ? $shutters->getAntiFreezePosAssignment
# : $slatPos;
}
CommandSet( undef, CommandSet( undef,
$shuttersDev $shuttersDev
@ -4396,6 +4458,21 @@ sub _SetCmdFn {
. $posValue . ' ' . $posValue . ' '
. $driveCommand ); . $driveCommand );
CommandSet(
undef,
(
$shutters->getSlatDevice ne 'none' ? $shutters->getSlatDevice
: $shuttersDev
)
. ' '
. (
$shutters->getSlatPosCmd ne 'none' ? $shutters->getSlatPosCmd
: $shutters->getPosCmd
)
. ' '
. $slatPos
) if ( defined($slatPos) );
$shutters->setSelfDefenseAbsent( 0, 0 ) $shutters->setSelfDefenseAbsent( 0, 0 )
if (!$shutters->getSelfDefenseAbsent if (!$shutters->getSelfDefenseAbsent
&& $shutters->getSelfDefenseAbsentTimerrun ); && $shutters->getSelfDefenseAbsentTimerrun );
@ -4979,6 +5056,15 @@ sub setAdvDelay {
return; return;
} }
sub getHomemode {
my $self = shift;
my $homemode = $shutters->getRoommatesStatus;
$homemode = $ascDev->getResidentsStatus
if ( $homemode eq 'none' );
return $homemode;
}
sub getAdvDelay { sub getAdvDelay {
my $self = shift; my $self = shift;
@ -5297,6 +5383,10 @@ sub setShadingStatus {
&& exists( $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} ) && exists( $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} )
&& $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} eq $value ); && $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 $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} = $value
if ( defined($value) ); if ( defined($value) );
$self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} = int( gettimeofday() ) $self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} = int( gettimeofday() )
@ -5593,23 +5683,16 @@ sub _getPositionAssignment {
sub getAntiFreezePos { sub getAntiFreezePos {
my $self = shift; my $self = shift;
my $val = AttrVal( return $shutters->_getPosition( 'ASC_Antifreeze_Pos',
$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' '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 ) ]
); );
}
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { sub getAntiFreezePosAssignment {
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); my $self = shift;
}
return ( return $shutters->_getPositionAssignment( 'ASC_Antifreeze_Pos',
$val =~ m{^\d+(\.\d+)?$}xms ? $val : $userAttrList{ 'getAntiFreezePos' );
'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 { sub getShuttersPlace {
@ -5618,6 +5701,57 @@ sub getShuttersPlace {
return AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' ); return AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' );
} }
sub getSlatPosCmd {
my $self = shift;
return $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
->{uptime}
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} );
}
sub getPrivacyUpTime { sub getPrivacyUpTime {
my $self = shift; my $self = shift;
@ -6414,9 +6548,14 @@ sub getPosCmd {
sub getOpenPos { sub getOpenPos {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Open_Pos', return $shutters->_getPosition( 'ASC_Open_Pos',
$userAttrList{'ASC_Open_Pos:0,10,20,30,40,50,60,70,80,90,100'} 'ASC_Open_Pos:0,10,20,30,40,50,60,70,80,90,100' );
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ); }
sub getOpenPositionAssignment {
my $self = shift;
return $shutters->_getPositionAssignment( 'ASC_Open_Pos', 'getOpenPos' );
} }
sub getVentilatePos { sub getVentilatePos {
@ -6443,21 +6582,28 @@ sub getVentilatePosAfterDayClosed {
sub getClosedPos { sub getClosedPos {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Closed_Pos', return $shutters->_getPosition( 'ASC_Closed_Pos',
$userAttrList{'ASC_Closed_Pos:0,10,20,30,40,50,60,70,80,90,100'} 'ASC_Closed_Pos:0,10,20,30,40,50,60,70,80,90,100' );
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ); }
sub getClosedPositionAssignment {
my $self = shift;
return $shutters->_getPositionAssignment( 'ASC_Closed_Pos',
'getClosedPos' );
} }
sub getSleepPos { sub getSleepPos {
my $self = shift; my $self = shift;
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Sleep_Pos', -1 ); return $shutters->_getPosition( 'ASC_Sleep_Pos',
'ASC_Sleep_Pos:0,10,20,30,40,50,60,70,80,90,100' );
}
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { sub getSleepPositionAssignment {
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); my $self = shift;
}
return ( $val =~ m{^\d+(\.\d+)?$}xms ? $val : -1 ); return $shutters->_getPositionAssignment( 'ASC_Sleep_Pos', 'getSleepPos' );
} }
sub getVentilateOpen { sub getVentilateOpen {
@ -6468,20 +6614,16 @@ sub getVentilateOpen {
sub getComfortOpenPos { sub getComfortOpenPos {
my $self = shift; 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 ) ] );
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { return $shutters->_getPosition( 'ASC_ComfortOpen_Pos',
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); 'ASC_ComfortOpen_Pos:0,10,20,30,40,50,60,70,80,90,100' );
} }
return ( sub getComfortOpenPositionAssignment {
$val =~ m{^\d+(\.\d+)?$}xms my $self = shift;
? $val
: $userAttrList{'ASC_ComfortOpen_Pos:0,10,20,30,40,50,60,70,80,90,100'} return $shutters->_getPositionAssignment( 'ASC_ComfortOpen_Pos',
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] 'getComfortOpenPos' );
);
} }
sub getPartyMode { sub getPartyMode {
@ -8478,7 +8620,7 @@ sub getBlockAscDrivesAfterManual {
], ],
"release_status": "testing", "release_status": "testing",
"license": "GPL_2", "license": "GPL_2",
"version": "v0.9.1", "version": "v0.9.3",
"author": [ "author": [
"Marko Oldenburg <leongaultier@gmail.com>" "Marko Oldenburg <leongaultier@gmail.com>"
], ],