Merge pull request 'testing' (#94) from testing into main

Reviewed-on: #94
This commit is contained in:
Marko Oldenburg 2022-01-14 08:48:29 +01:00
commit 9545dda125
17 changed files with 1397 additions and 1340 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 '
@ -100,7 +91,8 @@ sub Initialize {
. 'ASC_expert:1 '
. 'ASC_blockAscDrivesAfterManual:0,1 '
. 'ASC_debug:1 '
. 'ASC_advDate:DeadSunday,FirstAdvent '
. 'ASC_advStartDate:DeadSunday,FirstAdvent '
. 'ASC_advEndDate:CandlemasDay,EpiphanyDay '
. $readingFnAttributes;
$hash->{NotifyOrderPrefix} = '51-'; # Order Nummer für NotifyFn
$hash->{FW_detailFn} =
@ -328,8 +320,11 @@ __END__
<li><strong>ASC_freezeTemp</strong> - Temperature threshold for the freeze protection. The freeze protection
prevents the shutter to be operated by <abbr>ASC</abbr>. Last operating order will be kept.
</li>
<a id="AutoShuttersControl-attr-ASC_advDate"></a>
<li><strong>ASC_advDate</strong> - Advent Season, selected FirstAdvent or DeadSunday.
<a id="AutoShuttersControl-attr-ASC_advStartDate"></a>
<li><strong>ASC_advStartDate</strong> - Begin of Advent Season, selected FirstAdvent or DeadSunday.
</li>
<a id="AutoShuttersControl-attr-ASC_advEndDate"></a>
<li><strong>ASC_advEndDate</strong> - End of Advent Season, selected CandlemasDay 6. January or EpiphanyDay 2. February.
</li>
<a id="AutoShuttersControl-attr-ASC_rainSensor"></a>
<li><strong>ASC_rainSensor DEVICENAME[:READINGNAME] MAXTRIGGER[:HYSTERESE] [CLOSEDPOS]</strong> - Contains
@ -416,11 +411,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>
@ -1006,8 +1001,10 @@ __END__
<li><strong>ASC_expert</strong> - ist der Wert 1, so werden erweiterte Informationen bez&uuml;glich des NotifyDevs unter set und get angezeigt</li>
<a id="AutoShuttersControl-attr-ASC_freezeTemp"></a>
<li><strong>ASC_freezeTemp</strong> - Temperatur, ab welcher der Frostschutz greifen soll und der Rollladen nicht mehr f&auml;hrt. Der letzte Fahrbefehl wird gespeichert.</li>
<a id="AutoShuttersControl-attr-ASC_advDate"></a>
<li><strong>ASC_advDate</strong> - Adventszeit, Auswahl ab wann die Adventszeit beginnen soll.</li>
<a id="AutoShuttersControl-attr-ASC_advStartDate"></a>
<li><strong>ASC_advStartDate</strong> - Start der Adventszeit, Auswahl ab wann die Adventszeit beginnen soll. 1. Advent oder Totensonntag</li>
<a id="AutoShuttersControl-attr-ASC_advEndDate"></a>
<li><strong>ASC_advEndDate</strong> - Ende der Adventszeit, Auswahl ab wann die Adventszeit Enden soll. EpiphanyDay 6. Januar oder CandlemasDay 2. Februar</li>
<a id="AutoShuttersControl-attr-ASC_rainSensor"></a>
<li><strong>ASC_rainSensor - DEVICENAME[:READINGNAME] MAXTRIGGER[:HYSTERESE] [CLOSEDPOS:[WAITINGTIME]]</strong> - der Inhalt ist eine Kombination aus Devicename, Readingname, Wert ab dem getriggert werden soll, Hysterese Wert ab dem der Status Regenschutz aufgehoben werden soll und der "wegen Regen geschlossen Position", sowie der Wartezeit bis dann tats&auml;chlich die aktion ausgeführt wird.</li>
<a id="AutoShuttersControl-attr-ASC_residentsDev"></a>
@ -1041,10 +1038,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 +1462,7 @@ __END__
],
"release_status": "stable",
"license": "GPL_2",
"version": "v0.10.19",
"version": "v0.10.20",
"author": [
"Marko Oldenburg <fhemdevelopment@cooltux.net>"
],
@ -1479,7 +1476,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-10_10:41:35 116177 FHEM/73_AutoShuttersControl.pm
UPD 2022-01-10_10:41:35 75839 lib/FHEM/Automation/ShuttersControl.pm
UPD 2022-01-02_07:57:18 2691 lib/FHEM/Automation/ShuttersControl/Dev.pm
UPD 2022-01-02_07:57:18 2677 lib/FHEM/Automation/ShuttersControl/Roommate.pm
UPD 2022-01-02_08:52:49 32016 lib/FHEM/Automation/ShuttersControl/Shutters.pm
UPD 2022-01-02_07:57:18 25452 lib/FHEM/Automation/ShuttersControl/Shading.pm
UPD 2022-01-02_07:57:18 112122 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
UPD 2022-01-10_11:04:15 40603 lib/FHEM/Automation/ShuttersControl/Helper.pm
UPD 2022-01-02_07:57:18 2209 lib/FHEM/Automation/ShuttersControl/Window.pm
UPD 2022-01-10_11:06:40 11857 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm
UPD 2022-01-01_20:15:38 7265 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm
UPD 2022-01-01_20:15:38 52751 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm
UPD 2022-01-01_20:15:38 2799 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm
UPD 2022-01-01_20:15:38 3887 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm
UPD 2022-01-01_20:15:38 2200 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm
UPD 2022-01-02_07:57:18 7113 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm

File diff suppressed because it is too large Load Diff

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:
@ -43,7 +43,7 @@ package FHEM::Automation::ShuttersControl::Dev;
use FHEM::Automation::ShuttersControl::Dev::Readings;
use FHEM::Automation::ShuttersControl::Dev::Attr;
our @ISA =
use base
qw(FHEM::Automation::ShuttersControl::Dev::Readings FHEM::Automation::ShuttersControl::Dev::Attr);
use strict;

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,18 +381,23 @@ sub getBlockAscDrivesAfterManual {
my $name = $self->{name};
return AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 );
return ::AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 );
}
sub getAdvDate {
sub getAdvStartDate {
my $self = shift;
my $name = $self->{name};
return AttrVal( $name, 'ASC_advDate', 'FirstAdvent' );
return ::AttrVal( $name, 'ASC_advStartDate', 'FirstAdvent' );
}
sub getAdvEndDate {
my $self = shift;
my $name = $self->{name};
return ::AttrVal( $name, 'ASC_advEndDate', 'EpiphanyDay' );
}
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:
@ -46,7 +46,9 @@ use POSIX qw(strftime);
use utf8;
require Exporter;
our @ISA = qw(Exporter);
use base qw(Exporter);
# our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
PositionValueWindowRec
AutoSearchTwilightDev
@ -89,21 +91,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 +144,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 +160,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 +217,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 +228,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 +269,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 +302,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 +383,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 +434,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 +447,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 +463,9 @@ sub ShuttersSunrise {
)
{
$shuttersSunriseUnixtime = (
computeAlignTime(
::computeAlignTime(
'24:00',
sunrise_abs(
::sunrise_abs(
$autoAstroMode,
0,
$FHEM::Automation::ShuttersControl::shutters
@ -477,11 +475,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 +493,9 @@ sub ShuttersSunrise {
)
{
$shuttersSunriseUnixtime = (
computeAlignTime(
::computeAlignTime(
'24:00',
sunrise_abs(
::sunrise_abs(
$autoAstroMode,
0,
$FHEM::Automation::ShuttersControl::shutters
@ -508,9 +506,9 @@ sub ShuttersSunrise {
}
else {
$shuttersSunriseUnixtime = (
computeAlignTime(
::computeAlignTime(
'24:00',
sunrise_abs(
::sunrise_abs(
$autoAstroMode,
0,
$FHEM::Automation::ShuttersControl::shutters
@ -526,11 +524,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 +537,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 +554,9 @@ sub ShuttersSunrise {
)
{
$shuttersSunriseUnixtime = (
computeAlignTime(
::computeAlignTime(
'24:00',
sunrise_abs(
::sunrise_abs(
$autoAstroMode,
0,
$FHEM::Automation::ShuttersControl::shutters
@ -568,11 +566,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 +584,9 @@ sub ShuttersSunrise {
)
{
$shuttersSunriseUnixtime = (
computeAlignTime(
::computeAlignTime(
'24:00',
sunrise_abs(
::sunrise_abs(
$autoAstroMode,
0,
$FHEM::Automation::ShuttersControl::shutters
@ -601,11 +599,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 +615,9 @@ sub ShuttersSunrise {
)
{
$shuttersSunriseUnixtime = (
computeAlignTime(
::computeAlignTime(
'24:00',
sunrise_abs(
::sunrise_abs(
$autoAstroMode,
0,
$FHEM::Automation::ShuttersControl::shutters
@ -630,9 +628,9 @@ sub ShuttersSunrise {
}
else {
$shuttersSunriseUnixtime = (
computeAlignTime(
::computeAlignTime(
'24:00',
sunrise_abs(
::sunrise_abs(
$autoAstroMode,
0,
$FHEM::Automation::ShuttersControl::shutters
@ -646,9 +644,9 @@ sub ShuttersSunrise {
}
else {
$shuttersSunriseUnixtime = (
computeAlignTime(
::computeAlignTime(
'24:00',
sunrise_abs(
::sunrise_abs(
$autoAstroMode,
0,
$FHEM::Automation::ShuttersControl::shutters
@ -669,11 +667,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 +688,7 @@ sub ShuttersSunrise {
( $shuttersSunriseUnixtime + 86400 )
if ( $shuttersSunriseUnixtime <
( $oldFuncHash->{sunrisetime} + 180 )
&& $oldFuncHash->{sunrisetime} < gettimeofday() );
&& $oldFuncHash->{sunrisetime} < ::gettimeofday() );
}
}
}
@ -698,7 +696,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 +709,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 +718,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 +734,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 +747,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 +756,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 +770,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 +784,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 +804,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 +855,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 +877,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 +891,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 +920,7 @@ sub IsAfterShuttersTimeBlocking {
if (
(
int( gettimeofday() ) -
int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
) <
$FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
@ -933,7 +930,7 @@ sub IsAfterShuttersTimeBlocking {
$FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
)
&& $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
- ( int( gettimeofday() ) ) <
- ( int( ::gettimeofday() ) ) <
$FHEM::Automation::ShuttersControl::shutters
->getBlockingTimeBeforDayOpen
)
@ -943,7 +940,7 @@ sub IsAfterShuttersTimeBlocking {
$FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
)
&& $FHEM::Automation::ShuttersControl::shutters->getSunsetUnixTime
- ( int( gettimeofday() ) ) <
- ( int( ::gettimeofday() ) ) <
$FHEM::Automation::ShuttersControl::shutters
->getBlockingTimeBeforNightClose
)
@ -982,7 +979,7 @@ sub IsAfterShuttersManualBlocking {
}
elsif (
(
int( gettimeofday() ) -
int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
) <
$FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
@ -1019,24 +1016,32 @@ 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;
if ( $month < 1 ) {
if ( $monthday < 7 ) {
$adv = 1;
}
if ( $month < 1
&& $FHEM::Automation::ShuttersControl::ascDev->getAdvEndDate eq
'EpiphanyDay' )
{
$adv = $monthday < 7 ? 1 : 0;
}
elsif ($month < 2
&& $FHEM::Automation::ShuttersControl::ascDev->getAdvEndDate eq
'CandlemasDay' )
{
$adv = $month = 1 || ( $month = 2 && $monthday < 3 ) ? 1 : 0;
}
else {
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->getAdvStartDate eq
'DeadSunday'
? ( $wday + 27 ) * 86400
: ( $wday + 21 ) * 86400
);
$adv = 1 if ( $time < time );
}
@ -1046,18 +1051,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:
@ -47,7 +47,9 @@ use utf8;
use FHEM::Automation::ShuttersControl::Helper qw (:ALL);
require Exporter;
our @ISA = qw(Exporter);
use base qw(Exporter);
# our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
RainProcessing
);
@ -59,12 +61,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 +76,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 +131,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,41 @@ use strict;
use warnings;
use utf8;
use GPUtils qw(GP_Import);
require Exporter;
use base qw(Exporter);
## Import der FHEM Funktionen
BEGIN {
GP_Import(
# our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
getRoommateStatus
getRoommateLastStatus
);
our %EXPORT_TAGS = (
ALL => [
qw(
ReadingsVal)
);
}
getRoommateStatus
getRoommateLastStatus
)
],
);
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:
@ -48,7 +48,9 @@ use utf8;
use FHEM::Automation::ShuttersControl::Helper qw (IsInTime);
require Exporter;
our @ISA = qw(Exporter);
use base qw(Exporter);
# our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
CheckASC_ConditionsForShadingFn
ShadingProcessing
@ -64,27 +66,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 +82,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 +105,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 +206,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 +247,7 @@ sub ShadingProcessing {
. ', Ist es nach der Hälfte der Beschattungswartezeit: '
. (
(
int( gettimeofday() ) -
int( ::gettimeofday() ) -
$FHEM::Automation::ShuttersControl::shutters
->getShadingStatusTimestamp
) < (
@ -260,7 +257,7 @@ sub ShadingProcessing {
)
);
Log3( $name, 4,
::Log3( $name, 4,
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
. $shuttersDev
. " Azimuth: "
@ -279,18 +276,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 +299,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 +315,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 +330,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 +357,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 +368,7 @@ sub ShadingProcessing {
'out');
}
Log3( $name, 4,
::Log3( $name, 4,
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
. $shuttersDev
. " In der Out Abfrage, Shadingwert: "
@ -411,7 +410,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 +422,7 @@ sub ShadingProcessing {
'in');
}
Log3( $name, 4,
::Log3( $name, 4,
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
. $shuttersDev
. " In der In Abfrage, Shadingwert: "
@ -468,22 +467,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 +492,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 +526,7 @@ sub ShadingProcessing {
) / 60
. 'm'
);
readingsEndUpdate( $shuttersDevHash, 1 );
::readingsEndUpdate( $shuttersDevHash, 1 );
return;
}
@ -551,19 +546,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 +606,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 +630,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 +645,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,18 +45,18 @@
package FHEM::Automation::ShuttersControl::Shutters;
use FHEM::Automation::ShuttersControl::Shutters::Readings;
use FHEM::Automation::ShuttersControl::Shutters::Attr;
use FHEM::Automation::ShuttersControl::Roommate;
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;
use FHEM::Automation::ShuttersControl::Shutters::Readings;
use FHEM::Automation::ShuttersControl::Shutters::Attr;
use FHEM::Automation::ShuttersControl::Roommate qw (:ALL);
use FHEM::Automation::ShuttersControl::Window;
use base
qw(FHEM::Automation::ShuttersControl::Shutters::Readings FHEM::Automation::ShuttersControl::Shutters::Attr FHEM::Automation::ShuttersControl::Roommate FHEM::Automation::ShuttersControl::Window);
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 );
@ -233,7 +235,7 @@ sub setDriveCmd {
::gettimeofday() +
$FHEM::Automation::ShuttersControl::shutters
->getSelfDefenseAbsentDelay,
\&FHEM::Automation::ShuttersControl::_SetCmdFn, \%h
\&FHEM::Automation::ShuttersControl::SetCmdFn, \%h
);
$FHEM::Automation::ShuttersControl::shutters->setSelfDefenseAbsent(
1, 0, \%h );
@ -247,7 +249,7 @@ sub setDriveCmd {
$FHEM::Automation::ShuttersControl::shutters
->getDelayStart
),
\&FHEM::Automation::ShuttersControl::_SetCmdFn,
\&FHEM::Automation::ShuttersControl::SetCmdFn,
\%h
);
@ -258,7 +260,7 @@ sub setDriveCmd {
elsif ($offSetStart < 1
|| $FHEM::Automation::ShuttersControl::shutters->getNoDelay )
{
FHEM::Automation::ShuttersControl::_SetCmdFn( \%h );
FHEM::Automation::ShuttersControl::SetCmdFn( \%h );
FHEM::Automation::ShuttersControl::ASC_Debug( 'FnSetDriveCmd: '
. $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
. ' - NICHT versetztes fahren' );
@ -346,8 +348,7 @@ sub setLastDriveReading {
);
::InternalTimer( ::gettimeofday() + 0.1,
\&FHEM::Automation::ShuttersControl::_setShuttersLastDriveDelayed,
\%h );
\&FHEM::Automation::ShuttersControl::setShuttersLastDriveDelayed, \%h );
return;
}
@ -460,7 +461,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 +547,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 +759,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 +826,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 +859,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 +904,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 +951,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 +1013,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 +1094,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 +1102,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:
@ -47,7 +47,7 @@ use utf8;
use FHEM::Automation::ShuttersControl::Window::Attr;
use FHEM::Automation::ShuttersControl::Window::Readings;
our @ISA =
use base
qw(FHEM::Automation::ShuttersControl::Window::Attr FHEM::Automation::ShuttersControl::Window::Readings);
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,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' );