Merge pull request 'dev' (#85) from dev into testing

Reviewed-on: #85
This commit is contained in:
Marko Oldenburg 2022-01-01 09:46:43 +01:00
commit f811cfd87f
17 changed files with 1022 additions and 1020 deletions

View File

@ -1,8 +1,8 @@
###############################################################################
#
# Developed with Kate
# Developed with VSCodium and richterger perl plugin
#
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved
#
# Special thanks goes to:
@ -49,26 +49,17 @@ use utf8;
use FHEM::Meta;
use FHEM::Automation::ShuttersControl;
use GPUtils qw(GP_Import GP_Export);
use GPUtils qw(GP_Import);
## Import der FHEM Funktionen
#-- Run before package compilation
BEGIN {
# Import from main context
GP_Import(
qw(
readingFnAttributes
)
);
#-- Export to main context with different name
GP_Export(
qw(
Initialize
)
);
GP_Import(qw(readingFnAttributes));
}
sub ::AutoShuttersControl_Initialize { goto &Initialize }
sub Initialize {
my $hash = shift;
@ -81,7 +72,7 @@ sub Initialize {
$hash->{UndefFn} = \&FHEM::Automation::ShuttersControl::Undef;
$hash->{DeleteFn} = \&FHEM::Automation::ShuttersControl::Delete;
$hash->{ShutdownFn} = \&FHEM::Automation::ShuttersControl::Shutdown;
$hash->{AttrList} =
$hash->{AttrList} =
'ASC_tempSensor '
. 'ASC_brightnessDriveUpDown '
. 'ASC_autoShuttersControlMorning:on,off '
@ -416,11 +407,11 @@ __END__
after the last manual operation in seconds. Defaults to 1200 (20 minutes).
</li>
<a id="AutoShuttersControl-attr-ASC_BlockingTime_beforDayOpen"></a>
<li><strong>ASC_BlockingTime_beforeDayOpen</strong> - Time in which no closing operation is made by
<li><strong>ASC_BlockingTime_beforDayOpen</strong> - Time in which no closing operation is made by
<abbr>ASC</abbr> after opening at the morning in seconds. Defaults to 3600 (one hour).
</li>
<a id="AutoShuttersControl-attr-ASC_BlockingTime_beforeNightClose"></a>
<li><strong>ASC_BlockingTime_beforeNightClose</strong> - Time in which no closing operation is made by
<a id="AutoShuttersControl-attr-ASC_BlockingTime_beforNightClose"></a>
<li><strong>ASC_BlockingTime_beforNightClose</strong> - Time in which no closing operation is made by
<abbr>ASC</abbr> before closing at the evening in seconds. Defaults to 3600 (one hour).
</li>
<a id="AutoShuttersControl-attr-ASC_BrightnessSensor"></a>
@ -1041,10 +1032,10 @@ __END__
<li><strong>ASC_AutoAstroModeMorningHorizon</strong> - H&ouml;he &uuml;ber Horizont,a wenn beim Attribut ASC_autoAstroModeMorning HORIZON ausgew&auml;hlt (default: none)</li>
<a id="AutoShuttersControl-attr-ASC_BlockingTime_afterManual"></a>
<li><strong>ASC_BlockingTime_afterManual</strong> - wie viel Sekunden soll die Automatik nach einer manuellen Fahrt aussetzen. (default: 1200)</li>
<a id="AutoShuttersControl-attr-ASC_BlockingTime_beforeDayOpen"></a>
<li><strong>ASC_BlockingTime_beforeDayOpen</strong> - wie viel Sekunden vor dem morgendlichen &ouml;ffnen soll keine schlie&szlig;en Fahrt mehr stattfinden. (default: 3600)</li>
<a id="AutoShuttersControl-attr-ASC_BlockingTime_beforeNightClose"></a>
<li><strong>ASC_BlockingTime_beforeNightClose</strong> - wie viel Sekunden vor dem n&auml;chtlichen schlie&szlig;en soll keine &ouml;ffnen Fahrt mehr stattfinden. (default: 3600)</li>
<a id="AutoShuttersControl-attr-ASC_BlockingTime_beforDayOpen"></a>
<li><strong>ASC_BlockingTime_beforDayOpen</strong> - wie viel Sekunden vor dem morgendlichen &ouml;ffnen soll keine schlie&szlig;en Fahrt mehr stattfinden. (default: 3600)</li>
<a id="AutoShuttersControl-attr-ASC_BlockingTime_beforNightClose"></a>
<li><strong>ASC_BlockingTime_beforNightClose</strong> - wie viel Sekunden vor dem n&auml;chtlichen schlie&szlig;en soll keine &ouml;ffnen Fahrt mehr stattfinden. (default: 3600)</li>
<a id="AutoShuttersControl-attr-ASC_BrightnessSensor"></a>
<li><strong>ASC_BrightnessSensor - DEVICE[:READING] WERT-MORGENS:WERT-ABENDS</strong> / 'Sensorname[:brightness [400:800]]' Angaben zum Helligkeitssensor mit (Readingname, optional) f&uuml;r die Beschattung und dem Fahren der Rollladen nach brightness und den optionalen Brightnesswerten f&uuml;r Sonnenauf- und Sonnenuntergang. (default: none)</li>
<a id="AutoShuttersControl-attr-ASC_Down"></a>
@ -1465,7 +1456,7 @@ __END__
],
"release_status": "stable",
"license": "GPL_2",
"version": "v0.10.19",
"version": "v0.10.20",
"author": [
"Marko Oldenburg <fhemdevelopment@cooltux.net>"
],
@ -1479,7 +1470,7 @@ __END__
"runtime": {
"requires": {
"FHEM": 5.00918799,
"perl": 5.016,
"perl": 5.023,
"Meta": 0,
"JSON": 0,
"Date::Parse": 0

View File

@ -1,16 +1,16 @@
UPD 2021-11-14_13:42:55 115685 FHEM/73_AutoShuttersControl.pm
UPD 2021-11-14_13:40:41 75264 lib/FHEM/Automation/ShuttersControl.pm
UPD 2021-10-09_07:12:54 2657 lib/FHEM/Automation/ShuttersControl/Dev.pm
UPD 2021-10-09_07:12:54 2494 lib/FHEM/Automation/ShuttersControl/Roommate.pm
UPD 2021-10-24_07:33:53 31900 lib/FHEM/Automation/ShuttersControl/Shutters.pm
UPD 2021-10-09_07:12:54 25333 lib/FHEM/Automation/ShuttersControl/Shading.pm
UPD 2021-11-10_20:11:14 110681 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
UPD 2021-11-14_13:37:27 40094 lib/FHEM/Automation/ShuttersControl/Helper.pm
UPD 2021-10-09_07:12:54 2173 lib/FHEM/Automation/ShuttersControl/Window.pm
UPD 2021-10-09_07:12:54 11739 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm
UPD 2021-10-09_07:12:54 7249 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm
UPD 2021-10-27_08:50:46 52649 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm
UPD 2021-10-09_07:12:54 2901 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm
UPD 2021-10-09_07:12:54 3978 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm
UPD 2021-10-09_07:12:54 2286 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm
UPD 2021-10-27_08:50:46 6716 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm
UPD 2022-01-01_09:39:12 115601 FHEM/73_AutoShuttersControl.pm
UPD 2022-01-01_09:25:20 75212 lib/FHEM/Automation/ShuttersControl.pm
UPD 2022-01-01_09:25:20 2693 lib/FHEM/Automation/ShuttersControl/Dev.pm
UPD 2022-01-01_09:25:20 2405 lib/FHEM/Automation/ShuttersControl/Roommate.pm
UPD 2022-01-01_09:25:20 32020 lib/FHEM/Automation/ShuttersControl/Shutters.pm
UPD 2022-01-01_09:25:20 25426 lib/FHEM/Automation/ShuttersControl/Shading.pm
UPD 2022-01-01_09:25:20 112138 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
UPD 2022-01-01_09:25:20 40296 lib/FHEM/Automation/ShuttersControl/Helper.pm
UPD 2022-01-01_09:25:20 2211 lib/FHEM/Automation/ShuttersControl/Window.pm
UPD 2022-01-01_09:25:20 11706 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm
UPD 2022-01-01_09:25:20 7265 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm
UPD 2022-01-01_09:25:20 52751 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm
UPD 2022-01-01_09:25:20 2799 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm
UPD 2022-01-01_09:25:20 3887 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm
UPD 2022-01-01_09:25:20 2200 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm
UPD 2022-01-01_09:25:20 7087 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,8 +1,8 @@
###############################################################################
#
# Developed with Kate
# Developed with VSCodium and richterger perl plugin
#
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved
#
# Special thanks goes to:
@ -59,12 +59,11 @@ our %EXPORT_TAGS = (
],
);
sub RainProcessing {
my ( $hash, $val, $triggerMax, $triggerMin ) = @_;
my $rainClosedPos = $FHEM::Automation::ShuttersControl::ascDev
->getRainSensorShuttersClosedPos;
->getRainSensorShuttersClosedPos;
for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
@ -75,49 +74,53 @@ sub RainProcessing {
$FHEM::Automation::ShuttersControl::shutters->getRainProtection eq
'off' );
if ( $val > $triggerMax
if (
$val > $triggerMax
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
$rainClosedPos
&& $FHEM::Automation::ShuttersControl::shutters
->getRainProtectionStatus eq 'unprotected'
->getRainProtectionStatus eq 'unprotected'
|| ( $FHEM::Automation::ShuttersControl::shutters
->getRainProtectionStatus eq 'unprotected'
&& $FHEM::Automation::ShuttersControl::shutters
->getRainUnprotectionDelayObj ne 'none')
->getRainProtectionStatus eq 'unprotected'
&& $FHEM::Automation::ShuttersControl::shutters
->getRainUnprotectionDelayObj ne 'none' )
)
{
_RainProtected();
}
elsif ( ( $val == 0 || $val < $triggerMin )
&& $FHEM::Automation::ShuttersControl::shutters->getStatus ==
$rainClosedPos
$rainClosedPos
&& IsAfterShuttersManualBlocking($shuttersDev)
&& $FHEM::Automation::ShuttersControl::shutters
->getRainProtectionStatus eq 'protected' )
->getRainProtectionStatus eq 'protected' )
{
my %funcHash = (
shuttersdevice => $shuttersDev,
my %funcHash = ( 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
->setRainProtectionStatus('unprotected');
->setRainProtectionStatus('unprotected');
}
else {
if ( $FHEM::Automation::ShuttersControl::shutters->getStatus != $rainClosedPos
&& ($val == 0 || $val < $triggerMin) )
if ( $FHEM::Automation::ShuttersControl::shutters->getStatus !=
$rainClosedPos
&& ( $val == 0 || $val < $triggerMin ) )
{
$FHEM::Automation::ShuttersControl::shutters
->setRainProtectionStatus('unprotected');
}
elsif ($val > $triggerMax) {
elsif ( $val > $triggerMax ) {
$FHEM::Automation::ShuttersControl::shutters
->setRainProtectionStatus('protected');
}
}
}
}
@ -126,58 +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
sub _RainProtected {
::RemoveInternalTimer($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj)
if($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj ne 'none');
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none');
::RemoveInternalTimer( $FHEM::Automation::ShuttersControl::shutters
->getRainUnprotectionDelayObj )
if ( $FHEM::Automation::ShuttersControl::shutters
->getRainUnprotectionDelayObj ne 'none' );
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj(
'none');
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'rain protected');
'rain protected');
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
$FHEM::Automation::ShuttersControl::ascDev
->getRainSensorShuttersClosedPos);
->getRainSensorShuttersClosedPos );
$FHEM::Automation::ShuttersControl::shutters
->setRainProtectionStatus('protected');
$FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus(
'protected');
return;
}
sub _RainUnprotected {
my $h = shift;
my $shuttersDev = $h->{shuttersdevice};
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
$shuttersDev);
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
'rain un-protected');
'rain un-protected');
if ( $FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj ne 'none' ) {
::RemoveInternalTimer($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj);
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none');
if ( $FHEM::Automation::ShuttersControl::shutters
->getRainUnprotectionDelayObj ne 'none' )
{
::RemoveInternalTimer( $FHEM::Automation::ShuttersControl::shutters
->getRainUnprotectionDelayObj );
$FHEM::Automation::ShuttersControl::shutters
->setRainUnprotectionDelayObj('none');
}
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
(
$FHEM::Automation::ShuttersControl::shutters->getIsDay
$FHEM::Automation::ShuttersControl::shutters->getIsDay
? $FHEM::Automation::ShuttersControl::shutters->getLastPos
: (
$FHEM::Automation::ShuttersControl::shutters
->getPrivacyDownStatus == 2
? $FHEM::Automation::ShuttersControl::shutters
->getPrivacyDownPos
: $FHEM::Automation::ShuttersControl::shutters
->getClosedPos
$FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
eq 'awning'
? $FHEM::Automation::ShuttersControl::shutters->getOpenPos
: (
$FHEM::Automation::ShuttersControl::shutters
->getPrivacyDownStatus == 2
? $FHEM::Automation::ShuttersControl::shutters
->getPrivacyDownPos
: $FHEM::Automation::ShuttersControl::shutters
->getClosedPos
)
)
)
)
if (IsAfterShuttersTimeBlocking($shuttersDev));
) if ( IsAfterShuttersTimeBlocking($shuttersDev) );
$FHEM::Automation::ShuttersControl::shutters
->setRainProtectionStatus('unprotected');
$FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus(
'unprotected');
return;
}
1;

View File

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

View File

@ -1,8 +1,8 @@
###############################################################################
#
# Developed with Kate
# Developed with VSCodium and richterger perl plugin
#
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
# All rights reserved
#
# Special thanks goes to:
@ -64,27 +64,9 @@ our %EXPORT_TAGS = (
],
);
use GPUtils qw(GP_Import);
## Import der FHEM Funktionen
BEGIN {
GP_Import(
qw(
Log3
gettimeofday
InternalTimer
ReadingsVal
readingsBeginUpdate
readingsBulkUpdate
readingsBulkUpdateIfChanged
readingsEndUpdate
defs
)
);
}
sub CheckASC_ConditionsForShadingFn {
my $hash = shift;
my $value = shift;
my $hash = shift;
my $value = shift;
my $error;
@ -98,14 +80,14 @@ sub CheckASC_ConditionsForShadingFn {
my $count = 1;
for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
my %funcHash = (
hash => $hash,
shuttersdevice => $shuttersDev,
value => $value,
attrEvent => 0,
hash => $hash,
shuttersdevice => $shuttersDev,
value => $value,
attrEvent => 0,
);
InternalTimer(
gettimeofday() + $count,
::InternalTimer(
::gettimeofday() + $count,
'FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn',
\%funcHash
);
@ -121,86 +103,93 @@ sub CheckASC_ConditionsForShadingFn {
}
sub _CheckShuttersConditionsForShadingFn {
my $funcHash = shift;
my $funcHash = shift;
my $hash = $funcHash->{hash};
my $shuttersDev = $funcHash->{shuttersdevice};
my $value = $funcHash->{value};
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
my $shuttersDevHash = $defs{$shuttersDev};
my $shuttersDevHash = $::defs{$shuttersDev};
my $message = '';
my $errorMessage;
my $warnMessage;
my $infoMessage;
if ( $value eq 'off' ) {
$FHEM::Automation::ShuttersControl::shutters->setShadingStatus('out');
$infoMessage .= ' shading was deactivated ' . ($funcHash->{attrEvent} ? 'in the device' : 'globally');
$errorMessage .= '';
$infoMessage .= ' shading was deactivated '
. ( $funcHash->{attrEvent} ? 'in the device' : 'globally' );
$errorMessage .= '';
ShadingProcessingDriveCommand( $hash, $shuttersDev );
}
else {
$infoMessage .= (
$FHEM::Automation::ShuttersControl::shutters->getShadingMode ne 'off'
&& $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading eq 'on'
&& $FHEM::Automation::ShuttersControl::shutters->getOutTemp == -100
$FHEM::Automation::ShuttersControl::shutters->getShadingMode ne
'off'
&& $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading eq 'on'
&& $FHEM::Automation::ShuttersControl::shutters->getOutTemp ==
-100
? ' shading active, global temp sensor is set, but shutters temperature sensor is not set'
: ''
);
$warnMessage .= (
$FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off'
&& $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading eq 'on'
$FHEM::Automation::ShuttersControl::shutters->getShadingMode eq
'off'
&& $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading eq 'on'
? ' global shading active but ASC_Shading_Mode attribut is not set or off'
: ''
);
$errorMessage .= (
$FHEM::Automation::ShuttersControl::shutters->getShadingMode ne 'off'
&& $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading ne 'on'
&& $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading ne 'off'
$FHEM::Automation::ShuttersControl::shutters->getShadingMode ne
'off'
&& $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading ne 'on'
&& $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading ne 'off'
? ' ASC_Shading_Mode attribut is set but global shading has errors, look at ASC device '
. '<a href="'
. '/fhem?detail='
. ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
. $::FW_CSRF . '">'
. ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
. '</a>'
. '<a href="'
. '/fhem?detail='
. ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
. $::FW_CSRF . '">'
. ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
. '</a>'
: ''
);
$errorMessage .= (
$FHEM::Automation::ShuttersControl::shutters->getBrightness == -1
&& $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne
'off'
&& $FHEM::Automation::ShuttersControl::shutters->getShadingMode
ne 'off'
? ' no brightness sensor found, please set ASC_BrightnessSensor attribut'
: ''
);
}
$message .= ' ERROR: ' . $errorMessage
if ( defined($errorMessage)
if ( defined($errorMessage)
&& $errorMessage ne '' );
$message .= ' WARN: ' . $warnMessage
if ( defined($warnMessage)
if ( defined($warnMessage)
&& $warnMessage ne ''
&& $errorMessage eq '' );
$message .= ' INFO: ' . $infoMessage
if ( defined($infoMessage)
if ( defined($infoMessage)
&& $infoMessage ne ''
&& $errorMessage eq '' );
readingsBeginUpdate($shuttersDevHash);
readingsBulkUpdateIfChanged( $shuttersDevHash, 'ASC_ShadingMessage',
::readingsBeginUpdate($shuttersDevHash);
::readingsBulkUpdateIfChanged( $shuttersDevHash, 'ASC_ShadingMessage',
'<html>' . $message . ' </html>' );
readingsEndUpdate( $shuttersDevHash, 1 );
::readingsEndUpdate( $shuttersDevHash, 1 );
return;
}
sub ShadingProcessing {
@ -215,12 +204,18 @@ sub ShadingProcessing {
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
my $brightness =
$FHEM::Automation::ShuttersControl::shutters->getBrightnessAverage;
$FHEM::Automation::ShuttersControl::shutters->setShadingBetweenTheTimeSuspend(
( IsInTime($FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTime)
? 0
: 1 )
);
$FHEM::Automation::ShuttersControl::shutters
->setShadingBetweenTheTimeSuspend(
(
IsInTime(
$FHEM::Automation::ShuttersControl::shutters
->getShadingBetweenTheTime
)
? 0
: 1
)
);
FHEM::Automation::ShuttersControl::ASC_Debug(
'ShadingProcessing: '
@ -250,7 +245,7 @@ sub ShadingProcessing {
. ', Ist es nach der Hälfte der Beschattungswartezeit: '
. (
(
int( gettimeofday() ) -
int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters
->getShadingStatusTimestamp
) < (
@ -260,7 +255,7 @@ sub ShadingProcessing {
)
);
Log3( $name, 4,
::Log3( $name, 4,
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
. $shuttersDev
. " Azimuth: "
@ -279,18 +274,20 @@ sub ShadingProcessing {
|| $brightness == -1
|| $outTemp == -100
|| (
int( gettimeofday() ) -
int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters
->getShadingStatusTimestamp ) < (
$FHEM::Automation::ShuttersControl::shutters
->getShadingWaitingPeriod / 2
)
|| $FHEM::Automation::ShuttersControl::shutters
->getExternalTriggerStatus
|| $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off'
|| $FHEM::Automation::ShuttersControl::ascDev
->getAutoShuttersControlShading eq 'off'
->getAutoShuttersControlShading eq 'off'
);
Log3( $name, 4,
::Log3( $name, 4,
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
. $shuttersDev
. " Nach dem return" );
@ -300,7 +297,7 @@ sub ShadingProcessing {
my $getStatus = $FHEM::Automation::ShuttersControl::shutters->getStatus;
my $oldShadingStatus =
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus;
my $shuttersDevHash = $defs{$shuttersDev};
my $shuttersDevHash = $::defs{$shuttersDev};
my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp;
my $homemode = $FHEM::Automation::ShuttersControl::shutters->getHomemode;
@ -316,9 +313,9 @@ sub ShadingProcessing {
->getShadingMinOutsideTemperature - 4
|| $azimuth < $azimuthLeft
|| $azimuth > $azimuthRight
|| ( !$FHEM::Automation::ShuttersControl::shutters->getIsDay
&& $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
- ( int( gettimeofday() ) ) > 7200 )
|| ( !$FHEM::Automation::ShuttersControl::shutters->getIsDay
&& $FHEM::Automation::ShuttersControl::shutters
->getSunriseUnixTime - ( int( ::gettimeofday() ) ) > 7200 )
)
&& $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ne
'out'
@ -331,7 +328,7 @@ sub ShadingProcessing {
. ' - Es ist Nacht oder die Aussentemperatur unterhalb der Shading Temperatur. Die Beschattung wird Zwangsbeendet'
);
Log3( $name, 4,
::Log3( $name, 4,
"AutoShuttersControl ($name) - Shading Processing - Der Sonnenstand ist ausserhalb der Winkelangaben oder die Aussentemperatur unterhalb der Shading Temperatur "
);
}
@ -358,7 +355,7 @@ sub ShadingProcessing {
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus
eq 'out reserved'
and (
int( gettimeofday() ) -
int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters
->getShadingStatusTimestamp )
) > $FHEM::Automation::ShuttersControl::shutters
@ -369,7 +366,7 @@ sub ShadingProcessing {
'out');
}
Log3( $name, 4,
::Log3( $name, 4,
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
. $shuttersDev
. " In der Out Abfrage, Shadingwert: "
@ -411,7 +408,7 @@ sub ShadingProcessing {
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq
'in reserved'
and (
int( gettimeofday() ) -
int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters
->getShadingStatusTimestamp ) > (
$FHEM::Automation::ShuttersControl::shutters
@ -423,7 +420,7 @@ sub ShadingProcessing {
'in');
}
Log3( $name, 4,
::Log3( $name, 4,
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
. $shuttersDev
. " In der In Abfrage, Shadingwert: "
@ -468,22 +465,18 @@ sub ShadingProcessing {
|| $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq
$homemode )
&& (
$getModeUp eq 'always'
|| $getModeUp eq
$homemode
$getModeUp eq 'always'
|| $getModeUp eq $homemode
|| $getModeUp eq 'off'
|| $getModeUp eq
'absent'
|| $getModeUp eq
'gone'
|| ( $getModeUp eq
'home'
|| $getModeUp eq 'absent'
|| $getModeUp eq 'gone'
|| ( $getModeUp eq 'home'
&& $homemode ne 'asleep' )
)
&& (
(
(
int( gettimeofday() ) -
int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters
->getShadingStatusTimestamp
) < 2
@ -497,18 +490,18 @@ sub ShadingProcessing {
)
&& $FHEM::Automation::ShuttersControl::shutters->getIfInShading
)
|| ( !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
|| ( !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
&& $FHEM::Automation::ShuttersControl::shutters->getStatus ==
$FHEM::Automation::ShuttersControl::shutters->getShadingPos
)
|| ( !$FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTimeSuspend
$FHEM::Automation::ShuttersControl::shutters->getShadingPos )
|| ( !$FHEM::Automation::ShuttersControl::shutters
->getShadingBetweenTheTimeSuspend
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
$FHEM::Automation::ShuttersControl::shutters->getShadingPos )
)
);
readingsBeginUpdate($shuttersDevHash);
readingsBulkUpdate(
::readingsBeginUpdate($shuttersDevHash);
::readingsBulkUpdate(
$shuttersDevHash,
'ASC_ShadingMessage',
'INFO: current shading status is \''
@ -531,7 +524,7 @@ sub ShadingProcessing {
) / 60
. 'm'
);
readingsEndUpdate( $shuttersDevHash, 1 );
::readingsEndUpdate( $shuttersDevHash, 1 );
return;
}
@ -551,19 +544,28 @@ sub ShadingProcessingDriveCommand {
$FHEM::Automation::ShuttersControl::shutters->setShadingStatus(
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus );
if ( IsInTime($FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTime)
&& $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'in'
if (
IsInTime(
$FHEM::Automation::ShuttersControl::shutters
->getShadingBetweenTheTime
)
&& $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq
'in'
&& $getShadingPos != $getStatus
&& ( $getStatus != $FHEM::Automation::ShuttersControl::shutters->getClosedPos
|| ( $getStatus == $FHEM::Automation::ShuttersControl::shutters->getClosedPos
&& $marker
)
)
&& ( $getStatus != $FHEM::Automation::ShuttersControl::shutters->getSleepPos
|| ( $getStatus == $FHEM::Automation::ShuttersControl::shutters->getSleepPos
&& $marker
)
)
&& (
$getStatus !=
$FHEM::Automation::ShuttersControl::shutters->getClosedPos
|| ( $getStatus ==
$FHEM::Automation::ShuttersControl::shutters->getClosedPos
&& $marker )
)
&& (
$getStatus !=
$FHEM::Automation::ShuttersControl::shutters->getSleepPos
|| ( $getStatus ==
$FHEM::Automation::ShuttersControl::shutters->getSleepPos
&& $marker )
)
&& (
FHEM::Automation::ShuttersControl::CheckIfShuttersWindowRecOpen(
$shuttersDev) != 2
@ -602,10 +604,10 @@ sub ShadingProcessingDriveCommand {
(
(
$getShadingPos ==
$FHEM::Automation::ShuttersControl::shutters->getLastPos
$FHEM::Automation::ShuttersControl::shutters->getLastPos
|| $getShadingPos ==
$FHEM::Automation::ShuttersControl::shutters
->getShadingLastPos
$FHEM::Automation::ShuttersControl::shutters
->getShadingLastPos
)
? $FHEM::Automation::ShuttersControl::shutters->getOpenPos
: (
@ -626,8 +628,10 @@ sub ShadingProcessingDriveCommand {
: $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(
'ShadingProcessingDriveCommand: '
@ -639,7 +643,7 @@ sub ShadingProcessingDriveCommand {
. ' zum beenden der Beschattung gefahren' );
}
Log3( $name, 4,
::Log3( $name, 4,
"AutoShuttersControl ($name) - Shading Processing - In der Routine zum fahren der Rollläden, Shading Wert: "
. $FHEM::Automation::ShuttersControl::shutters->getShadingStatus );

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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