change modul header

This commit is contained in:
Marko Oldenburg 2022-01-01 08:55:31 +01:00
parent 4aa24587a5
commit 9a1b6acad3
17 changed files with 828 additions and 871 deletions

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@ -81,7 +81,7 @@ sub Initialize {
$hash->{UndefFn} = \&FHEM::Automation::ShuttersControl::Undef; $hash->{UndefFn} = \&FHEM::Automation::ShuttersControl::Undef;
$hash->{DeleteFn} = \&FHEM::Automation::ShuttersControl::Delete; $hash->{DeleteFn} = \&FHEM::Automation::ShuttersControl::Delete;
$hash->{ShutdownFn} = \&FHEM::Automation::ShuttersControl::Shutdown; $hash->{ShutdownFn} = \&FHEM::Automation::ShuttersControl::Shutdown;
$hash->{AttrList} = $hash->{AttrList} =
'ASC_tempSensor ' 'ASC_tempSensor '
. 'ASC_brightnessDriveUpDown ' . 'ASC_brightnessDriveUpDown '
. 'ASC_autoShuttersControlMorning:on,off ' . 'ASC_autoShuttersControlMorning:on,off '

View File

@ -1,16 +1,16 @@
UPD 2021-12-06_06:34:51 115678 FHEM/73_AutoShuttersControl.pm UPD 2022-01-01_08:13:19 115707 FHEM/73_AutoShuttersControl.pm
UPD 2021-11-29_15:01:56 75264 lib/FHEM/Automation/ShuttersControl.pm UPD 2022-01-01_08:49:52 75212 lib/FHEM/Automation/ShuttersControl.pm
UPD 2021-10-09_07:12:54 2657 lib/FHEM/Automation/ShuttersControl/Dev.pm UPD 2022-01-01_08:30:27 2693 lib/FHEM/Automation/ShuttersControl/Dev.pm
UPD 2021-10-09_07:12:54 2494 lib/FHEM/Automation/ShuttersControl/Roommate.pm UPD 2022-01-01_08:47:26 2405 lib/FHEM/Automation/ShuttersControl/Roommate.pm
UPD 2021-10-24_07:33:53 31900 lib/FHEM/Automation/ShuttersControl/Shutters.pm UPD 2022-01-01_08:47:58 32020 lib/FHEM/Automation/ShuttersControl/Shutters.pm
UPD 2021-12-11_14:23:02 25126 lib/FHEM/Automation/ShuttersControl/Shading.pm UPD 2022-01-01_08:42:08 25426 lib/FHEM/Automation/ShuttersControl/Shading.pm
UPD 2021-12-11_14:23:02 112344 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm UPD 2022-01-01_08:33:11 112138 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
UPD 2021-11-14_14:03:06 40094 lib/FHEM/Automation/ShuttersControl/Helper.pm UPD 2022-01-01_08:37:31 40342 lib/FHEM/Automation/ShuttersControl/Helper.pm
UPD 2021-10-09_07:12:54 2173 lib/FHEM/Automation/ShuttersControl/Window.pm UPD 2022-01-01_08:49:33 2211 lib/FHEM/Automation/ShuttersControl/Window.pm
UPD 2021-10-09_07:12:54 11739 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm UPD 2022-01-01_08:29:01 11716 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm
UPD 2021-10-09_07:12:54 7249 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm UPD 2022-01-01_08:28:05 7265 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm
UPD 2021-10-27_08:50:46 52649 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm UPD 2022-01-01_08:26:38 52775 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm
UPD 2021-10-09_07:12:54 2901 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm UPD 2022-01-01_08:24:22 2799 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm
UPD 2021-10-09_07:12:54 3978 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm UPD 2022-01-01_08:23:02 3887 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm
UPD 2021-10-09_07:12:54 2286 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm UPD 2022-01-01_08:20:59 2200 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm
UPD 2021-12-06_06:34:51 6965 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm UPD 2022-01-01_08:38:43 7087 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemsupport@cooltux.net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@ -76,7 +76,8 @@ use Date::Parse;
use FHEM::Automation::ShuttersControl::Shutters; use FHEM::Automation::ShuttersControl::Shutters;
use FHEM::Automation::ShuttersControl::Dev; use FHEM::Automation::ShuttersControl::Dev;
use FHEM::Automation::ShuttersControl::Shading qw (CheckASC_ConditionsForShadingFn); use FHEM::Automation::ShuttersControl::Shading
qw (CheckASC_ConditionsForShadingFn);
use FHEM::Automation::ShuttersControl::EventProcessingFunctions qw (:ALL); use FHEM::Automation::ShuttersControl::EventProcessingFunctions qw (:ALL);
use FHEM::Automation::ShuttersControl::Helper qw (:ALL); use FHEM::Automation::ShuttersControl::Helper qw (:ALL);
@ -86,27 +87,20 @@ eval {
require JSON::MaybeXS; require JSON::MaybeXS;
import JSON::MaybeXS qw( decode_json encode_json ); import JSON::MaybeXS qw( decode_json encode_json );
1; 1;
}; } or do {
if ($@) {
$@ = undef;
# try to use JSON wrapper # try to use JSON wrapper
# for chance of better performance # for chance of better performance
eval { eval {
# JSON preference order # JSON preference order
local $ENV{PERL_JSON_BACKEND} = local $ENV{PERL_JSON_BACKEND} =
'Cpanel::JSON::XS,JSON::XS,JSON::PP,JSON::backportPP' 'Cpanel::JSON::XS,JSON::XS,JSON::PP,JSON::backportPP'
if ( !defined( $ENV{PERL_JSON_BACKEND} ) ); unless ( defined( $ENV{PERL_JSON_BACKEND} ) );
require JSON; require JSON;
import JSON qw( decode_json encode_json ); import JSON qw( decode_json encode_json );
1; 1;
}; } or do {
if ($@) {
$@ = undef;
# In rare cases, Cpanel::JSON::XS may # In rare cases, Cpanel::JSON::XS may
# be installed but JSON|JSON::MaybeXS not ... # be installed but JSON|JSON::MaybeXS not ...
@ -114,10 +108,7 @@ if ($@) {
require Cpanel::JSON::XS; require Cpanel::JSON::XS;
import Cpanel::JSON::XS qw(decode_json encode_json); import Cpanel::JSON::XS qw(decode_json encode_json);
1; 1;
}; } or do {
if ($@) {
$@ = undef;
# In rare cases, JSON::XS may # In rare cases, JSON::XS may
# be installed but JSON not ... # be installed but JSON not ...
@ -125,10 +116,7 @@ if ($@) {
require JSON::XS; require JSON::XS;
import JSON::XS qw(decode_json encode_json); import JSON::XS qw(decode_json encode_json);
1; 1;
}; } or do {
if ($@) {
$@ = undef;
# Fallback to built-in JSON which SHOULD # Fallback to built-in JSON which SHOULD
# be available since 5.014 ... # be available since 5.014 ...
@ -136,20 +124,17 @@ if ($@) {
require JSON::PP; require JSON::PP;
import JSON::PP qw(decode_json encode_json); import JSON::PP qw(decode_json encode_json);
1; 1;
}; } or do {
if ($@) {
$@ = undef;
# Fallback to JSON::backportPP in really rare cases # Fallback to JSON::backportPP in really rare cases
require JSON::backportPP; require JSON::backportPP;
import JSON::backportPP qw(decode_json encode_json); import JSON::backportPP qw(decode_json encode_json);
1; 1;
} };
} };
} };
} };
} };
## Import der FHEM Funktionen ## Import der FHEM Funktionen
#-- Run before package compilation #-- Run before package compilation
@ -227,8 +212,8 @@ our %userAttrList = (
'ASC_LockOut:soft,hard,off' => '-', 'ASC_LockOut:soft,hard,off' => '-',
'ASC_LockOut_Cmd:inhibit,blocked,protection' => '-', 'ASC_LockOut_Cmd:inhibit,blocked,protection' => '-',
'ASC_BlockingTime_afterManual' => '-', 'ASC_BlockingTime_afterManual' => '-',
'ASC_BlockingTime_beforeNightClose' => '-', 'ASC_BlockingTime_beforeNightClose' => '-',
'ASC_BlockingTime_beforeDayOpen' => '-', 'ASC_BlockingTime_beforeDayOpen' => '-',
'ASC_BrightnessSensor' => '-', 'ASC_BrightnessSensor' => '-',
'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100' => [ '', 80, 20 ], 'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100' => [ '', 80, 20 ],
'ASC_Shading_Mode:absent,always,off,home' => '-', 'ASC_Shading_Mode:absent,always,off,home' => '-',
@ -366,7 +351,7 @@ sub Define {
$name . ' devStateIcon { ShuttersControl_DevStateIcon($name) }' ) $name . ' devStateIcon { ShuttersControl_DevStateIcon($name) }' )
if ( AttrVal( $name, 'devStateIcon', 'none' ) eq 'none' ); if ( AttrVal( $name, 'devStateIcon', 'none' ) eq 'none' );
addToAttrList('ASC:0,1,2','AutoShuttersControl'); addToAttrList( 'ASC:0,1,2', 'AutoShuttersControl' );
Log3( $name, 3, "AutoShuttersControl ($name) - defined" ); Log3( $name, 3, "AutoShuttersControl ($name) - defined" );
@ -572,7 +557,7 @@ sub Set {
elsif ( lc $cmd eq 'controlshading' ) { elsif ( lc $cmd eq 'controlshading' ) {
return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 );
my $response = CheckASC_ConditionsForShadingFn($hash,$aArg->[0]); my $response = CheckASC_ConditionsForShadingFn( $hash, $aArg->[0] );
readingsSingleUpdate( readingsSingleUpdate(
$hash, $cmd, $hash, $cmd,
( (
@ -703,6 +688,7 @@ sub ShuttersDeviceScan {
$shutters->setAttrUpdateChanges( 'ASC_ShuttersPlace', $shutters->setAttrUpdateChanges( 'ASC_ShuttersPlace',
AttrVal( $shuttersDev, 'ASC_ShuttersPlace', 'none' ) ); AttrVal( $shuttersDev, 'ASC_ShuttersPlace', 'none' ) );
delFromDevAttrList( $shuttersDev, 'ASC_ShuttersPlace' ); delFromDevAttrList( $shuttersDev, 'ASC_ShuttersPlace' );
# $shutters->setAttrUpdateChanges( 'ASC_Down', # $shutters->setAttrUpdateChanges( 'ASC_Down',
# AttrVal( $shuttersDev, 'ASC_Down', 'none' ) ); # AttrVal( $shuttersDev, 'ASC_Down', 'none' ) );
# delFromDevAttrList( $shuttersDev, 'ASC_Down' ); # delFromDevAttrList( $shuttersDev, 'ASC_Down' );
@ -775,7 +761,8 @@ sub WriteReadingsShuttersList {
readingsBulkUpdate( readingsBulkUpdate(
$hash, $hash,
'room_' 'room_'
. ::makeReadingName( AttrVal( $shuttersDev, 'room', 'unsorted' ) ), . ::makeReadingName(
AttrVal( $shuttersDev, 'room', 'unsorted' ) ),
ReadingsVal( ReadingsVal(
$name, $name,
'room_' 'room_'
@ -801,7 +788,8 @@ sub WriteReadingsShuttersList {
readingsBulkUpdate( readingsBulkUpdate(
$hash, $hash,
'room_' 'room_'
. ::makeReadingName( AttrVal( $shuttersDev, 'room', 'unsorted' ) ), . ::makeReadingName(
AttrVal( $shuttersDev, 'room', 'unsorted' ) ),
$shuttersDev $shuttersDev
) )
if ( if (
@ -1014,11 +1002,13 @@ sub ShuttersCommandSet {
|| $shutters->getLockOut eq 'hard' ) || $shutters->getLockOut eq 'hard' )
&& !$shutters->getQueryShuttersPos($posValue) && !$shutters->getQueryShuttersPos($posValue)
) )
|| ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2 || (
CheckIfShuttersWindowRecOpen($shuttersDev) == 2
&& $shutters->getShuttersPlace eq 'terrace' && $shutters->getShuttersPlace eq 'terrace'
&& !$shutters->getQueryShuttersPos($posValue) && !$shutters->getQueryShuttersPos($posValue)
&& ( $shutters->getLockOut eq 'soft' && ( $shutters->getLockOut eq 'soft'
|| $shutters->getLockOut eq 'hard' ) ) || $shutters->getLockOut eq 'hard' )
)
|| ( $shutters->getRainProtectionStatus eq 'protected' || ( $shutters->getRainProtectionStatus eq 'protected'
|| $shutters->getWindProtectionStatus eq 'protected' ) || $shutters->getWindProtectionStatus eq 'protected' )
) )
@ -1068,7 +1058,7 @@ sub CreateSunRiseSetShuttersTimer {
return if ( IsDisabled($name) ); return if ( IsDisabled($name) );
my $shuttersSunriseUnixtime = ShuttersSunrise( $shuttersDev, 'unix' ) + 1; my $shuttersSunriseUnixtime = ShuttersSunrise( $shuttersDev, 'unix' ) + 1;
my $shuttersSunsetUnixtime = ShuttersSunset( $shuttersDev, 'unix' ) + 1; my $shuttersSunsetUnixtime = ShuttersSunset( $shuttersDev, 'unix' ) + 1;
$shutters->setSunriseUnixTime($shuttersSunriseUnixtime); $shutters->setSunriseUnixTime($shuttersSunriseUnixtime);
$shutters->setSunsetUnixTime($shuttersSunsetUnixtime); $shutters->setSunsetUnixTime($shuttersSunsetUnixtime);
@ -1200,8 +1190,11 @@ sub RenewSunRiseSetShuttersTimer {
) == 0 ) == 0
) )
{ {
$attr{$shuttersDev}{'ASC_ShuttersPlace'} = $shutters->getAttrUpdateChanges('ASC_ShuttersPlace') $attr{$shuttersDev}{'ASC_ShuttersPlace'} =
if ( $shutters->getAttrUpdateChanges('ASC_ShuttersPlace') ne 'none' ); $shutters->getAttrUpdateChanges('ASC_ShuttersPlace')
if ( $shutters->getAttrUpdateChanges('ASC_ShuttersPlace') ne
'none' );
# $attr{$shuttersDev}{'ASC_Down'} = # $attr{$shuttersDev}{'ASC_Down'} =
# $shutters->getAttrUpdateChanges('ASC_Down') # $shutters->getAttrUpdateChanges('ASC_Down')
# if ( $shutters->getAttrUpdateChanges('ASC_Down') ne 'none' ); # if ( $shutters->getAttrUpdateChanges('ASC_Down') ne 'none' );
@ -1228,12 +1221,16 @@ sub RenewSunRiseSetShuttersTimer {
$attr{$shuttersDev}{ASC_BlockingTime_beforeNightClose} = $attr{$shuttersDev}{ASC_BlockingTime_beforeNightClose} =
AttrVal( $shuttersDev, 'ASC_BlockingTime_beforNightClose', 'none' ) AttrVal( $shuttersDev, 'ASC_BlockingTime_beforNightClose', 'none' )
if ( AttrVal( $shuttersDev, 'ASC_BlockingTime_beforNightClose', 'none' ) ne 'none' ); if (
AttrVal( $shuttersDev, 'ASC_BlockingTime_beforNightClose', 'none' )
ne 'none' );
delFromDevAttrList( $shuttersDev, 'ASC_BlockingTime_beforNightClose' ); delFromDevAttrList( $shuttersDev, 'ASC_BlockingTime_beforNightClose' );
$attr{$shuttersDev}{ASC_BlockingTime_beforeDayOpen} = $attr{$shuttersDev}{ASC_BlockingTime_beforeDayOpen} =
AttrVal( $shuttersDev, 'ASC_BlockingTime_beforDayOpen', 'none' ) AttrVal( $shuttersDev, 'ASC_BlockingTime_beforDayOpen', 'none' )
if ( AttrVal( $shuttersDev, 'ASC_BlockingTime_beforDayOpen', 'none' ) ne 'none' ); if (
AttrVal( $shuttersDev, 'ASC_BlockingTime_beforDayOpen', 'none' ) ne
'none' );
delFromDevAttrList( $shuttersDev, 'ASC_BlockingTime_beforDayOpen' ); delFromDevAttrList( $shuttersDev, 'ASC_BlockingTime_beforDayOpen' );
# #
# $attr{$shuttersDev}{ASC_Shading_StateChange_SunnyCloudy} = # $attr{$shuttersDev}{ASC_Shading_StateChange_SunnyCloudy} =
@ -1708,23 +1705,31 @@ sub _DetermineSlatCmd {
my $value = shift; my $value = shift;
my $posValue = shift; my $posValue = shift;
return $posValue == $shutters->getShadingPos return $posValue == $shutters->getShadingPos
&& $shutters->getShadingPositionAssignment ne 'none' ? $shutters->getShadingPositionAssignment && $shutters->getShadingPositionAssignment ne 'none'
: $posValue == $shutters->getVentilatePos ? $shutters->getShadingPositionAssignment
&& $shutters->getVentilatePositionAssignment ne 'none' ? $shutters->getVentilatePositionAssignment : $posValue == $shutters->getVentilatePos
: $posValue == $shutters->getOpenPos && $shutters->getVentilatePositionAssignment ne 'none'
&& $shutters->getOpenPositionAssignment ne 'none' ? $shutters->getOpenPositionAssignment ? $shutters->getVentilatePositionAssignment
: $posValue == $shutters->getClosedPos : $posValue == $shutters->getOpenPos
&& $shutters->getClosedPositionAssignment ne 'none' ? $shutters->getClosedPositionAssignment && $shutters->getOpenPositionAssignment ne 'none'
: $posValue == $shutters->getSleepPos ? $shutters->getOpenPositionAssignment
&& $shutters->getSleepPositionAssignment ne 'none' ? $shutters->getSleepPositionAssignment : $posValue == $shutters->getClosedPos
: $posValue == $shutters->getComfortOpenPos && $shutters->getClosedPositionAssignment ne 'none'
&& $shutters->getComfortOpenPositionAssignment ne 'none' ? $shutters->getComfortOpenPositionAssignment ? $shutters->getClosedPositionAssignment
: $posValue == $shutters->getPrivacyUpPos : $posValue == $shutters->getSleepPos
&& $shutters->getPrivacyUpPositionAssignment ne 'none' ? $shutters->getPrivacyUpPositionAssignment && $shutters->getSleepPositionAssignment ne 'none'
: $posValue == $shutters->getPrivacyDownPos ? $shutters->getSleepPositionAssignment
&& $shutters->getPrivacyDownPositionAssignment ne 'none' ? $shutters->getPrivacyDownPositionAssignment : $posValue == $shutters->getComfortOpenPos
: $value; && $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 {
@ -1809,12 +1814,12 @@ sub _SetCmdFn {
$driveCommand = _DetermineSlatCmd( $driveCommand, $posValue ); $driveCommand = _DetermineSlatCmd( $driveCommand, $posValue );
} }
elsif ($shutters->getShadingPositionAssignment =~ m{\A\d{1,3}\z}xms elsif ($shutters->getShadingPositionAssignment =~ m{\A\d{1,3}\z}xms
|| $shutters->getOpenPositionAssignment =~ 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->getClosedPositionAssignment =~ m{\A\d{1,3}\z}xms
|| $shutters->getPrivacyUpPositionAssignment =~ 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->getPrivacyDownPositionAssignment =~ m{\A\d{1,3}\z}xms
|| $shutters->getSleepPositionAssignment =~ 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->getVentilatePositionAssignment =~ m{\A\d{1,3}\z}xms
|| $shutters->getComfortOpenPositionAssignment =~ || $shutters->getComfortOpenPositionAssignment =~
m{\A\d{1,3}\z}xms ) m{\A\d{1,3}\z}xms )
{ {
@ -1822,26 +1827,28 @@ sub _SetCmdFn {
} }
} }
if ( $commandTemplate ne 'none' ) { # Patch von Beta-User Forum https://forum.fhem.de/index.php/topic,123659.0.html if ( $commandTemplate ne 'none' )
# Nutzervariablen setzen { # Patch von Beta-User Forum https://forum.fhem.de/index.php/topic,123659.0.html
# Nutzervariablen setzen
my %specials = ( my %specials = (
'$name' => $shuttersDev, '$name' => $shuttersDev,
'$pos' => $posValue, '$pos' => $posValue,
'$slatPos' => $slatPos, '$slatPos' => $slatPos,
'$cause' => $shutters->getLastDrive '$cause' => $shutters->getLastDrive
); );
$commandTemplate = ::EvalSpecials($commandTemplate, %specials); $commandTemplate = ::EvalSpecials( $commandTemplate, %specials );
# CMD ausführen # CMD ausführen
::AnalyzeCommandChain( $h, $commandTemplate ); ::AnalyzeCommandChain( $h, $commandTemplate );
} }
else { else {
CommandSet( undef, CommandSet( undef,
$shuttersDev $shuttersDev
. ':FILTER=' . ':FILTER='
. $shutters->getPosCmd . '!=' . $shutters->getPosCmd . '!='
. $posValue . ' ' . $posValue . ' '
. $driveCommand ); . $driveCommand );
InternalTimer( InternalTimer(
gettimeofday() + 3, gettimeofday() + 3,
@ -1849,18 +1856,18 @@ sub _SetCmdFn {
CommandSet( CommandSet(
undef, undef,
( (
$shutters->getSlatDevice ne 'none' $shutters->getSlatDevice ne 'none'
? $shutters->getSlatDevice ? $shutters->getSlatDevice
: $shuttersDev : $shuttersDev
) )
. ' ' . ' '
. $shutters->getSlatPosCmd . ' ' . $shutters->getSlatPosCmd . ' '
. $slatPos . $slatPos
); );
}, },
$shuttersDev $shuttersDev
) )
if ( $slatPos > -1 if ( $slatPos > -1
&& $shutters->getSlatPosCmd ne 'none' ); && $shutters->getSlatPosCmd ne 'none' );
} }
@ -1888,7 +1895,7 @@ sub ASC_Debug {
return return
if ( !AttrVal( $ascDev->getName, 'ASC_debug', 0 ) ); if ( !AttrVal( $ascDev->getName, 'ASC_debug', 0 ) );
my $debugMsg = shift; my $debugMsg = shift;
my $debugTimestamp = strftime( "%Y.%m.%d %T", localtime(time) ); my $debugTimestamp = strftime( "%Y.%m.%d %T", localtime(time) );
print( print(

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (leongaultier at gmail dot com) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@ -44,23 +44,12 @@ use strict;
use warnings; use warnings;
use utf8; use utf8;
use GPUtils qw(GP_Import);
## Import der FHEM Funktionen
BEGIN {
GP_Import(
qw(
AttrVal
gettimeofday)
);
}
sub getShuttersOffset { sub getShuttersOffset {
my $self = shift; my $self = shift;
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_shuttersDriveDelay', -1 ); return ::AttrVal( $name, 'ASC_shuttersDriveDelay', -1 );
} }
sub getBrightnessMinVal { sub getBrightnessMinVal {
@ -70,7 +59,7 @@ sub getBrightnessMinVal {
return $self->{ASC_brightness}->{triggermin} return $self->{ASC_brightness}->{triggermin}
if ( exists( $self->{ASC_brightness}->{LASTGETTIME} ) if ( exists( $self->{ASC_brightness}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->getBrightnessMaxVal; $FHEM::Automation::ShuttersControl::ascDev->getBrightnessMaxVal;
return $self->{ASC_brightness}->{triggermin}; return $self->{ASC_brightness}->{triggermin};
@ -83,11 +72,11 @@ sub getBrightnessMaxVal {
return $self->{ASC_brightness}->{triggermax} return $self->{ASC_brightness}->{triggermax}
if ( exists( $self->{ASC_brightness}->{LASTGETTIME} ) if ( exists( $self->{ASC_brightness}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
$self->{ASC_brightness}->{LASTGETTIME} = int( gettimeofday() ); $self->{ASC_brightness}->{LASTGETTIME} = int( ::gettimeofday() );
my ( $triggermax, $triggermin ) = my ( $triggermax, $triggermin ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( $name,
'ASC_brightnessDriveUpDown', '800:500' ); 'ASC_brightnessDriveUpDown', '800:500' );
## erwartetes Ergebnis ## erwartetes Ergebnis
@ -104,7 +93,7 @@ sub _getTwilightDevice {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_twilightDevice', 'none' ); return ::AttrVal( $name, 'ASC_twilightDevice', 'none' );
} }
sub getAutoAstroModeEvening { sub getAutoAstroModeEvening {
@ -112,7 +101,7 @@ sub getAutoAstroModeEvening {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_autoAstroModeEvening', 'REAL' ); return ::AttrVal( $name, 'ASC_autoAstroModeEvening', 'REAL' );
} }
sub getAutoAstroModeEveningHorizon { sub getAutoAstroModeEveningHorizon {
@ -120,7 +109,7 @@ sub getAutoAstroModeEveningHorizon {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_autoAstroModeEveningHorizon', 0 ); return ::AttrVal( $name, 'ASC_autoAstroModeEveningHorizon', 0 );
} }
sub getAutoAstroModeMorning { sub getAutoAstroModeMorning {
@ -128,7 +117,7 @@ sub getAutoAstroModeMorning {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_autoAstroModeMorning', 'REAL' ); return ::AttrVal( $name, 'ASC_autoAstroModeMorning', 'REAL' );
} }
sub getAutoAstroModeMorningHorizon { sub getAutoAstroModeMorningHorizon {
@ -136,7 +125,7 @@ sub getAutoAstroModeMorningHorizon {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_autoAstroModeMorningHorizon', 0 ); return ::AttrVal( $name, 'ASC_autoAstroModeMorningHorizon', 0 );
} }
sub getAutoShuttersControlMorning { sub getAutoShuttersControlMorning {
@ -144,7 +133,7 @@ sub getAutoShuttersControlMorning {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_autoShuttersControlMorning', 'on' ); return ::AttrVal( $name, 'ASC_autoShuttersControlMorning', 'on' );
} }
sub getAutoShuttersControlEvening { sub getAutoShuttersControlEvening {
@ -152,7 +141,7 @@ sub getAutoShuttersControlEvening {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_autoShuttersControlEvening', 'on' ); return ::AttrVal( $name, 'ASC_autoShuttersControlEvening', 'on' );
} }
sub getAutoShuttersControlComfort { sub getAutoShuttersControlComfort {
@ -160,7 +149,7 @@ sub getAutoShuttersControlComfort {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_autoShuttersControlComfort', 'off' ); return ::AttrVal( $name, 'ASC_autoShuttersControlComfort', 'off' );
} }
sub getFreezeTemp { sub getFreezeTemp {
@ -168,7 +157,7 @@ sub getFreezeTemp {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_freezeTemp', 3 ); return ::AttrVal( $name, 'ASC_freezeTemp', 3 );
} }
sub getSlatDriveCmdInverse { sub getSlatDriveCmdInverse {
@ -176,7 +165,7 @@ sub getSlatDriveCmdInverse {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_slatDriveCmdInverse', 0 ); return ::AttrVal( $name, 'ASC_slatDriveCmdInverse', 0 );
} }
sub _getTempSensor { sub _getTempSensor {
@ -186,11 +175,11 @@ sub _getTempSensor {
return $self->{ASC_tempSensor}->{device} return $self->{ASC_tempSensor}->{device}
if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
$self->{ASC_tempSensor}->{LASTGETTIME} = int( gettimeofday() ); $self->{ASC_tempSensor}->{LASTGETTIME} = int( ::gettimeofday() );
my ( $device, $reading ) = my ( $device, $reading ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_tempSensor', FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( $name,
'none' ); 'ASC_tempSensor', 'none' );
## erwartetes Ergebnis ## erwartetes Ergebnis
# DEVICE:READING # DEVICE:READING
@ -208,7 +197,7 @@ sub getTempSensorReading {
return $self->{ASC_tempSensor}->{reading} return $self->{ASC_tempSensor}->{reading}
if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->_getTempSensor; $FHEM::Automation::ShuttersControl::ascDev->_getTempSensor;
return $self->{ASC_tempSensor}->{reading}; return $self->{ASC_tempSensor}->{reading};
} }
@ -220,10 +209,11 @@ sub _getResidentsDev {
return $self->{ASC_residentsDev}->{device} return $self->{ASC_residentsDev}->{device}
if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} ) if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) <
$self->{ASC_residentsDev}->{LASTGETTIME} = int( gettimeofday() ); 2 );
$self->{ASC_residentsDev}->{LASTGETTIME} = int( ::gettimeofday() );
my ( $device, $reading ) = my ( $device, $reading ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( $name,
'ASC_residentsDev', 'none' ); 'ASC_residentsDev', 'none' );
$self->{ASC_residentsDev}->{device} = $device; $self->{ASC_residentsDev}->{device} = $device;
@ -240,7 +230,8 @@ sub getResidentsReading {
return $self->{ASC_residentsDev}->{reading} return $self->{ASC_residentsDev}->{reading}
if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} ) if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) <
2 );
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev; $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev;
return $self->{ASC_residentsDev}->{reading}; return $self->{ASC_residentsDev}->{reading};
} }
@ -252,11 +243,11 @@ sub _getRainSensor {
return $self->{ASC_rainSensor}->{device} return $self->{ASC_rainSensor}->{device}
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
$self->{ASC_rainSensor}->{LASTGETTIME} = int( gettimeofday() ); $self->{ASC_rainSensor}->{LASTGETTIME} = int( ::gettimeofday() );
my ( $device, $reading, $max, $hyst, $pos, $wait ) = my ( $device, $reading, $max, $hyst, $pos, $wait ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_rainSensor', FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( $name,
'none' ); 'ASC_rainSensor', 'none' );
## erwartetes Ergebnis ## erwartetes Ergebnis
# DEVICE:READING MAX:HYST # DEVICE:READING MAX:HYST
@ -266,10 +257,10 @@ sub _getRainSensor {
$self->{ASC_rainSensor}->{reading} = $self->{ASC_rainSensor}->{reading} =
( $reading ne 'none' ? $reading : 'rain' ); ( $reading ne 'none' ? $reading : 'rain' );
$self->{ASC_rainSensor}->{triggermax} = ( $self->{ASC_rainSensor}->{triggermax} = (
( $max ne 'none' ( $max ne 'none' && $max =~ m{\A(-?\d+(\.\d+)?)\z}xms )
&& $max =~ m{\A(-?\d+(\.\d+)?)\z}xms )
? $max ? $max
: 1000 ); : 1000
);
$self->{ASC_rainSensor}->{triggerhyst} = ( $self->{ASC_rainSensor}->{triggerhyst} = (
$hyst ne 'none' $hyst ne 'none'
@ -277,10 +268,11 @@ sub _getRainSensor {
: ( $self->{ASC_rainSensor}->{triggermax} * 0 ) : ( $self->{ASC_rainSensor}->{triggermax} * 0 )
); );
$self->{ASC_rainSensor}->{shuttersClosedPos} = $self->{ASC_rainSensor}->{shuttersClosedPos} = (
( $pos ne 'none' $pos ne 'none'
? $pos ? $pos
: $FHEM::Automation::ShuttersControl::shutters->getClosedPos ); : $FHEM::Automation::ShuttersControl::shutters->getClosedPos
);
$self->{ASC_rainSensor}->{waitingTime} = $self->{ASC_rainSensor}->{waitingTime} =
( $wait ne 'none' ? $wait : 0 ); ( $wait ne 'none' ? $wait : 0 );
@ -294,7 +286,7 @@ sub getRainSensorReading {
return $self->{ASC_rainSensor}->{reading} return $self->{ASC_rainSensor}->{reading}
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
return $self->{ASC_rainSensor}->{reading}; return $self->{ASC_rainSensor}->{reading};
} }
@ -306,7 +298,7 @@ sub getRainTriggerMax {
return $self->{ASC_rainSensor}->{triggermax} return $self->{ASC_rainSensor}->{triggermax}
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
return $self->{ASC_rainSensor}->{triggermax}; return $self->{ASC_rainSensor}->{triggermax};
} }
@ -318,7 +310,7 @@ sub getRainTriggerMin {
return $self->{ASC_rainSensor}->{triggerhyst} return $self->{ASC_rainSensor}->{triggerhyst}
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
return $self->{ASC_rainSensor}->{triggerhyst}; return $self->{ASC_rainSensor}->{triggerhyst};
} }
@ -330,7 +322,7 @@ sub getRainSensorShuttersClosedPos {
return $self->{ASC_rainSensor}->{shuttersClosedPos} return $self->{ASC_rainSensor}->{shuttersClosedPos}
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
return $self->{ASC_rainSensor}->{shuttersClosedPos}; return $self->{ASC_rainSensor}->{shuttersClosedPos};
} }
@ -342,7 +334,7 @@ sub getRainWaitingTime {
return $self->{ASC_rainSensor}->{waitingTime} return $self->{ASC_rainSensor}->{waitingTime}
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor; $FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
return $self->{ASC_rainSensor}->{waitingTime}; return $self->{ASC_rainSensor}->{waitingTime};
} }
@ -354,11 +346,11 @@ sub _getWindSensor {
return $self->{ASC_windSensor}->{device} return $self->{ASC_windSensor}->{device}
if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
$self->{ASC_windSensor}->{LASTGETTIME} = int( gettimeofday() ); $self->{ASC_windSensor}->{LASTGETTIME} = int( ::gettimeofday() );
my ( $device, $reading ) = my ( $device, $reading ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_windSensor', FHEM::Automation::ShuttersControl::Helper::Get::AttrValues( $name,
'none' ); 'ASC_windSensor', 'none' );
return $device if ( $device eq 'none' ); return $device if ( $device eq 'none' );
$self->{ASC_windSensor}->{device} = $device; $self->{ASC_windSensor}->{device} = $device;
@ -375,7 +367,7 @@ sub getWindSensorReading {
return $self->{ASC_windSensor}->{reading} return $self->{ASC_windSensor}->{reading}
if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} ) if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} )
&& ( gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 ); && ( ::gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
$FHEM::Automation::ShuttersControl::ascDev->_getWindSensor; $FHEM::Automation::ShuttersControl::ascDev->_getWindSensor;
return ( return (
defined( $self->{ASC_windSensor}->{reading} ) defined( $self->{ASC_windSensor}->{reading} )
@ -389,7 +381,7 @@ sub getBlockAscDrivesAfterManual {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 ); return ::AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 );
} }
sub getAdvDate { sub getAdvDate {
@ -397,10 +389,7 @@ sub getAdvDate {
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_advDate', 'FirstAdvent' ); return ::AttrVal( $name, 'ASC_advDate', 'FirstAdvent' );
} }
1; 1;

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@ -48,12 +48,7 @@ use GPUtils qw(GP_Import);
## Import der FHEM Funktionen ## Import der FHEM Funktionen
BEGIN { BEGIN {
GP_Import( GP_Import(qw(defs));
qw(
readingsSingleUpdate
ReadingsVal
defs)
);
} }
sub setDelayCmdReading { sub setDelayCmdReading {
@ -62,7 +57,7 @@ sub setDelayCmdReading {
my $name = $self->{name}; my $name = $self->{name};
my $hash = $defs{$name}; my $hash = $defs{$name};
readingsSingleUpdate( ::readingsSingleUpdate(
$hash, $hash,
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
. '_lastDelayPosValue', . '_lastDelayPosValue',
@ -79,7 +74,7 @@ sub setStateReading {
my $name = $self->{name}; my $name = $self->{name};
my $hash = $defs{$name}; my $hash = $defs{$name};
readingsSingleUpdate( ::readingsSingleUpdate(
$hash, 'state', $hash, 'state',
( (
defined($value) defined($value)
@ -97,7 +92,7 @@ sub setPosReading {
my $name = $self->{name}; my $name = $self->{name};
my $hash = $defs{$name}; my $hash = $defs{$name};
readingsSingleUpdate( ::readingsSingleUpdate(
$hash, $hash,
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
. '_PosValue', . '_PosValue',
@ -113,7 +108,7 @@ sub setLastPosReading {
my $name = $self->{name}; my $name = $self->{name};
my $hash = $defs{$name}; my $hash = $defs{$name};
readingsSingleUpdate( ::readingsSingleUpdate(
$hash, $hash,
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
. '_lastPosValue', . '_lastPosValue',
@ -128,7 +123,7 @@ sub getPartyMode {
my $name = $self->{name}; my $name = $self->{name};
return ReadingsVal( $name, 'partyMode', 'off' ); return ::ReadingsVal( $name, 'partyMode', 'off' );
} }
sub getHardLockOut { sub getHardLockOut {
@ -136,7 +131,7 @@ sub getHardLockOut {
my $name = $self->{name}; my $name = $self->{name};
return ReadingsVal( $name, 'hardLockOut', 'none' ); return ::ReadingsVal( $name, 'hardLockOut', 'none' );
} }
sub getSunriseTimeWeHoliday { sub getSunriseTimeWeHoliday {
@ -144,7 +139,7 @@ sub getSunriseTimeWeHoliday {
my $name = $self->{name}; my $name = $self->{name};
return ReadingsVal( $name, 'sunriseTimeWeHoliday', 'none' ); return ::ReadingsVal( $name, 'sunriseTimeWeHoliday', 'none' );
} }
sub getMonitoredDevs { sub getMonitoredDevs {
@ -152,14 +147,14 @@ sub getMonitoredDevs {
my $name = $self->{name}; my $name = $self->{name};
$self->{monitoredDevs} = ReadingsVal( $name, '.monitoredDevs', 'none' ); $self->{monitoredDevs} = ::ReadingsVal( $name, '.monitoredDevs', 'none' );
return $self->{monitoredDevs}; return $self->{monitoredDevs};
} }
sub getOutTemp { sub getOutTemp {
my $self = shift; my $self = shift;
return ReadingsVal( return ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getTempSensor, $FHEM::Automation::ShuttersControl::ascDev->_getTempSensor,
$FHEM::Automation::ShuttersControl::ascDev->getTempSensorReading, $FHEM::Automation::ShuttersControl::ascDev->getTempSensorReading,
-100 ); -100 );
@ -169,7 +164,8 @@ sub getResidentsStatus {
my $self = shift; my $self = shift;
my $val = my $val =
ReadingsVal( $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev, ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
$FHEM::Automation::ShuttersControl::ascDev->getResidentsReading, $FHEM::Automation::ShuttersControl::ascDev->getResidentsReading,
'none' ); 'none' );
@ -178,7 +174,7 @@ sub getResidentsStatus {
return $1 && $1 eq 'pet' ? 'absent' : $2; return $1 && $1 eq 'pet' ? 'absent' : $2;
} }
elsif ( elsif (
ReadingsVal( ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev, $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
'homealoneType', '-' ) eq 'PET' 'homealoneType', '-' ) eq 'PET'
) )
@ -196,7 +192,8 @@ sub getResidentsLastStatus {
my $self = shift; my $self = shift;
my $val = my $val =
ReadingsVal( $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev, ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
'lastState', 'none' ); 'lastState', 'none' );
if ( $val =~ m{^(?:(.+)_)?(.+)$}xms ) { if ( $val =~ m{^(?:(.+)_)?(.+)$}xms ) {
@ -204,7 +201,7 @@ sub getResidentsLastStatus {
return $1 && $1 eq 'pet' ? 'absent' : $2; return $1 && $1 eq 'pet' ? 'absent' : $2;
} }
elsif ( elsif (
ReadingsVal( ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev, $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
'lastHomealoneType', '-' ) eq 'PET' 'lastHomealoneType', '-' ) eq 'PET'
) )
@ -223,7 +220,7 @@ sub getAutoShuttersControlShading {
my $name = $self->{name}; my $name = $self->{name};
return ReadingsVal( $name, 'controlShading', 'none' ); return ::ReadingsVal( $name, 'controlShading', 'none' );
} }
sub getSelfDefense { sub getSelfDefense {
@ -231,7 +228,7 @@ sub getSelfDefense {
my $name = $self->{name}; my $name = $self->{name};
return ReadingsVal( $name, 'selfDefense', 'none' ); return ::ReadingsVal( $name, 'selfDefense', 'none' );
} }
sub getAzimuth { sub getAzimuth {
@ -239,13 +236,13 @@ sub getAzimuth {
my $azimuth; my $azimuth;
$azimuth = ReadingsVal( $azimuth = ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice, $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
'azimuth', -1 ) 'azimuth', -1 )
if ( if (
$defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice } $defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice }
->{TYPE} eq 'Twilight' ); ->{TYPE} eq 'Twilight' );
$azimuth = ReadingsVal( $azimuth = ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice, $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
'SunAz', -1 ) 'SunAz', -1 )
if ( if (
@ -260,13 +257,13 @@ sub getElevation {
my $elevation; my $elevation;
$elevation = ReadingsVal( $elevation = ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice, $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
'elevation', -1 ) 'elevation', -1 )
if ( if (
$defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice } $defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice }
->{TYPE} eq 'Twilight' ); ->{TYPE} eq 'Twilight' );
$elevation = ReadingsVal( $elevation = ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice, $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
'SunAlt', -1 ) 'SunAlt', -1 )
if ( if (
@ -281,7 +278,7 @@ sub getASCenable {
my $name = $self->{name}; my $name = $self->{name};
return ReadingsVal( $name, 'ascEnable', 'none' ); return ::ReadingsVal( $name, 'ascEnable', 'none' );
} }
1; 1;

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@ -70,21 +70,6 @@ our %EXPORT_TAGS = (
], ],
); );
use GPUtils qw(GP_Import);
## Import der FHEM Funktionen
BEGIN {
GP_Import(
qw(
Log3
gettimeofday
computeAlignTime
CommandSet
ReadingsVal
RemoveInternalTimer
)
);
}
sub EventProcessingGeneral { sub EventProcessingGeneral {
my $hash = shift; my $hash = shift;
my $devname = shift; my $devname = shift;
@ -156,7 +141,7 @@ sub EventProcessingGeneral {
{ # wurde den Attributen unserer Rolläden ein Wert zugewiesen ? { # wurde den Attributen unserer Rolläden ein Wert zugewiesen ?
FHEM::Automation::ShuttersControl::AddNotifyDev( $hash, $3, $1, $2 ) FHEM::Automation::ShuttersControl::AddNotifyDev( $hash, $3, $1, $2 )
if ( $3 ne 'none' ); if ( $3 ne 'none' );
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessing: ATTR" ); "AutoShuttersControl ($name) - EventProcessing: ATTR" );
} }
elsif ( elsif (
@ -168,7 +153,7 @@ sub EventProcessingGeneral {
$}xms $}xms
) )
{ # wurde das Attribut unserer Rolläden gelöscht ? { # wurde das Attribut unserer Rolläden gelöscht ?
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessing: DELETEATTR" ); "AutoShuttersControl ($name) - EventProcessing: DELETEATTR" );
FHEM::Automation::ShuttersControl::DeleteNotifyDev( $hash, $1, $2 ); FHEM::Automation::ShuttersControl::DeleteNotifyDev( $hash, $1, $2 );
} }
@ -235,8 +220,9 @@ m{^(DELETEATTR|ATTR) #global ATTR myASC ASC_tempSensor Cellar
\%funcHash ); \%funcHash );
} }
else { else {
CommandSet( undef, $name . ' controlShading on' ) ::CommandSet( undef, $name . ' controlShading on' )
if ( ReadingsVal( $name, 'controlShading', 'off' ) ne 'off' ); if (
::ReadingsVal( $name, 'controlShading', 'off' ) ne 'off' );
} }
} }
} }
@ -259,11 +245,12 @@ sub EventProcessingWindowRec {
m{.*$reading:.*?([Oo]pen(?>ed)?|[Cc]losed?|tilt(?>ed)?|true|false)}xms ) m{.*$reading:.*?([Oo]pen(?>ed)?|[Cc]losed?|tilt(?>ed)?|true|false)}xms )
{ {
return return
if ( !IsAfterShuttersManualBlocking($shuttersDev) if (
!IsAfterShuttersManualBlocking($shuttersDev)
&& ( $FHEM::Automation::ShuttersControl::shutters->getLockOut eq && ( $FHEM::Automation::ShuttersControl::shutters->getLockOut eq
'off' 'off'
|| $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace || $FHEM::Automation::ShuttersControl::shutters
ne 'terrace' ) ->getShuttersPlace ne 'terrace' )
); );
my $match = $1; my $match = $1;
@ -281,7 +268,6 @@ sub EventProcessingWindowRec {
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev( $FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
$shuttersDev); $shuttersDev);
#### Hardware Lock der Rollläden #### Hardware Lock der Rollläden
$FHEM::Automation::ShuttersControl::shutters->setHardLockOut('off') $FHEM::Automation::ShuttersControl::shutters->setHardLockOut('off')
if ( $match =~ m{[Cc]lose|true}xms if ( $match =~ m{[Cc]lose|true}xms
@ -299,13 +285,9 @@ sub EventProcessingWindowRec {
) )
); );
return return
if ( !IsAfterShuttersManualBlocking($shuttersDev) ); if ( !IsAfterShuttersManualBlocking($shuttersDev) );
my $homemode = my $homemode =
$FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus; $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
$homemode = $homemode =
@ -535,11 +517,16 @@ sub EventProcessingWindowRec {
) )
&& $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen && $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen
eq 'on' eq 'on'
&& ( $FHEM::Automation::ShuttersControl::shutters && (
->getQueryShuttersPos( $FHEM::Automation::ShuttersControl::shutters
$FHEM::Automation::ShuttersControl::shutters->getVentilatePos) ->getQueryShuttersPos(
|| ( $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace eq 'terrace' $FHEM::Automation::ShuttersControl::shutters
&& $FHEM::Automation::ShuttersControl::shutters->getSubTyp eq 'twostate' ) ->getVentilatePos
)
|| ( $FHEM::Automation::ShuttersControl::shutters
->getShuttersPlace eq 'terrace'
&& $FHEM::Automation::ShuttersControl::shutters->getSubTyp
eq 'twostate' )
) )
) )
{ {
@ -622,42 +609,46 @@ sub EventProcessingRoommate {
$FHEM::Automation::ShuttersControl::shutters->getRoommatesReading; $FHEM::Automation::ShuttersControl::shutters->getRoommatesReading;
if ( $events =~ m{$reading:\s(absent|gotosleep|asleep|awoken|home)}xms ) { if ( $events =~ m{$reading:\s(absent|gotosleep|asleep|awoken|home)}xms ) {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate: " "AutoShuttersControl ($name) - EventProcessingRoommate: "
. $FHEM::Automation::ShuttersControl::shutters . $FHEM::Automation::ShuttersControl::shutters
->getRoommatesReading ); ->getRoommatesReading );
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate: $shuttersDev und Events $events" "AutoShuttersControl ($name) - EventProcessingRoommate: $shuttersDev und Events $events"
); );
my $event = $1;
my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp;
my $getModeDown =
$FHEM::Automation::ShuttersControl::shutters->getModeDown;
my $getRoommatesStatus =
$FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
my $getRoommatesLastStatus =
$FHEM::Automation::ShuttersControl::shutters->getRoommatesLastStatus;
my $getUp = $FHEM::Automation::ShuttersControl::shutters->getUp;
my $getDown = $FHEM::Automation::ShuttersControl::shutters->getDown;
my $getIsDay = $FHEM::Automation::ShuttersControl::shutters->getIsDay;
my $event = $1; my $posValue = $FHEM::Automation::ShuttersControl::shutters
my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp; ->getStatus; # !!! ACHTUNG!!!
my $getModeDown = $FHEM::Automation::ShuttersControl::shutters->getModeDown;
my $getRoommatesStatus = $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
my $getRoommatesLastStatus = $FHEM::Automation::ShuttersControl::shutters->getRoommatesLastStatus;
my $getUp = $FHEM::Automation::ShuttersControl::shutters->getUp;
my $getDown = $FHEM::Automation::ShuttersControl::shutters->getDown;
my $getIsDay = $FHEM::Automation::ShuttersControl::shutters->getIsDay;
my $posValue = $FHEM::Automation::ShuttersControl::shutters->getStatus; # !!! ACHTUNG!!!
if ( if (
( $event eq 'home' || $event eq 'awoken' ) ( $event eq 'home' || $event eq 'awoken' )
&& ( $getRoommatesStatus eq 'home' && ( $getRoommatesStatus eq 'home'
|| $getRoommatesStatus eq 'awoken' ) || $getRoommatesStatus eq 'awoken' )
&& ( $FHEM::Automation::ShuttersControl::ascDev && (
$FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlMorning eq 'on' ->getAutoShuttersControlMorning eq 'on'
|| ( $getUp eq 'roommate' || (
&& ( $getRoommatesLastStatus eq 'asleep' $getUp eq 'roommate'
|| $getRoommatesLastStatus ne 'awoken' ) && ( $getRoommatesLastStatus eq 'asleep'
) || $getRoommatesLastStatus ne 'awoken' )
) )
)
&& IsAfterShuttersManualBlocking($shuttersDev) && IsAfterShuttersManualBlocking($shuttersDev)
) )
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate_1: $shuttersDev und Events $events" "AutoShuttersControl ($name) - EventProcessingRoommate_1: $shuttersDev und Events $events"
); );
if ( if (
@ -683,7 +674,7 @@ sub EventProcessingRoommate {
|| $getUp eq 'roommate' ) || $getUp eq 'roommate' )
) )
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate_2: $shuttersDev und Events $events" "AutoShuttersControl ($name) - EventProcessingRoommate_2: $shuttersDev und Events $events"
); );
@ -709,7 +700,7 @@ sub EventProcessingRoommate {
$FHEM::Automation::ShuttersControl::shutters->getOpenPos; $FHEM::Automation::ShuttersControl::shutters->getOpenPos;
} }
FHEM::Automation::ShuttersControl::ShuttersCommandSet( $hash, FHEM::Automation::ShuttersControl::Shutters::CommandSet( $hash,
$shuttersDev, $posValue ); $shuttersDev, $posValue );
} }
elsif ( elsif (
@ -745,8 +736,7 @@ sub EventProcessingRoommate {
&& IsAfterShuttersTimeBlocking($shuttersDev) && IsAfterShuttersTimeBlocking($shuttersDev)
&& ( $getModeDown eq 'home' && ( $getModeDown eq 'home'
|| $getModeDown eq 'always' ) || $getModeDown eq 'always' )
&& $getDown ne && $getDown ne 'roommate'
'roommate'
) )
{ {
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
@ -780,14 +770,11 @@ sub EventProcessingRoommate {
->getLastDrive . ' - ventilate mode' ); ->getLastDrive . ' - ventilate mode' );
} }
FHEM::Automation::ShuttersControl::ShuttersCommandSet( FHEM::Automation::ShuttersControl::Shutters::CommandSet(
$hash, $shuttersDev, $posValue ); $hash, $shuttersDev, $posValue );
} }
elsif ( elsif (
( ( $getIsDay || $getUp eq 'roommate' )
$getIsDay
|| $getUp eq 'roommate'
)
&& IsAfterShuttersTimeBlocking($shuttersDev) && IsAfterShuttersTimeBlocking($shuttersDev)
&& ( $getModeUp eq 'home' && ( $getModeUp eq 'home'
|| $getModeUp eq 'always' ) || $getModeUp eq 'always' )
@ -807,7 +794,7 @@ sub EventProcessingRoommate {
{ {
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->setLastDrive('shading in'); ->setLastDrive('shading in');
FHEM::Automation::ShuttersControl::ShuttersCommandSet( FHEM::Automation::ShuttersControl::Shutters::CommandSet(
$hash, $hash,
$shuttersDev, $shuttersDev,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -853,7 +840,7 @@ sub EventProcessingRoommate {
) )
); );
FHEM::Automation::ShuttersControl::ShuttersCommandSet( FHEM::Automation::ShuttersControl::Shutters::CommandSet(
$hash, $hash,
$shuttersDev, $shuttersDev,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -869,11 +856,9 @@ sub EventProcessingRoommate {
'absent' 'absent'
&& ( $FHEM::Automation::ShuttersControl::ascDev && ( $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlEvening eq 'on' ->getAutoShuttersControlEvening eq 'on'
|| $getDown eq || $getDown eq 'roommate' )
'roommate' )
&& ( IsAfterShuttersManualBlocking($shuttersDev) && ( IsAfterShuttersManualBlocking($shuttersDev)
|| $getDown eq || $getDown eq 'roommate' )
'roommate' )
) )
{ {
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
@ -898,14 +883,13 @@ sub EventProcessingRoommate {
. ' - ventilate mode' ); . ' - ventilate mode' );
} }
FHEM::Automation::ShuttersControl::ShuttersCommandSet( $hash, FHEM::Automation::ShuttersControl::Shutters::CommandSet( $hash,
$shuttersDev, $posValue ); $shuttersDev, $posValue );
} }
elsif ( elsif (
$event eq 'absent' $event eq 'absent'
&& ( !$getIsDay && ( !$getIsDay
|| $getDown eq || $getDown eq 'roommate'
'roommate'
|| $FHEM::Automation::ShuttersControl::shutters->getShadingMode || $FHEM::Automation::ShuttersControl::shutters->getShadingMode
eq 'absent' eq 'absent'
|| $FHEM::Automation::ShuttersControl::shutters->getModeUp eq || $FHEM::Automation::ShuttersControl::shutters->getModeUp eq
@ -914,7 +898,7 @@ sub EventProcessingRoommate {
'absent' ) 'absent' )
) )
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate absent: $shuttersDev" "AutoShuttersControl ($name) - EventProcessingRoommate absent: $shuttersDev"
); );
@ -922,42 +906,36 @@ sub EventProcessingRoommate {
$getIsDay $getIsDay
&& $FHEM::Automation::ShuttersControl::shutters->getIfInShading && $FHEM::Automation::ShuttersControl::shutters->getIfInShading
&& !$FHEM::Automation::ShuttersControl::shutters && !$FHEM::Automation::ShuttersControl::shutters
->getQueryShuttersPos( ->getQueryShuttersPos(
$FHEM::Automation::ShuttersControl::shutters->getShadingPos $FHEM::Automation::ShuttersControl::shutters->getShadingPos
) )
&& $FHEM::Automation::ShuttersControl::shutters->getShadingMode && $FHEM::Automation::ShuttersControl::shutters->getShadingMode
eq 'absent' eq 'absent'
) )
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate Shading: $shuttersDev" "AutoShuttersControl ($name) - EventProcessingRoommate Shading: $shuttersDev"
); );
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'shading in'); 'shading in');
FHEM::Automation::ShuttersControl::ShuttersCommandSet( FHEM::Automation::ShuttersControl::Shutters::CommandSet(
$hash, $hash,
$shuttersDev, $shuttersDev,
$FHEM::Automation::ShuttersControl::shutters->getShadingPos $FHEM::Automation::ShuttersControl::shutters->getShadingPos
); );
} }
elsif ( elsif (( !$getIsDay || $getDown eq 'roommate' )
(
!$getIsDay
|| $getDown eq
'roommate'
)
&& $getModeDown eq 'absent' && $getModeDown eq 'absent'
&& $getRoommatesStatus eq 'absent' && $getRoommatesStatus eq 'absent' )
)
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate Down: $shuttersDev" "AutoShuttersControl ($name) - EventProcessingRoommate Down: $shuttersDev"
); );
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'roommate absent'); 'roommate absent');
FHEM::Automation::ShuttersControl::ShuttersCommandSet( FHEM::Automation::ShuttersControl::Shutters::CommandSet(
$hash, $hash,
$shuttersDev, $shuttersDev,
$FHEM::Automation::ShuttersControl::shutters->getClosedPos $FHEM::Automation::ShuttersControl::shutters->getClosedPos
@ -968,18 +946,18 @@ sub EventProcessingRoommate {
'absent' 'absent'
&& $getRoommatesStatus eq 'absent' ) && $getRoommatesStatus eq 'absent' )
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate Up: $shuttersDev" "AutoShuttersControl ($name) - EventProcessingRoommate Up: $shuttersDev"
); );
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'roommate absent'); 'roommate absent');
FHEM::Automation::ShuttersControl::ShuttersCommandSet( $hash, FHEM::Automation::ShuttersControl::Shutters::CommandSet( $hash,
$shuttersDev, $shuttersDev,
$FHEM::Automation::ShuttersControl::shutters->getOpenPos ); $FHEM::Automation::ShuttersControl::shutters->getOpenPos );
} }
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate NICHTS: $shuttersDev" "AutoShuttersControl ($name) - EventProcessingRoommate NICHTS: $shuttersDev"
); );
} }
@ -1247,7 +1225,7 @@ sub EventProcessingResidents {
->getSelfDefenseState ->getSelfDefenseState
) )
{ {
RemoveInternalTimer( ::RemoveInternalTimer(
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getSelfDefenseAbsentTimerhash ) ->getSelfDefenseAbsentTimerhash )
if ( $getResidentsLastStatus eq 'absent' if ( $getResidentsLastStatus eq 'absent'
@ -1508,8 +1486,8 @@ sub EventProcessingBrightness {
( (
( (
( (
int( gettimeofday() / 86400 ) == int( int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpEarly ->getTimeUpEarly
@ -1530,8 +1508,8 @@ sub EventProcessingBrightness {
) )
) )
|| ( || (
int( gettimeofday() / 86400 ) == int( int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpWeHoliday ->getTimeUpWeHoliday
@ -1544,8 +1522,8 @@ sub EventProcessingBrightness {
->getTimeUpWeHoliday ne '01:25' ->getTimeUpWeHoliday ne '01:25'
) )
) )
&& int( gettimeofday() / 86400 ) == int( && int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpLate ->getTimeUpLate
@ -1554,8 +1532,8 @@ sub EventProcessingBrightness {
|| ( || (
( (
int( gettimeofday() / 86400 ) != int( int( ::gettimeofday() / 86400 ) != int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpEarly ->getTimeUpEarly
@ -1576,8 +1554,8 @@ sub EventProcessingBrightness {
) )
) )
|| ( || (
int( gettimeofday() / 86400 ) != int( int( ::gettimeofday() / 86400 ) != int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpWeHoliday ->getTimeUpWeHoliday
@ -1590,8 +1568,8 @@ sub EventProcessingBrightness {
->getTimeUpWeHoliday ne '01:25' ->getTimeUpWeHoliday ne '01:25'
) )
) )
&& int( gettimeofday() / 86400 ) != int( && int( ::gettimeofday() / 86400 ) != int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpLate ->getTimeUpLate
@ -1600,15 +1578,15 @@ sub EventProcessingBrightness {
) )
&& ( && (
( (
int( gettimeofday() / 86400 ) == int( int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeDownEarly ->getTimeDownEarly
) / 86400 ) / 86400
) )
&& int( gettimeofday() / 86400 ) == int( && int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeDownLate ->getTimeDownLate
@ -1616,15 +1594,15 @@ sub EventProcessingBrightness {
) )
) )
|| ( || (
int( gettimeofday() / 86400 ) != int( int( ::gettimeofday() / 86400 ) != int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeDownEarly ->getTimeDownEarly
) / 86400 ) / 86400
) )
&& int( gettimeofday() / 86400 ) != int( && int( ::gettimeofday() / 86400 ) != int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeDownLate ->getTimeDownLate
@ -1697,8 +1675,8 @@ sub EventProcessingBrightness {
( (
( (
( (
int( gettimeofday() / 86400 ) != int( int( ::gettimeofday() / 86400 ) != int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpEarly ->getTimeUpEarly
@ -1718,8 +1696,8 @@ sub EventProcessingBrightness {
) )
) )
|| ( || (
int( gettimeofday() / 86400 ) != int( int( ::gettimeofday() / 86400 ) != int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpWeHoliday ->getTimeUpWeHoliday
@ -1732,8 +1710,8 @@ sub EventProcessingBrightness {
->getTimeUpWeHoliday ne '01:25' ->getTimeUpWeHoliday ne '01:25'
) )
) )
&& int( gettimeofday() / 86400 ) == int( && int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpLate ->getTimeUpLate
@ -1763,7 +1741,7 @@ sub EventProcessingBrightness {
) )
) )
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($shuttersDev) - EventProcessingBrightness: Steuerung für Morgens" "AutoShuttersControl ($shuttersDev) - EventProcessingBrightness: Steuerung für Morgens"
); );
@ -1822,7 +1800,7 @@ sub EventProcessingBrightness {
->setPrivacyUpStatus(2); ->setPrivacyUpStatus(2);
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->setLastDrive('brightness privacy day open'); ->setLastDrive('brightness privacy day open');
FHEM::Automation::ShuttersControl::ShuttersCommandSet( FHEM::Automation::ShuttersControl::Shutters::CommandSet(
$hash, $hash,
$shuttersDev, $shuttersDev,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -1840,7 +1818,7 @@ sub EventProcessingBrightness {
'EventProcessingBrightness: ' 'EventProcessingBrightness: '
. $FHEM::Automation::ShuttersControl::shutters . $FHEM::Automation::ShuttersControl::shutters
->getShuttersDev ->getShuttersDev
. ' - Verarbeitung für Sunrise Privacy Down. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::ShuttersCommandSet gesendet. Grund des fahrens: ' . ' - Verarbeitung für Sunrise Privacy Down. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::Shutters::CommandSet gesendet. Grund des fahrens: '
. $FHEM::Automation::ShuttersControl::shutters . $FHEM::Automation::ShuttersControl::shutters
->getLastDrive ); ->getLastDrive );
@ -1859,7 +1837,7 @@ sub EventProcessingBrightness {
->setPrivacyUpStatus(0) ->setPrivacyUpStatus(0)
if ( $FHEM::Automation::ShuttersControl::shutters if ( $FHEM::Automation::ShuttersControl::shutters
->getPrivacyUpStatus == 2 ); ->getPrivacyUpStatus == 2 );
FHEM::Automation::ShuttersControl::ShuttersCommandSet( FHEM::Automation::ShuttersControl::Shutters::CommandSet(
$hash, $hash,
$shuttersDev, $shuttersDev,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -1870,7 +1848,7 @@ sub EventProcessingBrightness {
'EventProcessingBrightness: ' 'EventProcessingBrightness: '
. $FHEM::Automation::ShuttersControl::shutters . $FHEM::Automation::ShuttersControl::shutters
->getShuttersDev ->getShuttersDev
. ' - Verarbeitung für Sunrise. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::ShuttersCommandSet gesendet. Grund des fahrens: ' . ' - Verarbeitung für Sunrise. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::Shutters::CommandSet gesendet. Grund des fahrens: '
. $FHEM::Automation::ShuttersControl::shutters . $FHEM::Automation::ShuttersControl::shutters
->getLastDrive ); ->getLastDrive );
} }
@ -1888,13 +1866,15 @@ sub EventProcessingBrightness {
} }
} }
elsif ( elsif (
int( gettimeofday() / 86400 ) != int( int( ::gettimeofday() / 86400 ) != int(
computeAlignTime( '24:00', ::computeAlignTime(
'24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeDownEarly ) / 86400 ->getTimeDownEarly
) / 86400
) )
&& int( gettimeofday() / 86400 ) == int( && int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeDownLate ->getTimeDownLate
@ -1914,7 +1894,7 @@ sub EventProcessingBrightness {
->getAutoShuttersControlEvening eq 'on' ->getAutoShuttersControlEvening eq 'on'
) )
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($shuttersDev) - EventProcessingBrightness: Steuerung für Abends" "AutoShuttersControl ($shuttersDev) - EventProcessingBrightness: Steuerung für Abends"
); );
@ -1973,7 +1953,7 @@ sub EventProcessingBrightness {
'EventProcessingBrightness: ' 'EventProcessingBrightness: '
. $FHEM::Automation::ShuttersControl::shutters . $FHEM::Automation::ShuttersControl::shutters
->getShuttersDev ->getShuttersDev
. ' - Verarbeitung für Sunset Privacy Down. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::ShuttersCommandSet gesendet. Grund des fahrens: ' . ' - Verarbeitung für Sunset Privacy Down. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::Shutters::CommandSet gesendet. Grund des fahrens: '
. $FHEM::Automation::ShuttersControl::shutters . $FHEM::Automation::ShuttersControl::shutters
->getLastDrive ); ->getLastDrive );
} }
@ -2029,14 +2009,14 @@ sub EventProcessingBrightness {
$FHEM::Automation::ShuttersControl::shutters->setSunset(1); $FHEM::Automation::ShuttersControl::shutters->setSunset(1);
} }
FHEM::Automation::ShuttersControl::ShuttersCommandSet( $hash, FHEM::Automation::ShuttersControl::Shutters::CommandSet( $hash,
$shuttersDev, $posValue ); $shuttersDev, $posValue );
FHEM::Automation::ShuttersControl::ASC_Debug( FHEM::Automation::ShuttersControl::ASC_Debug(
'EventProcessingBrightness: ' 'EventProcessingBrightness: '
. $FHEM::Automation::ShuttersControl::shutters . $FHEM::Automation::ShuttersControl::shutters
->getShuttersDev ->getShuttersDev
. ' - Verarbeitung für Sunset. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::ShuttersCommandSet gesendet. Zielposition: ' . ' - Verarbeitung für Sunset. Roommatestatus korrekt zum fahren. Fahrbefehl wird an die Funktion FnFHEM::Automation::ShuttersControl::Shutters::CommandSet gesendet. Zielposition: '
. $posValue . $posValue
. ' Grund des fahrens: ' . ' Grund des fahrens: '
. $FHEM::Automation::ShuttersControl::shutters . $FHEM::Automation::ShuttersControl::shutters
@ -2093,7 +2073,7 @@ sub EventProcessingShadingBrightness {
: $FHEM::Automation::ShuttersControl::ascDev->getOutTemp : $FHEM::Automation::ShuttersControl::ascDev->getOutTemp
); );
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness" "AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness"
); );
@ -2104,7 +2084,7 @@ sub EventProcessingShadingBrightness {
); );
if ( $events =~ m{$reading:\s(\d+(\.\d+)?)}xms ) { if ( $events =~ m{$reading:\s(\d+(\.\d+)?)}xms ) {
Log3( ::Log3(
$name, 4, $name, 4,
"AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness "AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness
Brightness: " . $1 Brightness: " . $1
@ -2271,23 +2251,23 @@ sub EventProcessingPartyMode {
&& $FHEM::Automation::ShuttersControl::shutters->getSubTyp eq && $FHEM::Automation::ShuttersControl::shutters->getSubTyp eq
'threestate' ) 'threestate' )
{ {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingPartyMode Fenster offen" "AutoShuttersControl ($name) - EventProcessingPartyMode Fenster offen"
); );
$FHEM::Automation::ShuttersControl::shutters->setDelayCmd( $FHEM::Automation::ShuttersControl::shutters->setDelayCmd(
$FHEM::Automation::ShuttersControl::shutters->getClosedPos $FHEM::Automation::ShuttersControl::shutters->getClosedPos
); );
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingPartyMode - Spring in ShuttersCommandDelaySet" "AutoShuttersControl ($name) - EventProcessingPartyMode - Spring in ShuttersCommandDelaySet"
); );
} }
else { else {
Log3( $name, 4, ::Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingPartyMode Fenster nicht offen" "AutoShuttersControl ($name) - EventProcessingPartyMode Fenster nicht offen"
); );
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'drive after party mode'); 'drive after party mode');
FHEM::Automation::ShuttersControl::ShuttersCommandSet( FHEM::Automation::ShuttersControl::Shutters::CommandSet(
$hash, $hash,
$shuttersDev, $shuttersDev,
( (
@ -2313,7 +2293,7 @@ sub EventProcessingPartyMode {
{ {
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'drive after party mode'); 'drive after party mode');
FHEM::Automation::ShuttersControl::ShuttersCommandSet( $hash, FHEM::Automation::ShuttersControl::Shutters::CommandSet( $hash,
$shuttersDev, $shuttersDev,
$FHEM::Automation::ShuttersControl::shutters->getDelayCmd ); $FHEM::Automation::ShuttersControl::shutters->getDelayCmd );
} }
@ -2337,7 +2317,7 @@ sub EventProcessingAdvShuttersClose {
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'adv delay close'); 'adv delay close');
$FHEM::Automation::ShuttersControl::shutters->setAdvDelay(1); $FHEM::Automation::ShuttersControl::shutters->setAdvDelay(1);
FHEM::Automation::ShuttersControl::ShuttersCommandSet( FHEM::Automation::ShuttersControl::Shutters::CommandSet(
$hash, $hash,
$shuttersDev, $shuttersDev,
( (
@ -2373,8 +2353,8 @@ sub EventProcessingShutters {
'EventProcessingShutters: ' 'EventProcessingShutters: '
. $FHEM::Automation::ShuttersControl::shutters->getShuttersDev . $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
. ' - Event vom Rollo erkannt. Es wird nun eine etwaige manuelle Fahrt ausgewertet.' . ' - Event vom Rollo erkannt. Es wird nun eine etwaige manuelle Fahrt ausgewertet.'
. ' Int von gettimeofday: ' . ' Int von ::gettimeofday: '
. int( gettimeofday() ) . int( ::gettimeofday() )
. ' Last Position Timestamp: ' . ' Last Position Timestamp: '
. $FHEM::Automation::ShuttersControl::shutters . $FHEM::Automation::ShuttersControl::shutters
->getLastPosTimestamp ->getLastPosTimestamp
@ -2388,13 +2368,13 @@ sub EventProcessingShutters {
if ( if (
( (
int( gettimeofday() ) - int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getLastPosTimestamp ->getLastPosTimestamp
) > ) >
$FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration $FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration
&& ( && (
int( gettimeofday() ) - int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getLastManPosTimestamp ) > ->getLastManPosTimestamp ) >
$FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration $FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration
@ -2497,7 +2477,7 @@ sub EventProcessingExternalTriggerDevice {
$FHEM::Automation::ShuttersControl::shutters->setNoDelay(1); $FHEM::Automation::ShuttersControl::shutters->setNoDelay(1);
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->setExternalTriggerStatus(1); ->setExternalTriggerStatus(1);
FHEM::Automation::ShuttersControl::ShuttersCommandSet( $hash, FHEM::Automation::ShuttersControl::Shutters::CommandSet( $hash,
$shuttersDev, $triggerPosActive2 ); $shuttersDev, $triggerPosActive2 );
} }
else { else {
@ -2506,7 +2486,7 @@ sub EventProcessingExternalTriggerDevice {
$FHEM::Automation::ShuttersControl::shutters->setNoDelay(1); $FHEM::Automation::ShuttersControl::shutters->setNoDelay(1);
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->setExternalTriggerStatus(1); ->setExternalTriggerStatus(1);
FHEM::Automation::ShuttersControl::ShuttersCommandSet( $hash, FHEM::Automation::ShuttersControl::Shutters::CommandSet( $hash,
$shuttersDev, $triggerPosActive ); $shuttersDev, $triggerPosActive );
} }
} }
@ -2530,7 +2510,7 @@ sub EventProcessingExternalTriggerDevice {
$FHEM::Automation::ShuttersControl::shutters->setNoDelay(1); $FHEM::Automation::ShuttersControl::shutters->setNoDelay(1);
$FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus( $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(
0); 0);
FHEM::Automation::ShuttersControl::ShuttersCommandSet( FHEM::Automation::ShuttersControl::Shutters::CommandSet(
$hash, $hash,
$shuttersDev, $shuttersDev,
( (

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemsupport@cooltux.net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@ -50,7 +50,7 @@ our @ISA = qw(Exporter);
our @EXPORT_OK = qw( our @EXPORT_OK = qw(
PositionValueWindowRec PositionValueWindowRec
AutoSearchTwilightDev AutoSearchTwilightDev
GetAttrValues Get::AttrValues
CheckIfShuttersWindowRecOpen CheckIfShuttersWindowRecOpen
ExtractNotifyDevFromEvent ExtractNotifyDevFromEvent
ShuttersSunrise ShuttersSunrise
@ -69,7 +69,7 @@ our %EXPORT_TAGS = (
qw( qw(
PositionValueWindowRec PositionValueWindowRec
AutoSearchTwilightDev AutoSearchTwilightDev
GetAttrValues Get::AttrValues
CheckIfShuttersWindowRecOpen CheckIfShuttersWindowRecOpen
ExtractNotifyDevFromEvent ExtractNotifyDevFromEvent
ShuttersSunrise ShuttersSunrise
@ -89,21 +89,7 @@ our %EXPORT_TAGS = (
use GPUtils qw(GP_Import); use GPUtils qw(GP_Import);
## Import der FHEM Funktionen ## Import der FHEM Funktionen
BEGIN { BEGIN {
GP_Import( GP_Import(qw(cmdFromAnalyze));
qw(
devspec2array
CommandAttr
AttrVal
Log3
computeAlignTime
gettimeofday
sunset
sunset_abs
sunrise
sunrise_abs
cmdFromAnalyze
)
);
} }
sub PositionValueWindowRec { sub PositionValueWindowRec {
@ -156,24 +142,26 @@ sub AutoSearchTwilightDev {
my $name = $hash->{NAME}; my $name = $hash->{NAME};
if ( devspec2array('TYPE=(Astro|Twilight)') > 0 ) { if ( ::devspec2array('TYPE=(Astro|Twilight)') > 0 ) {
CommandAttr( undef, ::CommandAttr( undef,
$name $name
. ' ASC_twilightDevice ' . ' ASC_twilightDevice '
. ( devspec2array('TYPE=(Astro|Twilight)') )[0] ) . ( ::devspec2array('TYPE=(Astro|Twilight)') )[0] )
if ( AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' ); if ( ::AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' );
} }
return; return;
} }
sub GetAttrValues { sub Get::AttrValues {
my $dev = shift; my $dev = shift;
my $attribut = shift; my $attribut = shift;
my $default = shift; my $default = shift;
my @values = split( ' ', my @values = split(
AttrVal( $dev, $attribut, ( defined($default) ? $default : 'none' ) ) ); ' ',
::AttrVal( $dev, $attribut, ( defined($default) ? $default : 'none' ) )
);
my ( $value1, $value2 ) = split( ':', $values[0] ); my ( $value1, $value2 ) = split( ':', $values[0] );
my ( $value3, $value4, $value5, $value6, $value7, $value8 ); my ( $value3, $value4, $value5, $value6, $value7, $value8 );
@ -227,10 +215,10 @@ sub ExtractNotifyDevFromEvent {
my %notifyDevs; my %notifyDevs;
while ( my $notifyDev = each %{ $hash->{monitoredDevs} } ) { while ( my $notifyDev = each %{ $hash->{monitoredDevs} } ) {
Log3( $hash->{NAME}, 4, ::Log3( $hash->{NAME}, 4,
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - NotifyDev: " "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - NotifyDev: "
. $notifyDev ); . $notifyDev );
Log3( $hash->{NAME}, 5, ::Log3( $hash->{NAME}, 5,
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDev: " "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDev: "
. $shuttersDev ); . $shuttersDev );
@ -238,10 +226,10 @@ sub ExtractNotifyDevFromEvent {
&& $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} eq && $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} eq
$shuttersAttr ) $shuttersAttr )
{ {
Log3( $hash->{NAME}, 4, ::Log3( $hash->{NAME}, 4,
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDevHash: " "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDevHash: "
. $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} ); . $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} );
Log3( $hash->{NAME}, 5, ::Log3( $hash->{NAME}, 5,
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - return ShuttersDev: " "AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - return ShuttersDev: "
. $notifyDev ); . $notifyDev );
$notifyDevs{$notifyDev} = $shuttersDev; $notifyDevs{$notifyDev} = $shuttersDev;
@ -279,24 +267,27 @@ sub _IsDay {
( (
( (
( (
int( gettimeofday() / 86400 ) != int( int( ::gettimeofday() / 86400 ) != int(
computeAlignTime( '24:00', ::computeAlignTime(
'24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpEarly ) / 86400 ->getTimeUpEarly
) / 86400
) )
&& ( !IsWe() && (
|| ( IsWe() !IsWe()
&& ( $FHEM::Automation::ShuttersControl::ascDev || (
->getSunriseTimeWeHoliday eq 'off' IsWe()
|| $FHEM::Automation::ShuttersControl::shutters && ( $FHEM::Automation::ShuttersControl::ascDev
->getTimeUpWeHoliday eq '01:25' ->getSunriseTimeWeHoliday eq 'off'
) || $FHEM::Automation::ShuttersControl::shutters
) ->getTimeUpWeHoliday eq '01:25' )
) )
)
) )
|| ( || (
int( gettimeofday() / 86400 ) != int( int( ::gettimeofday() / 86400 ) != int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpWeHoliday ->getTimeUpWeHoliday
@ -309,23 +300,23 @@ sub _IsDay {
->getTimeUpWeHoliday ne '01:25' ->getTimeUpWeHoliday ne '01:25'
) )
) )
&& int( gettimeofday() / 86400 ) == int( && int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters->getTimeUpLate $FHEM::Automation::ShuttersControl::shutters->getTimeUpLate
) / 86400 ) / 86400
) )
) )
|| ( || (
int( gettimeofday() / 86400 ) != int( int( ::gettimeofday() / 86400 ) != int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeDownEarly ->getTimeDownEarly
) / 86400 ) / 86400
) )
&& int( gettimeofday() / 86400 ) == int( && int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeDownLate ->getTimeDownLate
@ -390,17 +381,22 @@ sub _IsDay {
. $FHEM::Automation::ShuttersControl::shutters->getSunrise ); . $FHEM::Automation::ShuttersControl::shutters->getSunrise );
} }
$respIsDay = 1 $respIsDay = 1
if ( if (
( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'roommate' (
and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'asleep' $FHEM::Automation::ShuttersControl::shutters->getDown eq 'roommate'
or $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'gotosleep' ) and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne
) 'asleep'
or ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'roommate' or $FHEM::Automation::ShuttersControl::shutters->getRoommates
and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'asleep' ne 'gotosleep' )
or $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'gotosleep' ) )
) or (
$FHEM::Automation::ShuttersControl::shutters->getUp eq 'roommate'
and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne
'asleep'
or $FHEM::Automation::ShuttersControl::shutters->getRoommates
ne 'gotosleep' )
)
); );
return $respIsDay; return $respIsDay;
@ -436,7 +432,7 @@ sub ShuttersSunrise {
my $oldFuncHash = my $oldFuncHash =
$FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash; $FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash;
my $shuttersSunriseUnixtime = my $shuttersSunriseUnixtime =
computeAlignTime( '24:00', sunrise( 'REAL', 0, '4:30', '8:30' ) ); ::computeAlignTime( '24:00', ::sunrise( 'REAL', 0, '4:30', '8:30' ) );
if ( $tm eq 'unix' ) { if ( $tm eq 'unix' ) {
if ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'astro' ) { if ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'astro' ) {
@ -449,11 +445,11 @@ sub ShuttersSunrise {
if ( !IsWe('tomorrow') ) { if ( !IsWe('tomorrow') ) {
if ( if (
IsWe() IsWe()
&& int( gettimeofday() / 86400 ) == int( && int( ::gettimeofday() / 86400 ) == int(
( (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -465,9 +461,9 @@ sub ShuttersSunrise {
) )
{ {
$shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime = (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -477,11 +473,11 @@ sub ShuttersSunrise {
); );
} }
elsif ( elsif (
int( gettimeofday() / 86400 ) == int( int( ::gettimeofday() / 86400 ) == int(
( (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -495,9 +491,9 @@ sub ShuttersSunrise {
) )
{ {
$shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime = (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -508,9 +504,9 @@ sub ShuttersSunrise {
} }
else { else {
$shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime = (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -526,11 +522,11 @@ sub ShuttersSunrise {
if ( if (
IsWe() IsWe()
&& ( && (
int( gettimeofday() / 86400 ) == int( int( ::gettimeofday() / 86400 ) == int(
( (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -539,11 +535,11 @@ sub ShuttersSunrise {
) + 1 ) + 1
) / 86400 ) / 86400
) )
|| int( gettimeofday() / 86400 ) != int( || int( ::gettimeofday() / 86400 ) != int(
( (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -556,9 +552,9 @@ sub ShuttersSunrise {
) )
{ {
$shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime = (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -568,11 +564,11 @@ sub ShuttersSunrise {
); );
} }
elsif ( elsif (
int( gettimeofday() / 86400 ) == int( int( ::gettimeofday() / 86400 ) == int(
( (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -586,9 +582,9 @@ sub ShuttersSunrise {
) )
{ {
$shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime = (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -601,11 +597,11 @@ sub ShuttersSunrise {
} }
else { else {
if ( if (
int( gettimeofday() / 86400 ) == int( int( ::gettimeofday() / 86400 ) == int(
( (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -617,9 +613,9 @@ sub ShuttersSunrise {
) )
{ {
$shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime = (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -630,9 +626,9 @@ sub ShuttersSunrise {
} }
else { else {
$shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime = (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -646,9 +642,9 @@ sub ShuttersSunrise {
} }
else { else {
$shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime = (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -669,11 +665,11 @@ sub ShuttersSunrise {
{ {
if ( !IsWe('tomorrow') ) { if ( !IsWe('tomorrow') ) {
if ( if (
int( gettimeofday() / 86400 ) == int( int( ::gettimeofday() / 86400 ) == int(
( (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunrise_abs( ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -689,16 +685,17 @@ sub ShuttersSunrise {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
( $shuttersSunriseUnixtime + 86400 ) ( $shuttersSunriseUnixtime + 86400 )
if ( $shuttersSunriseUnixtime < if ( $shuttersSunriseUnixtime <
( $oldFuncHash->{sunrisetime} + 180 ) ( $oldFuncHash->{::sunrisetime} + 180 )
&& $oldFuncHash->{sunrisetime} < gettimeofday() ); && $oldFuncHash->{::sunrisetime} <
::gettimeofday() );
} }
} }
} }
elsif ( defined($oldFuncHash) && ref($oldFuncHash) eq 'HASH' ) { elsif ( defined($oldFuncHash) && ref($oldFuncHash) eq 'HASH' ) {
$shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime + 86400 ) $shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime + 86400 )
if ( $shuttersSunriseUnixtime < if ( $shuttersSunriseUnixtime <
( $oldFuncHash->{sunrisetime} + 180 ) ( $oldFuncHash->{::sunrisetime} + 180 )
&& $oldFuncHash->{sunrisetime} < gettimeofday() ); && $oldFuncHash->{::sunrisetime} < ::gettimeofday() );
} }
} }
elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'time' ) elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'time' )
@ -711,8 +708,8 @@ sub ShuttersSunrise {
{ {
if ( !IsWe('tomorrow') ) { if ( !IsWe('tomorrow') ) {
if ( if (
int( gettimeofday() / 86400 ) == int( int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpWeHoliday ->getTimeUpWeHoliday
@ -720,13 +717,13 @@ sub ShuttersSunrise {
) )
) )
{ {
$shuttersSunriseUnixtime = computeAlignTime( '24:00', $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpWeHoliday ); ->getTimeUpWeHoliday );
} }
elsif ( elsif (
int( gettimeofday() / 86400 ) == int( int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpEarly ->getTimeUpEarly
@ -736,12 +733,12 @@ sub ShuttersSunrise {
->getSunrise ->getSunrise
) )
{ {
$shuttersSunriseUnixtime = computeAlignTime( '24:00', $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpEarly ) + 86400; ->getTimeUpEarly ) + 86400;
} }
else { else {
$shuttersSunriseUnixtime = computeAlignTime( '24:00', $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpEarly ); ->getTimeUpEarly );
} }
@ -749,8 +746,8 @@ sub ShuttersSunrise {
else { else {
if ( if (
IsWe() IsWe()
&& int( gettimeofday() / 86400 ) == int( && int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpWeHoliday ->getTimeUpWeHoliday
@ -758,13 +755,13 @@ sub ShuttersSunrise {
) )
) )
{ {
$shuttersSunriseUnixtime = computeAlignTime( '24:00', $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpWeHoliday ); ->getTimeUpWeHoliday );
} }
elsif ( elsif (
int( gettimeofday() / 86400 ) == int( int( ::gettimeofday() / 86400 ) == int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpEarly ->getTimeUpEarly
@ -772,13 +769,13 @@ sub ShuttersSunrise {
) )
) )
{ {
$shuttersSunriseUnixtime = computeAlignTime( '24:00', $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpEarly ); ->getTimeUpEarly );
} }
elsif ( elsif (
int( gettimeofday() / 86400 ) != int( int( ::gettimeofday() / 86400 ) != int(
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpWeHoliday ->getTimeUpWeHoliday
@ -786,19 +783,19 @@ sub ShuttersSunrise {
) )
) )
{ {
$shuttersSunriseUnixtime = computeAlignTime( '24:00', $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpWeHoliday ); ->getTimeUpWeHoliday );
} }
else { else {
$shuttersSunriseUnixtime = computeAlignTime( '24:00', $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpWeHoliday ) + 86400; ->getTimeUpWeHoliday ) + 86400;
} }
} }
} }
else { else {
$shuttersSunriseUnixtime = computeAlignTime( '24:00', $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getTimeUpEarly ); ->getTimeUpEarly );
} }
@ -806,15 +803,14 @@ sub ShuttersSunrise {
elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq
'brightness' ) 'brightness' )
{ {
$shuttersSunriseUnixtime = computeAlignTime( '24:00', $shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
$FHEM::Automation::ShuttersControl::shutters->getTimeUpLate $FHEM::Automation::ShuttersControl::shutters->getTimeUpLate );
);
} }
return $shuttersSunriseUnixtime; return $shuttersSunriseUnixtime;
} }
elsif ( $tm eq 'real' ) { elsif ( $tm eq 'real' ) {
return sunrise_abs( return ::sunrise_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters->getTimeUpEarly, $FHEM::Automation::ShuttersControl::shutters->getTimeUpEarly,
@ -858,15 +854,15 @@ sub ShuttersSunset {
my $oldFuncHash = my $oldFuncHash =
$FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash; $FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash;
my $shuttersSunsetUnixtime = my $shuttersSunsetUnixtime =
computeAlignTime( '24:00', sunset( 'REAL', 0, '15:30', '21:30' ) ); ::computeAlignTime( '24:00', ::sunset( 'REAL', 0, '15:30', '21:30' ) );
if ( $tm eq 'unix' ) { if ( $tm eq 'unix' ) {
if ( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'astro' ) if ( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'astro' )
{ {
$shuttersSunsetUnixtime = ( $shuttersSunsetUnixtime = (
computeAlignTime( ::computeAlignTime(
'24:00', '24:00',
sunset_abs( ::sunset_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
@ -879,14 +875,14 @@ sub ShuttersSunset {
if ( defined($oldFuncHash) && ref($oldFuncHash) eq 'HASH' ) { if ( defined($oldFuncHash) && ref($oldFuncHash) eq 'HASH' ) {
$shuttersSunsetUnixtime += 86400 $shuttersSunsetUnixtime += 86400
if ( $shuttersSunsetUnixtime < if ( $shuttersSunsetUnixtime <
( $oldFuncHash->{sunsettime} + 180 ) ( $oldFuncHash->{::sunsettime} + 180 )
&& $oldFuncHash->{sunsettime} < gettimeofday() ); && $oldFuncHash->{::sunsettime} < ::gettimeofday() );
} }
} }
elsif ( elsif (
$FHEM::Automation::ShuttersControl::shutters->getDown eq 'time' ) $FHEM::Automation::ShuttersControl::shutters->getDown eq 'time' )
{ {
$shuttersSunsetUnixtime = computeAlignTime( '24:00', $shuttersSunsetUnixtime = ::computeAlignTime( '24:00',
$FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly $FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly
); );
} }
@ -894,13 +890,13 @@ sub ShuttersSunset {
'brightness' ) 'brightness' )
{ {
$shuttersSunsetUnixtime = $shuttersSunsetUnixtime =
computeAlignTime( '24:00', ::computeAlignTime( '24:00',
$FHEM::Automation::ShuttersControl::shutters->getTimeDownLate ); $FHEM::Automation::ShuttersControl::shutters->getTimeDownLate );
} }
return $shuttersSunsetUnixtime; return $shuttersSunsetUnixtime;
} }
elsif ( $tm eq 'real' ) { elsif ( $tm eq 'real' ) {
return sunset_abs( return ::sunset_abs(
$autoAstroMode, $autoAstroMode,
0, 0,
$FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly, $FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly,
@ -923,7 +919,7 @@ sub IsAfterShuttersTimeBlocking {
if ( if (
( (
int( gettimeofday() ) - int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp $FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
) < ) <
$FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual $FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
@ -933,7 +929,7 @@ sub IsAfterShuttersTimeBlocking {
$FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
) )
&& $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime && $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
- ( int( gettimeofday() ) ) < - ( int( ::gettimeofday() ) ) <
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getBlockingTimeBeforDayOpen ->getBlockingTimeBeforDayOpen
) )
@ -943,7 +939,7 @@ sub IsAfterShuttersTimeBlocking {
$FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
) )
&& $FHEM::Automation::ShuttersControl::shutters->getSunsetUnixTime && $FHEM::Automation::ShuttersControl::shutters->getSunsetUnixTime
- ( int( gettimeofday() ) ) < - ( int( ::gettimeofday() ) ) <
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getBlockingTimeBeforNightClose ->getBlockingTimeBeforNightClose
) )
@ -982,7 +978,7 @@ sub IsAfterShuttersManualBlocking {
} }
elsif ( elsif (
( (
int( gettimeofday() ) - int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp $FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
) < ) <
$FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual $FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
@ -1019,7 +1015,7 @@ sub PerlCodeCheck {
sub IsAdv { sub IsAdv {
use HTTP::Date; use HTTP::Date;
my ( undef, undef, undef, $monthday, $month, $year, undef, undef, undef ) = my ( undef, undef, undef, $monthday, $month, $year, undef, undef, undef ) =
localtime( gettimeofday() ); localtime( ::gettimeofday() );
my $adv = 0; my $adv = 0;
$year += 1900; $year += 1900;
@ -1032,11 +1028,12 @@ sub IsAdv {
my $time = str2time( $year . '-12-25' ); my $time = str2time( $year . '-12-25' );
my $wday = ( localtime($time) )[6]; my $wday = ( localtime($time) )[6];
$wday = $wday ? $wday : 7; $wday = $wday ? $wday : 7;
$time -= ( $FHEM::Automation::ShuttersControl::ascDev $time -= (
->getAdvDate eq 'DeadSunday' $FHEM::Automation::ShuttersControl::ascDev->getAdvDate eq
? ($wday + 27) * 86400 'DeadSunday'
: ($wday + 21) * 86400 ? ( $wday + 27 ) * 86400
); : ( $wday + 21 ) * 86400
);
$adv = 1 if ( $time < time ); $adv = 1 if ( $time < time );
} }
@ -1046,15 +1043,16 @@ sub IsAdv {
sub IsInTime { sub IsInTime {
my $dfi = shift; my $dfi = shift;
$dfi =~ s/{([^\x7d]*)}/$cmdFromAnalyze=$1; eval $1/ge; # Forum #69787 $dfi =~ s/{([^\x7d]*)}/$cmdFromAnalyze=$1; eval $1/ge; # Forum #69787
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(gettimeofday()); my ( $sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst ) =
my $dhms = sprintf("%s\@%02d:%02d:%02d", $wday, $hour, $min, $sec); localtime( ::gettimeofday() );
foreach my $ft (split(" ", $dfi)) { my $dhms = sprintf( "%s\@%02d:%02d:%02d", $wday, $hour, $min, $sec );
my ($from, $to) = split("-", $ft); foreach my $ft ( split( " ", $dfi ) ) {
if(defined($from) && defined($to)) { my ( $from, $to ) = split( "-", $ft );
$from = "$wday\@$from" if(index($from,"@") < 0); if ( defined($from) && defined($to) ) {
$to = "$wday\@$to" if(index($to, "@") < 0); $from = "$wday\@$from" if ( index( $from, "@" ) < 0 );
return 1 if($from le $dhms && $dhms le $to); $to = "$wday\@$to" if ( index( $to, "@" ) < 0 );
return 1 if ( $from le $dhms && $dhms le $to );
} }
} }

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@ -59,12 +59,11 @@ our %EXPORT_TAGS = (
], ],
); );
sub RainProcessing { sub RainProcessing {
my ( $hash, $val, $triggerMax, $triggerMin ) = @_; my ( $hash, $val, $triggerMax, $triggerMin ) = @_;
my $rainClosedPos = $FHEM::Automation::ShuttersControl::ascDev my $rainClosedPos = $FHEM::Automation::ShuttersControl::ascDev
->getRainSensorShuttersClosedPos; ->getRainSensorShuttersClosedPos;
for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev( $FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
@ -75,46 +74,50 @@ sub RainProcessing {
$FHEM::Automation::ShuttersControl::shutters->getRainProtection eq $FHEM::Automation::ShuttersControl::shutters->getRainProtection eq
'off' ); 'off' );
if ( $val > $triggerMax if (
$val > $triggerMax
&& $FHEM::Automation::ShuttersControl::shutters->getStatus != && $FHEM::Automation::ShuttersControl::shutters->getStatus !=
$rainClosedPos $rainClosedPos
&& $FHEM::Automation::ShuttersControl::shutters && $FHEM::Automation::ShuttersControl::shutters
->getRainProtectionStatus eq 'unprotected' ->getRainProtectionStatus eq 'unprotected'
|| ( $FHEM::Automation::ShuttersControl::shutters || ( $FHEM::Automation::ShuttersControl::shutters
->getRainProtectionStatus eq 'unprotected' ->getRainProtectionStatus eq 'unprotected'
&& $FHEM::Automation::ShuttersControl::shutters && $FHEM::Automation::ShuttersControl::shutters
->getRainUnprotectionDelayObj ne 'none') ->getRainUnprotectionDelayObj ne 'none' )
) )
{ {
_RainProtected(); _RainProtected();
} }
elsif ( ( $val == 0 || $val < $triggerMin ) elsif ( ( $val == 0 || $val < $triggerMin )
&& $FHEM::Automation::ShuttersControl::shutters->getStatus == && $FHEM::Automation::ShuttersControl::shutters->getStatus ==
$rainClosedPos $rainClosedPos
&& IsAfterShuttersManualBlocking($shuttersDev) && IsAfterShuttersManualBlocking($shuttersDev)
&& $FHEM::Automation::ShuttersControl::shutters && $FHEM::Automation::ShuttersControl::shutters
->getRainProtectionStatus eq 'protected' ) ->getRainProtectionStatus eq 'protected' )
{ {
my %funcHash = ( my %funcHash = ( shuttersdevice => $shuttersDev, );
shuttersdevice => $shuttersDev,
);
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj(\%funcHash);
::InternalTimer( ::gettimeofday() + $FHEM::Automation::ShuttersControl::ascDev->getRainWaitingTime
, \&_RainUnprotected
, \%funcHash );
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->setRainProtectionStatus('unprotected'); ->setRainUnprotectionDelayObj( \%funcHash );
::InternalTimer(
::gettimeofday() +
$FHEM::Automation::ShuttersControl::ascDev
->getRainWaitingTime,
\&_RainUnprotected, \%funcHash
);
$FHEM::Automation::ShuttersControl::shutters
->setRainProtectionStatus('unprotected');
} }
else { else {
if ( $FHEM::Automation::ShuttersControl::shutters->getStatus != $rainClosedPos if ( $FHEM::Automation::ShuttersControl::shutters->getStatus !=
&& ($val == 0 || $val < $triggerMin) ) $rainClosedPos
&& ( $val == 0 || $val < $triggerMin ) )
{ {
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->setRainProtectionStatus('unprotected'); ->setRainProtectionStatus('unprotected');
} }
elsif ($val > $triggerMax) { elsif ( $val > $triggerMax ) {
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->setRainProtectionStatus('protected'); ->setRainProtectionStatus('protected');
} }
@ -126,63 +129,69 @@ sub RainProcessing {
### es muss noch beobachtet werden ob die Auswahl des Rollos welches bearbeitet werden soll bestehen bleibt oder mit in die neuen Funktionen übergeben werden muss ### es muss noch beobachtet werden ob die Auswahl des Rollos welches bearbeitet werden soll bestehen bleibt oder mit in die neuen Funktionen übergeben werden muss
sub _RainProtected { sub _RainProtected {
::RemoveInternalTimer($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj) ::RemoveInternalTimer( $FHEM::Automation::ShuttersControl::shutters
if($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj ne 'none'); ->getRainUnprotectionDelayObj )
if ( $FHEM::Automation::ShuttersControl::shutters
->getRainUnprotectionDelayObj ne 'none' );
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none'); $FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj(
'none');
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'rain protected'); 'rain protected');
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd( $FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
$FHEM::Automation::ShuttersControl::ascDev $FHEM::Automation::ShuttersControl::ascDev
->getRainSensorShuttersClosedPos); ->getRainSensorShuttersClosedPos );
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus(
->setRainProtectionStatus('protected'); 'protected');
return;
} }
sub _RainUnprotected { sub _RainUnprotected {
my $h = shift; my $h = shift;
my $shuttersDev = $h->{shuttersdevice}; my $shuttersDev = $h->{shuttersdevice};
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev( $FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
$shuttersDev);
$FHEM::Automation::ShuttersControl::shutters->setLastDrive( $FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'rain un-protected'); 'rain un-protected');
if ( $FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj ne 'none' ) { if ( $FHEM::Automation::ShuttersControl::shutters
::RemoveInternalTimer($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj); ->getRainUnprotectionDelayObj ne 'none' )
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none'); {
::RemoveInternalTimer( $FHEM::Automation::ShuttersControl::shutters
->getRainUnprotectionDelayObj );
$FHEM::Automation::ShuttersControl::shutters
->setRainUnprotectionDelayObj('none');
} }
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd( $FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
( (
$FHEM::Automation::ShuttersControl::shutters->getIsDay $FHEM::Automation::ShuttersControl::shutters->getIsDay
? $FHEM::Automation::ShuttersControl::shutters->getLastPos ? $FHEM::Automation::ShuttersControl::shutters->getLastPos
: ( $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace : (
eq 'awning' $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
? $FHEM::Automation::ShuttersControl::shutters eq 'awning'
->getOpenPos ? $FHEM::Automation::ShuttersControl::shutters->getOpenPos
: ( : (
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getPrivacyDownStatus == 2 ->getPrivacyDownStatus == 2
? $FHEM::Automation::ShuttersControl::shutters ? $FHEM::Automation::ShuttersControl::shutters
->getPrivacyDownPos ->getPrivacyDownPos
: $FHEM::Automation::ShuttersControl::shutters : $FHEM::Automation::ShuttersControl::shutters
->getClosedPos ->getClosedPos
) )
) )
) )
) ) if ( IsAfterShuttersTimeBlocking($shuttersDev) );
if (IsAfterShuttersTimeBlocking($shuttersDev));
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus(
->setRainProtectionStatus('unprotected'); 'unprotected');
return;
} }
1; 1;

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@ -44,37 +44,24 @@ use strict;
use warnings; use warnings;
use utf8; use utf8;
use GPUtils qw(GP_Import); sub getRoommateStatus {
## Import der FHEM Funktionen
BEGIN {
GP_Import(
qw(
ReadingsVal)
);
}
sub _getRoommateStatus {
my $self = shift; my $self = shift;
my $roommate = $self->{roommate}; my $roommate = $self->{roommate};
return ReadingsVal( $roommate, return ::ReadingsVal( $roommate,
$FHEM::Automation::ShuttersControl::shutters->getRoommatesReading, $FHEM::Automation::ShuttersControl::shutters->getRoommatesReading,
'none' ); 'none' );
} }
sub _getRoommateLastStatus { sub getRoommateLastStatus {
my $self = shift; my $self = shift;
my $roommate = $self->{roommate}; my $roommate = $self->{roommate};
my $default = $self->{defaultarg}; my $default = $self->{defaultarg};
$default = 'none' if ( !defined($default) ); $default = 'none' if ( !defined($default) );
return ReadingsVal( $roommate, 'lastState', $default ); return ::ReadingsVal( $roommate, 'lastState', $default );
} }
1; 1;

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@ -64,10 +64,9 @@ our %EXPORT_TAGS = (
], ],
); );
sub CheckASC_ConditionsForShadingFn { sub CheckASC_ConditionsForShadingFn {
my $hash = shift; my $hash = shift;
my $value = shift; my $value = shift;
my $error; my $error;
@ -81,10 +80,10 @@ sub CheckASC_ConditionsForShadingFn {
my $count = 1; my $count = 1;
for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
my %funcHash = ( my %funcHash = (
hash => $hash, hash => $hash,
shuttersdevice => $shuttersDev, shuttersdevice => $shuttersDev,
value => $value, value => $value,
attrEvent => 0, attrEvent => 0,
); );
::InternalTimer( ::InternalTimer(
@ -104,7 +103,7 @@ sub CheckASC_ConditionsForShadingFn {
} }
sub _CheckShuttersConditionsForShadingFn { sub _CheckShuttersConditionsForShadingFn {
my $funcHash = shift; my $funcHash = shift;
my $hash = $funcHash->{hash}; my $hash = $funcHash->{hash};
my $shuttersDev = $funcHash->{shuttersdevice}; my $shuttersDev = $funcHash->{shuttersdevice};
@ -119,64 +118,69 @@ sub _CheckShuttersConditionsForShadingFn {
if ( $value eq 'off' ) { if ( $value eq 'off' ) {
$FHEM::Automation::ShuttersControl::shutters->setShadingStatus('out'); $FHEM::Automation::ShuttersControl::shutters->setShadingStatus('out');
$infoMessage .= ' shading was deactivated ' . ($funcHash->{attrEvent} ? 'in the device' : 'globally'); $infoMessage .= ' shading was deactivated '
$errorMessage .= ''; . ( $funcHash->{attrEvent} ? 'in the device' : 'globally' );
$errorMessage .= '';
ShadingProcessingDriveCommand( $hash, $shuttersDev ); ShadingProcessingDriveCommand( $hash, $shuttersDev );
} }
else { else {
$infoMessage .= ( $infoMessage .= (
$FHEM::Automation::ShuttersControl::shutters->getShadingMode ne 'off' $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne
&& $FHEM::Automation::ShuttersControl::ascDev 'off'
->getAutoShuttersControlShading eq 'on' && $FHEM::Automation::ShuttersControl::ascDev
&& $FHEM::Automation::ShuttersControl::shutters->getOutTemp == -100 ->getAutoShuttersControlShading eq 'on'
&& $FHEM::Automation::ShuttersControl::shutters->getOutTemp ==
-100
? ' shading active, global temp sensor is set, but shutters temperature sensor is not set' ? ' shading active, global temp sensor is set, but shutters temperature sensor is not set'
: '' : ''
); );
$warnMessage .= ( $warnMessage .= (
$FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off' $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq
&& $FHEM::Automation::ShuttersControl::ascDev 'off'
->getAutoShuttersControlShading eq 'on' && $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading eq 'on'
? ' global shading active but ASC_Shading_Mode attribut is not set or off' ? ' global shading active but ASC_Shading_Mode attribut is not set or off'
: '' : ''
); );
$errorMessage .= ( $errorMessage .= (
$FHEM::Automation::ShuttersControl::shutters->getShadingMode ne 'off' $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne
&& $FHEM::Automation::ShuttersControl::ascDev 'off'
->getAutoShuttersControlShading ne 'on' && $FHEM::Automation::ShuttersControl::ascDev
&& $FHEM::Automation::ShuttersControl::ascDev ->getAutoShuttersControlShading ne 'on'
->getAutoShuttersControlShading ne 'off' && $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading ne 'off'
? ' ASC_Shading_Mode attribut is set but global shading has errors, look at ASC device ' ? ' ASC_Shading_Mode attribut is set but global shading has errors, look at ASC device '
. '<a href="' . '<a href="'
. '/fhem?detail=' . '/fhem?detail='
. ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' ) . ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
. $::FW_CSRF . '">' . $::FW_CSRF . '">'
. ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' ) . ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
. '</a>' . '</a>'
: '' : ''
); );
$errorMessage .= ( $errorMessage .= (
$FHEM::Automation::ShuttersControl::shutters->getBrightness == -1 $FHEM::Automation::ShuttersControl::shutters->getBrightness == -1
&& $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne && $FHEM::Automation::ShuttersControl::shutters->getShadingMode
'off' ne 'off'
? ' no brightness sensor found, please set ASC_BrightnessSensor attribut' ? ' no brightness sensor found, please set ASC_BrightnessSensor attribut'
: '' : ''
); );
} }
$message .= ' ERROR: ' . $errorMessage $message .= ' ERROR: ' . $errorMessage
if ( defined($errorMessage) if ( defined($errorMessage)
&& $errorMessage ne '' ); && $errorMessage ne '' );
$message .= ' WARN: ' . $warnMessage $message .= ' WARN: ' . $warnMessage
if ( defined($warnMessage) if ( defined($warnMessage)
&& $warnMessage ne '' && $warnMessage ne ''
&& $errorMessage eq '' ); && $errorMessage eq '' );
$message .= ' INFO: ' . $infoMessage $message .= ' INFO: ' . $infoMessage
if ( defined($infoMessage) if ( defined($infoMessage)
&& $infoMessage ne '' && $infoMessage ne ''
&& $errorMessage eq '' ); && $errorMessage eq '' );
@ -184,6 +188,8 @@ sub _CheckShuttersConditionsForShadingFn {
::readingsBulkUpdateIfChanged( $shuttersDevHash, 'ASC_ShadingMessage', ::readingsBulkUpdateIfChanged( $shuttersDevHash, 'ASC_ShadingMessage',
'<html>' . $message . ' </html>' ); '<html>' . $message . ' </html>' );
::readingsEndUpdate( $shuttersDevHash, 1 ); ::readingsEndUpdate( $shuttersDevHash, 1 );
return;
} }
sub ShadingProcessing { sub ShadingProcessing {
@ -199,11 +205,17 @@ sub ShadingProcessing {
my $brightness = my $brightness =
$FHEM::Automation::ShuttersControl::shutters->getBrightnessAverage; $FHEM::Automation::ShuttersControl::shutters->getBrightnessAverage;
$FHEM::Automation::ShuttersControl::shutters->setShadingBetweenTheTimeSuspend( $FHEM::Automation::ShuttersControl::shutters
( IsInTime($FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTime) ->setShadingBetweenTheTimeSuspend(
? 0 (
: 1 ) IsInTime(
); $FHEM::Automation::ShuttersControl::shutters
->getShadingBetweenTheTime
)
? 0
: 1
)
);
FHEM::Automation::ShuttersControl::ASC_Debug( FHEM::Automation::ShuttersControl::ASC_Debug(
'ShadingProcessing: ' 'ShadingProcessing: '
@ -268,10 +280,11 @@ sub ShadingProcessing {
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getShadingWaitingPeriod / 2 ->getShadingWaitingPeriod / 2
) )
|| $FHEM::Automation::ShuttersControl::shutters->getExternalTriggerStatus || $FHEM::Automation::ShuttersControl::shutters
->getExternalTriggerStatus
|| $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off' || $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off'
|| $FHEM::Automation::ShuttersControl::ascDev || $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading eq 'off' ->getAutoShuttersControlShading eq 'off'
); );
::Log3( $name, 4, ::Log3( $name, 4,
@ -300,9 +313,9 @@ sub ShadingProcessing {
->getShadingMinOutsideTemperature - 4 ->getShadingMinOutsideTemperature - 4
|| $azimuth < $azimuthLeft || $azimuth < $azimuthLeft
|| $azimuth > $azimuthRight || $azimuth > $azimuthRight
|| ( !$FHEM::Automation::ShuttersControl::shutters->getIsDay || ( !$FHEM::Automation::ShuttersControl::shutters->getIsDay
&& $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime && $FHEM::Automation::ShuttersControl::shutters
- ( int( ::gettimeofday() ) ) > 7200 ) ->getSunriseUnixTime - ( int( ::gettimeofday() ) ) > 7200 )
) )
&& $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ne && $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ne
'out' 'out'
@ -452,16 +465,12 @@ sub ShadingProcessing {
|| $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq || $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq
$homemode ) $homemode )
&& ( && (
$getModeUp eq 'always' $getModeUp eq 'always'
|| $getModeUp eq || $getModeUp eq $homemode
$homemode
|| $getModeUp eq 'off' || $getModeUp eq 'off'
|| $getModeUp eq || $getModeUp eq 'absent'
'absent' || $getModeUp eq 'gone'
|| $getModeUp eq || ( $getModeUp eq 'home'
'gone'
|| ( $getModeUp eq
'home'
&& $homemode ne 'asleep' ) && $homemode ne 'asleep' )
) )
&& ( && (
@ -481,11 +490,11 @@ sub ShadingProcessing {
) )
&& $FHEM::Automation::ShuttersControl::shutters->getIfInShading && $FHEM::Automation::ShuttersControl::shutters->getIfInShading
) )
|| ( !$FHEM::Automation::ShuttersControl::shutters->getIfInShading || ( !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
&& $FHEM::Automation::ShuttersControl::shutters->getStatus == && $FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters->getShadingPos $FHEM::Automation::ShuttersControl::shutters->getShadingPos )
) || ( !$FHEM::Automation::ShuttersControl::shutters
|| ( !$FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTimeSuspend ->getShadingBetweenTheTimeSuspend
&& $FHEM::Automation::ShuttersControl::shutters->getStatus != && $FHEM::Automation::ShuttersControl::shutters->getStatus !=
$FHEM::Automation::ShuttersControl::shutters->getShadingPos ) $FHEM::Automation::ShuttersControl::shutters->getShadingPos )
) )
@ -535,19 +544,28 @@ sub ShadingProcessingDriveCommand {
$FHEM::Automation::ShuttersControl::shutters->setShadingStatus( $FHEM::Automation::ShuttersControl::shutters->setShadingStatus(
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus ); $FHEM::Automation::ShuttersControl::shutters->getShadingStatus );
if ( IsInTime($FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTime) if (
&& $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'in' IsInTime(
$FHEM::Automation::ShuttersControl::shutters
->getShadingBetweenTheTime
)
&& $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq
'in'
&& $getShadingPos != $getStatus && $getShadingPos != $getStatus
&& ( $getStatus != $FHEM::Automation::ShuttersControl::shutters->getClosedPos && (
|| ( $getStatus == $FHEM::Automation::ShuttersControl::shutters->getClosedPos $getStatus !=
&& $marker $FHEM::Automation::ShuttersControl::shutters->getClosedPos
) || ( $getStatus ==
) $FHEM::Automation::ShuttersControl::shutters->getClosedPos
&& ( $getStatus != $FHEM::Automation::ShuttersControl::shutters->getSleepPos && $marker )
|| ( $getStatus == $FHEM::Automation::ShuttersControl::shutters->getSleepPos )
&& $marker && (
) $getStatus !=
) $FHEM::Automation::ShuttersControl::shutters->getSleepPos
|| ( $getStatus ==
$FHEM::Automation::ShuttersControl::shutters->getSleepPos
&& $marker )
)
&& ( && (
FHEM::Automation::ShuttersControl::CheckIfShuttersWindowRecOpen( FHEM::Automation::ShuttersControl::CheckIfShuttersWindowRecOpen(
$shuttersDev) != 2 $shuttersDev) != 2
@ -586,10 +604,10 @@ sub ShadingProcessingDriveCommand {
( (
( (
$getShadingPos == $getShadingPos ==
$FHEM::Automation::ShuttersControl::shutters->getLastPos $FHEM::Automation::ShuttersControl::shutters->getLastPos
|| $getShadingPos == || $getShadingPos ==
$FHEM::Automation::ShuttersControl::shutters $FHEM::Automation::ShuttersControl::shutters
->getShadingLastPos ->getShadingLastPos
) )
? $FHEM::Automation::ShuttersControl::shutters->getOpenPos ? $FHEM::Automation::ShuttersControl::shutters->getOpenPos
: ( : (
@ -610,8 +628,10 @@ sub ShadingProcessingDriveCommand {
: $FHEM::Automation::ShuttersControl::shutters->getOpenPos : $FHEM::Automation::ShuttersControl::shutters->getOpenPos
) )
) )
) if ( $FHEM::Automation::ShuttersControl::shutters->getIsDay )
|| $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace eq 'awning' ); if ( $FHEM::Automation::ShuttersControl::shutters->getIsDay
|| $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
eq 'awning' );
FHEM::Automation::ShuttersControl::ASC_Debug( FHEM::Automation::ShuttersControl::ASC_Debug(
'ShadingProcessingDriveCommand: ' 'ShadingProcessingDriveCommand: '

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@ -45,6 +45,10 @@
package FHEM::Automation::ShuttersControl::Shutters; package FHEM::Automation::ShuttersControl::Shutters;
use strict;
use warnings;
use utf8;
use FHEM::Automation::ShuttersControl::Shutters::Readings; use FHEM::Automation::ShuttersControl::Shutters::Readings;
use FHEM::Automation::ShuttersControl::Shutters::Attr; use FHEM::Automation::ShuttersControl::Shutters::Attr;
use FHEM::Automation::ShuttersControl::Roommate; use FHEM::Automation::ShuttersControl::Roommate;
@ -53,10 +57,6 @@ use FHEM::Automation::ShuttersControl::Window;
our @ISA = our @ISA =
qw(FHEM::Automation::ShuttersControl::Shutters::Readings FHEM::Automation::ShuttersControl::Shutters::Attr FHEM::Automation::ShuttersControl::Roommate FHEM::Automation::ShuttersControl::Window); qw(FHEM::Automation::ShuttersControl::Shutters::Readings FHEM::Automation::ShuttersControl::Shutters::Attr FHEM::Automation::ShuttersControl::Roommate FHEM::Automation::ShuttersControl::Window);
use strict;
use warnings;
use utf8;
sub new { sub new {
my $class = shift; my $class = shift;
my $self = { my $self = {
@ -161,6 +161,7 @@ sub setDriveCmd {
$FHEM::Automation::ShuttersControl::shutters->setDelayCmd($posValue); $FHEM::Automation::ShuttersControl::shutters->setDelayCmd($posValue);
$FHEM::Automation::ShuttersControl::ascDev->setDelayCmdReading; $FHEM::Automation::ShuttersControl::ascDev->setDelayCmdReading;
$FHEM::Automation::ShuttersControl::shutters->setNoDelay(0); $FHEM::Automation::ShuttersControl::shutters->setNoDelay(0);
# $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0) # $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0)
# if ( $FHEM::Automation::ShuttersControl::shutters # if ( $FHEM::Automation::ShuttersControl::shutters
# ->getExternalTriggerStatus ); # ->getExternalTriggerStatus );
@ -177,7 +178,8 @@ sub setDriveCmd {
if ( $FHEM::Automation::ShuttersControl::shutters->getDelayCmd ne if ( $FHEM::Automation::ShuttersControl::shutters->getDelayCmd ne
'none' ) 'none' )
; # setzt den Wert auf none da der Rolladen nun gesteuert werden kann. ; # setzt den Wert auf none da der Rolladen nun gesteuert werden kann.
$FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0) $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(
0)
if ( $FHEM::Automation::ShuttersControl::shutters if ( $FHEM::Automation::ShuttersControl::shutters
->getExternalTriggerStatus ); ->getExternalTriggerStatus );
@ -460,7 +462,8 @@ sub setRainUnprotectionDelayObj {
my $self = shift; my $self = shift;
my $value = shift; my $value = shift;
$self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} = $value $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL}
= $value
if ( defined($value) ); if ( defined($value) );
return; return;
} }
@ -545,12 +548,13 @@ sub getAttrUpdateChanges {
sub getIsDay { sub getIsDay {
my $self = shift; my $self = shift;
return FHEM::Automation::ShuttersControl::Helper::_IsDay( $self->{shuttersDev} ); return FHEM::Automation::ShuttersControl::Helper::_IsDay(
$self->{shuttersDev} );
} }
sub getAntiFreezeStatus { sub getAntiFreezeStatus {
use POSIX qw(strftime); use POSIX qw(strftime);
my $self = shift; my $self = shift;
my $daytime = strftime( "%P", localtime() ); my $daytime = strftime( "%P", localtime() );
$daytime = ( $daytime = (
defined($daytime) && $daytime defined($daytime) && $daytime
@ -756,10 +760,12 @@ sub getRainUnprotectionDelayObj {
( (
defined( $self->{ $self->{shuttersDev} }->{RainProtection} ) defined( $self->{ $self->{shuttersDev} }->{RainProtection} )
&& defined( && defined(
$self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} $self->{ $self->{shuttersDev} }->{RainProtection}
->{UNPROTECTIONDELAYOBJVAL}
) )
) )
? $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} ? $self->{ $self->{shuttersDev} }->{RainProtection}
->{UNPROTECTIONDELAYOBJVAL}
: 'none' : 'none'
); );
} }
@ -821,7 +827,7 @@ sub getRoommatesStatus {
$FHEM::Automation::ShuttersControl::shutters->setRoommate($ro); $FHEM::Automation::ShuttersControl::shutters->setRoommate($ro);
my $currentPrio = my $currentPrio =
$statePrio{ $FHEM::Automation::ShuttersControl::shutters $statePrio{ $FHEM::Automation::ShuttersControl::shutters
->_getRoommateStatus }; ->getRoommateStatus };
$minPrio = $currentPrio if ( $minPrio > $currentPrio ); $minPrio = $currentPrio if ( $minPrio > $currentPrio );
} }
@ -854,7 +860,7 @@ sub getRoommatesLastStatus {
$FHEM::Automation::ShuttersControl::shutters->setRoommate($ro); $FHEM::Automation::ShuttersControl::shutters->setRoommate($ro);
my $currentPrio = my $currentPrio =
$statePrio{ $FHEM::Automation::ShuttersControl::shutters $statePrio{ $FHEM::Automation::ShuttersControl::shutters
->_getRoommateLastStatus }; ->getRoommateLastStatus };
$minPrio = $currentPrio if ( $minPrio > $currentPrio ); $minPrio = $currentPrio if ( $minPrio > $currentPrio );
} }
@ -899,7 +905,8 @@ sub setShadingStatus {
$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() )
if ( defined( $self->{ $self->{shuttersDev} }{ShadingStatus} ) ); if ( defined( $self->{ $self->{shuttersDev} }{ShadingStatus} ) );
return; return;
@ -945,7 +952,7 @@ sub setShadingLastPos {
return; return;
} }
sub setShadingBetweenTheTimeSuspend { # Werte für value = 0, 1 sub setShadingBetweenTheTimeSuspend { # Werte für value = 0, 1
my $self = shift; my $self = shift;
my $value = shift; my $value = shift;
@ -1007,12 +1014,16 @@ sub getShadingStatus { # Werte für value = in, out, in reserved, out reserved
); );
} }
sub getShadingBetweenTheTimeSuspend { # Werte für value = 0, 1 sub getShadingBetweenTheTimeSuspend { # Werte für value = 0, 1
my $self = shift; my $self = shift;
return ( return (
defined( $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend} ) defined(
&& defined( $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL} ) $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}
)
&& defined(
$self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL}
)
? $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL} ? $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL}
: 0 : 0
); );
@ -1084,9 +1095,7 @@ sub getShadingLastPos {
return ( return (
defined( $self->{ $self->{shuttersDev} }{ShadingLastPos} ) defined( $self->{ $self->{shuttersDev} }{ShadingLastPos} )
&& defined( && defined( $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL} )
$self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL}
)
? $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL} ? $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL}
: $FHEM::Automation::ShuttersControl::shutters->getShadingPos : $FHEM::Automation::ShuttersControl::shutters->getShadingPos
); );
@ -1094,7 +1103,4 @@ sub getShadingLastPos {
### Ende Beschattung ### Ende Beschattung
1; 1;

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@ -46,24 +46,12 @@ use utf8;
use FHEM::Automation::ShuttersControl::Helper qw (IsAdv PerlCodeCheck); use FHEM::Automation::ShuttersControl::Helper qw (IsAdv PerlCodeCheck);
use GPUtils qw(GP_Import);
## Import der FHEM Funktionen
BEGIN {
GP_Import(
qw(
AttrVal
CommandAttr
gettimeofday)
);
}
sub _setAttributs { sub _setAttributs {
my $shuttersDev = shift; my $shuttersDev = shift;
my $attr = shift; my $attr = shift;
my $attrVal = shift; my $attrVal = shift;
CommandAttr( undef, $shuttersDev . ' ' . $attr . ' ' . $attrVal ); ::CommandAttr( undef, $shuttersDev . ' ' . $attr . ' ' . $attrVal );
return; return;
} }
@ -77,28 +65,28 @@ sub _getPosition {
return $self->{ $self->{shuttersDev} }->{$attr}->{position} return $self->{ $self->{shuttersDev} }->{$attr}->{position}
if ( if (
exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2 $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2
); );
$self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} = $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} =
int( gettimeofday() ); int( ::gettimeofday() );
my $position; my $position;
my $posAssignment; my $posAssignment;
if ( if (
AttrVal( $self->{shuttersDev}, $attr, ::AttrVal( $self->{shuttersDev}, $attr,
$FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ) =~ [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ) =~
m{\A\{.+\}\z}xms m{\A\{.+\}\z}xms
) )
{ {
my $response = PerlCodeCheck( my $response = PerlCodeCheck(
AttrVal( ::AttrVal(
$self->{shuttersDev}, $self->{shuttersDev},
$attr, $attr,
$FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
) )
); );
@ -108,23 +96,23 @@ sub _getPosition {
$position =~ m{\A\d+(\.\d+)?\z}xms $position =~ m{\A\d+(\.\d+)?\z}xms
? $position ? $position
: $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} : $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
); );
$posAssignment = ( $posAssignment = (
defined($posAssignment) defined($posAssignment)
&& $posAssignment =~ m{\A\d+(\.\d+)?\z}xms && $posAssignment =~ m{\A\d+(\.\d+)?\z}xms
? $posAssignment ? $posAssignment
: 'none' : 'none'
); );
} }
else { else {
( $position, $posAssignment ) = ( $position, $posAssignment ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( FHEM::Automation::ShuttersControl::Helper::Get::AttrValues(
$self->{shuttersDev}, $self->{shuttersDev},
$attr, $attr,
$FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
); );
} }
@ -145,8 +133,7 @@ sub _getPosition {
) )
{ {
$self->{ $self->{shuttersDev} }->{$attr}->{position} = $self->{ $self->{shuttersDev} }->{$attr}->{position} =
PerlCodeCheck( PerlCodeCheck( $self->{ $self->{shuttersDev} }->{$attr}->{position} );
$self->{ $self->{shuttersDev} }->{$attr}->{position} );
} }
return ( return (
@ -154,7 +141,7 @@ sub _getPosition {
m{^\d+(\.\d+)?$}xms m{^\d+(\.\d+)?$}xms
? $self->{ $self->{shuttersDev} }->{$attr}->{position} ? $self->{ $self->{shuttersDev} }->{$attr}->{position}
: $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList} : $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] [ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
); );
} }
@ -167,7 +154,7 @@ sub _getPositionAssignment {
return $self->{ $self->{shuttersDev} }->{$attr}->{posAssignment} return $self->{ $self->{shuttersDev} }->{$attr}->{posAssignment}
if ( if (
exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2 $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2
); );
$FHEM::Automation::ShuttersControl::shutters->$getFn; $FHEM::Automation::ShuttersControl::shutters->$getFn;
@ -213,7 +200,7 @@ sub setShuttersPlace {
sub getShuttersPlace { sub getShuttersPlace {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' );
} }
sub setSlatPosCmd { sub setSlatPosCmd {
@ -236,15 +223,15 @@ sub getSlatPosCmd {
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}->{LASTGETTIME}
= int( gettimeofday() ); = int( ::gettimeofday() );
my ( $slatPosCmd, $slatDevice ) = my ( $slatPosCmd, $slatDevice ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, FHEM::Automation::ShuttersControl::Helper::Get::AttrValues(
'ASC_SlatPosCmd_SlatDevice', 'none:none' ); $self->{shuttersDev}, 'ASC_SlatPosCmd_SlatDevice', 'none:none' );
## Erwartetes Ergebnis ## Erwartetes Ergebnis
# upTime:upBrightnessVal # upTime:upBrightnessVal
@ -268,7 +255,7 @@ sub getSlatDevice {
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice} $self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -299,15 +286,15 @@ sub getPrivacyUpTime {
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
->{LASTGETTIME} = int( gettimeofday() ); ->{LASTGETTIME} = int( ::gettimeofday() );
my ( $upTime, $upBrightnessVal ) = my ( $upTime, $upBrightnessVal ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, FHEM::Automation::ShuttersControl::Helper::Get::AttrValues(
'ASC_PrivacyUpValue_beforeDayOpen', '-1:-1' ); $self->{shuttersDev}, 'ASC_PrivacyUpValue_beforeDayOpen', '-1:-1' );
## Erwartetes Ergebnis ## Erwartetes Ergebnis
# upTime:upBrightnessVal # upTime:upBrightnessVal
@ -341,7 +328,7 @@ sub getPrivacyUpBrightnessVal {
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen} $self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -378,14 +365,15 @@ sub getPrivacyDownTime {
$self->{ $self->{shuttersDev} } $self->{ $self->{shuttersDev} }
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} } $self->{ $self->{shuttersDev} }
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2 ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2
); );
$self->{ $self->{shuttersDev} }->{ASC_PrivacyDownValue_beforeNightClose} $self->{ $self->{shuttersDev} }->{ASC_PrivacyDownValue_beforeNightClose}
->{LASTGETTIME} = int( gettimeofday() ); ->{LASTGETTIME} = int( ::gettimeofday() );
my ( $downTime, $downBrightnessVal ) = my ( $downTime, $downBrightnessVal ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, FHEM::Automation::ShuttersControl::Helper::Get::AttrValues(
$self->{shuttersDev},
'ASC_PrivacyDownValue_beforeNightClose', '-1:-1' ); 'ASC_PrivacyDownValue_beforeNightClose', '-1:-1' );
## Erwartetes Ergebnis ## Erwartetes Ergebnis
@ -420,7 +408,7 @@ sub getPrivacyDownBrightnessVal {
$self->{ $self->{shuttersDev} } $self->{ $self->{shuttersDev} }
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} } $self->{ $self->{shuttersDev} }
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2 ->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2
); );
@ -497,7 +485,7 @@ sub setSelfDefenseMode {
sub getSelfDefenseMode { sub getSelfDefenseMode {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_Mode', 'gone' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_Mode', 'gone' );
} }
sub setSelfDefenseAbsentDelay { sub setSelfDefenseAbsentDelay {
@ -513,13 +501,14 @@ sub setSelfDefenseAbsentDelay {
sub getSelfDefenseAbsentDelay { sub getSelfDefenseAbsentDelay {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_AbsentDelay', 300 ); return ::AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_AbsentDelay',
300 );
} }
sub getCommandTemplate { sub getCommandTemplate {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_CommandTemplate', 'none' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_CommandTemplate', 'none' );
} }
sub setWiggleValue { sub setWiggleValue {
@ -534,7 +523,7 @@ sub setWiggleValue {
sub getWiggleValue { sub getWiggleValue {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 ); return ::AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 );
} }
sub setAdv { sub setAdv {
@ -550,7 +539,7 @@ sub getAdv {
my $self = shift; my $self = shift;
return ( return (
AttrVal( $self->{shuttersDev}, 'ASC_Adv', 'off' ) eq 'on' ::AttrVal( $self->{shuttersDev}, 'ASC_Adv', 'off' ) eq 'on'
? ( IsAdv == 1 ? 1 : 0 ) ? ( IsAdv == 1 ? 1 : 0 )
: 0 : 0
); );
@ -593,7 +582,7 @@ sub setShadingMode {
sub getShadingMode { sub getShadingMode {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'off' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'off' );
} }
sub _getTempSensor { sub _getTempSensor {
@ -604,15 +593,15 @@ sub _getTempSensor {
exists( exists(
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} ) $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} )
< 2 < 2
); );
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} = $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} =
int( gettimeofday() ); int( ::gettimeofday() );
my ( $device, $reading ) = my ( $device, $reading ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, FHEM::Automation::ShuttersControl::Helper::Get::AttrValues(
'ASC_TempSensor', 'none' ); $self->{shuttersDev}, 'ASC_TempSensor', 'none' );
### erwartetes Ergebnis ### erwartetes Ergebnis
# DEVICE:READING # DEVICE:READING
@ -631,7 +620,7 @@ sub getTempSensorReading {
exists( exists(
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} ) $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} )
< 2 < 2
); );
@ -664,15 +653,15 @@ sub _getIdleDetectionReading {
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}->{LASTGETTIME}
= int( gettimeofday() ); = int( ::gettimeofday() );
my ( $reading, $value ) = my ( $reading, $value ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, FHEM::Automation::ShuttersControl::Helper::Get::AttrValues(
'ASC_Shutter_IdleDetection', 'none' ); $self->{shuttersDev}, 'ASC_Shutter_IdleDetection', 'none' );
### erwartetes Ergebnis ### erwartetes Ergebnis
# READING:VALUE # READING:VALUE
@ -694,7 +683,7 @@ sub getIdleDetectionValue {
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection} $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -728,15 +717,15 @@ sub _getBrightnessSensor {
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}->{LASTGETTIME} = $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}->{LASTGETTIME} =
int( gettimeofday() ); int( ::gettimeofday() );
my ( $device, $reading, $max, $min ) = my ( $device, $reading, $max, $min ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, FHEM::Automation::ShuttersControl::Helper::Get::AttrValues(
'ASC_BrightnessSensor', 'none' ); $self->{shuttersDev}, 'ASC_BrightnessSensor', 'none' );
### erwartetes Ergebnis ### erwartetes Ergebnis
# DEVICE:READING MAX:MIN # DEVICE:READING MAX:MIN
@ -760,7 +749,7 @@ sub getBrightnessReading {
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -785,7 +774,7 @@ sub getShadingAzimuthLeft {
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -814,15 +803,15 @@ sub getShadingAzimuthRight {
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth} $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}->{LASTGETTIME}
= int( gettimeofday() ); = int( ::gettimeofday() );
my ( $left, $right ) = my ( $left, $right ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, FHEM::Automation::ShuttersControl::Helper::Get::AttrValues(
'ASC_Shading_InOutAzimuth', '95:265' ); $self->{shuttersDev}, 'ASC_Shading_InOutAzimuth', '95:265' );
### erwartetes Ergebnis ### erwartetes Ergebnis
# MIN:MAX # MIN:MAX
@ -849,8 +838,8 @@ sub setShadingMinOutsideTemperature {
sub getShadingMinOutsideTemperature { sub getShadingMinOutsideTemperature {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Min_OutsideTemperature', return ::AttrVal( $self->{shuttersDev},
18 ); 'ASC_Shading_Min_OutsideTemperature', 18 );
} }
sub setShadingMinMaxElevation { sub setShadingMinMaxElevation {
@ -873,15 +862,15 @@ sub getShadingMinElevation {
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
->{LASTGETTIME} = int( gettimeofday() ); ->{LASTGETTIME} = int( ::gettimeofday() );
my ( $min, $max ) = my ( $min, $max ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, FHEM::Automation::ShuttersControl::Helper::Get::AttrValues(
'ASC_Shading_MinMax_Elevation', '25.0:100.0' ); $self->{shuttersDev}, 'ASC_Shading_MinMax_Elevation', '25.0:100.0' );
### erwartetes Ergebnis ### erwartetes Ergebnis
# MIN:MAX # MIN:MAX
@ -905,7 +894,7 @@ sub getShadingMaxElevation {
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -943,15 +932,15 @@ sub getShadingStateChangeSunny {
$self->{ $self->{shuttersDev} } $self->{ $self->{shuttersDev} }
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} } $self->{ $self->{shuttersDev} }
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2 ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
); );
$self->{ $self->{shuttersDev} }->{ASC_Shading_StateChange_SunnyCloudy} $self->{ $self->{shuttersDev} }->{ASC_Shading_StateChange_SunnyCloudy}
->{LASTGETTIME} = int( gettimeofday() ); ->{LASTGETTIME} = int( ::gettimeofday() );
my ( $sunny, $cloudy, $maxBrightnessAverageArrayObjects ) = my ( $sunny, $cloudy, $maxBrightnessAverageArrayObjects ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, FHEM::Automation::ShuttersControl::Helper::Get::AttrValues(
'ASC_Shading_StateChange_SunnyCloudy', $self->{shuttersDev}, 'ASC_Shading_StateChange_SunnyCloudy',
'35000:20000' ); '35000:20000' );
### erwartetes Ergebnis ### erwartetes Ergebnis
@ -982,7 +971,7 @@ sub getShadingStateChangeCloudy {
$self->{ $self->{shuttersDev} } $self->{ $self->{shuttersDev} }
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} } $self->{ $self->{shuttersDev} }
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2 ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
); );
@ -1002,7 +991,7 @@ sub getMaxBrightnessAverageArrayObjects {
$self->{ $self->{shuttersDev} } $self->{ $self->{shuttersDev} }
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} } $self->{ $self->{shuttersDev} }
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2 ->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
); );
@ -1025,7 +1014,7 @@ sub setShadingWaitingPeriod {
sub getShadingWaitingPeriod { sub getShadingWaitingPeriod {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_WaitingPeriod', 1200 ); return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_WaitingPeriod', 1200 );
} }
### Ende Beschattung ### Ende Beschattung
sub setExternalTrigger { sub setExternalTrigger {
@ -1046,16 +1035,16 @@ sub getExternalTriggerDevice {
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{LASTGETTIME} = $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{LASTGETTIME} =
int( gettimeofday() ); int( ::gettimeofday() );
my ( $device, $reading, $valueActive, $valueInactive, $posActive, my ( $device, $reading, $valueActive, $valueInactive, $posActive,
$posInactive, $valueActive2, $posActive2 ) $posInactive, $valueActive2, $posActive2 )
= FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, = FHEM::Automation::ShuttersControl::Helper::Get::AttrValues(
'ASC_ExternalTrigger', 'none' ); $self->{shuttersDev}, 'ASC_ExternalTrigger', 'none' );
### erwartetes Ergebnis ### erwartetes Ergebnis
# DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE VALUEACTIVE2:POSACTIVE2 # DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE VALUEACTIVE2:POSACTIVE2
@ -1070,10 +1059,11 @@ sub getExternalTriggerDevice {
$valueInactive; $valueInactive;
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive} = $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive} =
$posActive; $posActive;
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posinactive} = $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posinactive} = (
( $posInactive ne 'none' $posInactive ne 'none'
? $posInactive ? $posInactive
: $FHEM::Automation::ShuttersControl::shutters->getLastPos ); : $FHEM::Automation::ShuttersControl::shutters->getLastPos
);
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{valueactive2} = $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{valueactive2} =
$valueActive2; $valueActive2;
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive2} = $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive2} =
@ -1092,7 +1082,7 @@ sub getExternalTriggerReading {
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -1110,7 +1100,7 @@ sub getExternalTriggerValueActive {
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -1130,7 +1120,7 @@ sub getExternalTriggerValueActive2 {
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -1150,7 +1140,7 @@ sub getExternalTriggerValueInactive {
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -1169,7 +1159,7 @@ sub getExternalTriggerPosActive {
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -1187,7 +1177,7 @@ sub getExternalTriggerPosActive2 {
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -1205,7 +1195,7 @@ sub getExternalTriggerPosInactive {
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger} $self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -1227,7 +1217,7 @@ sub setDelay {
sub getDelay { sub getDelay {
my $self = shift; my $self = shift;
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Drive_Delay', -1 ); my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Drive_Delay', -1 );
return ( $val =~ m{^\d+$}xms ? $val : -1 ); return ( $val =~ m{^\d+$}xms ? $val : -1 );
} }
@ -1243,7 +1233,7 @@ sub setDelayStart {
sub getDelayStart { sub getDelayStart {
my $self = shift; my $self = shift;
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Drive_DelayStart', -1 ); my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Drive_DelayStart', -1 );
return ( ( $val > 0 && $val =~ m{^\d+$}xms ) ? $val : -1 ); return ( ( $val > 0 && $val =~ m{^\d+$}xms ) ? $val : -1 );
} }
@ -1260,7 +1250,7 @@ sub setBlockingTimeAfterManual {
sub getBlockingTimeAfterManual { sub getBlockingTimeAfterManual {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_afterManual', return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_afterManual',
1200 ); 1200 );
} }
@ -1277,7 +1267,7 @@ sub setBlockingTimeBeforNightClose {
sub getBlockingTimeBeforNightClose { sub getBlockingTimeBeforNightClose {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforNightClose', return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforNightClose',
3600 ); 3600 );
} }
@ -1294,7 +1284,7 @@ sub setBlockingTimeBeforDayOpen {
sub getBlockingTimeBeforDayOpen { sub getBlockingTimeBeforDayOpen {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforDayOpen', return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforDayOpen',
3600 ); 3600 );
} }
@ -1310,9 +1300,9 @@ sub setPosCmd {
sub getPosCmd { sub getPosCmd {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading', return ::AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading',
$FHEM::Automation::ShuttersControl::userAttrList{'ASC_Pos_Reading'} $FHEM::Automation::ShuttersControl::userAttrList{'ASC_Pos_Reading'}
[ AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] ); [ ::AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] );
} }
sub setOpenPos { sub setOpenPos {
@ -1377,7 +1367,7 @@ sub setVentilatePosAfterDayClosed {
sub getVentilatePosAfterDayClosed { sub getVentilatePosAfterDayClosed {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_PosAfterDayClosed', return ::AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_PosAfterDayClosed',
'open' ); 'open' );
} }
@ -1442,7 +1432,7 @@ sub setVentilateOpen {
sub getVentilateOpen { sub getVentilateOpen {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Window_Open', 'on' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Window_Open', 'on' );
} }
sub setComfortOpenPos { sub setComfortOpenPos {
@ -1482,7 +1472,7 @@ sub setPartyMode {
sub getPartyMode { sub getPartyMode {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Partymode', 'off' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_Partymode', 'off' );
} }
sub setRoommates { sub setRoommates {
@ -1497,7 +1487,7 @@ sub setRoommates {
sub getRoommates { sub getRoommates {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Device', 'none' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Device', 'none' );
} }
sub setRoommatesReading { sub setRoommatesReading {
@ -1512,7 +1502,7 @@ sub setRoommatesReading {
sub getRoommatesReading { sub getRoommatesReading {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Reading', 'state' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Reading', 'state' );
} }
sub getWindPos { sub getWindPos {
@ -1525,7 +1515,7 @@ sub getWindPos {
exists( exists(
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
) < 2 ) < 2
); );
@ -1544,15 +1534,15 @@ sub getWindMax {
exists( exists(
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
) < 2 ) < 2
); );
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} = $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} =
int( gettimeofday() ); int( ::gettimeofday() );
my ( $max, $hyst, $pos ) = my ( $max, $hyst, $pos ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, FHEM::Automation::ShuttersControl::Helper::Get::AttrValues(
'ASC_WindParameters', '50:20' ); $self->{shuttersDev}, 'ASC_WindParameters', '50:20' );
## Erwartetes Ergebnis ## Erwartetes Ergebnis
# max:hyst pos # max:hyst pos
@ -1560,10 +1550,11 @@ sub getWindMax {
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax} = $max; $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax} = $max;
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggerhyst} = $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggerhyst} =
( $hyst ne 'none' ? $max - $hyst : $max - 20 ); ( $hyst ne 'none' ? $max - $hyst : $max - 20 );
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{closedPos} = $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{closedPos} = (
( $pos ne 'none' $pos ne 'none'
? $pos ? $pos
: $FHEM::Automation::ShuttersControl::shutters->getOpenPos ); : $FHEM::Automation::ShuttersControl::shutters->getOpenPos
);
return $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax}; return $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax};
} }
@ -1587,7 +1578,7 @@ sub getWindMin {
exists( exists(
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
) < 2 ) < 2
); );
@ -1608,7 +1599,7 @@ sub setWindProtection {
sub getWindProtection { sub getWindProtection {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_WindProtection', 'off' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_WindProtection', 'off' );
} }
sub setRainProtection { sub setRainProtection {
@ -1623,7 +1614,7 @@ sub setRainProtection {
sub getRainProtection { sub getRainProtection {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_RainProtection', 'off' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_RainProtection', 'off' );
} }
sub setModeUp { sub setModeUp {
@ -1638,7 +1629,7 @@ sub setModeUp {
sub getModeUp { sub getModeUp {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Mode_Up', 'always' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_Mode_Up', 'always' );
} }
sub setModeDown { sub setModeDown {
@ -1653,7 +1644,7 @@ sub setModeDown {
sub getModeDown { sub getModeDown {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Mode_Down', 'always' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_Mode_Down', 'always' );
} }
sub setLockOut { sub setLockOut {
@ -1668,7 +1659,7 @@ sub setLockOut {
sub getLockOut { sub getLockOut {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_LockOut', 'off' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_LockOut', 'off' );
} }
sub setLockOutCmd { sub setLockOutCmd {
@ -1683,7 +1674,7 @@ sub setLockOutCmd {
sub getLockOutCmd { sub getLockOutCmd {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_LockOut_Cmd', 'none' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_LockOut_Cmd', 'none' );
} }
sub setAntiFreeze { sub setAntiFreeze {
@ -1698,7 +1689,7 @@ sub setAntiFreeze {
sub getAntiFreeze { sub getAntiFreeze {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Antifreeze', 'off' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_Antifreeze', 'off' );
} }
sub setAutoAstroModeMorning { sub setAutoAstroModeMorning {
@ -1713,7 +1704,8 @@ sub setAutoAstroModeMorning {
sub getAutoAstroModeMorning { sub getAutoAstroModeMorning {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorning', 'none' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorning',
'none' );
} }
sub setAutoAstroModeEvening { sub setAutoAstroModeEvening {
@ -1728,7 +1720,8 @@ sub setAutoAstroModeEvening {
sub getAutoAstroModeEvening { sub getAutoAstroModeEvening {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEvening', 'none' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEvening',
'none' );
} }
sub setAutoAstroModeMorningHorizon { sub setAutoAstroModeMorningHorizon {
@ -1744,7 +1737,7 @@ sub setAutoAstroModeMorningHorizon {
sub getAutoAstroModeMorningHorizon { sub getAutoAstroModeMorningHorizon {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorningHorizon', return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorningHorizon',
0 ); 0 );
} }
@ -1761,7 +1754,7 @@ sub setAutoAstroModeEveningHorizon {
sub getAutoAstroModeEveningHorizon { sub getAutoAstroModeEveningHorizon {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEveningHorizon', return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEveningHorizon',
0 ); 0 );
} }
@ -1777,7 +1770,7 @@ sub setUp {
sub getUp { sub getUp {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Up', 'astro' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_Up', 'astro' );
} }
sub setDown { sub setDown {
@ -1792,14 +1785,15 @@ sub setDown {
sub getDown { sub getDown {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Down', 'astro' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_Down', 'astro' );
} }
sub setShadingBetweenTheTime { sub setShadingBetweenTheTime {
my $self = shift; my $self = shift;
my $attrVal = shift; my $attrVal = shift;
_setAttributs( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime', $attrVal ); _setAttributs( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime',
$attrVal );
return; return;
} }
@ -1807,7 +1801,8 @@ sub setShadingBetweenTheTime {
sub getShadingBetweenTheTime { sub getShadingBetweenTheTime {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime', '00:00-24:00' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime',
'00:00-24:00' );
} }
sub setTimeUpEarly { sub setTimeUpEarly {
@ -1822,7 +1817,7 @@ sub setTimeUpEarly {
sub getTimeUpEarly { sub getTimeUpEarly {
my $self = shift; my $self = shift;
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Early', '05:00' ); my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Early', '05:00' );
if ( defined( PerlCodeCheck($val) ) ) { if ( defined( PerlCodeCheck($val) ) ) {
$val = PerlCodeCheck($val); $val = PerlCodeCheck($val);
@ -1847,7 +1842,7 @@ sub setTimeUpLate {
sub getTimeUpLate { sub getTimeUpLate {
my $self = shift; my $self = shift;
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Late', '08:30' ); my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Late', '08:30' );
if ( defined( PerlCodeCheck($val) ) ) { if ( defined( PerlCodeCheck($val) ) ) {
$val = PerlCodeCheck($val); $val = PerlCodeCheck($val);
@ -1872,7 +1867,7 @@ sub setTimeDownEarly {
sub getTimeDownEarly { sub getTimeDownEarly {
my $self = shift; my $self = shift;
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Early', '16:00' ); my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Early', '16:00' );
if ( defined( PerlCodeCheck($val) ) ) { if ( defined( PerlCodeCheck($val) ) ) {
$val = PerlCodeCheck($val); $val = PerlCodeCheck($val);
@ -1897,7 +1892,7 @@ sub setTimeDownLate {
sub getTimeDownLate { sub getTimeDownLate {
my $self = shift; my $self = shift;
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Late', '22:00' ); my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Late', '22:00' );
if ( defined( PerlCodeCheck($val) ) ) { if ( defined( PerlCodeCheck($val) ) ) {
$val = PerlCodeCheck($val); $val = PerlCodeCheck($val);
@ -1923,7 +1918,7 @@ sub getTimeUpWeHoliday {
my $self = shift; my $self = shift;
my $val = my $val =
AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_WE_Holiday', '01:25' ); ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_WE_Holiday', '01:25' );
if ( defined( PerlCodeCheck($val) ) ) { if ( defined( PerlCodeCheck($val) ) ) {
$val = PerlCodeCheck($val); $val = PerlCodeCheck($val);
@ -1945,7 +1940,7 @@ sub getBrightnessMinVal {
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -1964,7 +1959,7 @@ sub getBrightnessMaxVal {
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
->{LASTGETTIME} ->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor} $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
->{LASTGETTIME} ) < 2 ->{LASTGETTIME} ) < 2
); );
@ -1986,7 +1981,7 @@ sub setDriveUpMaxDuration {
sub getDriveUpMaxDuration { sub getDriveUpMaxDuration {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_DriveUpMaxDuration', 60 ); return ::AttrVal( $self->{shuttersDev}, 'ASC_DriveUpMaxDuration', 60 );
} }
1; 1;

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@ -44,21 +44,10 @@ use strict;
use warnings; use warnings;
use utf8; use utf8;
use GPUtils qw(GP_Import);
## Import der FHEM Funktionen
BEGIN {
GP_Import(
qw(
ReadingsVal
ReadingsNum)
);
}
sub getBrightness { sub getBrightness {
my $self = shift; my $self = shift;
return ReadingsNum( return ::ReadingsNum(
$FHEM::Automation::ShuttersControl::shutters->_getBrightnessSensor, $FHEM::Automation::ShuttersControl::shutters->_getBrightnessSensor,
$FHEM::Automation::ShuttersControl::shutters->getBrightnessReading, $FHEM::Automation::ShuttersControl::shutters->getBrightnessReading,
-1 ); -1 );
@ -67,7 +56,7 @@ sub getBrightness {
sub getWindStatus { sub getWindStatus {
my $self = shift; my $self = shift;
return ReadingsVal( return ::ReadingsVal(
$FHEM::Automation::ShuttersControl::ascDev->_getWindSensor, $FHEM::Automation::ShuttersControl::ascDev->_getWindSensor,
$FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading, -1 ); $FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading, -1 );
} }
@ -75,7 +64,7 @@ sub getWindStatus {
sub getStatus { sub getStatus {
my $self = shift; my $self = shift;
return ReadingsNum( $self->{shuttersDev}, return ::ReadingsNum( $self->{shuttersDev},
$FHEM::Automation::ShuttersControl::shutters->getPosCmd, 0 ); $FHEM::Automation::ShuttersControl::shutters->getPosCmd, 0 );
} }
@ -88,7 +77,7 @@ sub getDelayCmd {
sub getASCenable { sub getASCenable {
my $self = shift; my $self = shift;
return ReadingsVal( $self->{shuttersDev}, 'ASC_Enable', 'on' ); return ::ReadingsVal( $self->{shuttersDev}, 'ASC_Enable', 'on' );
} }
1; 1;

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@ -44,17 +44,6 @@ use strict;
use warnings; use warnings;
use utf8; use utf8;
use GPUtils qw(GP_Import);
## Import der FHEM Funktionen
BEGIN {
GP_Import(
qw(
AttrVal
gettimeofday)
);
}
sub setSubTyp { sub setSubTyp {
my $self = shift; my $self = shift;
my $attrVal = shift; my $attrVal = shift;
@ -67,7 +56,8 @@ sub setSubTyp {
sub getSubTyp { sub getSubTyp {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_subType', 'twostate' ); return ::AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_subType',
'twostate' );
} }
sub setWinDev { sub setWinDev {
@ -87,15 +77,15 @@ sub _getWinDev {
exists( exists(
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) < $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) <
2 2
); );
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} = $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} =
int( gettimeofday() ); int( ::gettimeofday() );
my ( $device, $reading ) = my ( $device, $reading ) =
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev}, FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
'ASC_WindowRec', 'none' ); $self->{shuttersDev}, 'ASC_WindowRec', 'none' );
### erwartetes Ergebnis ### erwartetes Ergebnis
# DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE # DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE
@ -116,7 +106,7 @@ sub getWinDevReading {
exists( exists(
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME}
) )
&& ( gettimeofday() - && ( ::gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) < $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) <
2 2
); );

View File

@ -1,8 +1,8 @@
############################################################################### ###############################################################################
# #
# Developed with Kate # Developed with VSCodium and richterger perl plugin
# #
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net) # (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved # All rights reserved
# #
# Special thanks goes to: # Special thanks goes to:
@ -44,20 +44,10 @@ use strict;
use warnings; use warnings;
use utf8; use utf8;
use GPUtils qw(GP_Import);
## Import der FHEM Funktionen
BEGIN {
GP_Import(
qw(
ReadingsVal)
);
}
sub getWinStatus { sub getWinStatus {
my $self = shift; my $self = shift;
return ReadingsVal( return ::ReadingsVal(
$FHEM::Automation::ShuttersControl::shutters->_getWinDev, $FHEM::Automation::ShuttersControl::shutters->_getWinDev,
$FHEM::Automation::ShuttersControl::shutters->getWinDevReading, $FHEM::Automation::ShuttersControl::shutters->getWinDevReading,
'closed' ); 'closed' );