diff --git a/fhem/CHANGED b/fhem/CHANGED
index fe0fc7db0..697e38607 100644
--- a/fhem/CHANGED
+++ b/fhem/CHANGED
@@ -1,5 +1,7 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it.
+ - bugfix: 73_AutoShuttersControl: fix commandref and bug in shading function
+ change code
- feature: 76_SMAPortal: statistics data provider of Month, Year and Total
- change: 89_FULLY: Accepts port number in device definition
- change: 93_DbRep: improve get <> versionNotes 2
diff --git a/fhem/FHEM/73_AutoShuttersControl.pm b/fhem/FHEM/73_AutoShuttersControl.pm
index 637ea2a45..667128616 100644
--- a/fhem/FHEM/73_AutoShuttersControl.pm
+++ b/fhem/FHEM/73_AutoShuttersControl.pm
@@ -97,7 +97,6 @@ sub Initialize {
. 'ASC_expert:1 '
. 'ASC_blockAscDrivesAfterManual:0,1 '
. 'ASC_debug:1 '
- . 'ASC_slatDriveCmdInverse:0,1 '
. $readingFnAttributes;
$hash->{NotifyOrderPrefix} = '51-'; # Order Nummer für NotifyFn
$hash->{FW_detailFn} =
@@ -895,7 +894,6 @@ sub Initialize {
ASC_twilightDevice - das Device, welches die Informationen zum Sonnenstand liefert. Wird unter anderem für die Beschattung verwendet.
ASC_windSensor - DEVICE[:READING] - Sensor für die Windgeschwindigkeit. Kombination aus Device und Reading.
- ASC_slatDriveCmdInverse - Vertauscht wie Reihnfolge der Fahrbefehle für Slat und Drive
@@ -1030,7 +1028,7 @@ sub Initialize {
ExternalTriggerPosActive | Rolloposition welche angefahren werden soll wenn der erste externe Trigger aktiv wird. |
ExternalTriggerPosActive2 | Rolloposition welche angefahren werden soll wenn der zweite externe Trigger aktiv wird. |
ExternalTriggerPosInactive | Rolloposition welche angefahren werden soll wenn der externe Trigger inaktiv wird. |
- ExternalTriggerState | aktueller Status des externen Triggers, 0 oder 1 |
+ ExternalTriggerStatus | aktueller Status des externen Triggers, 0 oder 1 |
Delay | konfigurierte Verzögerungswert welcher für die Zufallsberechnung werwendet werden soll |
DelayStart | konfigurierter fester Verzögerungswert |
BlockingTimeAfterManual | konfigurierte Blockzeit nach einer manuellen Fahrt |
@@ -1140,7 +1138,7 @@ sub Initialize {
Übersicht für das Rollladen-Device Setter
- { ascAPIset('SETTER','ROLLODEVICENAME') }
+ { ascAPIset('SETTER','ROLLODEVICENAME','VALUE') }
Setter | Erläuterung |
@@ -1232,23 +1230,6 @@ sub Initialize {
RainWaitingTime | |
BlockAscDrivesAfterManual | |
-
- Übersicht für das ASC Device Setter
-
- { ascAPIget('SETTER') }
-
-
- Setter | Erläuterung |
- AutoAstroModeEvening | |
- AutoAstroModeEveningHorizon | |
- AutoAstroModeMorning | |
- AutoAstroModeMorningHorizon | |
- AutoShuttersControlMorning | |
- AutoShuttersControlEvening | |
- AutoShuttersControlComfort | |
- FreezeTemp | |
- BlockAscDrivesAfterManual | 0,1 |
-
=end html_DE
@@ -1272,7 +1253,7 @@ sub Initialize {
],
"release_status": "testing",
"license": "GPL_2",
- "version": "v0.10.1",
+ "version": "v0.10.2",
"author": [
"Marko Oldenburg "
],
diff --git a/fhem/lib/FHEM/Automation/ShuttersControl.pm b/fhem/lib/FHEM/Automation/ShuttersControl.pm
index 476a25b34..e5de277dd 100644
--- a/fhem/lib/FHEM/Automation/ShuttersControl.pm
+++ b/fhem/lib/FHEM/Automation/ShuttersControl.pm
@@ -98,7 +98,7 @@ if ($@) {
# JSON preference order
local $ENV{PERL_JSON_BACKEND} =
'Cpanel::JSON::XS,JSON::XS,JSON::PP,JSON::backportPP'
- unless ( defined( $ENV{PERL_JSON_BACKEND} ) );
+ if ( !defined( $ENV{PERL_JSON_BACKEND} ) );
require JSON;
import JSON qw( decode_json encode_json );
@@ -317,8 +317,7 @@ sub ascAPIset {
if ( defined($shutterDev)
&& $shutterDev
- && defined($value)
- && $value )
+ && defined($value) )
{
$shutters->setShuttersDev($shutterDev);
$shutters->$setter($value);
@@ -331,7 +330,7 @@ sub Define {
my $hash = shift // return;
my $aArg = shift // return;
- return $@ unless ( FHEM::Meta::SetInternals($hash) );
+ return $@ if ( !FHEM::Meta::SetInternals($hash) );
use version 0.60; our $VERSION = FHEM::Meta::Get( $hash, 'version' );
return 'only one AutoShuttersControl instance allowed'
@@ -434,32 +433,30 @@ sub Notify {
if ( $ascDev->getASCenable eq 'none' );
CommandAttr( undef,
$name . ' devStateIcon { ShuttersControl_DevStateIcon($name) }' )
- unless (
+ if (
AttrVal(
$name, 'devStateIcon',
'{ ShuttersControl_DevStateIcon($name) }'
- ) eq '{ ShuttersControl_DevStateIcon($name) }'
+ ) ne '{ ShuttersControl_DevStateIcon($name) }'
);
CommandDeleteAttr( undef, $name . ' event-on-change-reading' )
- unless (
- AttrVal( $name, 'event-on-change-reading', 'none' ) eq 'none' );
+ if ( AttrVal( $name, 'event-on-change-reading', 'none' ) ne 'none' );
CommandDeleteAttr( undef, $name . ' event-on-update-reading' )
- unless (
- AttrVal( $name, 'event-on-update-reading', 'none' ) eq 'none' );
+ if ( AttrVal( $name, 'event-on-update-reading', 'none' ) ne 'none' );
# Ist der Event ein globaler und passt zum Rest der Abfrage oben wird nach neuen Rolläden Devices gescannt und eine Liste im Rolladenmodul sortiert nach Raum generiert
ShuttersDeviceScan($hash)
- unless ( ReadingsVal( $name, 'userAttrList', 'none' ) eq 'none' );
+ if ( ReadingsVal( $name, 'userAttrList', 'none' ) ne 'none' );
}
return
- unless ( ref( $hash->{helper}{shuttersList} ) eq 'ARRAY'
- && scalar( @{ $hash->{helper}{shuttersList} } ) > 0 );
+ if ( ref( $hash->{helper}{shuttersList} ) ne 'ARRAY'
+ || scalar( @{ $hash->{helper}{shuttersList} } ) == 0 );
my $posReading = $shutters->getPosCmd;
if ( $devname eq $name ) {
if ( grep m{^userAttrList:.rolled.out$}xms, @{$events} ) {
- unless ( scalar( @{ $hash->{helper}{shuttersList} } ) == 0 ) {
+ if ( scalar( @{ $hash->{helper}{shuttersList} } ) > 0 ) {
WriteReadingsShuttersList($hash);
UserAttributs_Readings_ForShutters( $hash, 'add' );
InternalTimer(
@@ -771,7 +768,7 @@ sub ShuttersDeviceScan {
CommandDeleteReading( undef, $name . ' .*_nextAstroTimeEvent' );
- unless ( scalar(@list) > 0 ) {
+ if ( scalar(@list) == 0 ) {
readingsBeginUpdate($hash);
readingsBulkUpdate( $hash, 'userAttrList', 'none' );
readingsBulkUpdate( $hash, 'state', 'no shutters found' );
@@ -1229,7 +1226,7 @@ sub EventProcessingWindowRec {
elsif ($match =~ m{[Oo]pen|false}xms
&& $shutters->getSubTyp eq 'threestate' )
{
- my $posValue = $shutters->getStatus;
+ my $posValue = $shutters->getStatus;
my $setLastDrive;
if ( $ascDev->getAutoShuttersControlComfort eq 'on'
and
@@ -1273,12 +1270,12 @@ sub EventProcessingRoommate {
"AutoShuttersControl ($name) - EventProcessingRoommate: $shuttersDev und Events $events"
);
- my $getModeUp = $shutters->getModeUp;
- my $getModeDown = $shutters->getModeDown;
- my $getRoommatesStatus = $shutters->getRoommatesStatus;
- my $getRoommatesLastStatus = $shutters->getRoommatesLastStatus;
- my $event = $1;
- my $posValue = $shutters->getStatus;
+ my $getModeUp = $shutters->getModeUp;
+ my $getModeDown = $shutters->getModeDown;
+ my $getRoommatesStatus = $shutters->getRoommatesStatus;
+ my $getRoommatesLastStatus = $shutters->getRoommatesLastStatus;
+ my $event = $1;
+ my $posValue = $shutters->getStatus;
if (
( $event eq 'home' || $event eq 'awoken' )
@@ -1902,49 +1899,108 @@ sub EventProcessingBrightness {
);
return EventProcessingShadingBrightness( $hash, $shuttersDev, $events )
- unless (
+ if (
(
- $shutters->getDown eq 'brightness'
- || $shutters->getUp eq 'brightness'
+ $shutters->getDown ne 'brightness'
+ && $shutters->getUp ne 'brightness'
)
|| (
(
+ $shutters->getDown eq 'brightness'
+ || $shutters->getUp eq 'brightness'
+ )
+ && (
(
(
- int( gettimeofday() / 86400 ) != int(
- computeAlignTime( '24:00',
- $shutters->getTimeUpEarly ) / 86400
+ (
+ int( gettimeofday() / 86400 ) == int(
+ computeAlignTime( '24:00',
+ $shutters->getTimeUpEarly ) / 86400
+ )
+ && (
+ !IsWe()
+ || (
+ IsWe()
+ && $ascDev->getSunriseTimeWeHoliday eq 'off'
+ || (
+ $ascDev->getSunriseTimeWeHoliday eq 'on'
+ && $shutters->getTimeUpWeHoliday eq
+ '01:25' )
+ )
+ )
)
- && (
- !IsWe()
- || ( IsWe()
- && $ascDev->getSunriseTimeWeHoliday eq 'off' )
+ || (
+ int( gettimeofday() / 86400 ) == int(
+ computeAlignTime( '24:00',
+ $shutters->getTimeUpWeHoliday ) / 86400
+ )
+ && IsWe()
+ && $ascDev->getSunriseTimeWeHoliday eq 'on'
+ && $shutters->getTimeUpWeHoliday ne '01:25'
)
)
+ && int( gettimeofday() / 86400 ) == int(
+ computeAlignTime( '24:00', $shutters->getTimeUpLate ) /
+ 86400
+ )
+
|| (
- int( gettimeofday() / 86400 ) != int(
- computeAlignTime( '24:00',
- $shutters->getTimeUpWeHoliday ) / 86400
+ (
+ int( gettimeofday() / 86400 ) != int(
+ computeAlignTime( '24:00',
+ $shutters->getTimeUpEarly ) / 86400
+ )
+ && (
+ !IsWe()
+ || (
+ IsWe()
+ && $ascDev->getSunriseTimeWeHoliday eq 'off'
+ || (
+ $ascDev->getSunriseTimeWeHoliday eq 'on'
+ && $shutters->getTimeUpWeHoliday eq
+ '01:25' )
+ )
+ )
)
- && IsWe()
- && $ascDev->getSunriseTimeWeHoliday eq 'on'
- && $shutters->getTimeUpWeHoliday eq '01:25'
+ || (
+ int( gettimeofday() / 86400 ) != int(
+ computeAlignTime( '24:00',
+ $shutters->getTimeUpWeHoliday ) / 86400
+ )
+ && IsWe()
+ && $ascDev->getSunriseTimeWeHoliday eq 'on'
+ && $shutters->getTimeUpWeHoliday ne '01:25'
+ )
+ )
+ && int( gettimeofday() / 86400 ) != int(
+ computeAlignTime( '24:00', $shutters->getTimeUpLate ) /
+ 86400
)
)
- && int( gettimeofday() / 86400 ) == int(
- computeAlignTime( '24:00', $shutters->getTimeUpLate ) /
- 86400
+ && (
+ (
+ int( gettimeofday() / 86400 ) == int(
+ computeAlignTime(
+ '24:00', $shutters->getTimeDownEarly
+ ) / 86400
+ )
+ && int( gettimeofday() / 86400 ) == int(
+ computeAlignTime( '24:00', $shutters->getTimeDownLate
+ ) / 86400
+ )
)
- )
- || (
- int( gettimeofday() / 86400 ) != int(
- computeAlignTime( '24:00', $shutters->getTimeDownEarly ) /
- 86400
- )
- && int( gettimeofday() / 86400 ) == int(
- computeAlignTime( '24:00', $shutters->getTimeDownLate ) /
- 86400
+ || (
+ int( gettimeofday() / 86400 ) != int(
+ computeAlignTime(
+ '24:00', $shutters->getTimeDownEarly
+ ) / 86400
+ )
+ && int( gettimeofday() / 86400 ) != int(
+ computeAlignTime( '24:00', $shutters->getTimeDownLate
+ ) / 86400
+ )
)
+ )
)
)
);
@@ -2089,8 +2145,8 @@ sub EventProcessingBrightness {
$shutters->setLastDrive('brightness privacy day open');
ShuttersCommandSet( $hash, $shuttersDev,
$shutters->getPrivacyUpPos )
- unless (
- !$shutters->getQueryShuttersPos(
+ if (
+ $shutters->getQueryShuttersPos(
$shutters->getPrivacyUpPos
)
);
@@ -2166,7 +2222,7 @@ sub EventProcessingBrightness {
|| $shutters->getModeDown eq 'always'
)
{
- my $posValue = $shutters->getStatus;
+ my $posValue = $shutters->getStatus;
my $lastDrive;
## Setzt den PrivacyDown Modus für die Sichtschutzfahrt auf den Status 0
@@ -2224,8 +2280,8 @@ sub EventProcessingBrightness {
if (
$shutters->getPrivacyDownStatus != 2
- && ( $posValue != $shutters->getStatus
- || $shutters->getSelfDefenseState )
+# && ( $posValue != $shutters->getStatus
+# || $shutters->getSelfDefenseState )
)
{
$shutters->setSunrise(0);
@@ -2243,7 +2299,7 @@ sub EventProcessingBrightness {
}
else {
EventProcessingShadingBrightness( $hash, $shuttersDev, $events )
- unless ( $shutters->getPrivacyDownStatus == 2 );
+ if ( $shutters->getPrivacyDownStatus != 2 );
ASC_Debug( 'EventProcessingBrightness: '
. $shutters->getShuttersDev
@@ -2253,7 +2309,7 @@ sub EventProcessingBrightness {
}
else {
EventProcessingShadingBrightness( $hash, $shuttersDev, $events )
- unless ( $shutters->getPrivacyDownStatus == 2 );
+ if ( $shutters->getPrivacyDownStatus != 2 );
ASC_Debug( 'EventProcessingBrightness: '
. $shutters->getShuttersDev
@@ -2909,13 +2965,13 @@ sub EventProcessingExternalTriggerDevice {
if ( $1 eq $triggerValActive2 ) {
$shutters->setLastDrive('external trigger2 device active');
$shutters->setNoDelay(1);
- $shutters->setExternalTriggerState(1);
+ $shutters->setExternalTriggerStatus(1);
ShuttersCommandSet( $hash, $shuttersDev, $triggerPosActive2 );
}
else {
$shutters->setLastDrive('external trigger device active');
$shutters->setNoDelay(1);
- $shutters->setExternalTriggerState(1);
+ $shutters->setExternalTriggerStatus(1);
ShuttersCommandSet( $hash, $shuttersDev, $triggerPosActive );
}
}
@@ -2933,7 +2989,7 @@ sub EventProcessingExternalTriggerDevice {
$shutters->setLastDrive('external trigger device inactive');
$shutters->setNoDelay(1);
- $shutters->setExternalTriggerState(1);
+ $shutters->setExternalTriggerStatus(1);
ShuttersCommandSet(
$hash,
$shuttersDev,
@@ -2960,7 +3016,6 @@ sub ShuttersCommandSet {
if (
(
- # $posValue == $shutters->getShadingPos &&
CheckIfShuttersWindowRecOpen($shuttersDev) == 2
&& $shutters->getShuttersPlace eq 'terrace'
&& ( $shutters->getLockOut eq 'soft'
@@ -2968,8 +3023,6 @@ sub ShuttersCommandSet {
&& !$shutters->getQueryShuttersPos($posValue)
)
|| (
- # $posValue != $shutters->getShadingPos
- # && (
(
$shutters->getPartyMode eq 'on'
&& $ascDev->getPartyMode eq 'on'
@@ -2999,9 +3052,7 @@ sub ShuttersCommandSet {
&& $shutters->getShuttersPlace eq 'terrace'
&& !$shutters->getQueryShuttersPos($posValue) )
|| ( $shutters->getRainProtectionStatus eq 'protected'
- && $shutters->getWindProtectionStatus eq 'protected' )
-
- # )
+ || $shutters->getWindProtectionStatus eq 'protected' )
)
)
{
@@ -3034,9 +3085,10 @@ sub ShuttersCommandSet {
## Sub welche die InternalTimer nach entsprechenden Sunset oder Sunrise zusammen stellt
sub CreateSunRiseSetShuttersTimer {
- my $hash = shift;
+ my $hash = shift;
my $shuttersDev = shift // return Log3( $hash->{NAME}, 1,
-"AutoShuttersControl ($hash->{NAME}) - Error in function CreateSunRiseSetShuttersTimer. No shuttersDev given");
+"AutoShuttersControl ($hash->{NAME}) - Error in function CreateSunRiseSetShuttersTimer. No shuttersDev given"
+ );
my $name = $hash->{NAME};
my $shuttersDevHash = $defs{$shuttersDev};
@@ -3102,7 +3154,7 @@ sub CreateSunRiseSetShuttersTimer {
if ( defined( $shutters->getInTimerFuncHash ) );
## Setzt den Privacy Modus für die Sichtschutzfahrt auf den Status 0
- ## 1 bedeutet das PrivacyDown Timer aktiviert wurde, 2 beudet das er im privacyDown ist
+ ## 1 bedeutet das Privacy Timer aktiviert wurde, 2 beudet das er im privacy ist
## also das Rollo in privacy Position steht und VOR der endgültigen Nacht oder Tagfahrt
$shutters->setPrivacyUpStatus(0)
if ( !defined( $shutters->getPrivacyUpStatus ) );
@@ -3355,8 +3407,8 @@ sub SunSetShuttersAfterTimerFn {
$shutters->setLastDrive('timer privacy night close');
ShuttersCommandSet( $hash, $shuttersDev,
$shutters->getPrivacyDownPos )
- unless (
- $shutters->getQueryShuttersPos( $shutters->getPrivacyDownPos )
+ if (
+ !$shutters->getQueryShuttersPos( $shutters->getPrivacyDownPos )
);
}
else {
@@ -3378,7 +3430,7 @@ sub SunSetShuttersAfterTimerFn {
}
}
- unless ( $shutters->getPrivacyDownStatus == 2 ) {
+ if ( $shutters->getPrivacyDownStatus != 2 ) {
$shutters->setSunrise(0);
$shutters->setSunset(1);
}
@@ -3456,8 +3508,8 @@ sub SunRiseShuttersAfterTimerFn {
$shutters->setLastDrive('timer privacy day open');
ShuttersCommandSet( $hash, $shuttersDev,
$shutters->getPrivacyUpPos )
- unless (
- !$shutters->getQueryShuttersPos(
+ if (
+ $shutters->getQueryShuttersPos(
$shutters->getPrivacyUpPos
)
);
@@ -3482,7 +3534,7 @@ sub SunRiseShuttersAfterTimerFn {
}
}
- unless ( $shutters->getPrivacyUpStatus == 2 ) {
+ if ( $shutters->getPrivacyUpStatus != 2 ) {
$shutters->setSunrise(1);
$shutters->setSunset(0);
}
@@ -4559,11 +4611,11 @@ sub _SetCmdFn {
my $idleDetection = $shutters->getIdleDetection;
return
- unless (
- $shutters->getASCenable eq 'on'
- && $ascDev->getASCenable eq 'on'
- && ( $idleDetection =~ m{^$idleDetectionValue$}xms
- || $idleDetection eq 'none' )
+ if (
+ $shutters->getASCenable eq 'off'
+ && $ascDev->getASCenable eq 'off'
+ && ( $idleDetection !~ m{^$idleDetectionValue$}xms
+ || $idleDetection ne 'none' )
);
if ( $shutters->getStatus != $posValue ) {
@@ -4642,63 +4694,32 @@ sub _SetCmdFn {
}
}
- if ( $ascDev->getSlatDriveCmdInverse
- && $slatPos > -1
- && $shutters->getSlatPosCmd ne 'none' )
- {
- CommandSet(
- undef,
- (
- $shutters->getSlatDevice ne 'none'
- ? $shutters->getSlatDevice
- : $shuttersDev
- )
- . ' '
- . $shutters->getSlatPosCmd . ' '
- . $slatPos
- );
-
- InternalTimer(
- gettimeofday() + 3,
- sub() {
- CommandSet( undef,
- $shuttersDev
- . ':FILTER='
- . $shutters->getPosCmd . '!='
- . $posValue . ' '
- . $driveCommand );
- },
+ CommandSet( undef,
$shuttersDev
- );
- }
- else {
- CommandSet( undef,
- $shuttersDev
- . ':FILTER='
- . $shutters->getPosCmd . '!='
- . $posValue . ' '
- . $driveCommand );
+ . ':FILTER='
+ . $shutters->getPosCmd . '!='
+ . $posValue . ' '
+ . $driveCommand );
- InternalTimer(
- gettimeofday() + 3,
- sub() {
- CommandSet(
- undef,
- (
- $shutters->getSlatDevice ne 'none'
- ? $shutters->getSlatDevice
- : $shuttersDev
- )
- . ' '
- . $shutters->getSlatPosCmd . ' '
- . $slatPos
- );
- },
- $shuttersDev
- )
- if ( $slatPos > -1
- && $shutters->getSlatPosCmd ne 'none' );
- }
+ InternalTimer(
+ gettimeofday() + 3,
+ sub() {
+ CommandSet(
+ undef,
+ (
+ $shutters->getSlatDevice ne 'none'
+ ? $shutters->getSlatDevice
+ : $shuttersDev
+ )
+ . ' '
+ . $shutters->getSlatPosCmd . ' '
+ . $slatPos
+ );
+ },
+ $shuttersDev
+ )
+ if ( $slatPos > -1
+ && $shutters->getSlatPosCmd ne 'none' );
$shutters->setSelfDefenseAbsent( 0, 0 )
if (!$shutters->getSelfDefenseAbsent
@@ -4721,7 +4742,7 @@ sub _setShuttersLastDriveDelayed {
sub ASC_Debug {
return
- unless ( AttrVal( $ascDev->getName, 'ASC_debug', 0 ) );
+ if ( !AttrVal( $ascDev->getName, 'ASC_debug', 0 ) );
my $debugMsg = shift;
my $debugTimestamp = strftime( "%Y.%m.%e %T", localtime(time) );
@@ -4773,7 +4794,7 @@ sub PrivacyUpTime {
strftime( "%e.%m.%Y - %H:%M", localtime($privacyUpUnixtime) ), 1 );
## Setzt den PrivacyUp Modus für die Sichtschutzfahrt auf den Status 1
## und gibt die Unixtime für die nächste Fahrt korrekt zurück
- unless ( $shutters->getPrivacyUpStatus == 2 ) {
+ if ( $shutters->getPrivacyUpStatus != 2 ) {
$shutters->setPrivacyUpStatus(1);
$shuttersSunriseUnixtime = $privacyUpUnixtime;
}
@@ -4817,7 +4838,7 @@ sub PrivacyDownTime {
1 );
## Setzt den PrivacyDown Modus für die Sichtschutzfahrt auf den Status 1
## und gibt die Unixtime für die nächste Fahrt korrekt zurück
- unless ( $shutters->getPrivacyDownStatus == 2 ) {
+ if ( $shutters->getPrivacyDownStatus != 2 ) {
$shutters->setPrivacyDownStatus(1);
$shuttersSunsetUnixtime = $privacyDownUnixtime;
}
@@ -4964,7 +4985,6 @@ sub _CheckShuttersConditionsForShadingFn {
my $warnMessage;
my $infoMessage;
-
$infoMessage .= (
$shutters->getShadingMode ne 'off'
&& $ascDev->getAutoShuttersControlShading eq 'on'
diff --git a/fhem/lib/FHEM/Automation/ShuttersControl/Shutters.pm b/fhem/lib/FHEM/Automation/ShuttersControl/Shutters.pm
index 8a82c9f41..3721b5bed 100644
--- a/fhem/lib/FHEM/Automation/ShuttersControl/Shutters.pm
+++ b/fhem/lib/FHEM/Automation/ShuttersControl/Shutters.pm
@@ -168,7 +168,7 @@ sub setDriveCmd {
$posValue)
&& !$FHEM::Automation::ShuttersControl::shutters->getAdvDelay
&& !$FHEM::Automation::ShuttersControl::shutters
- ->getExternalTriggerState
+ ->getExternalTriggerStatus
&& !$FHEM::Automation::ShuttersControl::shutters
->getSelfDefenseState
)
@@ -177,9 +177,9 @@ sub setDriveCmd {
$FHEM::Automation::ShuttersControl::shutters->setDelayCmd($posValue);
$FHEM::Automation::ShuttersControl::ascDev->setDelayCmdReading;
$FHEM::Automation::ShuttersControl::shutters->setNoDelay(0);
- $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerState(0)
+ $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0)
if ( $FHEM::Automation::ShuttersControl::shutters
- ->getExternalTriggerState );
+ ->getExternalTriggerStatus );
FHEM::Automation::ShuttersControl::ASC_Debug( 'setDriveCmd: '
. $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
@@ -193,9 +193,9 @@ sub setDriveCmd {
if ( $FHEM::Automation::ShuttersControl::shutters->getDelayCmd ne
'none' )
; # setzt den Wert auf none da der Rolladen nun gesteuert werden kann.
- $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerState(0)
+ $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0)
if ( $FHEM::Automation::ShuttersControl::shutters
- ->getExternalTriggerState );
+ ->getExternalTriggerStatus );
### antifreeze Routine
if ( $FHEM::Automation::ShuttersControl::shutters->getAntiFreezeStatus >
@@ -453,6 +453,20 @@ sub setAdvDelay {
return;
}
+sub getExternalTriggerStatus {
+ my $self = shift;
+
+ return (
+ (
+ defined(
+ $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{event}
+ )
+ and
+ $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{event}
+ ) ? 1 : 0
+ );
+}
+
sub getHomemode {
my $self = shift;
@@ -872,7 +886,7 @@ sub setRainProtectionStatus { # Werte protected, unprotected
return;
}
-sub setExternalTriggerState {
+sub setExternalTriggerStatus {
my $self = shift;
my $value = shift;
diff --git a/fhem/lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm b/fhem/lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm
index 6126ab845..cbd95de6f 100644
--- a/fhem/lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm
+++ b/fhem/lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm
@@ -110,9 +110,10 @@ sub _getPosition {
);
$posAssignment = (
- $posAssignment =~ m{\A\d+(\.\d+)?\z}xms
- ? $posAssignment
- : 'none'
+ defined($posAssignment)
+ && $posAssignment =~ m{\A\d+(\.\d+)?\z}xms
+ ? $posAssignment
+ : 'none'
);
}
else {
@@ -1198,20 +1199,6 @@ sub getExternalTriggerPosInactive {
->{posinactive};
}
-sub getExternalTriggerState {
- my $self = shift;
-
- return (
- (
- defined(
- $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{event}
- )
- and
- $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{event}
- ) ? 1 : 0
- );
-}
-
sub setDelay {
my $self = shift;
my $attrVal = shift;