change modul header
This commit is contained in:
parent
4aa24587a5
commit
9a1b6acad3
@ -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 '
|
||||||
|
@ -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
|
||||||
|
@ -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" );
|
||||||
|
|
||||||
@ -516,7 +501,7 @@ m{^(ATTR|DELETEATTR)\s(.*ASC_Time_Up_WE_Holiday|.*ASC_Up|.*ASC_Down|.*ASC_AutoAs
|
|||||||
}
|
}
|
||||||
elsif ( grep m{^($posReading):\s\d{1,3}(\.\d{1,3})?$}xms, @{$events} ) {
|
elsif ( grep m{^($posReading):\s\d{1,3}(\.\d{1,3})?$}xms, @{$events} ) {
|
||||||
ASC_Debug( 'Notify: '
|
ASC_Debug( 'Notify: '
|
||||||
. ' ASC_Pos_Reading Event vom Rollo '
|
. ' ASC_Pos_Reading Event vom Rollo '
|
||||||
. $devname
|
. $devname
|
||||||
. ' wurde erkannt '
|
. ' wurde erkannt '
|
||||||
. ' - RECEIVED EVENT: '
|
. ' - RECEIVED EVENT: '
|
||||||
@ -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,20 +1856,20 @@ 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' );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$shutters->setSelfDefenseAbsent( 0, 0 )
|
$shutters->setSelfDefenseAbsent( 0, 0 )
|
||||||
@ -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(
|
||||||
|
@ -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:
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
@ -280,7 +267,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')
|
||||||
@ -299,18 +285,14 @@ 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 =
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->getResidentsStatus
|
$FHEM::Automation::ShuttersControl::ascDev->getResidentsStatus
|
||||||
if ( $homemode eq 'none' );
|
if ( $homemode eq 'none' );
|
||||||
|
|
||||||
FHEM::Automation::ShuttersControl::ASC_Debug(
|
FHEM::Automation::ShuttersControl::ASC_Debug(
|
||||||
'EventProcessingWindowRec: '
|
'EventProcessingWindowRec: '
|
||||||
@ -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 $event = $1;
|
my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp;
|
||||||
my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp;
|
my $getModeDown =
|
||||||
my $getModeDown = $FHEM::Automation::ShuttersControl::shutters->getModeDown;
|
$FHEM::Automation::ShuttersControl::shutters->getModeDown;
|
||||||
my $getRoommatesStatus = $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
|
my $getRoommatesStatus =
|
||||||
my $getRoommatesLastStatus = $FHEM::Automation::ShuttersControl::shutters->getRoommatesLastStatus;
|
$FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
|
||||||
my $getUp = $FHEM::Automation::ShuttersControl::shutters->getUp;
|
my $getRoommatesLastStatus =
|
||||||
my $getDown = $FHEM::Automation::ShuttersControl::shutters->getDown;
|
$FHEM::Automation::ShuttersControl::shutters->getRoommatesLastStatus;
|
||||||
my $getIsDay = $FHEM::Automation::ShuttersControl::shutters->getIsDay;
|
my $getUp = $FHEM::Automation::ShuttersControl::shutters->getUp;
|
||||||
|
my $getDown = $FHEM::Automation::ShuttersControl::shutters->getDown;
|
||||||
my $posValue = $FHEM::Automation::ShuttersControl::shutters->getStatus; # !!! ACHTUNG!!!
|
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,
|
||||||
(
|
(
|
||||||
|
@ -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,19 +381,24 @@ 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,18 +1043,19 @@ 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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,49 +74,53 @@ 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->setRainUnprotectionDelayObj(\%funcHash);
|
|
||||||
::InternalTimer( ::gettimeofday() + $FHEM::Automation::ShuttersControl::ascDev->getRainWaitingTime
|
|
||||||
, \&_RainUnprotected
|
|
||||||
, \%funcHash );
|
|
||||||
|
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->setRainProtectionStatus('unprotected');
|
->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
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none');
|
->getRainUnprotectionDelayObj ne '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;
|
||||||
|
@ -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;
|
||||||
|
@ -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,8 +103,8 @@ 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};
|
||||||
my $value = $funcHash->{value};
|
my $value = $funcHash->{value};
|
||||||
@ -116,67 +115,72 @@ sub _CheckShuttersConditionsForShadingFn {
|
|||||||
my $errorMessage;
|
my $errorMessage;
|
||||||
my $warnMessage;
|
my $warnMessage;
|
||||||
my $infoMessage;
|
my $infoMessage;
|
||||||
|
|
||||||
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 {
|
||||||
@ -198,12 +204,18 @@ sub ShadingProcessing {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
|
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
|
||||||
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: '
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
);
|
);
|
||||||
|
@ -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' );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user