roleback to 0.6.x version
This commit is contained in:
parent
9ed15f90fe
commit
1a2b8f52cd
@ -33,7 +33,7 @@
|
|||||||
# GNU General Public License for more details.
|
# 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_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' => [ '', -1, -1 ],
|
'ASC_Sleep_Pos:0,10,20,30,40,50,60,70,80,90,100' => '-',
|
||||||
'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' => '-',
|
||||||
@ -211,8 +211,8 @@ my %userAttrList = (
|
|||||||
'ASC_Time_Down_Late' => '-',
|
'ASC_Time_Down_Late' => '-',
|
||||||
'ASC_PrivacyUpValue_beforeDayOpen' => '-',
|
'ASC_PrivacyUpValue_beforeDayOpen' => '-',
|
||||||
'ASC_PrivacyDownValue_beforeNightClose' => '-',
|
'ASC_PrivacyDownValue_beforeNightClose' => '-',
|
||||||
'ASC_PrivacyUp_Pos' => [ '', 50, 50 ],
|
'ASC_PrivacyUp_Pos' => '-',
|
||||||
'ASC_PrivacyDown_Pos' => [ '', 50, 50 ],
|
'ASC_PrivacyDown_Pos' => '-',
|
||||||
'ASC_TempSensor' => '-',
|
'ASC_TempSensor' => '-',
|
||||||
'ASC_Ventilate_Window_Open:on,off' => '-',
|
'ASC_Ventilate_Window_Open:on,off' => '-',
|
||||||
'ASC_LockOut:soft,hard,off' => '-',
|
'ASC_LockOut:soft,hard,off' => '-',
|
||||||
@ -252,8 +252,7 @@ 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 = (
|
||||||
@ -412,15 +411,15 @@ sub Notify {
|
|||||||
if (
|
if (
|
||||||
(
|
(
|
||||||
grep m{^DEFINED.$name$}xms,
|
grep m{^DEFINED.$name$}xms,
|
||||||
@{$events} && $devname eq 'global' && $init_done
|
@{$events} and $devname eq 'global' and $init_done
|
||||||
)
|
)
|
||||||
|| (
|
or (
|
||||||
grep m{^INITIALIZED$}xms,
|
grep m{^INITIALIZED$}xms,
|
||||||
@{$events} or grep m{^REREADCFG$}xms,
|
@{$events} or grep m{^REREADCFG$}xms,
|
||||||
@{$events} or grep m{^MODIFIED.$name$}xms,
|
@{$events} or grep m{^MODIFIED.$name$}xms,
|
||||||
@{$events}
|
@{$events}
|
||||||
)
|
)
|
||||||
&& $devname eq 'global'
|
and $devname eq 'global'
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
readingsSingleUpdate( $hash, 'partyMode', 'off', 0 )
|
readingsSingleUpdate( $hash, 'partyMode', 'off', 0 )
|
||||||
@ -457,7 +456,7 @@ sub Notify {
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
unless ( ref( $hash->{helper}{shuttersList} ) eq 'ARRAY'
|
unless ( ref( $hash->{helper}{shuttersList} ) eq 'ARRAY'
|
||||||
&& scalar( @{ $hash->{helper}{shuttersList} } ) > 0 );
|
and scalar( @{ $hash->{helper}{shuttersList} } ) > 0 );
|
||||||
|
|
||||||
my $posReading = $shutters->getPosCmd;
|
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} ) );
|
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_Debug( 'Notify: '
|
||||||
. ' ASC_Pos_Reading Event vom Rollo wurde erkannt '
|
. ' ASC_Pos_Reading Event vom Rollo wurde erkannt '
|
||||||
. ' - RECEIVED EVENT: '
|
. ' - RECEIVED EVENT: '
|
||||||
@ -780,10 +779,9 @@ sub ShuttersDeviceScan {
|
|||||||
$shutters->setShadingStatus(
|
$shutters->setShadingStatus(
|
||||||
( $shutters->getStatus != $shutters->getShadingPos ? 'out' : 'in' )
|
( $shutters->getStatus != $shutters->getShadingPos ? 'out' : 'in' )
|
||||||
);
|
);
|
||||||
|
$shutters->setShadingLastStatus(
|
||||||
# $shutters->setShadingLastStatus(
|
( $shutters->getStatus != $shutters->getShadingPos ? 'in' : 'out' )
|
||||||
# ( $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' );
|
||||||
@ -1234,7 +1232,7 @@ sub EventProcessingRoommate {
|
|||||||
$shutters->setLastDrive('shading in');
|
$shutters->setLastDrive('shading in');
|
||||||
$posValue = $shutters->getShadingPos;
|
$posValue = $shutters->getShadingPos;
|
||||||
}
|
}
|
||||||
elsif ( !$shutters->getIfInShading ) {
|
else {
|
||||||
$shutters->setLastDrive('roommate awoken');
|
$shutters->setLastDrive('roommate awoken');
|
||||||
$posValue = $shutters->getOpenPos;
|
$posValue = $shutters->getOpenPos;
|
||||||
}
|
}
|
||||||
@ -2346,9 +2344,6 @@ 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'
|
||||||
@ -2364,7 +2359,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: '
|
||||||
@ -2396,9 +2391,8 @@ sub ShadingProcessing {
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
$shutters->setShadingStatus('out');
|
$shutters->setShadingStatus('out');
|
||||||
|
$shutters->setShadingLastStatus('in')
|
||||||
# $shutters->setShadingLastStatus('in')
|
if ( $shutters->getShadingLastStatus eq 'out' );
|
||||||
# if ( $shutters->getShadingLastStatus eq 'out' );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Log3( $name, 4,
|
Log3( $name, 4,
|
||||||
@ -2433,9 +2427,8 @@ sub ShadingProcessing {
|
|||||||
( $shutters->getShadingWaitingPeriod / 2 ) )
|
( $shutters->getShadingWaitingPeriod / 2 ) )
|
||||||
{
|
{
|
||||||
$shutters->setShadingStatus('in');
|
$shutters->setShadingStatus('in');
|
||||||
|
$shutters->setShadingLastStatus('out')
|
||||||
# $shutters->setShadingLastStatus('out')
|
if ( $shutters->getShadingLastStatus eq 'in' );
|
||||||
# if ( $shutters->getShadingLastStatus eq 'in' );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Log3( $name, 4,
|
Log3( $name, 4,
|
||||||
@ -2466,17 +2459,9 @@ sub ShadingProcessing {
|
|||||||
|| ( $shutters->getShadingStatus eq 'in'
|
|| ( $shutters->getShadingStatus eq 'in'
|
||||||
&& $shutters->getShadingLastStatus eq 'out' )
|
&& $shutters->getShadingLastStatus eq 'out' )
|
||||||
)
|
)
|
||||||
&& ( $shutters->getShadingMode eq 'always'
|
&& $shutters->getRoommatesStatus ne 'asleep'
|
||||||
|| $shutters->getShadingMode eq $homemode )
|
&& $shutters->getRoommatesStatus ne 'gotosleep'
|
||||||
&& ( $shutters->getModeUp eq 'always'
|
&& ( int( gettimeofday() ) - $shutters->getShadingStatusTimestamp ) < 2
|
||||||
|| $shutters->getModeUp eq $homemode
|
|
||||||
|| $shutters->getModeUp eq 'off' )
|
|
||||||
&& (
|
|
||||||
( int( gettimeofday() ) - $shutters->getShadingStatusTimestamp ) < 2
|
|
||||||
|| ( !$shutters->getQueryShuttersPos( $shutters->getShadingPos )
|
|
||||||
&& $shutters->getIfInShading
|
|
||||||
&& $shutters->getStatus != $shutters->getShadingPos )
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -2492,72 +2477,79 @@ sub ShadingProcessingDriveCommand {
|
|||||||
my $getShadingPos = $shutters->getShadingPos;
|
my $getShadingPos = $shutters->getShadingPos;
|
||||||
my $getStatus = $shutters->getStatus;
|
my $getStatus = $shutters->getStatus;
|
||||||
|
|
||||||
$shutters->setShadingStatus( $shutters->getShadingStatus );
|
my $homemode = $shutters->getRoommatesStatus;
|
||||||
|
$homemode = $ascDev->getResidentsStatus if ( $homemode eq 'none' );
|
||||||
|
|
||||||
if (
|
if ( $shutters->getShadingMode eq 'always'
|
||||||
$shutters->getShadingStatus eq 'in'
|
|| $shutters->getShadingMode eq $homemode )
|
||||||
&& $getShadingPos != $getStatus
|
|
||||||
&& ( CheckIfShuttersWindowRecOpen($shuttersDev) != 2
|
|
||||||
|| $shutters->getShuttersPlace ne 'terrace' )
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
$shutters->setLastDrive('shading in');
|
$shutters->setShadingStatus( $shutters->getShadingStatus );
|
||||||
ShuttersCommandSet( $hash, $shuttersDev, $getShadingPos );
|
|
||||||
|
|
||||||
ASC_Debug( 'ShadingProcessingDriveCommand: '
|
if (
|
||||||
. $shutters->getShuttersDev
|
$shutters->getShadingStatus eq 'in'
|
||||||
. ' - Der aktuelle Beschattungsstatus ist: '
|
&& $getShadingPos != $getStatus
|
||||||
. $shutters->getShadingStatus
|
&& ( CheckIfShuttersWindowRecOpen($shuttersDev) != 2
|
||||||
. ' und somit wird nun in die Position: '
|
|| $shutters->getShuttersPlace ne 'terrace' )
|
||||||
. $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 )
|
|
||||||
)
|
)
|
||||||
);
|
{
|
||||||
|
$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;
|
return;
|
||||||
}
|
}
|
||||||
@ -2782,48 +2774,47 @@ sub ShuttersCommandSet {
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
(
|
(
|
||||||
# $posValue == $shutters->getShadingPos &&
|
$posValue == $shutters->getShadingPos
|
||||||
CheckIfShuttersWindowRecOpen($shuttersDev) == 2
|
&& CheckIfShuttersWindowRecOpen($shuttersDev) == 2
|
||||||
&& $shutters->getShuttersPlace eq 'terrace'
|
&& $shutters->getShuttersPlace eq 'terrace'
|
||||||
&& ( $shutters->getLockOut eq 'soft'
|
&& ( $shutters->getLockOut eq 'soft'
|
||||||
|| $shutters->getLockOut eq 'hard' )
|
|| $shutters->getLockOut eq 'hard' )
|
||||||
&& !$shutters->getQueryShuttersPos($posValue)
|
&& !$shutters->getQueryShuttersPos($posValue)
|
||||||
)
|
)
|
||||||
|| (
|
|| (
|
||||||
# $posValue != $shutters->getShadingPos
|
$posValue != $shutters->getShadingPos
|
||||||
# && (
|
&& (
|
||||||
(
|
(
|
||||||
$shutters->getPartyMode eq 'on'
|
$shutters->getPartyMode eq 'on'
|
||||||
&& $ascDev->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 );
|
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 {
|
sub _SetCmdFn {
|
||||||
my $h = shift;
|
my $h = shift;
|
||||||
|
|
||||||
@ -4382,7 +4350,6 @@ sub _SetCmdFn {
|
|||||||
|
|
||||||
my $idleDetectionValue = $shutters->getIdleDetectionValue;
|
my $idleDetectionValue = $shutters->getIdleDetectionValue;
|
||||||
my $idleDetection = $shutters->getIdleDetection;
|
my $idleDetection = $shutters->getIdleDetection;
|
||||||
|
|
||||||
return
|
return
|
||||||
unless (
|
unless (
|
||||||
$shutters->getASCenable eq 'on'
|
$shutters->getASCenable eq 'on'
|
||||||
@ -4414,79 +4381,13 @@ sub _SetCmdFn {
|
|||||||
. '. Grund der Fahrt: '
|
. '. Grund der Fahrt: '
|
||||||
. $shutters->getLastDrive );
|
. $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,
|
CommandSet( undef,
|
||||||
$shuttersDev
|
$shuttersDev
|
||||||
. ':FILTER='
|
. ':FILTER='
|
||||||
. $shutters->getPosCmd . '!='
|
. $shutters->getPosCmd . '!='
|
||||||
. $posValue . ' '
|
. $posValue . ' '
|
||||||
. $driveCommand );
|
. $shutters->getPosSetCmd . ' '
|
||||||
|
. $posValue );
|
||||||
CommandSet(
|
|
||||||
undef,
|
|
||||||
(
|
|
||||||
$shutters->getSlatDevice ne 'none'
|
|
||||||
? $shutters->getSlatDevice
|
|
||||||
: $shuttersDev
|
|
||||||
)
|
|
||||||
. ' '
|
|
||||||
. $shutters->getSlatPosCmd . ' '
|
|
||||||
. $slatPos
|
|
||||||
)
|
|
||||||
if ( $slatPos > -1
|
|
||||||
&& $shutters->getSlatPosCmd ne 'none' );
|
|
||||||
|
|
||||||
$shutters->setSelfDefenseAbsent( 0, 0 )
|
$shutters->setSelfDefenseAbsent( 0, 0 )
|
||||||
if (!$shutters->getSelfDefenseAbsent
|
if (!$shutters->getSelfDefenseAbsent
|
||||||
@ -4534,7 +4435,7 @@ sub _perlCodeCheck {
|
|||||||
my $exec = shift;
|
my $exec = shift;
|
||||||
my $val = undef;
|
my $val = undef;
|
||||||
|
|
||||||
if ( $exec =~ m{\A\{(.+)\}\z}xms ) {
|
if ( $exec =~ m{^\{(.+)\}$}xms ) {
|
||||||
$val = main::AnalyzePerlCommand( undef, $1 );
|
$val = main::AnalyzePerlCommand( undef, $1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5071,15 +4972,6 @@ 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;
|
||||||
|
|
||||||
@ -5398,10 +5290,6 @@ 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() )
|
||||||
@ -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 {
|
sub getAntiFreezePos {
|
||||||
my $self = shift;
|
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'
|
'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 {
|
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
|
||||||
my $self = shift;
|
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val);
|
||||||
|
}
|
||||||
|
|
||||||
return $shutters->_getPositionAssignment( 'ASC_Antifreeze_Pos',
|
return (
|
||||||
'getAntiFreezePos' );
|
$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 {
|
sub getShuttersPlace {
|
||||||
@ -5753,59 +5542,6 @@ 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}
|
|
||||||
->{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 {
|
sub getPrivacyUpTime {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
@ -5939,28 +5675,25 @@ sub getPrivacyDownBrightnessVal {
|
|||||||
sub getPrivacyUpPos {
|
sub getPrivacyUpPos {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return $shutters->_getPosition( 'ASC_PrivacyUp_Pos', 'ASC_PrivacyUp_Pos' );
|
my $val = AttrVal( $self->{shuttersDev}, 'ASC_PrivacyUp_Pos', 50 );
|
||||||
}
|
|
||||||
|
|
||||||
sub getPrivacyUpPositionAssignment {
|
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
|
||||||
my $self = shift;
|
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val);
|
||||||
|
}
|
||||||
|
|
||||||
return $shutters->_getPositionAssignment( 'ASC_PrivacyUp_Pos',
|
return ( $val =~ m{^\d+(\.\d+)?$}xms ? $val : 50 );
|
||||||
'getPrivacyUpPos' );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getPrivacyDownPos {
|
sub getPrivacyDownPos {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return $shutters->_getPosition( 'ASC_PrivacyDown_Pos',
|
my $val = AttrVal( $self->{shuttersDev}, 'ASC_PrivacyDown_Pos', 50 );
|
||||||
'ASC_PrivacyDown_Pos' );
|
|
||||||
}
|
|
||||||
|
|
||||||
sub getPrivacyDownPositionAssignment {
|
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
|
||||||
my $self = shift;
|
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val);
|
||||||
|
}
|
||||||
|
|
||||||
return $shutters->_getPositionAssignment( 'ASC_PrivacyDown_Pos',
|
return ( $val =~ m{^\d+(\.\d+)?$}xms ? $val : 50 );
|
||||||
'getPrivacyDownPos' );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getSelfDefenseMode {
|
sub getSelfDefenseMode {
|
||||||
@ -5995,21 +5728,26 @@ sub getAdv {
|
|||||||
sub getShadingPos {
|
sub getShadingPos {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return $shutters->_getPosition( 'ASC_Shading_Pos',
|
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Shading_Pos',
|
||||||
'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100' );
|
$userAttrList{'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100'}
|
||||||
}
|
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] );
|
||||||
|
|
||||||
sub getShadingPositionAssignment {
|
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
|
||||||
my $self = shift;
|
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val);
|
||||||
|
}
|
||||||
|
|
||||||
return $shutters->_getPositionAssignment( 'ASC_Shading_Pos',
|
return (
|
||||||
'getShadingPos' );
|
$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 {
|
sub getShadingMode {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'always' );
|
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'off' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub _getTempSensor {
|
sub _getTempSensor {
|
||||||
@ -6597,36 +6335,34 @@ sub getBlockingTimeBeforDayOpen {
|
|||||||
sub getPosCmd {
|
sub getPosCmd {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading',
|
return AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading', 'pct' );
|
||||||
$userAttrList{'ASC_Pos_Reading'}
|
|
||||||
[ AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getOpenPos {
|
sub getOpenPos {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return $shutters->_getPosition( 'ASC_Open_Pos',
|
return AttrVal( $self->{shuttersDev}, 'ASC_Open_Pos',
|
||||||
'ASC_Open_Pos:0,10,20,30,40,50,60,70,80,90,100' );
|
$userAttrList{'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 {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return $shutters->_getPosition( 'ASC_Ventilate_Pos',
|
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Pos',
|
||||||
'ASC_Ventilate_Pos:10,20,30,40,50,60,70,80,90,100' );
|
$userAttrList{'ASC_Ventilate_Pos:10,20,30,40,50,60,70,80,90,100'}
|
||||||
}
|
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] );
|
||||||
|
|
||||||
sub getVentilatePositionAssignment {
|
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
|
||||||
my $self = shift;
|
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val);
|
||||||
|
}
|
||||||
|
|
||||||
return $shutters->_getPositionAssignment( 'ASC_Ventilate_Pos',
|
return (
|
||||||
'getVentilatePos' );
|
$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 {
|
sub getVentilatePosAfterDayClosed {
|
||||||
@ -6639,28 +6375,21 @@ sub getVentilatePosAfterDayClosed {
|
|||||||
sub getClosedPos {
|
sub getClosedPos {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return $shutters->_getPosition( 'ASC_Closed_Pos',
|
return AttrVal( $self->{shuttersDev}, 'ASC_Closed_Pos',
|
||||||
'ASC_Closed_Pos:0,10,20,30,40,50,60,70,80,90,100' );
|
$userAttrList{'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;
|
||||||
|
|
||||||
return $shutters->_getPosition( 'ASC_Sleep_Pos',
|
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Sleep_Pos', -1 );
|
||||||
'ASC_Sleep_Pos:0,10,20,30,40,50,60,70,80,90,100' );
|
|
||||||
}
|
|
||||||
|
|
||||||
sub getSleepPositionAssignment {
|
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
|
||||||
my $self = shift;
|
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val);
|
||||||
|
}
|
||||||
|
|
||||||
return $shutters->_getPositionAssignment( 'ASC_Sleep_Pos', 'getSleepPos' );
|
return ( $val =~ m{^\d+(\.\d+)?$}xms ? $val : -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getVentilateOpen {
|
sub getVentilateOpen {
|
||||||
@ -6671,16 +6400,20 @@ 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 ) ] );
|
||||||
|
|
||||||
return $shutters->_getPosition( 'ASC_ComfortOpen_Pos',
|
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
|
||||||
'ASC_ComfortOpen_Pos:0,10,20,30,40,50,60,70,80,90,100' );
|
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getComfortOpenPositionAssignment {
|
return (
|
||||||
my $self = shift;
|
$val =~ m{^\d+(\.\d+)?$}xms
|
||||||
|
? $val
|
||||||
return $shutters->_getPositionAssignment( 'ASC_ComfortOpen_Pos',
|
: $userAttrList{'ASC_ComfortOpen_Pos:0,10,20,30,40,50,60,70,80,90,100'}
|
||||||
'getComfortOpenPos' );
|
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getPartyMode {
|
sub getPartyMode {
|
||||||
@ -8538,22 +8271,11 @@ sub getBlockAscDrivesAfterManual {
|
|||||||
<li><strong>ASC_BlockingTime_beforDayOpen</strong> - wie viel Sekunden vor dem morgendlichen öffnen soll keine schließen Fahrt mehr stattfinden. (default: 3600)</li>
|
<li><strong>ASC_BlockingTime_beforDayOpen</strong> - wie viel Sekunden vor dem morgendlichen öffnen soll keine schließen Fahrt mehr stattfinden. (default: 3600)</li>
|
||||||
<li><strong>ASC_BlockingTime_beforNightClose</strong> - wie viel Sekunden vor dem nächtlichen schließen soll keine öffnen Fahrt mehr stattfinden. (default: 3600)</li>
|
<li><strong>ASC_BlockingTime_beforNightClose</strong> - wie viel Sekunden vor dem nächtlichen schließen soll keine öffnen Fahrt mehr stattfinden. (default: 3600)</li>
|
||||||
<li><strong>ASC_BrightnessSensor - DEVICE[:READING] WERT-MORGENS:WERT-ABENDS</strong> / '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)</li>
|
<li><strong>ASC_BrightnessSensor - DEVICE[:READING] WERT-MORGENS:WERT-ABENDS</strong> / '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)</li>
|
||||||
|
<li><strong>ASC_Closed_Pos</strong> - in 10 Schritten von 0 bis 100 (Default: ist abhängig vom Attribut<em>ASC</em> 0/100)</li>
|
||||||
|
<li><strong>ASC_Open_Pos</strong> - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut<em>ASC</em> 100/0)</li>
|
||||||
|
<li><strong>ASC_Sleep_Pos</strong> - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut<em>ASC</em> 75/25) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
||||||
|
<li><strong>ASC_ComfortOpen_Pos</strong> - in 10 Schritten von 0 bis 100 (Default: ist abhängig vom Attribut<em>ASC</em> 20/80) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
||||||
<li><strong>ASC_Down - astro/time/brightness</strong> - 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)</li>
|
<li><strong>ASC_Down - astro/time/brightness</strong> - 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)</li>
|
||||||
<ul></p>
|
|
||||||
<strong><u>Beschreibung der besonderen Positionsattribute</u></strong>
|
|
||||||
<li><strong>ASC_Closed_Pos</strong> - in 10 Schritten von 0 bis 100 (Default: ist abhängig vom Attribut<em>ASC</em> 0/100)</li>
|
|
||||||
<li><strong>ASC_Open_Pos</strong> - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut<em>ASC</em> 100/0)</li>
|
|
||||||
<li><strong>ASC_Sleep_Pos</strong> - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut<em>ASC</em> 75/25) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
|
||||||
<li><strong>ASC_ComfortOpen_Pos</strong> - in 10 Schritten von 0 bis 100 (Default: ist abhängig vom Attribut<em>ASC</em> 20/80) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
|
||||||
<li><strong>ASC_Shading_Pos</strong> - Position des Rollladens für die Beschattung (Default: ist abhängig vom Attribut<em>ASC</em> 80/20) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
|
||||||
<li><strong>ASC_Ventilate_Pos</strong> - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut <em>ASC</em> 70/30) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
|
||||||
</p>
|
|
||||||
<strong>In Bezug auf die Verwendung mit Lamellen gibt es folgende ergänzende Parameter</strong>.
|
|
||||||
<ul>
|
|
||||||
<li>Wird die gesamte Position inklusive der Lamellen mit Hilfe einer "festen Zurdnung" angefahren, so z.B. <em>set ROLLONAME Beschattung</em> dann wird hinter dem Positionswert mittels : getrennt die "feste Zuordnung" geschrieben. Beispiel: <em>attr ROLLONAME ASC_Shading_Pos 30:Beschattung</em></li>
|
|
||||||
<li>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: <em>attr ROLLONAME ASC_Shading_Pos 30:75</em>. <strong>Bitte beachtet in diesem Zusammenhang auch das Attribut ASC_SlatPosCmd_SlatDevice wo mindesten die Angabe des SlatPosCMD Voraussetzung ist.</strong></li>
|
|
||||||
</ul>
|
|
||||||
</p></ul>
|
|
||||||
<li><strong>ASC_Shutter_IdleDetection</strong> - <strong>READING:VALUE</strong> 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 <strong>nicht</strong> fährt</li>
|
<li><strong>ASC_Shutter_IdleDetection</strong> - <strong>READING:VALUE</strong> 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 <strong>nicht</strong> fährt</li>
|
||||||
<li><strong>ASC_DriveUpMaxDuration</strong> - die Dauer des Hochfahrens des Rollladens plus 5 Sekunden (default: 60)</li>
|
<li><strong>ASC_DriveUpMaxDuration</strong> - die Dauer des Hochfahrens des Rollladens plus 5 Sekunden (default: 60)</li>
|
||||||
<li><strong>ASC_Drive_Delay</strong> - maximaler Wert für einen zufällig ermittelte Verzögerungswert in Sekunden bei der Berechnung der Fahrzeiten.</li>
|
<li><strong>ASC_Drive_Delay</strong> - maximaler Wert für einen zufällig ermittelte Verzögerungswert in Sekunden bei der Berechnung der Fahrzeiten.</li>
|
||||||
@ -8598,13 +8320,13 @@ sub getBlockAscDrivesAfterManual {
|
|||||||
<li><strong>ASC_Time_Up_Late</strong> - 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!!!</li>
|
<li><strong>ASC_Time_Up_Late</strong> - 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!!!</li>
|
||||||
<li><strong>ASC_Time_Up_WE_Holiday</strong> - Sonnenaufgang frühste Zeit zum Hochfahren am Wochenende und/oder Urlaub (holiday2we wird beachtet). (default: 08:00) ACHTUNG!!! in Verbindung mit Brightness für <em>ASC_Up</em> muss die Uhrzeit kleiner sein wie die Uhrzeit aus <em>ASC_Time_Up_Late</em> !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!</li>
|
<li><strong>ASC_Time_Up_WE_Holiday</strong> - Sonnenaufgang frühste Zeit zum Hochfahren am Wochenende und/oder Urlaub (holiday2we wird beachtet). (default: 08:00) ACHTUNG!!! in Verbindung mit Brightness für <em>ASC_Up</em> muss die Uhrzeit kleiner sein wie die Uhrzeit aus <em>ASC_Time_Up_Late</em> !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!</li>
|
||||||
<li><strong>ASC_Up - astro/time/brightness</strong> - 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)</li>
|
<li><strong>ASC_Up - astro/time/brightness</strong> - 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)</li>
|
||||||
|
<li><strong>ASC_Ventilate_Pos</strong> - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut <em>ASC</em> 70/30) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
||||||
<li><strong>ASC_Ventilate_Window_Open</strong> - auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist (default: on)</li>
|
<li><strong>ASC_Ventilate_Window_Open</strong> - auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist (default: on)</li>
|
||||||
<li><strong>ASC_WiggleValue</strong> - Wert um welchen sich die Position des Rollladens ändern soll (default: 5)</li>
|
<li><strong>ASC_WiggleValue</strong> - Wert um welchen sich die Position des Rollladens ändern soll (default: 5)</li>
|
||||||
<li><strong>ASC_WindParameters - TRIGGERMAX[:HYSTERESE] [DRIVEPOSITION]</strong> / 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')</li>
|
<li><strong>ASC_WindParameters - TRIGGERMAX[:HYSTERESE] [DRIVEPOSITION]</strong> / 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')</li>
|
||||||
<li><strong>ASC_WindowRec_PosAfterDayClosed</strong> - open,lastManual / auf welche Position soll das Rollo nach dem schließen am Tag fahren. Open Position oder letzte gespeicherte manuelle Position (default: open)</li>
|
<li><strong>ASC_WindowRec_PosAfterDayClosed</strong> - open,lastManual / auf welche Position soll das Rollo nach dem schließen am Tag fahren. Open Position oder letzte gespeicherte manuelle Position (default: open)</li>
|
||||||
<li><strong>ASC_WindowRec</strong> - WINDOWREC:[READING], Name des Fensterkontaktes, an dessen Fenster der Rollladen angebracht ist (default: none). Reading ist optional</li>
|
<li><strong>ASC_WindowRec</strong> - WINDOWREC:[READING], Name des Fensterkontaktes, an dessen Fenster der Rollladen angebracht ist (default: none). Reading ist optional</li>
|
||||||
<li><strong>ASC_WindowRec_subType</strong> - Typ des verwendeten Fensterkontaktes: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt) (default: twostate)</li>
|
<li><strong>ASC_WindowRec_subType</strong> - Typ des verwendeten Fensterkontaktes: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt) (default: twostate)</li>
|
||||||
<li><strong>ASC_SlatPosCmd_SlatDevice</strong> - 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.</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
</p>
|
</p>
|
||||||
@ -8688,7 +8410,7 @@ sub getBlockAscDrivesAfterManual {
|
|||||||
],
|
],
|
||||||
"release_status": "testing",
|
"release_status": "testing",
|
||||||
"license": "GPL_2",
|
"license": "GPL_2",
|
||||||
"version": "v0.9.9",
|
"version": "v0.8.27",
|
||||||
"author": [
|
"author": [
|
||||||
"Marko Oldenburg <leongaultier@gmail.com>"
|
"Marko Oldenburg <leongaultier@gmail.com>"
|
||||||
],
|
],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user