Compare commits
127 Commits
Author | SHA1 | Date | |
---|---|---|---|
cca6e90303 | |||
de5d6cbc6a | |||
4925e654ec | |||
97caf64308 | |||
6bf2b17d6f | |||
fb27bedf48 | |||
f52187ad35 | |||
103697184e | |||
c9894453bb | |||
14eee0e6dd | |||
9545dda125 | |||
3135a27c63 | |||
13689963f1 | |||
d8881ff6d1 | |||
12f48e98b5 | |||
a1d19a797d | |||
f1f265b89a | |||
ca99e2bd0c | |||
29e3a1a8d7 | |||
e02395a82f | |||
663ce748e2 | |||
d35dda835a | |||
47be49617d | |||
0dc0a9c6e4 | |||
79d369b9f5 | |||
8109cd7ebe | |||
842e41e3dc | |||
35a4f60a53 | |||
ef650b2d4b | |||
bf773ca2d7 | |||
ae88630277 | |||
f811cfd87f | |||
1a71c63652 | |||
7d3d11d1e2 | |||
1eeeb85eaf | |||
397f949a21 | |||
4ea1db3aa0 | |||
004a15ea42 | |||
9a1b6acad3 | |||
4aa24587a5 | |||
c76280639f | |||
a3c023711c | |||
c6e88f2d45 | |||
f0f5cbde4b | |||
5928276b74 | |||
32a3ac9d13 | |||
ef590e002e | |||
427018ab46 | |||
89431a2af3 | |||
39c7ec3dc5 | |||
37044b2316 | |||
a44fffe94e | |||
870f2be5d8 | |||
36669f1405 | |||
a61458cfc2 | |||
8c17eb5f6a | |||
d87ddb146c | |||
58b2f20f19 | |||
301fd32048 | |||
0255be94b5 | |||
4773fd0ea0 | |||
1ce3805427 | |||
5f00d33fa9 | |||
da79e25929 | |||
0b22ac9e12 | |||
e6a01cdb18 | |||
fb44ff9f1a | |||
9663b2dd43 | |||
d6cb059eaf | |||
6774e3a918 | |||
e28fad13d7 | |||
1c1ac77851 | |||
1ac38a7216 | |||
8d6044c404 | |||
fcce22b102 | |||
4b5b03a8fc | |||
f412e88325 | |||
0dca852ad0 | |||
8ea4101747 | |||
b9a7328661 | |||
f03a7d690f | |||
5ccceaba16 | |||
54450962ac | |||
9409c60400 | |||
75f5b6bf01 | |||
98edf0c5f6 | |||
a9a47f9e70 | |||
f2b7e8490f | |||
3d7f9fcf92 | |||
e037a12879 | |||
096e4ab815 | |||
feba24bf99 | |||
e5a6bbdbe5 | |||
a66daa7d5a | |||
617b7a7531 | |||
f498829347 | |||
4cc3ecc40a | |||
95446cc91e | |||
63393b4cd4 | |||
6a62226a39 | |||
cbd058773d | |||
1016b7d087 | |||
649d21f19b | |||
93bd0cd22e | |||
62a4a249b4 | |||
e66aa0cb4d | |||
34afd51a11 | |||
a2c878e333 | |||
bb1d139ed7 | |||
ef5b9a982e | |||
4c1d6c7885 | |||
2b12b9ed10 | |||
6babb451c9 | |||
9afc3ccf97 | |||
bee5ff33ae | |||
9ba046452a | |||
5e60229c7a | |||
8009a27869 | |||
0b048e7dc0 | |||
bd6e901ca1 | |||
f36101f48a | |||
f51cdf4943 | |||
2c68ae8406 | |||
697cdd1089 | |||
d3af20bc01 | |||
7882128336 | |||
c25c395a5b |
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2020 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -49,26 +49,17 @@ use utf8;
|
|||||||
use FHEM::Meta;
|
use FHEM::Meta;
|
||||||
|
|
||||||
use FHEM::Automation::ShuttersControl;
|
use FHEM::Automation::ShuttersControl;
|
||||||
use GPUtils qw(GP_Import GP_Export);
|
use GPUtils qw(GP_Import);
|
||||||
|
|
||||||
## Import der FHEM Funktionen
|
## Import der FHEM Funktionen
|
||||||
#-- Run before package compilation
|
#-- Run before package compilation
|
||||||
BEGIN {
|
BEGIN {
|
||||||
# Import from main context
|
# Import from main context
|
||||||
GP_Import(
|
GP_Import(qw(readingFnAttributes));
|
||||||
qw(
|
|
||||||
readingFnAttributes
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
#-- Export to main context with different name
|
|
||||||
GP_Export(
|
|
||||||
qw(
|
|
||||||
Initialize
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub ::AutoShuttersControl_Initialize { goto &Initialize }
|
||||||
|
|
||||||
sub Initialize {
|
sub Initialize {
|
||||||
my $hash = shift;
|
my $hash = shift;
|
||||||
|
|
||||||
@ -100,7 +91,8 @@ sub Initialize {
|
|||||||
. 'ASC_expert:1 '
|
. 'ASC_expert:1 '
|
||||||
. 'ASC_blockAscDrivesAfterManual:0,1 '
|
. 'ASC_blockAscDrivesAfterManual:0,1 '
|
||||||
. 'ASC_debug:1 '
|
. 'ASC_debug:1 '
|
||||||
. 'ASC_advDate:DeadSunday,FirstAdvent '
|
. 'ASC_advStartDate:DeadSunday,FirstAdvent '
|
||||||
|
. 'ASC_advEndDate:CandlemasDay,EpiphanyDay '
|
||||||
. $readingFnAttributes;
|
. $readingFnAttributes;
|
||||||
$hash->{NotifyOrderPrefix} = '51-'; # Order Nummer für NotifyFn
|
$hash->{NotifyOrderPrefix} = '51-'; # Order Nummer für NotifyFn
|
||||||
$hash->{FW_detailFn} =
|
$hash->{FW_detailFn} =
|
||||||
@ -112,6 +104,8 @@ sub Initialize {
|
|||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
=pod
|
=pod
|
||||||
=item device
|
=item device
|
||||||
=item summary Module for controlling shutters depending on various conditions
|
=item summary Module for controlling shutters depending on various conditions
|
||||||
@ -120,7 +114,7 @@ sub Initialize {
|
|||||||
|
|
||||||
=begin html
|
=begin html
|
||||||
|
|
||||||
<a name="AutoShuttersControl"></a>
|
<a id="AutoShuttersControl"></a>
|
||||||
<h3>AutoShuttersControl</h3>
|
<h3>AutoShuttersControl</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<p>
|
<p>
|
||||||
@ -138,7 +132,7 @@ sub Initialize {
|
|||||||
closed window with shutters down is tilted, the shutters could be half opened for ventilation.
|
closed window with shutters down is tilted, the shutters could be half opened for ventilation.
|
||||||
Many more is possible.
|
Many more is possible.
|
||||||
</p>
|
</p>
|
||||||
<a name="AutoShuttersControlDefine"></a>
|
<a id="AutoShuttersControl-define"></a>
|
||||||
<strong>Define</strong>
|
<strong>Define</strong>
|
||||||
<ul>
|
<ul>
|
||||||
<p>
|
<p>
|
||||||
@ -166,7 +160,7 @@ sub Initialize {
|
|||||||
</p>
|
</p>
|
||||||
</ul>
|
</ul>
|
||||||
<br/>
|
<br/>
|
||||||
<a name="AutoShuttersControlReadings"></a>
|
<a id="AutoShuttersControl-Readings"></a>
|
||||||
<strong>Readings</strong>
|
<strong>Readings</strong>
|
||||||
<ul>
|
<ul>
|
||||||
<p>Within the ASC device:</p>
|
<p>Within the ASC device:</p>
|
||||||
@ -200,122 +194,139 @@ sub Initialize {
|
|||||||
If the brightness or time mode is used, the value from <em>ASC_Time_Up_Late</em> is shown.
|
If the brightness or time mode is used, the value from <em>ASC_Time_Up_Late</em> is shown.
|
||||||
</li>
|
</li>
|
||||||
<li><strong>ASC_Time_DriveDown</strong> - if the astro mode is used, the next sunset is shown.
|
<li><strong>ASC_Time_DriveDown</strong> - if the astro mode is used, the next sunset is shown.
|
||||||
If the brightness or time mode is used, the value from <em>ASC_TASC_Time_Down_Lateime_Up_Late</em> is
|
If the brightness or time mode is used, the value from <em>ASC_TASC_Time_Down_Late</em> is
|
||||||
shown.
|
shown.
|
||||||
</li>
|
</li>
|
||||||
<li><strong>ASC_ShuttersLastDrive</strong> - initiator for the last action</li>
|
<li><strong>ASC_ShuttersLastDrive</strong> - initiator for the last action</li>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
<a name="AutoShuttersControlSet"></a>
|
<a id="AutoShuttersControl-set"></a>
|
||||||
<strong>Set</strong>
|
<strong>Set</strong>
|
||||||
<ul>
|
<ul>
|
||||||
|
<a id="AutoShuttersControl-set-advDriveDown"></a>
|
||||||
|
<li><strong>advDriveDown</strong> - execute all moves delayed by <i>ASC_Adv on</i>.</li>
|
||||||
|
<a id="AutoShuttersControl-set-ascEnable"></a>
|
||||||
<li><strong>ascEnable on|off</strong> - enable or disable the global control by ASC</li>
|
<li><strong>ascEnable on|off</strong> - enable or disable the global control by ASC</li>
|
||||||
|
<a id="AutoShuttersControl-set-controlShading"></a>
|
||||||
<li><strong>controlShading on|off</strong> - enable or disable the global shading control by ASC</li>
|
<li><strong>controlShading on|off</strong> - enable or disable the global shading control by ASC</li>
|
||||||
|
<a id="AutoShuttersControl-set-createNewNotifyDev"></a>
|
||||||
<li><strong>createNewNotifyDev</strong> - re-creates the internal structure for NOTIFYDEV. Is only present if
|
<li><strong>createNewNotifyDev</strong> - re-creates the internal structure for NOTIFYDEV. Is only present if
|
||||||
the
|
the
|
||||||
<em>ASC_Expert</em> attribute is set to 1.
|
<em>ASC_Expert</em> attribute is set to 1.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-set-hardLockOut"></a>
|
||||||
<li><strong>hardLockOut on|off</strong> - <li><strong>hardLockOut - on/off</strong> - Aktiviert den hardwareseitigen Aussperrschutz für die Rollläden, bei denen das Attributs <em>ASC_LockOut</em> entsprechend auf hard gesetzt ist. Mehr Informationen in der Beschreibung bei den Attributen für die Rollladengeräten.</li>
|
<li><strong>hardLockOut on|off</strong> - <li><strong>hardLockOut - on/off</strong> - Aktiviert den hardwareseitigen Aussperrschutz für die Rollläden, bei denen das Attributs <em>ASC_LockOut</em> entsprechend auf hard gesetzt ist. Mehr Informationen in der Beschreibung bei den Attributen für die Rollladengeräten.</li>
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-set-partyMode"></a>
|
||||||
<li><strong>partyMode on|off</strong> - controls the global party mode for shutters. Every shutters whose
|
<li><strong>partyMode on|off</strong> - controls the global party mode for shutters. Every shutters whose
|
||||||
<em>ASC_Partymode</em> attribute is set to <em>on</em>, is not longer controlled by ASC. The last saved
|
<em>ASC_Partymode</em> attribute is set to <em>on</em>, is not longer controlled by ASC. The last saved
|
||||||
working command send to the device, i.e. by a event, created by a window or presence event, will be executed
|
working command send to the device, i.e. by a event, created by a window or presence event, will be executed
|
||||||
once the party mode is disabled.
|
once the party mode is disabled.
|
||||||
</li>
|
</li>
|
||||||
<li><strong>renewAllTimer</strong> - resets the sunrise and sunset timers for every associated
|
<a id="AutoShuttersControl-set-renewTimer"></a>
|
||||||
shutter device and creates new internal FHEM timers.
|
|
||||||
</li>
|
|
||||||
<li><strong>renewTimer</strong> - resets the sunrise and sunset timers for selected shutter
|
<li><strong>renewTimer</strong> - resets the sunrise and sunset timers for selected shutter
|
||||||
device and creates new internal FHEM timers.
|
device and creates new internal FHEM timers.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-set-renewAllTimer"></a>
|
||||||
|
<li><strong>renewAllTimer</strong> - resets the sunrise and sunset timers for all shutter
|
||||||
|
device and creates new internal FHEM timers.</li>
|
||||||
|
<a id="AutoShuttersControl-set-scanForShutters"></a>
|
||||||
<li><strong>scanForShutters</strong> - scans the whole FHEM installation for (new) devices whose <em>ASC</em>
|
<li><strong>scanForShutters</strong> - scans the whole FHEM installation for (new) devices whose <em>ASC</em>
|
||||||
attribute is set (to 1 or 2, see above).
|
attribute is set (to 1 or 2, see above).
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-set-selfDefense"></a>
|
||||||
<li><strong>selfDefense on|off</strong> - controls the self defense function. This function listens for
|
<li><strong>selfDefense on|off</strong> - controls the self defense function. This function listens for
|
||||||
example on a residents device. If this device is set to <em>absent</em> and a window is still open, ASC will close
|
example on a residents device. If this device is set to <em>absent</em> and a window is still open, ASC will close
|
||||||
the shutter for a rudimentary burglary protection.
|
the shutter for a rudimentary burglary protection.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-set-shutterASCenableToggle"></a>
|
||||||
<li><strong>shutterASCenableToggle on|off</strong> - controls if the ASC controls are shown at a associated
|
<li><strong>shutterASCenableToggle on|off</strong> - controls if the ASC controls are shown at a associated
|
||||||
shutter device.
|
shutter device.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-set-sunriseTimeWeHoliday"></a>
|
||||||
<li><strong>sunriseTimeWeHoliday on|off</strong> - controls the weekend and holiday support. If enabled, the
|
<li><strong>sunriseTimeWeHoliday on|off</strong> - controls the weekend and holiday support. If enabled, the
|
||||||
<em>ASC_Time_Up_WE_Holiday</em> attribute is considered.
|
<em>ASC_Time_Up_WE_Holiday</em> attribute is considered.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-set-wiggle"></a>
|
||||||
<li><strong>wiggle</strong> - wiggles a device for a given value (default 5%, controlled by
|
<li><strong>wiggle</strong> - wiggles a device for a given value (default 5%, controlled by
|
||||||
<em>ASC_WiggleValue</em>) up or down and back after a minute. Useful as a deterrence in combination with
|
<em>ASC_WiggleValue</em>) up or down and back after a minute. Useful as a deterrence in combination with
|
||||||
alarm system.
|
alarm system.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
<a name="AutoShuttersControlGet"></a>
|
<a id="AutoShuttersControl-get"></a>
|
||||||
<strong>Get</strong>
|
<strong>Get</strong>
|
||||||
<ul>
|
<ul>
|
||||||
|
<a id="AutoShuttersControl-get-showNotifyDevsInformations"></a>
|
||||||
<li><strong>showNotifyDevsInformations</strong> - shows the generated <em>NOTIFYDEV</em> structure. Useful for
|
<li><strong>showNotifyDevsInformations</strong> - shows the generated <em>NOTIFYDEV</em> structure. Useful for
|
||||||
debugging and only shown if the <em>ASC_expert</em> attribute is set to 1.
|
debugging and only shown if the <em>ASC_expert</em> attribute is set to 1.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
<a name="AutoShuttersControlAttributes"></a>
|
<a id="AutoShuttersControl-attr"></a>
|
||||||
<strong>Attributes</strong>
|
<strong>Attributes</strong>
|
||||||
<ul>
|
<ul>
|
||||||
<p>At the global <abbr>ASC</abbr> device:</p>
|
<p>At the global <abbr>ASC</abbr> device:</p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<a name="ASC_autoAstroModeEvening"></a>
|
<a id="AutoShuttersControl-attr-ASC_autoAstroModeEvening"></a>
|
||||||
<li><strong>ASC_autoAstroModeEvening</strong> - REAL, CIVIL, NAUTIC, ASTRONOMIC or HORIZON</li>
|
<li><strong>ASC_autoAstroModeEvening</strong> - REAL, CIVIL, NAUTIC, ASTRONOMIC or HORIZON</li>
|
||||||
<a name="ASC_autoAstroModeEveningHorizon"></a>
|
<a id="AutoShuttersControl-attr-ASC_autoAstroModeEveningHorizon"></a>
|
||||||
<li><strong>ASC_autoAstroModeEveningHorizon</strong> - Height above the horizon. Is only considered
|
<li><strong>ASC_autoAstroModeEveningHorizon</strong> - Height above the horizon. Is only considered
|
||||||
if the <em>ASC_autoAstroModeEvening</em> attribute is set to <em>HORIZON</em>. Defaults to <em>0</em>.
|
if the <em>ASC_autoAstroModeEvening</em> attribute is set to <em>HORIZON</em>. Defaults to <em>0</em>.
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_autoAstroModeMorning"></a>
|
<a id="AutoShuttersControl-attr-ASC_autoAstroModeMorning"></a>
|
||||||
<li><strong>ASC_autoAstroModeMorning</strong> - REAL, CIVIL, NAUTIC, ASTRONOMIC or HORIZON</li>
|
<li><strong>ASC_autoAstroModeMorning</strong> - REAL, CIVIL, NAUTIC, ASTRONOMIC or HORIZON</li>
|
||||||
<a name="ASC_autoAstroModeMorningHorizon"></a>
|
<a id="AutoShuttersControl-attr-ASC_autoAstroModeMorningHorizon"></a>
|
||||||
<li><strong>ASC_autoAstroModeMorningHorizon</strong> - Height above the horizon. Is only considered
|
<li><strong>ASC_autoAstroModeMorningHorizon</strong> - Height above the horizon. Is only considered
|
||||||
if the <em>ASC_autoAstroModeMorning</em> attribute is set to <em>HORIZON</em>. Defaults to <em>0</em>.
|
if the <em>ASC_autoAstroModeMorning</em> attribute is set to <em>HORIZON</em>. Defaults to <em>0</em>.
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_autoShuttersControlComfort"></a>
|
<a id="AutoShuttersControl-attr-ASC_autoShuttersControlComfort"></a>
|
||||||
<li><strong>ASC_autoShuttersControlComfort - on|off</strong> -
|
<li><strong>ASC_autoShuttersControlComfort - on|off</strong> -
|
||||||
Controls the comfort functions: If a three state sensor, like the <abbr>HmIP-SRH</abbr> window handle
|
Controls the comfort functions: If a three state sensor, like the <abbr>HmIP-SRH</abbr> window handle
|
||||||
sensor, is installed, <abbr>ASC</abbr> will open the window if the sensor signals open position. The
|
sensor, is installed, <abbr>ASC</abbr> will open the window if the sensor signals open position. The
|
||||||
<em>ASC_ComfortOpen_Pos</em> attribute has to be set for the shutter to <em>on</em>, defaults to <em>off</em>.
|
<em>ASC_ComfortOpen_Pos</em> attribute has to be set for the shutter to <em>on</em>, defaults to <em>off</em>.
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_autoShuttersControlEvening"></a>
|
<a id="AutoShuttersControl-attr-ASC_autoShuttersControlEvening"></a>
|
||||||
<li><strong>ASC_autoShuttersControlEvening - on|off</strong> - Enables the automatic control by <abbr>ASC</abbr>
|
<li><strong>ASC_autoShuttersControlEvening - on|off</strong> - Enables the automatic control by <abbr>ASC</abbr>
|
||||||
at the evenings.
|
at the evenings.
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_autoShuttersControlMorning"></a>
|
<a id="AutoShuttersControl-attr-ASC_autoShuttersControlMorning"></a>
|
||||||
<li><strong>ASC_autoShuttersControlMorning - on|off</strong> - Enables the automatic control by <abbr>ASC</abbr>
|
<li><strong>ASC_autoShuttersControlMorning - on|off</strong> - Enables the automatic control by <abbr>ASC</abbr>
|
||||||
at the mornings.
|
at the mornings.
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_blockAscDrivesAfterManual"></a>
|
<a id="AutoShuttersControl-attr-ASC_blockAscDrivesAfterManual"></a>
|
||||||
<li><strong>ASC_blockAscDrivesAfterManual 0|1</strong> - If set to <em>1</em>, <abbr>ASC</abbr> will not
|
<li><strong>ASC_blockAscDrivesAfterManual 0|1</strong> - If set to <em>1</em>, <abbr>ASC</abbr> will not
|
||||||
automatically control a shutter if there was an manual control to the shutter. To be considered, the
|
automatically control a shutter if there was an manual control to the shutter. To be considered, the
|
||||||
<em>ASC_ShuttersLastDrive</em> reading has to contain the value <em>manual</em> and the shutter is in
|
<em>ASC_ShuttersLastDrive</em> reading has to contain the value <em>manual</em> and the shutter is in
|
||||||
an unknown (i.e. not otherwise configured in <abbr>ASC</abbr>) position.
|
an unknown (i.e. not otherwise configured in <abbr>ASC</abbr>) position.
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_brightnessDriveUpDown"></a>
|
<a id="AutoShuttersControl-attr-ASC_brightnessDriveUpDown"></a>
|
||||||
<li><strong>ASC_brightnessDriveUpDown - VALUE-MORNING:VALUE-EVENING</strong> - Drive the shutters by
|
<li><strong>ASC_brightnessDriveUpDown - VALUE-MORNING:VALUE-EVENING</strong> - Drive the shutters by
|
||||||
brightness. <em>VALUE-MORNING</em> sets the brightness threshold for the morning. If the value is
|
brightness. <em>VALUE-MORNING</em> sets the brightness threshold for the morning. If the value is
|
||||||
reached in the morning, the shutter will go up. Vice versa in the evening. This is a global setting
|
reached in the morning, the shutter will go up. Vice versa in the evening. This is a global setting
|
||||||
and can be overwritte per device with the <em>ASC_BrightnessSensor</em> attribute (see below).
|
and can be overwritte per device with the <em>ASC_BrightnessSensor</em> attribute (see below).
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_debug"></a>
|
<a id="AutoShuttersControl-attr-ASC_debug"></a>
|
||||||
<li><strong>ASC_debug</strong> -
|
<li><strong>ASC_debug</strong> -
|
||||||
Extendend logging for debugging purposes
|
Extendend logging for debugging purposes
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_expert"></a>
|
<a id="AutoShuttersControl-attr-ASC_expert"></a>
|
||||||
<li><strong>ASC_expert</strong> - Switches the export mode on. Currently, if set to <em>1</em>, <em>get</em>
|
<li><strong>ASC_expert</strong> - Switches the export mode on. Currently, if set to <em>1</em>, <em>get</em>
|
||||||
and <em>set</em> will contain additional functions regarding the NOTIFYDEFs.
|
and <em>set</em> will contain additional functions regarding the NOTIFYDEFs.
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_freezeTemp"></a>
|
<a id="AutoShuttersControl-attr-ASC_freezeTemp"></a>
|
||||||
<li><strong>ASC_freezeTemp</strong> - Temperature threshold for the freeze protection. The freeze protection
|
<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.
|
prevents the shutter to be operated by <abbr>ASC</abbr>. Last operating order will be kept.
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_advDate"></a>
|
<a id="AutoShuttersControl-attr-ASC_advStartDate"></a>
|
||||||
<li><strong>ASC_advDate</strong> - Advent Season, selected FirstAdvent or DeadSunday.
|
<li><strong>ASC_advStartDate</strong> - Begin of Advent Season, selected FirstAdvent or DeadSunday.
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_rainSensor"></a>
|
<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
|
<li><strong>ASC_rainSensor DEVICENAME[:READINGNAME] MAXTRIGGER[:HYSTERESE] [CLOSEDPOS]</strong> - Contains
|
||||||
settings for the rain protection. <em>DEVICNAME</em> specifies a rain sensor, the optional
|
settings for the rain protection. <em>DEVICNAME</em> specifies a rain sensor, the optional
|
||||||
<em>READINGNAME</em> the name of the reading at the <em>DEVICENAME</em>. The <em>READINGNAME</em>
|
<em>READINGNAME</em> the name of the reading at the <em>DEVICENAME</em>. The <em>READINGNAME</em>
|
||||||
@ -323,26 +334,29 @@ sub Initialize {
|
|||||||
sets the threshold for the amount of rain for when the shutter is driven to <em>CLOSEDPOS</em> as soon
|
sets the threshold for the amount of rain for when the shutter is driven to <em>CLOSEDPOS</em> as soon
|
||||||
the threshold is reached. <em>HYSTERESE</em> sets a hysteresis for <em>MAXTRIGGER</em>.
|
the threshold is reached. <em>HYSTERESE</em> sets a hysteresis for <em>MAXTRIGGER</em>.
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_residentsDev"></a>
|
<a id="AutoShuttersControl-attr-ASC_residentsDev"></a>
|
||||||
<li><strong>ASC_residentsDev DEVICENAME[:READINGNAME]</strong> - <em>DEVICENAME</em> points to a device
|
<li><strong>ASC_residentsDev DEVICENAME[:READINGNAME]</strong> - <em>DEVICENAME</em> points to a device
|
||||||
for presence, e.g. of type <em>RESIDENTS</em>. <em>READINGNAME</em> points to a reading at
|
for presence, e.g. of type <em>RESIDENTS</em>. <em>READINGNAME</em> points to a reading at
|
||||||
<em>DEVICENAME</em> which contains a presence state, e.g. <em>rgr_Residents:state</em>. The target
|
<em>DEVICENAME</em> which contains a presence state, e.g. <em>rgr_Residents:state</em>. The target
|
||||||
should contain values alike the <em>RESIDENTS</em> family.
|
should contain values alike the <em>RESIDENTS</em> family.
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_shuttersDriveDelay"></a>
|
<a id="AutoShuttersControl-attr-ASC_GuestRoom"></a>
|
||||||
|
<li><strong>ASC_GuestRoom on|off</strong> - (not functionality implemented yet?).
|
||||||
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_shuttersDriveDelay"></a>
|
||||||
<li><strong>ASC_shuttersDriveDelay</strong> - Maximum random drive delay in seconds for calculating
|
<li><strong>ASC_shuttersDriveDelay</strong> - Maximum random drive delay in seconds for calculating
|
||||||
the operating time. <em>0</em> equals to no delay.
|
the operating time. <em>0</em> equals to no delay.
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_tempSensor"></a>
|
<a id="AutoShuttersControl-attr-ASC_TempSensor"></a>
|
||||||
<li><strong>ASC_tempSensor DEVICENAME[:READINGNAME]</strong> - <em>DEVICENAME</em> points to a device
|
<li><strong>ASC_TempSensor DEVICENAME[:READINGNAME]</strong> - <em>DEVICENAME</em> points to a device
|
||||||
with a temperature, <em>READINGNAME</em> to a reading located at the <em>DEVICENAME</em>, for example
|
with a temperature, <em>READINGNAME</em> to a reading located at the <em>DEVICENAME</em>, for example
|
||||||
<em>OUTDOOR_TEMP:measured-temp</em>. <em>READINGNAME</em> defaults to <em>temperature</em>.
|
<em>OUTDOOR_TEMP:measured-temp</em>. <em>READINGNAME</em> defaults to <em>temperature</em>.
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_twilightDevice"></a>
|
<a id="AutoShuttersControl-attr-ASC_twilightDevice"></a>
|
||||||
<li><strong>ASC_twilightDevice</strong> - points to a <em>DEVICENAME</em> containing values regarding
|
<li><strong>ASC_twilightDevice</strong> - points to a <em>DEVICENAME</em> containing values regarding
|
||||||
the sun position. Supports currently devices of type <em>Twilight</em> or <em>Astro</em>.
|
the sun position. Supports currently devices of type <em>Twilight</em> or <em>Astro</em>.
|
||||||
</li>
|
</li>
|
||||||
<a name="ASC_windSensor"></a>
|
<a id="AutoShuttersControl-attr-ASC_windSensor"></a>
|
||||||
<li><strong>ASC_windSensor DEVICENAME[:READINGNAME]</strong> - <em>DEVICENAME</em> points to a device
|
<li><strong>ASC_windSensor DEVICENAME[:READINGNAME]</strong> - <em>DEVICENAME</em> points to a device
|
||||||
containing a wind speed. Reads from the <em>wind</em> reading, if not otherwise specified by
|
containing a wind speed. Reads from the <em>wind</em> reading, if not otherwise specified by
|
||||||
<em>READINGNAME</em>.
|
<em>READINGNAME</em>.
|
||||||
@ -351,6 +365,7 @@ sub Initialize {
|
|||||||
<br/>
|
<br/>
|
||||||
<p>At shutter devices, controlled by <abbr>ASC</abbr>:</p>
|
<p>At shutter devices, controlled by <abbr>ASC</abbr>:</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC"></a>
|
||||||
<li><strong>ASC - 0|1|2</strong>
|
<li><strong>ASC - 0|1|2</strong>
|
||||||
<ul>
|
<ul>
|
||||||
<li>0 - don't create attributes for <abbr>ASC</abbr> at the first scan and don't be controlled
|
<li>0 - don't create attributes for <abbr>ASC</abbr> at the first scan and don't be controlled
|
||||||
@ -361,6 +376,7 @@ sub Initialize {
|
|||||||
controlled by <em><abbr>pct</abbr></em> values.</li>
|
controlled by <em><abbr>pct</abbr></em> values.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Antifreeze"></a>
|
||||||
<li><strong>ASC_Antifreeze - soft|am|pm|hard|off</strong> - Freeze protection.
|
<li><strong>ASC_Antifreeze - soft|am|pm|hard|off</strong> - Freeze protection.
|
||||||
<ul>
|
<ul>
|
||||||
<li>soft - see <em>ASC_Antifreeze_Pos</em>.</li>
|
<li>soft - see <em>ASC_Antifreeze_Pos</em>.</li>
|
||||||
@ -369,42 +385,55 @@ sub Initialize {
|
|||||||
<li>off - freeze protection is disabled, default value</li>
|
<li>off - freeze protection is disabled, default value</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Antifreeze_Pos"></a>
|
||||||
<li><strong>ASC_Antifreeze_Pos</strong> - Position to be operated if the shutter should be closed,
|
<li><strong>ASC_Antifreeze_Pos</strong> - Position to be operated if the shutter should be closed,
|
||||||
but <em>ASC_Antifreeze</em> is not set to <em>off</em>. (Default: dependent on attribut<em>ASC</em> 85/15).
|
but <em>ASC_Antifreeze</em> is not set to <em>off</em>. (Default: dependent on attribut<em>ASC</em> 85/15).
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_AutoAstroModeEvening"></a>
|
||||||
<li><strong>ASC_AutoAstroModeEvening</strong> - Can be set to <em>REAL</em>, <em>CIVIL</em>,
|
<li><strong>ASC_AutoAstroModeEvening</strong> - Can be set to <em>REAL</em>, <em>CIVIL</em>,
|
||||||
<em>NAUTIC</em>, <em>ASTRONOMIC</em> or <em>HORIZON</em>. Defaults to none of those.</li>
|
<em>NAUTIC</em>, <em>ASTRONOMIC</em> or <em>HORIZON</em>. Defaults to none of those.</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_AutoAstroModeEveningHorizon"></a>
|
||||||
<li><strong>ASC_AutoAstroModeEveningHorizon</strong> - If this value is reached by the sun, a sunset is
|
<li><strong>ASC_AutoAstroModeEveningHorizon</strong> - If this value is reached by the sun, a sunset is
|
||||||
presumed. Is used if <em>ASC_autoAstroModeEvening</em> is set to <em>HORIZON</em>. Defaults to none.
|
presumed. Is used if <em>ASC_autoAstroModeEvening</em> is set to <em>HORIZON</em>. Defaults to none.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_AutoAstroModeMorning"></a>
|
||||||
<li><strong>ASC_AutoAstroModeMorning</strong> - Can be set to <em>REAL</em>, <em>CIVIL</em>,
|
<li><strong>ASC_AutoAstroModeMorning</strong> - Can be set to <em>REAL</em>, <em>CIVIL</em>,
|
||||||
<em>NAUTIC</em>, <em>ASTRONOMIC</em> or <em>HORIZON</em>. Defaults to none of those.</li>
|
<em>NAUTIC</em>, <em>ASTRONOMIC</em> or <em>HORIZON</em>. Defaults to none of those.</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_AutoAstroModeMorningHorizon"></a>
|
||||||
<li><strong>ASC_AutoAstroModeMorningHorizon</strong> - If this value is reached by the sun, a sunrise is
|
<li><strong>ASC_AutoAstroModeMorningHorizon</strong> - If this value is reached by the sun, a sunrise is
|
||||||
presumed. Is used if <em>ASC_AutoAstroModeMorning</em> is set to <em>HORIZON</em>. Defaults to none.
|
presumed. Is used if <em>ASC_AutoAstroModeMorning</em> is set to <em>HORIZON</em>. Defaults to none.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shutter_IdleDetection"></a>
|
||||||
<li><strong>ASC_Shutter_IdleDetection</strong> - indicates the Reading which gives information about the running status of the roller blind, as well as secondly the value in the Reading which says that the roller blind does not run.
|
<li><strong>ASC_Shutter_IdleDetection</strong> - indicates the Reading which gives information about the running status of the roller blind, as well as secondly the value in the Reading which says that the roller blind does not run.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_BlockingTime_afterManual"></a>
|
||||||
<li><strong>ASC_BlockingTime_afterManual</strong> - Time in which operations by <abbr>ASC</abbr> are blocked
|
<li><strong>ASC_BlockingTime_afterManual</strong> - Time in which operations by <abbr>ASC</abbr> are blocked
|
||||||
after the last manual operation in seconds. Defaults to 1200 (20 minutes).
|
after the last manual operation in seconds. Defaults to 1200 (20 minutes).
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_BlockingTime_beforDayOpen"></a>
|
||||||
<li><strong>ASC_BlockingTime_beforDayOpen</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).
|
<abbr>ASC</abbr> after opening at the morning in seconds. Defaults to 3600 (one hour).
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_BlockingTime_beforNightClose"></a>
|
||||||
<li><strong>ASC_BlockingTime_beforNightClose</strong> - Time in which no closing operation is made by
|
<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).
|
<abbr>ASC</abbr> before closing at the evening in seconds. Defaults to 3600 (one hour).
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_BrightnessSensor"></a>
|
||||||
<li><strong>ASC_BrightnessSensor - DEVICE[:READING] MORNING-VALUE:EVENING-VALUE</strong> -
|
<li><strong>ASC_BrightnessSensor - DEVICE[:READING] MORNING-VALUE:EVENING-VALUE</strong> -
|
||||||
Drive this shutter by brightness. <em>MORNING-VALUE</em> sets the brightness threshold for the morning.
|
Drive this shutter by brightness. <em>MORNING-VALUE</em> sets the brightness threshold for the morning.
|
||||||
If the value is reached in the morning, the shutter will go up. Vice versa in the evening, specified by
|
If the value is reached in the morning, the shutter will go up. Vice versa in the evening, specified by
|
||||||
<em>EVENING-VALUE</em>. Gets the brightness from <em>DEVICE</em>, reads by default from the
|
<em>EVENING-VALUE</em>. Gets the brightness from <em>DEVICE</em>, reads by default from the
|
||||||
<em>brightness</em> reading, unless <em>READING</em> is specified. Defaults to <em>none</em>.
|
<em>brightness</em> reading, unless <em>READING</em> is specified. Defaults to <em>none</em>.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Closed_Pos"></a>
|
||||||
<li><strong>ASC_Closed_Pos</strong> - The closed position value from 0 to 100 percent in increments of 10.
|
<li><strong>ASC_Closed_Pos</strong> - The closed position value from 0 to 100 percent in increments of 10.
|
||||||
(Default: dependent on attribut<em>ASC</em> 100/0).
|
(Default: dependent on attribut<em>ASC</em> 100/0).
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_ComfortOpen_Pos"></a>
|
||||||
<li><strong>ASC_ComfortOpen_Pos</strong> - The comfort opening position, ranging
|
<li><strong>ASC_ComfortOpen_Pos</strong> - The comfort opening position, ranging
|
||||||
from 0 to 100 percent in increments of 10. (Default: dependent on attribut<em>ASC</em> 20/80).
|
from 0 to 100 percent in increments of 10. (Default: dependent on attribut<em>ASC</em> 20/80).
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Down"></a>
|
||||||
<li><strong>ASC_Down - astro|time|brightness|roommate</strong> - Drive the shutter depending on this setting:
|
<li><strong>ASC_Down - astro|time|brightness|roommate</strong> - Drive the shutter depending on this setting:
|
||||||
<ul>
|
<ul>
|
||||||
<li>astro - drive down at sunset</li>
|
<li>astro - drive down at sunset</li>
|
||||||
@ -415,9 +444,15 @@ sub Initialize {
|
|||||||
</ul>
|
</ul>
|
||||||
Defaults to <em>astro</em>.
|
Defaults to <em>astro</em>.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_DriveUpMaxDuration"></a>
|
||||||
<li><strong>ASC_DriveUpMaxDuration</strong> - Drive up duration of the shutter plus 5 seconds. Defaults
|
<li><strong>ASC_DriveUpMaxDuration</strong> - Drive up duration of the shutter plus 5 seconds. Defaults
|
||||||
to 60 seconds if not set.
|
to 60 seconds if not set.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Drive_Delay"></a>
|
||||||
|
<li><strong>ASC_Drive_Delay</strong> - maximum value for a random delay (in seconds) to add to the calculated drive times. (needs also <i>ASC_Drive_DelayStart</i> to be set!)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Drive_DelayStart"></a>
|
||||||
|
<li><strong>ASC_Drive_DelayStart</strong> - delay in seconds to add to each calculated drive time.</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_LockOut"></a>
|
||||||
<li><strong>ASC_LockOut soft|hard|off</strong> - Configures the lock out protection for the current
|
<li><strong>ASC_LockOut soft|hard|off</strong> - Configures the lock out protection for the current
|
||||||
shutter. Values are:
|
shutter. Values are:
|
||||||
<ul>
|
<ul>
|
||||||
@ -433,9 +468,11 @@ sub Initialize {
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_LockOut_Cmd"></a>
|
||||||
<li><strong>ASC_LockOut_Cmd inhibit|blocked|protection</strong> - Configures the lock out command for
|
<li><strong>ASC_LockOut_Cmd inhibit|blocked|protection</strong> - Configures the lock out command for
|
||||||
<em>ASC_LockOut</em> if hard is chosen as a value. Defaults to none.
|
<em>ASC_LockOut</em> if hard is chosen as a value. Defaults to none.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Mode_Down"></a>
|
||||||
<li><strong>ASC_Mode_Down always|home|absent|off</strong> - When will a shutter be driven down:
|
<li><strong>ASC_Mode_Down always|home|absent|off</strong> - When will a shutter be driven down:
|
||||||
<ul>
|
<ul>
|
||||||
<li>always - <abbr>ASC</abbr> will drive always. Default value.</li>
|
<li>always - <abbr>ASC</abbr> will drive always. Default value.</li>
|
||||||
@ -445,6 +482,7 @@ sub Initialize {
|
|||||||
operate the shutter.</li>
|
operate the shutter.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Mode_Up"></a>
|
||||||
<li><strong>ASC_Mode_Up always|home|absent|off</strong> - When will a shutter be driven up:
|
<li><strong>ASC_Mode_Up always|home|absent|off</strong> - When will a shutter be driven up:
|
||||||
<ul>
|
<ul>
|
||||||
<li>always - <abbr>ASC</abbr> will drive always. Default value.</li>
|
<li>always - <abbr>ASC</abbr> will drive always. Default value.</li>
|
||||||
@ -454,78 +492,105 @@ sub Initialize {
|
|||||||
operate the shutter.</li>
|
operate the shutter.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Open_Pos"></a>
|
||||||
<li><strong>ASC_Open_Pos</strong> - The opening position value from 0 to 100 percent in increments of 10.
|
<li><strong>ASC_Open_Pos</strong> - The opening position value from 0 to 100 percent in increments of 10.
|
||||||
(Default: dependent on attribut<em>ASC</em> 0/100).
|
(Default: dependent on attribut<em>ASC</em> 0/100).
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Sleep_Pos"></a>
|
||||||
<li><strong>ASC_Sleep_Pos</strong> - The opening position value from 0 to 100 percent in increments of 10.
|
<li><strong>ASC_Sleep_Pos</strong> - The opening position value from 0 to 100 percent in increments of 10.
|
||||||
(Default: dependent on attribut<em>ASC</em> 75/25).
|
(Default: dependent on attribut<em>ASC</em> 75/25).
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Partymode"></a>
|
||||||
<li><strong>ASC_Partymode on|off</strong> - Party mode. If configured to on, driving orders for the
|
<li><strong>ASC_Partymode on|off</strong> - Party mode. If configured to on, driving orders for the
|
||||||
shutter by <abbr>ASC</abbr> will be queued if <em>partyMode</em> is set to <em>on</em> at the
|
shutter by <abbr>ASC</abbr> will be queued if <em>partyMode</em> is set to <em>on</em> at the
|
||||||
global <abbr>ASC</abbr> device. Will execute the driving orders after <em>partyMode</em> is disabled.
|
global <abbr>ASC</abbr> device. Will execute the driving orders after <em>partyMode</em> is disabled.
|
||||||
Defaults to off.
|
Defaults to off.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Pos_Reading"></a>
|
||||||
<li><strong>ASC_Pos_Reading</strong> - Points to the reading name, which contains the current
|
<li><strong>ASC_Pos_Reading</strong> - Points to the reading name, which contains the current
|
||||||
position for the shutter in percent. Will be used for <em>set</em> at devices of unknown kind.
|
position for the shutter in percent. Will be used for <em>set</em> at devices of unknown kind.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_PrivacyDownValue_beforeNightClose"></a>
|
||||||
<li><strong>ASC_PrivacyDownValue_beforeNightClose</strong> - How many seconds is the privacy mode activated
|
<li><strong>ASC_PrivacyDownValue_beforeNightClose</strong> - How many seconds is the privacy mode activated
|
||||||
before the shutter is closed in the evening. For Brightness, in addition to the time value,
|
before the shutter is closed in the evening. For Brightness, in addition to the time value,
|
||||||
the Brightness value must also be specified. 1800:300 means 30 min before night close or above a brightness
|
the Brightness value must also be specified. 1800:300 means 30 min before night close or above a brightness
|
||||||
value of 300. -1 is the default
|
value of 300. -1 is the default
|
||||||
value.
|
value.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_PrivacyDown_Pos"></a>
|
||||||
<li><strong>ASC_PrivacyDown_Pos</strong> -
|
<li><strong>ASC_PrivacyDown_Pos</strong> -
|
||||||
Position in percent for privacy mode, defaults to 50.
|
Position in percent for privacy mode, defaults to 50.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_PrivacyUpValue_beforeDayOpen"></a>
|
||||||
<li><strong>ASC_PrivacyUpValue_beforeDayOpen</strong> - How many seconds is the privacy mode activated
|
<li><strong>ASC_PrivacyUpValue_beforeDayOpen</strong> - How many seconds is the privacy mode activated
|
||||||
before the shutter is open in the morning. For Brightness, in addition to the time value,
|
before the shutter is open in the morning. For Brightness, in addition to the time value,
|
||||||
the Brightness value must also be specified. 1800:600 means 30 min before day open or above a brightness
|
the Brightness value must also be specified. 1800:600 means 30 min before day open or above a brightness
|
||||||
value of 600. -1 is the default
|
value of 600. -1 is the default
|
||||||
value.
|
value.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_PrivacyUp_Pos"></a>
|
||||||
<li><strong>ASC_PrivacyUp_Pos</strong> -
|
<li><strong>ASC_PrivacyUp_Pos</strong> -
|
||||||
Position in percent for privacy mode, defaults to 50.
|
Position in percent for privacy mode, defaults to 50.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_ExternalTrigger"></a>
|
||||||
|
<li><strong>ASC_ExternalTrigger</strong> - DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:[POSINACTIVE VALUEACTIVE2:POSACTIVE2], example: setting to "WohnzimmerTV:state on:off 66:100" will cause a "state:on" event to drive the shutter to position 66. "state:off" event will set it to position 100. If no POSINACTIVE is set, <i>LastStatus</i> position will be used as target position.</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_WindProtection"></a>
|
||||||
<li><strong>ASC_WindProtection on|off</strong> - Shutter is protected by the wind protection. Defaults
|
<li><strong>ASC_WindProtection on|off</strong> - Shutter is protected by the wind protection. Defaults
|
||||||
to off.
|
to off.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_RainProtection"></a>
|
||||||
<li><strong>ASC_RainProtection on|off</strong> - Shutter is protected by the rain protection. Defaults
|
<li><strong>ASC_RainProtection on|off</strong> - Shutter is protected by the rain protection. Defaults
|
||||||
to off.
|
to off.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Roommate_Device"></a>
|
||||||
<li><strong>ASC_Roommate_Device</strong> - Comma separated list of <em>ROOMMATE</em> devices, representing
|
<li><strong>ASC_Roommate_Device</strong> - Comma separated list of <em>ROOMMATE</em> devices, representing
|
||||||
the inhabitants of the room to which the shutter belongs. Especially useful for bedrooms. Defaults
|
the inhabitants of the room to which the shutter belongs. Especially useful for bedrooms. Defaults
|
||||||
to none.
|
to none.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Roommate_Reading"></a>
|
||||||
<li><strong>ASC_Roommate_Reading</strong> - Specifies a reading name to <em>ASC_Roommate_Device</em>.
|
<li><strong>ASC_Roommate_Reading</strong> - Specifies a reading name to <em>ASC_Roommate_Device</em>.
|
||||||
Defaults to <em>state</em>.
|
Defaults to <em>state</em>.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_GuestRoom"></a>
|
||||||
|
<li><strong>ASC_GuestRoom on|off</strong> - (not functionality implemented yet?).
|
||||||
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Adv"></a>
|
||||||
|
<li><strong>ASC_Adv - on/off</strong> If on, from 1. advent to 6. January all closing commands will be delayed until <i>set ASCDEVICE advDriveDown</i> is issued.</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Self_Defense_Mode"></a>
|
||||||
<li><strong>ASC_Self_Defense_Mode - absent/gone/off</strong> - which Residents status Self Defense should become
|
<li><strong>ASC_Self_Defense_Mode - absent/gone/off</strong> - which Residents status Self Defense should become
|
||||||
active without the window being open. (default: gone) off exclude from self defense
|
active without the window being open. (default: gone) off exclude from self defense
|
||||||
</li>
|
</li>
|
||||||
<li><strong>ASC_Self_Defense_AbsentDelay</strong> - um wie viele Sekunden soll das fahren in Selfdefense bei
|
<a id="AutoShuttersControl-attr-ASC_Self_Defense_AbsentDelay"></a>
|
||||||
Residents absent verzögert werden. (default: 300)
|
<li><strong>ASC_Self_Defense_AbsentDelay</strong> - time in seconds to wait after Residents went gone. (default: 300)
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_ShuttersPlace"></a>
|
||||||
<li><strong>ASC_ShuttersPlace window|terrace</strong> - If set to <em>terrace</em>, and the
|
<li><strong>ASC_ShuttersPlace window|terrace</strong> - If set to <em>terrace</em>, and the
|
||||||
residents device is set to <em>gone</em>, and <em>selfDefense</em> is activated, the shutter will
|
residents device is set to <em>gone</em>, and <em>selfDefense</em> is activated, the shutter will
|
||||||
be closed. If set to window, will not. Defaults to window.
|
be closed. If set to window, will not. Defaults to window.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Time_Down_Early"></a>
|
||||||
<li><strong>ASC_Time_Down_Early</strong> - Will not drive before time is <em>ASC_Time_Down_Early</em>
|
<li><strong>ASC_Time_Down_Early</strong> - Will not drive before time is <em>ASC_Time_Down_Early</em>
|
||||||
or later, even the sunset occurs earlier. To be set in military time. Defaults to 16:00.
|
or later, even the sunset occurs earlier. To be set in military time. Defaults to 16:00.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Time_Down_Late"></a>
|
||||||
<li><strong>ASC_Time_Down_Late</strong> - Will not drive after time is <em>ASC_Time_Down_Late</em>
|
<li><strong>ASC_Time_Down_Late</strong> - Will not drive after time is <em>ASC_Time_Down_Late</em>
|
||||||
or earlier, even the sunset occurs later. To be set in military time. Defaults to 22:00.
|
or earlier, even the sunset occurs later. To be set in military time. Defaults to 22:00.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Time_Up_Early"></a>
|
||||||
<li><strong>ASC_Time_Up_Early</strong> - Will not drive before time is <em>ASC_Time_Up_Early</em>
|
<li><strong>ASC_Time_Up_Early</strong> - Will not drive before time is <em>ASC_Time_Up_Early</em>
|
||||||
or earlier, even the sunrise occurs earlier. To be set in military time. Defaults to 05:00.
|
or earlier, even the sunrise occurs earlier. To be set in military time. Defaults to 05:00.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Time_Up_Late"></a>
|
||||||
<li><strong>ASC_Time_Up_Late</strong> - Will not drive after time is <em>ASC_Time_Up_Late</em>
|
<li><strong>ASC_Time_Up_Late</strong> - Will not drive after time is <em>ASC_Time_Up_Late</em>
|
||||||
or earlier, even the sunrise occurs later. To be set in military time. Defaults to 08:30.
|
or earlier, even the sunrise occurs later. To be set in military time. Defaults to 08:30.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Time_Up_WE_Holiday"></a>
|
||||||
<li><strong>ASC_Time_Up_WE_Holiday</strong> - Will not drive before time is <em>ASC_Time_Up_WE_Holiday</em>
|
<li><strong>ASC_Time_Up_WE_Holiday</strong> - Will not drive before time is <em>ASC_Time_Up_WE_Holiday</em>
|
||||||
on weekends and holidays (<em>holiday2we</em> is considered). Defaults to 08:00. <strong>Warning!</strong>
|
on weekends and holidays (<em>holiday2we</em> is considered). Defaults to 08:00. <strong>Warning!</strong>
|
||||||
If <em>ASC_Up</em> set to <em>brightness</em>, the time for <em>ASC_Time_Up_WE_Holiday</em>
|
If <em>ASC_Up</em> set to <em>brightness</em>, the time for <em>ASC_Time_Up_WE_Holiday</em>
|
||||||
must be earlier then <em>ASC_Time_Up_Late</em>.
|
must be earlier then <em>ASC_Time_Up_Late</em>.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Up"></a>
|
||||||
<li><strong>ASC_Up astro|time|brightness|roommate</strong> - Drive the shutter depending on this setting:
|
<li><strong>ASC_Up astro|time|brightness|roommate</strong> - Drive the shutter depending on this setting:
|
||||||
<ul>
|
<ul>
|
||||||
<li>astro - drive up at sunrise</li>
|
<li>astro - drive up at sunrise</li>
|
||||||
@ -536,24 +601,30 @@ sub Initialize {
|
|||||||
</ul>
|
</ul>
|
||||||
Defaults to <em>astro</em>.
|
Defaults to <em>astro</em>.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Ventilate_Pos"></a>
|
||||||
<li><strong>ASC_Ventilate_Pos</strong> - The opening position value for ventilation
|
<li><strong>ASC_Ventilate_Pos</strong> - The opening position value for ventilation
|
||||||
from 0 to 100 percent in increments of 10. (Default: dependent on attribut<em>ASC</em> 70/30).
|
from 0 to 100 percent in increments of 10. (Default: dependent on attribut<em>ASC</em> 70/30).
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Ventilate_Window_Open"></a>
|
||||||
<li><strong>ASC_Ventilate_Window_Open on|off</strong> - Drive to ventilation position as window is opened
|
<li><strong>ASC_Ventilate_Window_Open on|off</strong> - Drive to ventilation position as window is opened
|
||||||
or tilted, even when the current shutter position is lower than the <em>ASC_Ventilate_Pos</em>.
|
or tilted, even when the current shutter position is lower than the <em>ASC_Ventilate_Pos</em>.
|
||||||
Defaults to on.
|
Defaults to on.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_WiggleValue"></a>
|
||||||
<li><strong>ASC_WiggleValue</strong> - How many percent should the shutter be driven if a wiggle drive
|
<li><strong>ASC_WiggleValue</strong> - How many percent should the shutter be driven if a wiggle drive
|
||||||
is operated. Defaults to 5.
|
is operated. Defaults to 5.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_WindParameters"></a>
|
||||||
<li><strong>ASC_WindParameters THRESHOLD-ON[:THRESHOLD-OFF] [DRIVEPOSITION]</strong> -
|
<li><strong>ASC_WindParameters THRESHOLD-ON[:THRESHOLD-OFF] [DRIVEPOSITION]</strong> -
|
||||||
Threshold for when the shutter is driven to the wind protection position. Optional
|
Threshold for when the shutter is driven to the wind protection position. Optional
|
||||||
<em>THRESHOLD-OFF</em> sets the complementary value when the wind protection is disabled. Disabled
|
<em>THRESHOLD-OFF</em> sets the complementary value when the wind protection is disabled. Disabled
|
||||||
if <em>THRESHOLD-ON</em> is set to -1. Defaults to <q>50:20 <em>ASC_Closed_Pos</em></q>.
|
if <em>THRESHOLD-ON</em> is set to -1. Defaults to <q>50:20 <em>ASC_Closed_Pos</em></q>.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_WindowRec"></a>
|
||||||
<li><strong>ASC_WindowRec</strong> - WINDOWREC:[READING], Points to the window contact device, associated with the shutter.
|
<li><strong>ASC_WindowRec</strong> - WINDOWREC:[READING], Points to the window contact device, associated with the shutter.
|
||||||
Defaults to none. Reading is optional
|
Defaults to none. Reading is optional
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_WindowRec_subType"></a>
|
||||||
<li><strong>ASC_WindowRec_subType</strong> - Model type of the used <em>ASC_WindowRec</em>:
|
<li><strong>ASC_WindowRec_subType</strong> - Model type of the used <em>ASC_WindowRec</em>:
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>twostate</strong> - optical or magnetical sensors with two states: opened or closed</li>
|
<li><strong>twostate</strong> - optical or magnetical sensors with two states: opened or closed</li>
|
||||||
@ -561,6 +632,22 @@ sub Initialize {
|
|||||||
</ul>
|
</ul>
|
||||||
Defaults to twostate.
|
Defaults to twostate.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_SlatPosCmd_SlatDevice"></a>
|
||||||
|
<li><strong>ASC_SlatPosCmd_SlatDevice</strong> - If your shutter is "venetian blind" type (with turnable slats, lamellas or similar), this is the place to set additional command and/or device info to control the slat level. Examples: <i>attr ROLLO ASC_SlatPosCmd_SlatDevice slatPct</i> or <i>attr ROLLO ASC_SlatPosCmd_SlatDevice dim:ROLLOSLATDEVICE</i>. Providing a device name for the slat device is only needed in case it's different to the shutter itself. If attribute is set, additional positioning values for the respective slat levels can be set in attributes <i>ASC_Open_Pos</i>, <i>ASC_Closed_Pos</i>, <i>ASC_Ventilate_Pos</i>, <i>ASC_ComfortOpen_Pos</i>, <i>ASC_Shading_Pos</i> and <i>ASC_Sleep_Pos</i>.</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_CommandTemplate"></a>
|
||||||
|
<li><strong>ASC_CommandTemplate</strong> - <strong>FHEM or Perl command</strong> (Perl in braces as usual needs escaping semicolons etc.).<br>
|
||||||
|
This optional attribute will override the internally determined command to drive this shutter. Setting it, is only recommended in <strong>some rare and special cases,</strong>, in most cases there's <strong>no need</strong> to set this attribute!
|
||||||
|
The parameters <i>$name</i> (name of the shutter device), <i>$pos</i> (target position for the respective drive command), <i>$slatPos</i> (target position for the (turnable) lammellas in venetion blinds) and <i>$cause</i> (internal label for the cause of the driving command) will be replaced by the appropirate values. You may have to take care to avoid unneeded driving commands.
|
||||||
|
Examples:
|
||||||
|
<ul>
|
||||||
|
<li><i>attr ROLLO ASC_CommandTemplate set $name $pos</i> - Address the position command directly to the main switch of the device</li>
|
||||||
|
<li><i>attr ROLLO ASC_CommandTemplate set $name pct $pos</i> - Address the setter <i>pct</i> for positioning commands</li>
|
||||||
|
<li><i>attr ROLLO ASC_CommandTemplate set $name datapoint 4.LEVEL_2 $slatPos 4.LEVEL $pos</i> - combined positioning command, e.g. appropriate for HM-IP-venetian blind type actors</li>
|
||||||
|
<li><i>attr ROLLO ASC_CommandTemplate { fhem("set $name ".($pos+1024)).";set $name 0")}</i> - positioning command with Perl calculation and additional "execute" command, e.g. for an SPS type blind</li>
|
||||||
|
<li><i>attr ROLLO ASC_CommandTemplate { myPerlFn("$name",$pos,$slatPos,"$cause")}</i> - call own Perl function (e.g. from 99_myUtils.pm)</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_WindowRec_PosAfterDayClosed"></a>
|
||||||
<li><strong>ASC_WindowRec_PosAfterDayClosed</strong> - open,lastManual / auf welche Position soll das Rollo nach dem schließen am Tag fahren. Open Position oder letzte gespeicherte manuelle Position (default: open)</li>
|
<li><strong>ASC_WindowRec_PosAfterDayClosed</strong> - open,lastManual / auf welche Position soll das Rollo nach dem schließen am Tag fahren. Open Position oder letzte gespeicherte manuelle Position (default: open)</li>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>
|
<p>
|
||||||
@ -571,7 +658,7 @@ sub Initialize {
|
|||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
The <em>controlShading</em> reading is set to on, and there is a device
|
The <em>controlShading</em> reading is set to on, and there is a device
|
||||||
of type Astro or Twilight configured to <em>ASC_twilightDevice</em>, and <em>ASC_tempSensor</em>
|
of type Astro or Twilight configured to <em>ASC_twilightDevice</em>, and <em>ASC_TempSensor</em>
|
||||||
is set.
|
is set.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
@ -588,34 +675,45 @@ sub Initialize {
|
|||||||
The following attributes are available:
|
The following attributes are available:
|
||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_InOutAzimuth"></a>
|
||||||
<li><strong>ASC_Shading_InOutAzimuth</strong> - Azimuth value from which shading is to be used when shading is exceeded and shading when undershooting is required.
|
<li><strong>ASC_Shading_InOutAzimuth</strong> - Azimuth value from which shading is to be used when shading is exceeded and shading when undershooting is required.
|
||||||
Defaults to 95:265.
|
Defaults to 95:265.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_MinMax_Elevation"></a>
|
||||||
<li><strong>ASC_Shading_MinMax_Elevation</strong> - Shading starts as min point of sun elevation is
|
<li><strong>ASC_Shading_MinMax_Elevation</strong> - Shading starts as min point of sun elevation is
|
||||||
reached and end as max point of sun elevation is reached, depending also on other sensor values. Defaults to 25.0:100.0.
|
reached and end as max point of sun elevation is reached, depending also on other sensor values. Defaults to 25.0:100.0.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_Min_OutsideTemperature"></a>
|
||||||
<li><strong>ASC_Shading_Min_OutsideTemperature</strong> - Shading starts at this outdoor temperature,
|
<li><strong>ASC_Shading_Min_OutsideTemperature</strong> - Shading starts at this outdoor temperature,
|
||||||
depending also on other sensor values. Defaults to 18.0.
|
depending also on other sensor values. Defaults to 18.0.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_Mode"></a>
|
||||||
<li><strong>ASC_Shading_Mode absent|always|off|home</strong> - see <em>ASC_Mode_Down</em> above,
|
<li><strong>ASC_Shading_Mode absent|always|off|home</strong> - see <em>ASC_Mode_Down</em> above,
|
||||||
but for shading. Defaults to off.
|
but for shading. Defaults to off.
|
||||||
</li>
|
</li>
|
||||||
<li><strong>ASC_Shading_Pos</strong> - Shading position in percent. (Default: dependent on attribut<em>ASC</em> 85/15)</li>
|
<a id="AutoShuttersControl-attr-ASC_Shading_Pos"></a>
|
||||||
|
<li><strong>ASC_Shading_Pos</strong> - Shading position in percent. (Default: dependent on attribute <em>ASC</em> 85/15)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_StateChange_Cloudy"></a>
|
||||||
<li><strong>ASC_Shading_StateChange_Cloudy</strong> - Shading <strong>ends</strong> at this
|
<li><strong>ASC_Shading_StateChange_Cloudy</strong> - Shading <strong>ends</strong> at this
|
||||||
outdoor brightness, depending also on other sensor values. Defaults to 20000.
|
outdoor brightness, depending also on other sensor values. Defaults to 20000.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_StateChange_SunnyCloudy"></a>
|
||||||
<li><strong>ASC_Shading_StateChange_SunnyCloudy</strong> - Shading <strong>starts/stops</strong> at this
|
<li><strong>ASC_Shading_StateChange_SunnyCloudy</strong> - Shading <strong>starts/stops</strong> at this
|
||||||
outdoor brightness, depending also on other sensor values. An optional parameter specifies how many successive brightness reading values should be used to average the brightness value. Defaults to 35000:20000 [3].
|
outdoor brightness, depending also on other sensor values. An optional parameter specifies how many successive brightness reading values should be used to average the brightness value. Defaults to 35000:20000 [3].
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_WaitingPeriod"></a>
|
||||||
<li><strong>ASC_Shading_WaitingPeriod</strong> - Waiting time in seconds before additional sensor values
|
<li><strong>ASC_Shading_WaitingPeriod</strong> - Waiting time in seconds before additional sensor values
|
||||||
to <em>ASC_Shading_StateChange_Sunny</em> or <em>ASC_Shading_StateChange_Cloudy</em>
|
to <em>ASC_Shading_StateChange_Sunny</em> or <em>ASC_Shading_StateChange_Cloudy</em>
|
||||||
are used for shading. Defaults to 120.
|
are used for shading. Defaults to 120.
|
||||||
</li>
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_BetweenTheTime"></a>
|
||||||
|
<li><strong>ASC_Shading_BetweenTheTime</strong> - Limit the time slots for shading functionality. Example: 9:00-13:00 11:25-15:30</li>
|
||||||
</ul>
|
</ul>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
<p>
|
<p>
|
||||||
|
<a id="AutoShuttersControl-API"></a>
|
||||||
<strong><u>AutoShuttersControl <abbr>API</abbr> description</u></strong>
|
<strong><u>AutoShuttersControl <abbr>API</abbr> description</u></strong>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
@ -778,7 +876,7 @@ sub Initialize {
|
|||||||
|
|
||||||
=begin html_DE
|
=begin html_DE
|
||||||
|
|
||||||
<a name="AutoShuttersControl"></a>
|
<a id="AutoShuttersControl"></a>
|
||||||
<h3>AutoShuttersControl</h3>
|
<h3>AutoShuttersControl</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<p>AutoShuttersControl (ASC) ermöglicht eine vollständige Automatisierung der vorhandenen Rollläden. Das Modul bietet umfangreiche Konfigurationsmöglichkeiten, um Rollläden bspw. nach Sonnenauf- und untergangszeiten, nach Helligkeitswerten oder rein zeitgesteuert zu steuern.
|
<p>AutoShuttersControl (ASC) ermöglicht eine vollständige Automatisierung der vorhandenen Rollläden. Das Modul bietet umfangreiche Konfigurationsmöglichkeiten, um Rollläden bspw. nach Sonnenauf- und untergangszeiten, nach Helligkeitswerten oder rein zeitgesteuert zu steuern.
|
||||||
@ -787,7 +885,7 @@ sub Initialize {
|
|||||||
<p>
|
<p>
|
||||||
Man kann festlegen, welche Rollläden von ASC in die Automatisierung mit aufgenommen werden sollen. Daraufhin stehen diverse Attribute zur Feinkonfiguration zur Verfügung. So sind unter anderem komplexe Lösungen wie Fahrten in Abhängigkeit des Bewohnerstatus einfach umsetzbar. Beispiel: Hochfahren von Rollläden, wenn der Bewohner erwacht ist und draußen bereits die Sonne aufgegangen ist. Weiterhin ist es möglich, dass der geschlossene Rollladen z.B. nach dem Ankippen eines Fensters in eine Lüftungsposition fährt. Und vieles mehr.
|
Man kann festlegen, welche Rollläden von ASC in die Automatisierung mit aufgenommen werden sollen. Daraufhin stehen diverse Attribute zur Feinkonfiguration zur Verfügung. So sind unter anderem komplexe Lösungen wie Fahrten in Abhängigkeit des Bewohnerstatus einfach umsetzbar. Beispiel: Hochfahren von Rollläden, wenn der Bewohner erwacht ist und draußen bereits die Sonne aufgegangen ist. Weiterhin ist es möglich, dass der geschlossene Rollladen z.B. nach dem Ankippen eines Fensters in eine Lüftungsposition fährt. Und vieles mehr.
|
||||||
</p>
|
</p>
|
||||||
<a name="AutoShuttersControlDefine"></a>
|
<a id="AutoShuttersControl-define"></a>
|
||||||
<strong>Define</strong>
|
<strong>Define</strong>
|
||||||
<ul>
|
<ul>
|
||||||
<code>define <name> AutoShuttersControl</code>
|
<code>define <name> AutoShuttersControl</code>
|
||||||
@ -805,7 +903,7 @@ sub Initialize {
|
|||||||
Habt Ihr das Attribut gesetzt, könnt Ihr den automatischen Scan nach den Devices anstoßen.
|
Habt Ihr das Attribut gesetzt, könnt Ihr den automatischen Scan nach den Devices anstoßen.
|
||||||
</ul>
|
</ul>
|
||||||
<br />
|
<br />
|
||||||
<a name="AutoShuttersControlReadings"></a>
|
<a id="AutoShuttersControl-Readings"></a>
|
||||||
<strong>Readings</strong>
|
<strong>Readings</strong>
|
||||||
<ul>
|
<ul>
|
||||||
<u>Im ASC-Device</u>
|
<u>Im ASC-Device</u>
|
||||||
@ -836,97 +934,131 @@ sub Initialize {
|
|||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
<br /><br />
|
<br /><br />
|
||||||
<a name="AutoShuttersControlSet"></a>
|
<a id="AutoShuttersControl-set"></a>
|
||||||
<strong>Set</strong>
|
<strong>Set</strong>
|
||||||
<ul>
|
<ul>
|
||||||
|
<a id="AutoShuttersControl-set-advDriveDown"></a>
|
||||||
<li><strong>advDriveDown</strong> - holt bei allen Rollläden durch ASC_Adv on ausgesetzte Fahrten nach.</li>
|
<li><strong>advDriveDown</strong> - holt bei allen Rollläden durch ASC_Adv on ausgesetzte Fahrten nach.</li>
|
||||||
|
<a id="AutoShuttersControl-set-ascEnable"></a>
|
||||||
<li><strong>ascEnable - on/off</strong> - Aktivieren oder deaktivieren der globalen ASC Steuerung</li>
|
<li><strong>ascEnable - on/off</strong> - Aktivieren oder deaktivieren der globalen ASC Steuerung</li>
|
||||||
|
<a id="AutoShuttersControl-set-controlShading"></a>
|
||||||
<li><strong>controlShading - on/off</strong> - Aktiviert oder deaktiviert die globale Beschattungssteuerung</li>
|
<li><strong>controlShading - on/off</strong> - Aktiviert oder deaktiviert die globale Beschattungssteuerung</li>
|
||||||
|
<a id="AutoShuttersControl-set-createNewNotifyDev"></a>
|
||||||
<li><strong>createNewNotifyDev</strong> - Legt die interne Struktur für NOTIFYDEV neu an. Diese Funktion steht nur zur Verfügung, wenn Attribut ASC_expert auf 1 gesetzt ist.</li>
|
<li><strong>createNewNotifyDev</strong> - Legt die interne Struktur für NOTIFYDEV neu an. Diese Funktion steht nur zur Verfügung, wenn Attribut ASC_expert auf 1 gesetzt ist.</li>
|
||||||
|
<a id="AutoShuttersControl-set-hardLockOut"></a>
|
||||||
<li><strong>hardLockOut - on/off</strong> - Aktiviert den hardwareseitigen Aussperrschutz für die Rollläden, bei denen das Attributs <em>ASC_LockOut</em> entsprechend auf hard gesetzt ist. Mehr Informationen in der Beschreibung bei den Attributen für die Rollladengeräten.</li>
|
<li><strong>hardLockOut - on/off</strong> - Aktiviert den hardwareseitigen Aussperrschutz für die Rollläden, bei denen das Attributs <em>ASC_LockOut</em> entsprechend auf hard gesetzt ist. Mehr Informationen in der Beschreibung bei den Attributen für die Rollladengeräten.</li>
|
||||||
|
<a id="AutoShuttersControl-set-partyMode"></a>
|
||||||
<li><strong>partyMode - on/off</strong> - Aktiviert den globalen Partymodus. Alle Rollladen-Geräten, in welchen das Attribut <em>ASC_Partymode</em> auf <em>on</em> gesetzt ist, werden durch ASC nicht mehr gesteuert. Der letzte Schaltbefehl, der bspw. durch ein Fensterevent oder Wechsel des Bewohnerstatus an die Rollläden gesendet wurde, wird beim Deaktivieren des Partymodus ausgeführt</li>
|
<li><strong>partyMode - on/off</strong> - Aktiviert den globalen Partymodus. Alle Rollladen-Geräten, in welchen das Attribut <em>ASC_Partymode</em> auf <em>on</em> gesetzt ist, werden durch ASC nicht mehr gesteuert. Der letzte Schaltbefehl, der bspw. durch ein Fensterevent oder Wechsel des Bewohnerstatus an die Rollläden gesendet wurde, wird beim Deaktivieren des Partymodus ausgeführt</li>
|
||||||
|
<a id="AutoShuttersControl-set-renewTimer"></a>
|
||||||
<li><strong>renewTimer</strong> - erneuert beim ausgewählten Rollladen die Zeiten für Sonnenauf- und -untergang und setzt die internen Timer neu.</li>
|
<li><strong>renewTimer</strong> - erneuert beim ausgewählten Rollladen die Zeiten für Sonnenauf- und -untergang und setzt die internen Timer neu.</li>
|
||||||
|
<a id="AutoShuttersControl-set-renewAllTimer"></a>
|
||||||
<li><strong>renewAllTimer</strong> - erneuert bei allen Rollläden die Zeiten für Sonnenauf- und -untergang und setzt die internen Timer neu.</li>
|
<li><strong>renewAllTimer</strong> - erneuert bei allen Rollläden die Zeiten für Sonnenauf- und -untergang und setzt die internen Timer neu.</li>
|
||||||
|
<a id="AutoShuttersControl-set-scanForShutters"></a>
|
||||||
<li><strong>scanForShutters</strong> - Durchsucht das System nach GerätenRo mit dem Attribut <em>ASC = 1</em> oder <em>ASC = 2</em></li>
|
<li><strong>scanForShutters</strong> - Durchsucht das System nach GerätenRo mit dem Attribut <em>ASC = 1</em> oder <em>ASC = 2</em></li>
|
||||||
|
<a id="AutoShuttersControl-set-selfDefense"></a>
|
||||||
<li><strong>selfDefense - on/off</strong> - Aktiviert bzw. deaktiviert die Selbstschutzfunktion. Beispiel: Wenn das Residents-Gerät <em>absent</em> meldet, die Selbstschutzfunktion aktiviert wurde und ein Fenster im Haus noch geöffnet ist, so wird an diesem Fenster der Rollladen deaktivieren dann heruntergefahren.</li>
|
<li><strong>selfDefense - on/off</strong> - Aktiviert bzw. deaktiviert die Selbstschutzfunktion. Beispiel: Wenn das Residents-Gerät <em>absent</em> meldet, die Selbstschutzfunktion aktiviert wurde und ein Fenster im Haus noch geöffnet ist, so wird an diesem Fenster der Rollladen deaktivieren dann heruntergefahren.</li>
|
||||||
|
<a id="AutoShuttersControl-set-shutterASCenableToggle"></a>
|
||||||
<li><strong>shutterASCenableToggle - on/off</strong> - Aktivieren oder deaktivieren der ASC Kontrolle beim einzelnen Rollladens</li>
|
<li><strong>shutterASCenableToggle - on/off</strong> - Aktivieren oder deaktivieren der ASC Kontrolle beim einzelnen Rollladens</li>
|
||||||
|
<a id="AutoShuttersControl-set-sunriseTimeWeHoliday"></a>
|
||||||
<li><strong>sunriseTimeWeHoliday - on/off</strong> - Aktiviert die Wochenendunterstützung und somit, ob im Rollladengerät das Attribut <em>ASC_Time_Up_WE_Holiday</em> beachtet werden soll oder nicht.</li>
|
<li><strong>sunriseTimeWeHoliday - on/off</strong> - Aktiviert die Wochenendunterstützung und somit, ob im Rollladengerät das Attribut <em>ASC_Time_Up_WE_Holiday</em> beachtet werden soll oder nicht.</li>
|
||||||
|
<a id="AutoShuttersControl-set-wiggle"></a>
|
||||||
<li><strong>wiggle</strong> - bewegt einen oder mehrere Rollläden um einen definierten Wert (Default: 5%) und nach einer Minute wieder zurück in die Ursprungsposition. Diese Funktion könnte bspw. zur Abschreckung in einem Alarmsystem eingesetzt werden.</li>
|
<li><strong>wiggle</strong> - bewegt einen oder mehrere Rollläden um einen definierten Wert (Default: 5%) und nach einer Minute wieder zurück in die Ursprungsposition. Diese Funktion könnte bspw. zur Abschreckung in einem Alarmsystem eingesetzt werden.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br /><br />
|
<br /><br />
|
||||||
<a name="AutoShuttersControlGet"></a>
|
<a id="AutoShuttersControl-get"></a>
|
||||||
<strong>Get</strong>
|
<strong>Get</strong>
|
||||||
<ul>
|
<ul>
|
||||||
|
<a id="AutoShuttersControl-get-showNotifyDevsInformations"></a>
|
||||||
<li><strong>showNotifyDevsInformations</strong> - zeigt eine Übersicht der abgelegten NOTIFYDEV Struktur. Diese Funktion wird primär fürs Debugging genutzt. Hierzu ist das Attribut <em>ASC_expert = 1</em> zu setzen.</li>
|
<li><strong>showNotifyDevsInformations</strong> - zeigt eine Übersicht der abgelegten NOTIFYDEV Struktur. Diese Funktion wird primär fürs Debugging genutzt. Hierzu ist das Attribut <em>ASC_expert = 1</em> zu setzen.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br /><br />
|
<br /><br />
|
||||||
<a name="AutoShuttersControlAttributes"></a>
|
<a id="AutoShuttersControl-attr"></a>
|
||||||
<strong>Attributes</strong>
|
<strong>Attributes</strong>
|
||||||
<ul>
|
<ul>
|
||||||
<u>Im ASC-Device</u>
|
<u>Im ASC-Device</u>
|
||||||
<ul>
|
<ul>
|
||||||
<a name="ASC_autoAstroModeEvening"></a>
|
<a id="AutoShuttersControl-attr-ASC_autoAstroModeEvening"></a>
|
||||||
<li><strong>ASC_autoAstroModeEvening</strong> - REAL, CIVIL, NAUTIC, ASTRONOMIC oder HORIZON</li>
|
<li><strong>ASC_autoAstroModeEvening</strong> - REAL, CIVIL, NAUTIC, ASTRONOMIC oder HORIZON</li>
|
||||||
<a name="ASC_autoAstroModeEveningHorizon"></a>
|
<a id="AutoShuttersControl-attr-ASC_autoAstroModeEveningHorizon"></a>
|
||||||
<li><strong>ASC_autoAstroModeEveningHorizon</strong> - Höhe über dem Horizont. Wird nur berücksichtigt, wenn im Attribut <em>ASC_autoAstroModeEvening</em> der Wert <em>HORIZON</em> ausgewählt wurde. (default: 0)</li>
|
<li><strong>ASC_autoAstroModeEveningHorizon</strong> - Höhe über dem Horizont. Wird nur berücksichtigt, wenn im Attribut <em>ASC_autoAstroModeEvening</em> der Wert <em>HORIZON</em> ausgewählt wurde. (default: 0)</li>
|
||||||
<a name="ASC_autoAstroModeMorning"></a>
|
<a id="AutoShuttersControl-attr-ASC_autoAstroModeMorning"></a>
|
||||||
<li><strong>ASC_autoAstroModeMorning</strong> - REAL, CIVIL, NAUTIC, ASTRONOMIC oder HORIZON</li>
|
<li><strong>ASC_autoAstroModeMorning</strong> - REAL, CIVIL, NAUTIC, ASTRONOMIC oder HORIZON</li>
|
||||||
<a name="ASC_autoAstroModeMorningHorizon"></a>
|
<a id="AutoShuttersControl-attr-ASC_autoAstroModeMorningHorizon"></a>
|
||||||
<li><strong>ASC_autoAstroModeMorningHorizon</strong> - Höhe über dem Horizont. Wird nur berücksichtigt, wenn im Attribut <em>ASC_autoAstroModeMorning</em> der Wert <em>HORIZON</em> ausgewählt wurde. (default: 0)</li>
|
<li><strong>ASC_autoAstroModeMorningHorizon</strong> - Höhe über dem Horizont. Wird nur berücksichtigt, wenn im Attribut <em>ASC_autoAstroModeMorning</em> der Wert <em>HORIZON</em> ausgewählt wurde. (default: 0)</li>
|
||||||
<a name="ASC_autoShuttersControlComfort"></a>
|
<a id="AutoShuttersControl-attr-ASC_autoShuttersControlComfort"></a>
|
||||||
<li><strong>ASC_autoShuttersControlComfort - on/off</strong> - schaltet die Komfortfunktion an. Bedeutet, dass ein Rollladen mit einem threestate-Sensor am Fenster beim Öffnen in eine Offenposition fährt. Hierzu muss beim Rollladen das Attribut <em>ASC_ComfortOpen_Pos</em> entsprechend konfiguriert sein. (default: off)</li>
|
<li><strong>ASC_autoShuttersControlComfort - on/off</strong> - schaltet die Komfortfunktion an. Bedeutet, dass ein Rollladen mit einem threestate-Sensor am Fenster beim Öffnen in eine Offenposition fährt. Hierzu muss beim Rollladen das Attribut <em>ASC_ComfortOpen_Pos</em> entsprechend konfiguriert sein. (default: off)</li>
|
||||||
<a name="ASC_autoShuttersControlEvening"></a>
|
<a id="AutoShuttersControl-attr-ASC_autoShuttersControlEvening"></a>
|
||||||
<li><strong>ASC_autoShuttersControlEvening - on/off</strong> - Aktiviert die automatische Steuerung durch das ASC-Modul am Abend.</li>
|
<li><strong>ASC_autoShuttersControlEvening - on/off</strong> - Aktiviert die automatische Steuerung durch das ASC-Modul am Abend.</li>
|
||||||
<a name="ASC_autoShuttersControlMorning"></a>
|
<a id="AutoShuttersControl-attr-ASC_autoShuttersControlMorning"></a>
|
||||||
<li><strong>ASC_autoShuttersControlMorning - on/off</strong> - Aktiviert die automatische Steuerung durch das ASC-Modul am Morgen.</li>
|
<li><strong>ASC_autoShuttersControlMorning - on/off</strong> - Aktiviert die automatische Steuerung durch das ASC-Modul am Morgen.</li>
|
||||||
<a name="ASC_blockAscDrivesAfterManual"></a>
|
<a id="AutoShuttersControl-attr-ASC_blockAscDrivesAfterManual"></a>
|
||||||
<li><strong>ASC_blockAscDrivesAfterManual - 0,1</strong> - wenn dieser Wert auf 1 gesetzt ist, dann werden Rollläden vom ASC-Modul nicht mehr gesteuert, wenn zuvor manuell eingegriffen wurde. Voraussetzung hierfür ist jedoch, dass im Reading <em>ASC_ShuttersLastDrive</em> der Status <em>manual</em> enthalten ist und sich der Rollladen auf eine unbekannte (nicht in den Attributen anderweitig konfigurierte) Position befindet.</li>
|
<li><strong>ASC_blockAscDrivesAfterManual - 0,1</strong> - wenn dieser Wert auf 1 gesetzt ist, dann werden Rollläden vom ASC-Modul nicht mehr gesteuert, wenn zuvor manuell eingegriffen wurde. Voraussetzung hierfür ist jedoch, dass im Reading <em>ASC_ShuttersLastDrive</em> der Status <em>manual</em> enthalten ist und sich der Rollladen auf eine unbekannte (nicht in den Attributen anderweitig konfigurierte) Position befindet.</li>
|
||||||
<a name="ASC_brightnessDriveUpDown"></a>
|
<a id="AutoShuttersControl-attr-ASC_brightnessDriveUpDown"></a>
|
||||||
<li><strong>ASC_brightnessDriveUpDown - WERT-MORGENS:WERT-ABENDS</strong> - Werte bei dem Schaltbedingungen für Sonnenauf- und -untergang geprüft werden sollen. Diese globale Einstellung kann durch die WERT-MORGENS:WERT-ABENDS Einstellung von ASC_BrightnessSensor im Rollladen selbst überschrieben werden.</li>
|
<li><strong>ASC_brightnessDriveUpDown - WERT-MORGENS:WERT-ABENDS</strong> - Werte bei dem Schaltbedingungen für Sonnenauf- und -untergang geprüft werden sollen. Diese globale Einstellung kann durch die WERT-MORGENS:WERT-ABENDS Einstellung von ASC_BrightnessSensor im Rollladen selbst überschrieben werden.</li>
|
||||||
<a name="ASC_debug"></a>
|
<a id="AutoShuttersControl-attr-ASC_debug"></a>
|
||||||
<li><strong>ASC_debug</strong> - Aktiviert die erweiterte Logausgabe für Debugausgaben</li>
|
<li><strong>ASC_debug</strong> - Aktiviert die erweiterte Logausgabe für Debugausgaben</li>
|
||||||
<a name="ASC_expert"></a>
|
<a id="AutoShuttersControl-attr-ASC_expert"></a>
|
||||||
<li><strong>ASC_expert</strong> - ist der Wert 1, so werden erweiterte Informationen bezüglich des NotifyDevs unter set und get angezeigt</li>
|
<li><strong>ASC_expert</strong> - ist der Wert 1, so werden erweiterte Informationen bezüglich des NotifyDevs unter set und get angezeigt</li>
|
||||||
<a name="ASC_freezeTemp"></a>
|
<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ährt. Der letzte Fahrbefehl wird gespeichert.</li>
|
<li><strong>ASC_freezeTemp</strong> - Temperatur, ab welcher der Frostschutz greifen soll und der Rollladen nicht mehr fährt. Der letzte Fahrbefehl wird gespeichert.</li>
|
||||||
<a name="ASC_advDate"></a>
|
<a id="AutoShuttersControl-attr-ASC_advStartDate"></a>
|
||||||
<li><strong>ASC_advDate</strong> - Adventszeit, Auswahl ab wann die Adventszeit beginnen soll.</li>
|
<li><strong>ASC_advStartDate</strong> - Start der Adventszeit, Auswahl ab wann die Adventszeit beginnen soll. 1. Advent oder Totensonntag</li>
|
||||||
<a name="ASC_rainSensor"></a>
|
<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ächlich die aktion ausgeführt wird.</li>
|
<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ächlich die aktion ausgeführt wird.</li>
|
||||||
<a name="ASC_residentsDev"></a>
|
<a id="AutoShuttersControl-attr-ASC_residentsDev"></a>
|
||||||
<li><strong>ASC_residentsDev - DEVICENAME[:READINGNAME]</strong> - der Inhalt ist eine Kombination aus Devicenamen und Readingnamen des Residents-Device der obersten Ebene (z.B. rgr_Residents:state)</li>
|
<li><strong>ASC_residentsDev - DEVICENAME[:READINGNAME]</strong> - der Inhalt ist eine Kombination aus Devicenamen und Readingnamen des Residents-Device der obersten Ebene (z.B. rgr_Residents:state)</li>
|
||||||
<a name="ASC_shuttersDriveDelay"></a>
|
<a id="AutoShuttersControl-attr-ASC_shuttersDriveDelay"></a>
|
||||||
<li><strong>ASC_shuttersDriveDelay</strong> - maximale Zufallsverzögerung in Sekunden bei der Berechnung der Fahrzeiten. 0 bedeutet keine Verzögerung</li>
|
<li><strong>ASC_shuttersDriveDelay</strong> - maximale Zufallsverzögerung in Sekunden bei der Berechnung der Fahrzeiten. 0 bedeutet keine Verzögerung</li>
|
||||||
<a name="ASC_tempSensor"></a>
|
<a id="AutoShuttersControl-attr-ASC_TempSensor"></a>
|
||||||
<li><strong>ASC_tempSensor - DEVICENAME[:READINGNAME]</strong> - der Inhalt ist eine Kombination aus Device und Reading für die Außentemperatur</li>
|
<li><strong>ASC_TempSensor - DEVICENAME[:READINGNAME]</strong> - der Inhalt ist eine Kombination aus Device und Reading für die Außentemperatur</li>
|
||||||
<a name="ASC_twilightDevice"></a>
|
<a id="AutoShuttersControl-attr-ASC_twilightDevice"></a>
|
||||||
<li><strong>ASC_twilightDevice</strong> - das Device, welches die Informationen zum Sonnenstand liefert. Wird unter anderem für die Beschattung verwendet.</li>
|
<li><strong>ASC_twilightDevice</strong> - das Device, welches die Informationen zum Sonnenstand liefert. Wird unter anderem für die Beschattung verwendet.</li>
|
||||||
<a name="ASC_windSensor"></a>
|
<a id="AutoShuttersControl-attr-ASC_windSensor"></a>
|
||||||
<li><strong>ASC_windSensor - DEVICE[:READING]</strong> - Sensor für die Windgeschwindigkeit. Kombination aus Device und Reading.</li>
|
<li><strong>ASC_windSensor - DEVICE[:READING]</strong> - Sensor für die Windgeschwindigkeit. Kombination aus Device und Reading.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
<u> In den Rollläden-Geräten</u>
|
<u> In den Rollläden-Geräten</u>
|
||||||
<ul>
|
<ul>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC"></a>
|
||||||
<li><strong>ASC - 0/1/2</strong> 0 = "kein Anlegen der Attribute beim ersten Scan bzw. keine Beachtung eines Fahrbefehles",1 = "Inverse oder Rollo - Bsp.: Rollo oben 0, Rollo unten 100 und der Befehl zum prozentualen Fahren ist position",2 = "Homematic Style - Bsp.: Rollo oben 100, Rollo unten 0 und der Befehl zum prozentualen Fahren ist pct</li>
|
<li><strong>ASC - 0/1/2</strong> 0 = "kein Anlegen der Attribute beim ersten Scan bzw. keine Beachtung eines Fahrbefehles",1 = "Inverse oder Rollo - Bsp.: Rollo oben 0, Rollo unten 100 und der Befehl zum prozentualen Fahren ist position",2 = "Homematic Style - Bsp.: Rollo oben 100, Rollo unten 0 und der Befehl zum prozentualen Fahren ist pct</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Antifreeze"></a>
|
||||||
<li><strong>ASC_Antifreeze - soft/am/pm/hard/off</strong> - Frostschutz, wenn soft fährt der Rollladen in die ASC_Antifreeze_Pos und wenn hard/am/pm wird gar nicht oder innerhalb der entsprechenden Tageszeit nicht gefahren (default: off)</li>
|
<li><strong>ASC_Antifreeze - soft/am/pm/hard/off</strong> - Frostschutz, wenn soft fährt der Rollladen in die ASC_Antifreeze_Pos und wenn hard/am/pm wird gar nicht oder innerhalb der entsprechenden Tageszeit nicht gefahren (default: off)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Antifreeze_Pos"></a>
|
||||||
<li><strong>ASC_Antifreeze_Pos</strong> - Position die angefahren werden soll, wenn der Fahrbefehl komplett schließen lautet, aber der Frostschutz aktiv ist (Default: ist abhängig vom Attribut<em>ASC</em> 85/15) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
<li><strong>ASC_Antifreeze_Pos</strong> - Position die angefahren werden soll, wenn der Fahrbefehl komplett schließen lautet, aber der Frostschutz aktiv ist (Default: ist abhängig vom Attribut<em>ASC</em> 85/15) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_AutoAstroModeEvening"></a>
|
||||||
<li><strong>ASC_AutoAstroModeEvening</strong> - aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC (default: none)</li>
|
<li><strong>ASC_AutoAstroModeEvening</strong> - aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC (default: none)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_AutoAstroModeEveningHorizon"></a>
|
||||||
<li><strong>ASC_AutoAstroModeEveningHorizon</strong> - Höhe über Horizont, wenn beim Attribut ASC_autoAstroModeEvening HORIZON ausgewählt (default: none)</li>
|
<li><strong>ASC_AutoAstroModeEveningHorizon</strong> - Höhe über Horizont, wenn beim Attribut ASC_autoAstroModeEvening HORIZON ausgewählt (default: none)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_AutoAstroModeMorning"></a>
|
||||||
<li><strong>ASC_AutoAstroModeMorning</strong> - aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC (default: none)</li>
|
<li><strong>ASC_AutoAstroModeMorning</strong> - aktuell REAL,CIVIL,NAUTIC,ASTRONOMIC (default: none)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_AutoAstroModeMorningHorizon"></a>
|
||||||
<li><strong>ASC_AutoAstroModeMorningHorizon</strong> - Höhe über Horizont,a wenn beim Attribut ASC_autoAstroModeMorning HORIZON ausgewählt (default: none)</li>
|
<li><strong>ASC_AutoAstroModeMorningHorizon</strong> - Höhe über Horizont,a wenn beim Attribut ASC_autoAstroModeMorning HORIZON ausgewä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>
|
<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_beforDayOpen"></a>
|
||||||
<li><strong>ASC_BlockingTime_beforDayOpen</strong> - wie viel Sekunden vor dem morgendlichen öffnen soll keine schließen Fahrt mehr stattfinden. (default: 3600)</li>
|
<li><strong>ASC_BlockingTime_beforDayOpen</strong> - wie viel Sekunden vor dem morgendlichen öffnen soll keine schließ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ächtlichen schließen soll keine öffnen Fahrt mehr stattfinden. (default: 3600)</li>
|
<li><strong>ASC_BlockingTime_beforNightClose</strong> - wie viel Sekunden vor dem nächtlichen schließen soll keine ö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ür die Beschattung und dem Fahren der Rollladen nach brightness und den optionalen Brightnesswerten für Sonnenauf- und Sonnenuntergang. (default: none)</li>
|
<li><strong>ASC_BrightnessSensor - DEVICE[:READING] WERT-MORGENS:WERT-ABENDS</strong> / 'Sensorname[:brightness [400:800]]' Angaben zum Helligkeitssensor mit (Readingname, optional) für die Beschattung und dem Fahren der Rollladen nach brightness und den optionalen Brightnesswerten für Sonnenauf- und Sonnenuntergang. (default: none)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Down"></a>
|
||||||
<li><strong>ASC_Down - astro/time/brightness</strong> - bei astro wird Sonnenuntergang berechnet, bei time wird der Wert aus ASC_Time_Down_Early als Fahrzeit verwendet und bei brightness muss ASC_Time_Down_Early und ASC_Time_Down_Late korrekt gesetzt werden. Der Timer läuft dann nach ASC_Time_Down_Late Zeit, es wird aber in der Zeit zwischen ASC_Time_Down_Early und ASC_Time_Down_Late geschaut, ob die als Attribut im Moduldevice hinterlegte ASC_brightnessDriveUpDown der Down Wert erreicht wurde. Wenn ja, wird der Rollladen runter gefahren (default: astro)</li>
|
<li><strong>ASC_Down - astro/time/brightness</strong> - bei astro wird Sonnenuntergang berechnet, bei time wird der Wert aus ASC_Time_Down_Early als Fahrzeit verwendet und bei brightness muss ASC_Time_Down_Early und ASC_Time_Down_Late korrekt gesetzt werden. Der Timer läuft dann nach ASC_Time_Down_Late Zeit, es wird aber in der Zeit zwischen ASC_Time_Down_Early und ASC_Time_Down_Late geschaut, ob die als Attribut im Moduldevice hinterlegte ASC_brightnessDriveUpDown der Down Wert erreicht wurde. Wenn ja, wird der Rollladen runter gefahren (default: astro)</li>
|
||||||
<ul></p>
|
<ul></p>
|
||||||
<strong><u>Beschreibung der besonderen Positionsattribute</u></strong>
|
<strong><u>Beschreibung der besonderen Positionsattribute</u></strong>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Closed_Pos"></a>
|
||||||
<li><strong>ASC_Closed_Pos</strong> - in 10 Schritten von 0 bis 100 (Default: ist abhängig vom Attribut<em>ASC</em> 0/100)</li>
|
<li><strong>ASC_Closed_Pos</strong> - in 10 Schritten von 0 bis 100 (Default: ist abhängig vom Attribut<em>ASC</em> 0/100)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Open_Pos"></a>
|
||||||
<li><strong>ASC_Open_Pos</strong> - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut<em>ASC</em> 100/0)</li>
|
<li><strong>ASC_Open_Pos</strong> - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut<em>ASC</em> 100/0)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Sleep_Pos"></a>
|
||||||
<li><strong>ASC_Sleep_Pos</strong> - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut<em>ASC</em> 75/25) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
<li><strong>ASC_Sleep_Pos</strong> - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut<em>ASC</em> 75/25) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_ComfortOpen_Pos"></a>
|
||||||
<li><strong>ASC_ComfortOpen_Pos</strong> - in 10 Schritten von 0 bis 100 (Default: ist abhängig vom Attribut<em>ASC</em> 20/80) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
<li><strong>ASC_ComfortOpen_Pos</strong> - in 10 Schritten von 0 bis 100 (Default: ist abhängig vom Attribut<em>ASC</em> 20/80) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_Pos"></a>
|
||||||
<li><strong>ASC_Shading_Pos</strong> - Position des Rollladens für die Beschattung (Default: ist abhängig vom Attribut<em>ASC</em> 80/20) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
<li><strong>ASC_Shading_Pos</strong> - Position des Rollladens für die Beschattung (Default: ist abhängig vom Attribut<em>ASC</em> 80/20) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Ventilate_Pos"></a>
|
||||||
<li><strong>ASC_Ventilate_Pos</strong> - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut <em>ASC</em> 70/30) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
<li><strong>ASC_Ventilate_Pos</strong> - in 10 Schritten von 0 bis 100 (default: ist abhängig vom Attribut <em>ASC</em> 70/30) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
||||||
</p>
|
</p>
|
||||||
<strong>In Bezug auf die Verwendung mit Lamellen gibt es folgende ergänzende Parameter</strong>.
|
<strong>In Bezug auf die Verwendung mit Lamellen gibt es folgende ergänzende Parameter</strong>.
|
||||||
@ -935,28 +1067,54 @@ sub Initialize {
|
|||||||
<li>Wird hingegen ein ander Command verwendet z.B. slatPct oder ähnliches dann muss hinter der normalen Positionsangebe noch die Position für die Lamellen mit angegeb werden. Beispiel: <em>attr ROLLONAME ASC_Shading_Pos 30:75</em>. <strong>Bitte beachtet in diesem Zusammenhang auch das Attribut ASC_SlatPosCmd_SlatDevice wo mindesten die Angabe des SlatPosCMD Voraussetzung ist.</strong></li>
|
<li>Wird hingegen ein ander Command verwendet z.B. slatPct oder ähnliches dann muss hinter der normalen Positionsangebe noch die Position für die Lamellen mit angegeb werden. Beispiel: <em>attr ROLLONAME ASC_Shading_Pos 30:75</em>. <strong>Bitte beachtet in diesem Zusammenhang auch das Attribut ASC_SlatPosCmd_SlatDevice wo mindesten die Angabe des SlatPosCMD Voraussetzung ist.</strong></li>
|
||||||
</ul>
|
</ul>
|
||||||
</p></ul>
|
</p></ul>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shutter_IdleDetection"></a>
|
||||||
<li><strong>ASC_Shutter_IdleDetection</strong> - <strong>READING:VALUE</strong> gibt das Reading an welches Auskunft über den Fahrstatus des Rollos gibt, sowie als zweites den Wert im Reading welcher aus sagt das das Rollo <strong>nicht</strong> fährt</li>
|
<li><strong>ASC_Shutter_IdleDetection</strong> - <strong>READING:VALUE</strong> gibt das Reading an welches Auskunft über den Fahrstatus des Rollos gibt, sowie als zweites den Wert im Reading welcher aus sagt das das Rollo <strong>nicht</strong> fährt</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_DriveUpMaxDuration"></a>
|
||||||
<li><strong>ASC_DriveUpMaxDuration</strong> - die Dauer des Hochfahrens des Rollladens plus 5 Sekunden (default: 60)</li>
|
<li><strong>ASC_DriveUpMaxDuration</strong> - die Dauer des Hochfahrens des Rollladens plus 5 Sekunden (default: 60)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Drive_Delay"></a>
|
||||||
<li><strong>ASC_Drive_Delay</strong> - maximaler Wert für einen zufällig ermittelte Verzögerungswert in Sekunden bei der Berechnung der Fahrzeiten.</li>
|
<li><strong>ASC_Drive_Delay</strong> - maximaler Wert für einen zufällig ermittelte Verzögerungswert in Sekunden bei der Berechnung der Fahrzeiten.</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Drive_DelayStart"></a>
|
||||||
<li><strong>ASC_Drive_DelayStart</strong> - in Sekunden verzögerter Wert ab welchen das Rollo gefahren werden soll.</li>
|
<li><strong>ASC_Drive_DelayStart</strong> - in Sekunden verzögerter Wert ab welchen das Rollo gefahren werden soll.</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_LockOut"></a>
|
||||||
<li><strong>ASC_LockOut - soft/hard/off</strong> - stellt entsprechend den Aussperrschutz ein. Bei global aktivem Aussperrschutz (set ASC-Device lockOut soft) und einem Fensterkontakt open bleibt dann der Rollladen oben. Dies gilt nur bei Steuerbefehlen über das ASC Modul. Stellt man global auf hard, wird bei entsprechender Möglichkeit versucht den Rollladen hardwareseitig zu blockieren. Dann ist auch ein Fahren über die Taster nicht mehr möglich. (default: off)</li>
|
<li><strong>ASC_LockOut - soft/hard/off</strong> - stellt entsprechend den Aussperrschutz ein. Bei global aktivem Aussperrschutz (set ASC-Device lockOut soft) und einem Fensterkontakt open bleibt dann der Rollladen oben. Dies gilt nur bei Steuerbefehlen über das ASC Modul. Stellt man global auf hard, wird bei entsprechender Möglichkeit versucht den Rollladen hardwareseitig zu blockieren. Dann ist auch ein Fahren über die Taster nicht mehr möglich. (default: off)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_LockOut_Cmd"></a>
|
||||||
<li><strong>ASC_LockOut_Cmd - inhibit/blocked/protection</strong> - set Befehl für das Rollladen-Device zum Hardware sperren. Dieser Befehl wird gesetzt werden, wenn man "ASC_LockOut" auf hard setzt (default: none)</li>
|
<li><strong>ASC_LockOut_Cmd - inhibit/blocked/protection</strong> - set Befehl für das Rollladen-Device zum Hardware sperren. Dieser Befehl wird gesetzt werden, wenn man "ASC_LockOut" auf hard setzt (default: none)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Mode_Down"></a>
|
||||||
<li><strong>ASC_Mode_Down - always/home/absent/off</strong> - Wann darf die Automatik steuern. immer, niemals, bei Abwesenheit des Roommate (ist kein Roommate und absent eingestellt, wird gar nicht gesteuert) (default: always)</li>
|
<li><strong>ASC_Mode_Down - always/home/absent/off</strong> - Wann darf die Automatik steuern. immer, niemals, bei Abwesenheit des Roommate (ist kein Roommate und absent eingestellt, wird gar nicht gesteuert) (default: always)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Mode_Up"></a>
|
||||||
<li><strong>ASC_Mode_Up - always/home/absent/off</strong> - Wann darf die Automatik steuern. immer, niemals, bei Abwesenheit des Roommate (ist kein Roommate und absent eingestellt, wird gar nicht gesteuert) (default: always)</li>
|
<li><strong>ASC_Mode_Up - always/home/absent/off</strong> - Wann darf die Automatik steuern. immer, niemals, bei Abwesenheit des Roommate (ist kein Roommate und absent eingestellt, wird gar nicht gesteuert) (default: always)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Partymode"></a>
|
||||||
<li><strong>ASC_Partymode - on/off</strong> - schaltet den Partymodus an oder aus. Wird am ASC Device set ASC-DEVICE partyMode on geschalten, werden alle Fahrbefehle an den Rollläden, welche das Attribut auf on haben, zwischengespeichert und später erst ausgeführt (default: off)</li>
|
<li><strong>ASC_Partymode - on/off</strong> - schaltet den Partymodus an oder aus. Wird am ASC Device set ASC-DEVICE partyMode on geschalten, werden alle Fahrbefehle an den Rollläden, welche das Attribut auf on haben, zwischengespeichert und später erst ausgeführt (default: off)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Pos_Reading"></a>
|
||||||
<li><strong>ASC_Pos_Reading</strong> - Name des Readings, welches die Position des Rollladen in Prozent an gibt; wird bei unbekannten Device Typen auch als set Befehl zum fahren verwendet</li>
|
<li><strong>ASC_Pos_Reading</strong> - Name des Readings, welches die Position des Rollladen in Prozent an gibt; wird bei unbekannten Device Typen auch als set Befehl zum fahren verwendet</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_PrivacyUpValue_beforeDayOpen"></a>
|
||||||
<li><strong>ASC_PrivacyUpValue_beforeDayOpen</strong> - wie viele Sekunden vor dem morgendlichen öffnen soll der Rollladen in die Sichtschutzposition fahren, oder bei Brightness ab welchem minimum Brightnesswert soll das Rollo in die Privacy Position fahren. Bei Brightness muss zusätzlich zum Zeitwert der Brightnesswert mit angegeben werden 1800:600 bedeutet 30 min vor day open oder bei über einem Brightnesswert von 600 (default: -1)</li>
|
<li><strong>ASC_PrivacyUpValue_beforeDayOpen</strong> - wie viele Sekunden vor dem morgendlichen öffnen soll der Rollladen in die Sichtschutzposition fahren, oder bei Brightness ab welchem minimum Brightnesswert soll das Rollo in die Privacy Position fahren. Bei Brightness muss zusätzlich zum Zeitwert der Brightnesswert mit angegeben werden 1800:600 bedeutet 30 min vor day open oder bei über einem Brightnesswert von 600 (default: -1)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_PrivacyDownValue_beforeNightClose"></a>
|
||||||
<li><strong>ASC_PrivacyDownValue_beforeNightClose</strong> - wie viele Sekunden vor dem abendlichen schließen soll der Rollladen in die Sichtschutzposition fahren, oder bei Brightness ab welchem minimum Brightnesswert soll das Rollo in die Privacy Position fahren. Bei Brightness muss zusätzlich zum Zeitwert der Brightnesswert mit angegeben werden 1800:300 bedeutet 30 min vor night close oder bei unter einem Brightnesswert von 300 (default: -1)</li>
|
<li><strong>ASC_PrivacyDownValue_beforeNightClose</strong> - wie viele Sekunden vor dem abendlichen schließen soll der Rollladen in die Sichtschutzposition fahren, oder bei Brightness ab welchem minimum Brightnesswert soll das Rollo in die Privacy Position fahren. Bei Brightness muss zusätzlich zum Zeitwert der Brightnesswert mit angegeben werden 1800:300 bedeutet 30 min vor night close oder bei unter einem Brightnesswert von 300 (default: -1)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_PrivacyUp_Pos"></a>
|
||||||
<li><strong>ASC_PrivacyUp_Pos</strong> - Position den Rollladens für den morgendlichen Sichtschutz (default: 50) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
<li><strong>ASC_PrivacyUp_Pos</strong> - Position den Rollladens für den morgendlichen Sichtschutz (default: 50) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_PrivacyDown_Pos"></a>
|
||||||
<li><strong>ASC_PrivacyDown_Pos</strong> - Position den Rollladens für den abendlichen Sichtschutz (default: 50) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
<li><strong>ASC_PrivacyDown_Pos</strong> - Position den Rollladens für den abendlichen Sichtschutz (default: 50) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_ExternalTrigger"></a>
|
||||||
<li><strong>ASC_ExternalTrigger</strong> - DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:[POSINACTIVE VALUEACTIVE2:POSACTIVE2], Beispiel: "WohnzimmerTV:state on:off 66:100" bedeutet das wenn ein "state:on" Event kommt soll das Rollo in Position 66 fahren, kommt ein "state:off" Event soll es in Position 100 fahren. Es ist möglich die POSINACTIVE weg zu lassen dann fährt das Rollo in LastStatus Position.</li>
|
<li><strong>ASC_ExternalTrigger</strong> - DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:[POSINACTIVE VALUEACTIVE2:POSACTIVE2], Beispiel: "WohnzimmerTV:state on:off 66:100" bedeutet das wenn ein "state:on" Event kommt soll das Rollo in Position 66 fahren, kommt ein "state:off" Event soll es in Position 100 fahren. Es ist möglich die POSINACTIVE weg zu lassen dann fährt das Rollo in LastStatus Position.</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_WindProtection"></a>
|
||||||
<li><strong>ASC_WindProtection - on/off</strong> - soll der Rollladen beim Windschutz beachtet werden. on=JA, off=NEIN. (default off)</li>
|
<li><strong>ASC_WindProtection - on/off</strong> - soll der Rollladen beim Windschutz beachtet werden. on=JA, off=NEIN. (default off)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_RainProtection"></a>
|
||||||
<li><strong>ASC_RainProtection - on/off</strong> - soll der Rollladen beim Regenschutz beachtet werden. on=JA, off=NEIN. (default off)</li>
|
<li><strong>ASC_RainProtection - on/off</strong> - soll der Rollladen beim Regenschutz beachtet werden. on=JA, off=NEIN. (default off)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Roommate_Device"></a>
|
||||||
<li><strong>ASC_Roommate_Device</strong> - mit Komma getrennte Namen des/der Roommate Device/s, welche den/die Bewohner des Raumes vom Rollladen wiedergibt. Es macht nur Sinn in Schlaf- oder Kinderzimmern (default: none)</li>
|
<li><strong>ASC_Roommate_Device</strong> - mit Komma getrennte Namen des/der Roommate Device/s, welche den/die Bewohner des Raumes vom Rollladen wiedergibt. Es macht nur Sinn in Schlaf- oder Kinderzimmern (default: none)</li>
|
||||||
<li><strong>ASC_Adv - on/off</strong> bei on wird das runterfahren des Rollos während der Weihnachtszeit (1. Advent bis 6. Januar) ausgesetzt! Durch set ASCDEVICE advDriveDown werden alle ausgesetzten Fahrten nachgeholt.</li>
|
<a id="AutoShuttersControl-attr-ASC_Roommate_Reading"></a>
|
||||||
<li><strong>ASC_Roommate_Reading</strong> - das Reading zum Roommate Device, welches den Status wieder gibt (default: state)</li>
|
<li><strong>ASC_Roommate_Reading</strong> - das Reading zum Roommate Device, welches den Status wieder gibt (default: state)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_GuestRoom"></a>
|
||||||
|
<li><strong>ASC_GuestRoom on|off</strong> - (not functionality implemented yet?).
|
||||||
|
</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Adv"></a>
|
||||||
|
<li><strong>ASC_Adv - on/off</strong> bei on wird das runterfahren des Rollos während der Weihnachtszeit (1. Advent bis 6. Januar) ausgesetzt! Durch set ASCDEVICE advDriveDown werden alle ausgesetzten Fahrten nachgeholt.</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Self_Defense_Mode"></a>
|
||||||
<li><strong>ASC_Self_Defense_Mode - absent/gone/off</strong> - ab welchen Residents Status soll Selfdefense aktiv werden ohne das Fenster auf sind. (default: gone)</li>
|
<li><strong>ASC_Self_Defense_Mode - absent/gone/off</strong> - ab welchen Residents Status soll Selfdefense aktiv werden ohne das Fenster auf sind. (default: gone)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Self_Defense_AbsentDelay"></a>
|
||||||
<li><strong>ASC_Self_Defense_AbsentDelay</strong> - um wie viele Sekunden soll das fahren in Selfdefense bei Residents absent verzögert werden. (default: 300)</li>
|
<li><strong>ASC_Self_Defense_AbsentDelay</strong> - um wie viele Sekunden soll das fahren in Selfdefense bei Residents absent verzögert werden. (default: 300)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Self_Defense_Exclude"></a>
|
||||||
<li><strong>ASC_Self_Defense_Exclude - on/off</strong> - bei on Wert wird dieser Rollladen bei aktiven Self Defense und offenen Fenster nicht runter gefahren, wenn Residents absent ist. (default: off), off bedeutet das es ausgeschlossen ist vom Self Defense</li></p>
|
<li><strong>ASC_Self_Defense_Exclude - on/off</strong> - bei on Wert wird dieser Rollladen bei aktiven Self Defense und offenen Fenster nicht runter gefahren, wenn Residents absent ist. (default: off), off bedeutet das es ausgeschlossen ist vom Self Defense</li></p>
|
||||||
<ul>
|
<ul>
|
||||||
<strong><u>Beschreibung der Beschattungsfunktion</u></strong>
|
<strong><u>Beschreibung der Beschattungsfunktion</u></strong>
|
||||||
@ -964,32 +1122,71 @@ sub Initialize {
|
|||||||
</br><strong>Im ASC Device</strong> das Reading "controlShading" mit dem Wert on, sowie ein Astro/Twilight Device im Attribut "ASC_twilightDevice" und das Attribut "ASC_tempSensor".
|
</br><strong>Im ASC Device</strong> das Reading "controlShading" mit dem Wert on, sowie ein Astro/Twilight Device im Attribut "ASC_twilightDevice" und das Attribut "ASC_tempSensor".
|
||||||
</br><strong>In den Rollladendevices</strong> benötigt ihr ein Helligkeitssensor als Attribut "ASC_BrightnessSensor", sofern noch nicht vorhanden. Findet der Sensor nur für die Beschattung Verwendung ist der Wert DEVICENAME[:READING] ausreichend.
|
</br><strong>In den Rollladendevices</strong> benötigt ihr ein Helligkeitssensor als Attribut "ASC_BrightnessSensor", sofern noch nicht vorhanden. Findet der Sensor nur für die Beschattung Verwendung ist der Wert DEVICENAME[:READING] ausreichend.
|
||||||
</br>Alle weiteren Attribute sind optional und wenn nicht gesetzt mit Default-Werten belegt. Ihr solltet sie dennoch einmal anschauen und entsprechend Euren Gegebenheiten setzen. Die Werte für die Fensterposition und den Vor- Nachlaufwinkel sowie die Grenzwerte für die StateChange_Cloudy und StateChange_Sunny solltet ihr besondere Beachtung dabei schenken.
|
</br>Alle weiteren Attribute sind optional und wenn nicht gesetzt mit Default-Werten belegt. Ihr solltet sie dennoch einmal anschauen und entsprechend Euren Gegebenheiten setzen. Die Werte für die Fensterposition und den Vor- Nachlaufwinkel sowie die Grenzwerte für die StateChange_Cloudy und StateChange_Sunny solltet ihr besondere Beachtung dabei schenken.
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_InOutAzimuth"></a>
|
||||||
<li><strong>ASC_Shading_InOutAzimuth</strong> - Azimut Wert ab dem bei Überschreiten Beschattet und bei Unterschreiten Endschattet werden soll. (default: 95:265)</li>
|
<li><strong>ASC_Shading_InOutAzimuth</strong> - Azimut Wert ab dem bei Überschreiten Beschattet und bei Unterschreiten Endschattet werden soll. (default: 95:265)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_MinMax_Elevation"></a>
|
||||||
<li><strong>ASC_Shading_MinMax_Elevation</strong> - ab welcher min Höhe des Sonnenstandes soll beschattet und ab welcher max Höhe wieder beendet werden, immer in Abhängigkeit der anderen einbezogenen Sensorwerte (default: 25.0:100.0)</li>
|
<li><strong>ASC_Shading_MinMax_Elevation</strong> - ab welcher min Höhe des Sonnenstandes soll beschattet und ab welcher max Höhe wieder beendet werden, immer in Abhängigkeit der anderen einbezogenen Sensorwerte (default: 25.0:100.0)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_Min_OutsideTemperature"></a>
|
||||||
<li><strong>ASC_Shading_Min_OutsideTemperature</strong> - ab welcher Temperatur soll Beschattet werden, immer in Abhängigkeit der anderen einbezogenen Sensorwerte (default: 18)</li>
|
<li><strong>ASC_Shading_Min_OutsideTemperature</strong> - ab welcher Temperatur soll Beschattet werden, immer in Abhängigkeit der anderen einbezogenen Sensorwerte (default: 18)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_Mode"></a>
|
||||||
<li><strong>ASC_Shading_Mode - absent,always,off,home</strong> / wann soll die Beschattung nur stattfinden. (default: off)</li>
|
<li><strong>ASC_Shading_Mode - absent,always,off,home</strong> / wann soll die Beschattung nur stattfinden. (default: off)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_Pos"></a>
|
||||||
<li><strong>ASC_Shading_Pos</strong> - Position des Rollladens für die Beschattung (Default: ist abhängig vom Attribut<em>ASC</em> 80/20) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
<li><strong>ASC_Shading_Pos</strong> - Position des Rollladens für die Beschattung (Default: ist abhängig vom Attribut<em>ASC</em> 80/20) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_StateChange_SunnyCloudy"></a>
|
||||||
<li><strong>ASC_Shading_StateChange_SunnyCloudy</strong> - Brightness Wert ab welchen die Beschattung stattfinden und aufgehoben werden soll, immer in Abhängigkeit der anderen einbezogenen Sensorwerte. Ein optionaler dritter Wert gibt an wie, viele Brightnesswerte für den aktuellen Brightness-Durchschnitt berücksichtigt werden. Standard ist 3, es sollten nicht mehr als 5 berücksichtigt werden. (default: 35000:20000 [3])</li>
|
<li><strong>ASC_Shading_StateChange_SunnyCloudy</strong> - Brightness Wert ab welchen die Beschattung stattfinden und aufgehoben werden soll, immer in Abhängigkeit der anderen einbezogenen Sensorwerte. Ein optionaler dritter Wert gibt an wie, viele Brightnesswerte für den aktuellen Brightness-Durchschnitt berücksichtigt werden. Standard ist 3, es sollten nicht mehr als 5 berücksichtigt werden. (default: 35000:20000 [3])</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Shading_WaitingPeriod"></a>
|
||||||
<li><strong>ASC_Shading_WaitingPeriod</strong> - wie viele Sekunden soll gewartet werden bevor eine weitere Auswertung der Sensordaten für die Beschattung stattfinden soll (default: 1200)</li>
|
<li><strong>ASC_Shading_WaitingPeriod</strong> - wie viele Sekunden soll gewartet werden bevor eine weitere Auswertung der Sensordaten für die Beschattung stattfinden soll (default: 1200)</li>
|
||||||
<li><strong>ASC_Shading_BetweenTheTime</strong> - das fahren in die Beschattung erfolgt bei Angabe nur innerhalb des Zeitraumes, Bsp: 9:00-13:00 11:25-15:30</li>
|
<a id="AutoShuttersControl-attr-ASC_Shading_BetweenTheTime"></a>
|
||||||
|
<li><strong>ASC_Shading_BetweenTheTime</strong> - das Fahren in die Beschattung erfolgt bei Angabe nur innerhalb des Zeitraumes, Bsp: 9:00-13:00 11:25-15:30</li>
|
||||||
</ul></p>
|
</ul></p>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_ShuttersPlace"></a>
|
||||||
<li><strong>ASC_ShuttersPlace - window/terrace/awning</strong> - Wenn dieses Attribut auf terrace gesetzt ist, das Residence Device in den Status "gone" geht und SelfDefense aktiv ist (ohne das das Reading selfDefense gesetzt sein muss), wird das Rollo geschlossen. awning steht für Markise und wirkt sich auf die Beschattungssteuerung aus. (default: window)</li>
|
<li><strong>ASC_ShuttersPlace - window/terrace/awning</strong> - Wenn dieses Attribut auf terrace gesetzt ist, das Residence Device in den Status "gone" geht und SelfDefense aktiv ist (ohne das das Reading selfDefense gesetzt sein muss), wird das Rollo geschlossen. awning steht für Markise und wirkt sich auf die Beschattungssteuerung aus. (default: window)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Time_Down_Early"></a>
|
||||||
<li><strong>ASC_Time_Down_Early</strong> - Sonnenuntergang frühste Zeit zum Runterfahren (default: 16:00) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!</li>
|
<li><strong>ASC_Time_Down_Early</strong> - Sonnenuntergang frühste Zeit zum Runterfahren (default: 16:00) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Time_Down_Late"></a>
|
||||||
<li><strong>ASC_Time_Down_Late</strong> - Sonnenuntergang späteste Zeit zum Runterfahren (default: 22:00) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!</li>
|
<li><strong>ASC_Time_Down_Late</strong> - Sonnenuntergang späteste Zeit zum Runterfahren (default: 22:00) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Time_Up_Early"></a>
|
||||||
<li><strong>ASC_Time_Up_Early</strong> - Sonnenaufgang frühste Zeit zum Hochfahren (default: 05:00) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!</li>
|
<li><strong>ASC_Time_Up_Early</strong> - Sonnenaufgang frühste Zeit zum Hochfahren (default: 05:00) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Time_Up_Late"></a>
|
||||||
<li><strong>ASC_Time_Up_Late</strong> - Sonnenaufgang späteste Zeit zum Hochfahren (default: 08:30) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!</li>
|
<li><strong>ASC_Time_Up_Late</strong> - Sonnenaufgang späteste Zeit zum Hochfahren (default: 08:30) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Time_Up_WE_Holiday"></a>
|
||||||
<li><strong>ASC_Time_Up_WE_Holiday</strong> - Sonnenaufgang frühste Zeit zum Hochfahren am Wochenende und/oder Urlaub (holiday2we wird beachtet). (default: 08:00) ACHTUNG!!! in Verbindung mit Brightness für <em>ASC_Up</em> muss die Uhrzeit kleiner sein wie die Uhrzeit aus <em>ASC_Time_Up_Late</em> !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!</li>
|
<li><strong>ASC_Time_Up_WE_Holiday</strong> - Sonnenaufgang frühste Zeit zum Hochfahren am Wochenende und/oder Urlaub (holiday2we wird beachtet). (default: 08:00) ACHTUNG!!! in Verbindung mit Brightness für <em>ASC_Up</em> muss die Uhrzeit kleiner sein wie die Uhrzeit aus <em>ASC_Time_Up_Late</em> !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss ein Zeitformat in Form HH:MM[:SS] sein!!!</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Up"></a>
|
||||||
<li><strong>ASC_Up - astro/time/brightness</strong> - bei astro wird Sonnenaufgang berechnet, bei time wird der Wert aus ASC_Time_Up_Early als Fahrzeit verwendet und bei brightness muss ASC_Time_Up_Early und ASC_Time_Up_Late korrekt gesetzt werden. Der Timer läuft dann nach ASC_Time_Up_Late Zeit, es wird aber in der Zeit zwischen ASC_Time_Up_Early und ASC_Time_Up_Late geschaut, ob die als Attribut im Moduldevice hinterlegte Down Wert von ASC_brightnessDriveUpDown erreicht wurde. Wenn ja, wird der Rollladen hoch gefahren (default: astro)</li>
|
<li><strong>ASC_Up - astro/time/brightness</strong> - bei astro wird Sonnenaufgang berechnet, bei time wird der Wert aus ASC_Time_Up_Early als Fahrzeit verwendet und bei brightness muss ASC_Time_Up_Early und ASC_Time_Up_Late korrekt gesetzt werden. Der Timer läuft dann nach ASC_Time_Up_Late Zeit, es wird aber in der Zeit zwischen ASC_Time_Up_Early und ASC_Time_Up_Late geschaut, ob die als Attribut im Moduldevice hinterlegte Down Wert von ASC_brightnessDriveUpDown erreicht wurde. Wenn ja, wird der Rollladen hoch gefahren (default: astro)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_Ventilate_Window_Open"></a>
|
||||||
<li><strong>ASC_Ventilate_Window_Open</strong> - auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist (default: on)</li>
|
<li><strong>ASC_Ventilate_Window_Open</strong> - auf lüften, wenn das Fenster gekippt/geöffnet wird und aktuelle Position unterhalb der Lüften-Position ist (default: on)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_WiggleValue"></a>
|
||||||
<li><strong>ASC_WiggleValue</strong> - Wert um welchen sich die Position des Rollladens ändern soll (default: 5)</li>
|
<li><strong>ASC_WiggleValue</strong> - Wert um welchen sich die Position des Rollladens ändern soll (default: 5)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_WindParameters"></a>
|
||||||
<li><strong>ASC_WindParameters - TRIGGERMAX[:HYSTERESE] [DRIVEPOSITION]</strong> / Angabe von Max Wert ab dem für Wind getriggert werden soll, Hytsrese Wert ab dem der Windschutz aufgehoben werden soll TRIGGERMAX - HYSTERESE / Ist es bei einigen Rollläden nicht gewünscht das gefahren werden soll, so ist der TRIGGERMAX Wert mit -1 an zu geben. (default: '50:20 ClosedPosition')</li>
|
<li><strong>ASC_WindParameters - TRIGGERMAX[:HYSTERESE] [DRIVEPOSITION]</strong> / Angabe von Max Wert ab dem für Wind getriggert werden soll, Hytsrese Wert ab dem der Windschutz aufgehoben werden soll TRIGGERMAX - HYSTERESE / Ist es bei einigen Rollläden nicht gewünscht das gefahren werden soll, so ist der TRIGGERMAX Wert mit -1 an zu geben. (default: '50:20 ClosedPosition')</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_WindowRec_PosAfterDayClosed"></a>
|
||||||
<li><strong>ASC_WindowRec_PosAfterDayClosed</strong> - open,lastManual / auf welche Position soll das Rollo nach dem schließen am Tag fahren. Open Position oder letzte gespeicherte manuelle Position (default: open)</li>
|
<li><strong>ASC_WindowRec_PosAfterDayClosed</strong> - open,lastManual / auf welche Position soll das Rollo nach dem schließen am Tag fahren. Open Position oder letzte gespeicherte manuelle Position (default: open)</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_WindowRec"></a>
|
||||||
<li><strong>ASC_WindowRec</strong> - WINDOWREC:[READING], Name des Fensterkontaktes, an dessen Fenster der Rollladen angebracht ist (default: none). Reading ist optional</li>
|
<li><strong>ASC_WindowRec</strong> - WINDOWREC:[READING], Name des Fensterkontaktes, an dessen Fenster der Rollladen angebracht ist (default: none). Reading ist optional</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_WindowRec_subType"></a>
|
||||||
<li><strong>ASC_WindowRec_subType</strong> - Typ des verwendeten Fensterkontaktes: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt) (default: twostate)</li>
|
<li><strong>ASC_WindowRec_subType</strong> - Typ des verwendeten Fensterkontaktes: twostate (optisch oder magnetisch) oder threestate (Drehgriffkontakt) (default: twostate)</li>
|
||||||
<li><strong>ASC_SlatPosCmd_SlatDevice</strong> - Angaben zu einem Slat (Lamellen) CMD und sofern diese Lamellen über ein anderes Device gesteuert werden zum Slat Device. Beispiel: attr ROLLO ASC_SlatPosCmd_SlatDevice slatPct[:ROLLOSLATDEVICE] [ ] bedeutet optinal. Kann also auch weg gelassen werden. Wenn Ihr das SLAT Device mit angibt dann bitte ohne []. Beispiel: attr ROLLO ASC_SlatPosCmd_SlatDevice slatPct:ROLLOSLATDEVICE. Damit das ganze dann auch greift muss in den 6 Positionsangaben ASC_Open_Pos, ASC_Closed_Pos, ASC_Ventilate_Pos, ASC_ComfortOpen_Pos, ASC_Shading_Pos und ASC_Sleep_Pos ein weiterer Parameter für die Lamellenstellung mit angegeben werden.</li>
|
<a id="AutoShuttersControl-attr-ASC_SlatPosCmd_SlatDevice"></a>
|
||||||
|
<li><strong>ASC_SlatPosCmd_SlatDevice</strong> - Angaben zu einem Slat (Lamellen) CMD und - sofern diese Lamellen über ein anderes Device gesteuert werden - zum Slat Device. Beispiele: <i>attr ROLLO ASC_SlatPosCmd_SlatDevice slatPct</i> oder <i>attr ROLLO ASC_SlatPosCmd_SlatDevice dim:ROLLOSLATDEVICE</i>. Die Angabe des Devices ist nur erforderlich, wenn zur Steuerung der Lamellen ein anderes Device verwendet wird. Damit das ganze dann auch greift, muss in den 6 Positionsangaben ASC_Open_Pos, ASC_Closed_Pos, ASC_Ventilate_Pos, ASC_ComfortOpen_Pos, ASC_Shading_Pos und ASC_Sleep_Pos ein weiterer Parameter für die Lamellenstellung mit angegeben werden.</li>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_CommandTemplate"></a>
|
||||||
|
<a id="AutoShuttersControl-attr-ASC_CommandTemplate"></a>
|
||||||
|
<li><strong>ASC_CommandTemplate</strong> - <strong>FHEM-Kommando(s) oder Perl-Anweisung</strong> (in geschweiften Klammern unter Beachtung der üblichen Regeln für das escapen von Semicolons etc.).<br>
|
||||||
|
Dieses Attribut übersteuert das sonst intern ermittelte Fahrkommando und ist <strong>für seltene und spezielle Fälle</strong> gedacht. In der Regel ist es nicht erforderlich, dieses Attribut zu setzen!<br>
|
||||||
|
Die Variablen <i>$name</i> (der Name des Rollladen-Devices), <i>$pos</i> (die Zielposition des Fahrbefehls), <i>$slatPos</i> (die Zielposition des Fahrbefehls für eventuelle Lamellen) und <i>$cause</i> (die interne Benennung des Fahranlasses) werden durch die ermittelten Werte ersetzt, es muss selbst dafür gesorgt werden, dass eventuell unnötige Fahrbefehle aussortiert werden.
|
||||||
|
Beispiele:
|
||||||
|
<ul>
|
||||||
|
<li><i>attr ROLLO ASC_CommandTemplate set $name $pos</i> - Positionsbefehl direkt an Gerät
|
||||||
|
setzen</li>
|
||||||
|
<li><i>attr ROLLO ASC_CommandTemplate set $name pct $pos</i> - Positionsbefehl auf den setter <i>pct</i> absetzen</li>
|
||||||
|
<li><i>attr ROLLO ASC_CommandTemplate set $name datapoint 4.LEVEL_2 $slatPos 4.LEVEL $pos</i> - Positionsbefehl und Lamellen-Ansteuerung für HM-IP-Jalousieaktoren</li>
|
||||||
|
<li><i>attr ROLLO ASC_CommandTemplate { fhem("set $name ".($pos+1024)).";set $name 0")}</i> - Positionsbefehl für eine SPS in Perl umrechnen</li>
|
||||||
|
<li><i>attr ROLLO ASC_CommandTemplate { myPerlFn("$name",$pos,$slatPos,"$cause")}</i> - eigene Perl-Funktion (z.B. in 99_myUtils.pm) aufrufen</li>
|
||||||
|
</ul>
|
||||||
|
<strong>Hinweis: ASC_CommandTemplate</strong> ist für seltene und spezielle Fälle gedacht. In der Regel ist es nicht erforderlich, dieses Attribut zu setzen!
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
</p>
|
</p>
|
||||||
|
<a id="AutoShuttersControl-API"></a>
|
||||||
<strong><u>Beschreibung der AutoShuttersControl API</u></strong>
|
<strong><u>Beschreibung der AutoShuttersControl API</u></strong>
|
||||||
</br>Mit dem Aufruf der API Funktion und Übergabe der entsprechenden Parameter ist es möglich auf interne Daten zu zu greifen.
|
</br>Mit dem Aufruf der API Funktion und Übergabe der entsprechenden Parameter ist es möglich auf interne Daten zu zu greifen.
|
||||||
</p>
|
</p>
|
||||||
@ -1265,7 +1462,7 @@ sub Initialize {
|
|||||||
],
|
],
|
||||||
"release_status": "stable",
|
"release_status": "stable",
|
||||||
"license": "GPL_2",
|
"license": "GPL_2",
|
||||||
"version": "v0.10.14",
|
"version": "v0.10.22",
|
||||||
"author": [
|
"author": [
|
||||||
"Marko Oldenburg <fhemdevelopment@cooltux.net>"
|
"Marko Oldenburg <fhemdevelopment@cooltux.net>"
|
||||||
],
|
],
|
||||||
@ -1279,7 +1476,7 @@ sub Initialize {
|
|||||||
"runtime": {
|
"runtime": {
|
||||||
"requires": {
|
"requires": {
|
||||||
"FHEM": 5.00918799,
|
"FHEM": 5.00918799,
|
||||||
"perl": 5.016,
|
"perl": 5.023,
|
||||||
"Meta": 0,
|
"Meta": 0,
|
||||||
"JSON": 0,
|
"JSON": 0,
|
||||||
"Date::Parse": 0
|
"Date::Parse": 0
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
UPD 2021-05-18_10:42:56 97974 FHEM/73_AutoShuttersControl.pm
|
UPD 2022-03-04_06:58:36 116177 FHEM/73_AutoShuttersControl.pm
|
||||||
UPD 2021-05-17_14:34:49 74350 lib/FHEM/Automation/ShuttersControl.pm
|
UPD 2022-03-04_06:55:50 76011 lib/FHEM/Automation/ShuttersControl.pm
|
||||||
UPD 2020-06-22_09:41:40 2657 lib/FHEM/Automation/ShuttersControl/Dev.pm
|
UPD 2022-01-14_08:49:13 2691 lib/FHEM/Automation/ShuttersControl/Dev.pm
|
||||||
UPD 2020-07-26_17:36:29 2496 lib/FHEM/Automation/ShuttersControl/Roommate.pm
|
UPD 2022-01-14_08:49:13 2677 lib/FHEM/Automation/ShuttersControl/Roommate.pm
|
||||||
UPD 2021-05-18_10:37:51 31896 lib/FHEM/Automation/ShuttersControl/Shutters.pm
|
UPD 2022-01-14_08:49:13 32016 lib/FHEM/Automation/ShuttersControl/Shutters.pm
|
||||||
UPD 2021-05-17_14:30:37 25329 lib/FHEM/Automation/ShuttersControl/Shading.pm
|
UPD 2022-01-14_08:49:13 25452 lib/FHEM/Automation/ShuttersControl/Shading.pm
|
||||||
UPD 2021-05-17_14:34:49 108472 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
|
UPD 2022-03-02_16:50:08 112109 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
|
||||||
UPD 2021-02-26_14:36:10 40628 lib/FHEM/Automation/ShuttersControl/Helper.pm
|
UPD 2022-01-14_08:49:13 40603 lib/FHEM/Automation/ShuttersControl/Helper.pm
|
||||||
UPD 2020-06-22_09:41:40 2175 lib/FHEM/Automation/ShuttersControl/Window.pm
|
UPD 2022-01-14_08:49:13 2209 lib/FHEM/Automation/ShuttersControl/Window.pm
|
||||||
UPD 2021-05-18_10:37:51 11741 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm
|
UPD 2022-01-14_08:49:13 11857 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm
|
||||||
UPD 2020-07-03_11:29:10 7251 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm
|
UPD 2022-01-14_08:49:13 7265 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm
|
||||||
UPD 2021-01-29_10:06:33 52525 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm
|
UPD 2022-01-14_08:49:13 52751 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm
|
||||||
UPD 2020-06-22_09:41:40 2903 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm
|
UPD 2022-01-14_08:49:13 2799 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm
|
||||||
UPD 2021-01-29_10:06:33 3980 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm
|
UPD 2022-01-14_08:49:13 3887 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm
|
||||||
UPD 2020-06-22_09:41:40 2288 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm
|
UPD 2022-01-14_08:49:13 2200 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm
|
||||||
UPD 2021-05-18_10:37:51 6195 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm
|
UPD 2022-01-14_08:49:13 7113 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2020 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -43,7 +43,7 @@ package FHEM::Automation::ShuttersControl::Dev;
|
|||||||
use FHEM::Automation::ShuttersControl::Dev::Readings;
|
use FHEM::Automation::ShuttersControl::Dev::Readings;
|
||||||
use FHEM::Automation::ShuttersControl::Dev::Attr;
|
use FHEM::Automation::ShuttersControl::Dev::Attr;
|
||||||
|
|
||||||
our @ISA =
|
use base
|
||||||
qw(FHEM::Automation::ShuttersControl::Dev::Readings FHEM::Automation::ShuttersControl::Dev::Attr);
|
qw(FHEM::Automation::ShuttersControl::Dev::Readings FHEM::Automation::ShuttersControl::Dev::Attr);
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2020 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -44,23 +44,12 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use utf8;
|
use utf8;
|
||||||
|
|
||||||
use GPUtils qw(GP_Import);
|
|
||||||
|
|
||||||
## Import der FHEM Funktionen
|
|
||||||
BEGIN {
|
|
||||||
GP_Import(
|
|
||||||
qw(
|
|
||||||
AttrVal
|
|
||||||
gettimeofday)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub getShuttersOffset {
|
sub getShuttersOffset {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_shuttersDriveDelay', -1 );
|
return ::AttrVal( $name, 'ASC_shuttersDriveDelay', -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getBrightnessMinVal {
|
sub getBrightnessMinVal {
|
||||||
@ -70,7 +59,7 @@ sub getBrightnessMinVal {
|
|||||||
|
|
||||||
return $self->{ASC_brightness}->{triggermin}
|
return $self->{ASC_brightness}->{triggermin}
|
||||||
if ( exists( $self->{ASC_brightness}->{LASTGETTIME} )
|
if ( exists( $self->{ASC_brightness}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
|
&& ( ::gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->getBrightnessMaxVal;
|
$FHEM::Automation::ShuttersControl::ascDev->getBrightnessMaxVal;
|
||||||
|
|
||||||
return $self->{ASC_brightness}->{triggermin};
|
return $self->{ASC_brightness}->{triggermin};
|
||||||
@ -83,8 +72,8 @@ sub getBrightnessMaxVal {
|
|||||||
|
|
||||||
return $self->{ASC_brightness}->{triggermax}
|
return $self->{ASC_brightness}->{triggermax}
|
||||||
if ( exists( $self->{ASC_brightness}->{LASTGETTIME} )
|
if ( exists( $self->{ASC_brightness}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
|
&& ( ::gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
|
||||||
$self->{ASC_brightness}->{LASTGETTIME} = int( gettimeofday() );
|
$self->{ASC_brightness}->{LASTGETTIME} = int( ::gettimeofday() );
|
||||||
|
|
||||||
my ( $triggermax, $triggermin ) =
|
my ( $triggermax, $triggermin ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
|
||||||
@ -104,7 +93,7 @@ sub _getTwilightDevice {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_twilightDevice', 'none' );
|
return ::AttrVal( $name, 'ASC_twilightDevice', 'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAutoAstroModeEvening {
|
sub getAutoAstroModeEvening {
|
||||||
@ -112,7 +101,7 @@ sub getAutoAstroModeEvening {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_autoAstroModeEvening', 'REAL' );
|
return ::AttrVal( $name, 'ASC_autoAstroModeEvening', 'REAL' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAutoAstroModeEveningHorizon {
|
sub getAutoAstroModeEveningHorizon {
|
||||||
@ -120,7 +109,7 @@ sub getAutoAstroModeEveningHorizon {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_autoAstroModeEveningHorizon', 0 );
|
return ::AttrVal( $name, 'ASC_autoAstroModeEveningHorizon', 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAutoAstroModeMorning {
|
sub getAutoAstroModeMorning {
|
||||||
@ -128,7 +117,7 @@ sub getAutoAstroModeMorning {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_autoAstroModeMorning', 'REAL' );
|
return ::AttrVal( $name, 'ASC_autoAstroModeMorning', 'REAL' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAutoAstroModeMorningHorizon {
|
sub getAutoAstroModeMorningHorizon {
|
||||||
@ -136,7 +125,7 @@ sub getAutoAstroModeMorningHorizon {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_autoAstroModeMorningHorizon', 0 );
|
return ::AttrVal( $name, 'ASC_autoAstroModeMorningHorizon', 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAutoShuttersControlMorning {
|
sub getAutoShuttersControlMorning {
|
||||||
@ -144,7 +133,7 @@ sub getAutoShuttersControlMorning {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_autoShuttersControlMorning', 'on' );
|
return ::AttrVal( $name, 'ASC_autoShuttersControlMorning', 'on' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAutoShuttersControlEvening {
|
sub getAutoShuttersControlEvening {
|
||||||
@ -152,7 +141,7 @@ sub getAutoShuttersControlEvening {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_autoShuttersControlEvening', 'on' );
|
return ::AttrVal( $name, 'ASC_autoShuttersControlEvening', 'on' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAutoShuttersControlComfort {
|
sub getAutoShuttersControlComfort {
|
||||||
@ -160,7 +149,7 @@ sub getAutoShuttersControlComfort {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_autoShuttersControlComfort', 'off' );
|
return ::AttrVal( $name, 'ASC_autoShuttersControlComfort', 'off' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getFreezeTemp {
|
sub getFreezeTemp {
|
||||||
@ -168,7 +157,7 @@ sub getFreezeTemp {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_freezeTemp', 3 );
|
return ::AttrVal( $name, 'ASC_freezeTemp', 3 );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getSlatDriveCmdInverse {
|
sub getSlatDriveCmdInverse {
|
||||||
@ -176,7 +165,7 @@ sub getSlatDriveCmdInverse {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_slatDriveCmdInverse', 0 );
|
return ::AttrVal( $name, 'ASC_slatDriveCmdInverse', 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub _getTempSensor {
|
sub _getTempSensor {
|
||||||
@ -186,11 +175,11 @@ sub _getTempSensor {
|
|||||||
|
|
||||||
return $self->{ASC_tempSensor}->{device}
|
return $self->{ASC_tempSensor}->{device}
|
||||||
if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} )
|
if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
|
&& ( ::gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
|
||||||
$self->{ASC_tempSensor}->{LASTGETTIME} = int( gettimeofday() );
|
$self->{ASC_tempSensor}->{LASTGETTIME} = int( ::gettimeofday() );
|
||||||
my ( $device, $reading ) =
|
my ( $device, $reading ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_tempSensor',
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
|
||||||
'none' );
|
'ASC_tempSensor', 'none' );
|
||||||
|
|
||||||
## erwartetes Ergebnis
|
## erwartetes Ergebnis
|
||||||
# DEVICE:READING
|
# DEVICE:READING
|
||||||
@ -208,7 +197,7 @@ sub getTempSensorReading {
|
|||||||
|
|
||||||
return $self->{ASC_tempSensor}->{reading}
|
return $self->{ASC_tempSensor}->{reading}
|
||||||
if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} )
|
if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
|
&& ( ::gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getTempSensor;
|
$FHEM::Automation::ShuttersControl::ascDev->_getTempSensor;
|
||||||
return $self->{ASC_tempSensor}->{reading};
|
return $self->{ASC_tempSensor}->{reading};
|
||||||
}
|
}
|
||||||
@ -220,8 +209,9 @@ sub _getResidentsDev {
|
|||||||
|
|
||||||
return $self->{ASC_residentsDev}->{device}
|
return $self->{ASC_residentsDev}->{device}
|
||||||
if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} )
|
if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < 2 );
|
&& ( ::gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) <
|
||||||
$self->{ASC_residentsDev}->{LASTGETTIME} = int( gettimeofday() );
|
2 );
|
||||||
|
$self->{ASC_residentsDev}->{LASTGETTIME} = int( ::gettimeofday() );
|
||||||
my ( $device, $reading ) =
|
my ( $device, $reading ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
|
||||||
'ASC_residentsDev', 'none' );
|
'ASC_residentsDev', 'none' );
|
||||||
@ -240,7 +230,8 @@ sub getResidentsReading {
|
|||||||
|
|
||||||
return $self->{ASC_residentsDev}->{reading}
|
return $self->{ASC_residentsDev}->{reading}
|
||||||
if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} )
|
if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < 2 );
|
&& ( ::gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) <
|
||||||
|
2 );
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev;
|
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev;
|
||||||
return $self->{ASC_residentsDev}->{reading};
|
return $self->{ASC_residentsDev}->{reading};
|
||||||
}
|
}
|
||||||
@ -252,11 +243,11 @@ sub _getRainSensor {
|
|||||||
|
|
||||||
return $self->{ASC_rainSensor}->{device}
|
return $self->{ASC_rainSensor}->{device}
|
||||||
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
&& ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||||
$self->{ASC_rainSensor}->{LASTGETTIME} = int( gettimeofday() );
|
$self->{ASC_rainSensor}->{LASTGETTIME} = int( ::gettimeofday() );
|
||||||
my ( $device, $reading, $max, $hyst, $pos, $wait ) =
|
my ( $device, $reading, $max, $hyst, $pos, $wait ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_rainSensor',
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
|
||||||
'none' );
|
'ASC_rainSensor', 'none' );
|
||||||
|
|
||||||
## erwartetes Ergebnis
|
## erwartetes Ergebnis
|
||||||
# DEVICE:READING MAX:HYST
|
# DEVICE:READING MAX:HYST
|
||||||
@ -266,10 +257,10 @@ sub _getRainSensor {
|
|||||||
$self->{ASC_rainSensor}->{reading} =
|
$self->{ASC_rainSensor}->{reading} =
|
||||||
( $reading ne 'none' ? $reading : 'rain' );
|
( $reading ne 'none' ? $reading : 'rain' );
|
||||||
$self->{ASC_rainSensor}->{triggermax} = (
|
$self->{ASC_rainSensor}->{triggermax} = (
|
||||||
( $max ne 'none'
|
( $max ne 'none' && $max =~ m{\A(-?\d+(\.\d+)?)\z}xms )
|
||||||
&& $max =~ m{\A(-?\d+(\.\d+)?)\z}xms )
|
|
||||||
? $max
|
? $max
|
||||||
: 1000 );
|
: 1000
|
||||||
|
);
|
||||||
|
|
||||||
$self->{ASC_rainSensor}->{triggerhyst} = (
|
$self->{ASC_rainSensor}->{triggerhyst} = (
|
||||||
$hyst ne 'none'
|
$hyst ne 'none'
|
||||||
@ -277,10 +268,11 @@ sub _getRainSensor {
|
|||||||
: ( $self->{ASC_rainSensor}->{triggermax} * 0 )
|
: ( $self->{ASC_rainSensor}->{triggermax} * 0 )
|
||||||
);
|
);
|
||||||
|
|
||||||
$self->{ASC_rainSensor}->{shuttersClosedPos} =
|
$self->{ASC_rainSensor}->{shuttersClosedPos} = (
|
||||||
( $pos ne 'none'
|
$pos ne 'none'
|
||||||
? $pos
|
? $pos
|
||||||
: $FHEM::Automation::ShuttersControl::shutters->getClosedPos );
|
: $FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
||||||
|
);
|
||||||
$self->{ASC_rainSensor}->{waitingTime} =
|
$self->{ASC_rainSensor}->{waitingTime} =
|
||||||
( $wait ne 'none' ? $wait : 0 );
|
( $wait ne 'none' ? $wait : 0 );
|
||||||
|
|
||||||
@ -294,7 +286,7 @@ sub getRainSensorReading {
|
|||||||
|
|
||||||
return $self->{ASC_rainSensor}->{reading}
|
return $self->{ASC_rainSensor}->{reading}
|
||||||
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
&& ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
||||||
return $self->{ASC_rainSensor}->{reading};
|
return $self->{ASC_rainSensor}->{reading};
|
||||||
}
|
}
|
||||||
@ -306,7 +298,7 @@ sub getRainTriggerMax {
|
|||||||
|
|
||||||
return $self->{ASC_rainSensor}->{triggermax}
|
return $self->{ASC_rainSensor}->{triggermax}
|
||||||
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
&& ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
||||||
return $self->{ASC_rainSensor}->{triggermax};
|
return $self->{ASC_rainSensor}->{triggermax};
|
||||||
}
|
}
|
||||||
@ -318,7 +310,7 @@ sub getRainTriggerMin {
|
|||||||
|
|
||||||
return $self->{ASC_rainSensor}->{triggerhyst}
|
return $self->{ASC_rainSensor}->{triggerhyst}
|
||||||
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
&& ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
||||||
return $self->{ASC_rainSensor}->{triggerhyst};
|
return $self->{ASC_rainSensor}->{triggerhyst};
|
||||||
}
|
}
|
||||||
@ -330,7 +322,7 @@ sub getRainSensorShuttersClosedPos {
|
|||||||
|
|
||||||
return $self->{ASC_rainSensor}->{shuttersClosedPos}
|
return $self->{ASC_rainSensor}->{shuttersClosedPos}
|
||||||
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
&& ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
||||||
return $self->{ASC_rainSensor}->{shuttersClosedPos};
|
return $self->{ASC_rainSensor}->{shuttersClosedPos};
|
||||||
}
|
}
|
||||||
@ -342,7 +334,7 @@ sub getRainWaitingTime {
|
|||||||
|
|
||||||
return $self->{ASC_rainSensor}->{waitingTime}
|
return $self->{ASC_rainSensor}->{waitingTime}
|
||||||
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
&& ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
||||||
return $self->{ASC_rainSensor}->{waitingTime};
|
return $self->{ASC_rainSensor}->{waitingTime};
|
||||||
}
|
}
|
||||||
@ -354,11 +346,11 @@ sub _getWindSensor {
|
|||||||
|
|
||||||
return $self->{ASC_windSensor}->{device}
|
return $self->{ASC_windSensor}->{device}
|
||||||
if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} )
|
if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
|
&& ( ::gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
|
||||||
$self->{ASC_windSensor}->{LASTGETTIME} = int( gettimeofday() );
|
$self->{ASC_windSensor}->{LASTGETTIME} = int( ::gettimeofday() );
|
||||||
my ( $device, $reading ) =
|
my ( $device, $reading ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_windSensor',
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
|
||||||
'none' );
|
'ASC_windSensor', 'none' );
|
||||||
|
|
||||||
return $device if ( $device eq 'none' );
|
return $device if ( $device eq 'none' );
|
||||||
$self->{ASC_windSensor}->{device} = $device;
|
$self->{ASC_windSensor}->{device} = $device;
|
||||||
@ -375,7 +367,7 @@ sub getWindSensorReading {
|
|||||||
|
|
||||||
return $self->{ASC_windSensor}->{reading}
|
return $self->{ASC_windSensor}->{reading}
|
||||||
if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} )
|
if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
|
&& ( ::gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getWindSensor;
|
$FHEM::Automation::ShuttersControl::ascDev->_getWindSensor;
|
||||||
return (
|
return (
|
||||||
defined( $self->{ASC_windSensor}->{reading} )
|
defined( $self->{ASC_windSensor}->{reading} )
|
||||||
@ -389,18 +381,23 @@ sub getBlockAscDrivesAfterManual {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 );
|
return ::AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAdvDate {
|
sub getAdvStartDate {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $name = $self->{name};
|
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;
|
1;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2020 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -48,12 +48,7 @@ use GPUtils qw(GP_Import);
|
|||||||
|
|
||||||
## Import der FHEM Funktionen
|
## Import der FHEM Funktionen
|
||||||
BEGIN {
|
BEGIN {
|
||||||
GP_Import(
|
GP_Import(qw(defs));
|
||||||
qw(
|
|
||||||
readingsSingleUpdate
|
|
||||||
ReadingsVal
|
|
||||||
defs)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setDelayCmdReading {
|
sub setDelayCmdReading {
|
||||||
@ -62,7 +57,7 @@ sub setDelayCmdReading {
|
|||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
readingsSingleUpdate(
|
::readingsSingleUpdate(
|
||||||
$hash,
|
$hash,
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
||||||
. '_lastDelayPosValue',
|
. '_lastDelayPosValue',
|
||||||
@ -79,7 +74,7 @@ sub setStateReading {
|
|||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
readingsSingleUpdate(
|
::readingsSingleUpdate(
|
||||||
$hash, 'state',
|
$hash, 'state',
|
||||||
(
|
(
|
||||||
defined($value)
|
defined($value)
|
||||||
@ -97,7 +92,7 @@ sub setPosReading {
|
|||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
readingsSingleUpdate(
|
::readingsSingleUpdate(
|
||||||
$hash,
|
$hash,
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
||||||
. '_PosValue',
|
. '_PosValue',
|
||||||
@ -113,7 +108,7 @@ sub setLastPosReading {
|
|||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
readingsSingleUpdate(
|
::readingsSingleUpdate(
|
||||||
$hash,
|
$hash,
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
||||||
. '_lastPosValue',
|
. '_lastPosValue',
|
||||||
@ -128,7 +123,7 @@ sub getPartyMode {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return ReadingsVal( $name, 'partyMode', 'off' );
|
return ::ReadingsVal( $name, 'partyMode', 'off' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getHardLockOut {
|
sub getHardLockOut {
|
||||||
@ -136,7 +131,7 @@ sub getHardLockOut {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return ReadingsVal( $name, 'hardLockOut', 'none' );
|
return ::ReadingsVal( $name, 'hardLockOut', 'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getSunriseTimeWeHoliday {
|
sub getSunriseTimeWeHoliday {
|
||||||
@ -144,7 +139,7 @@ sub getSunriseTimeWeHoliday {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return ReadingsVal( $name, 'sunriseTimeWeHoliday', 'none' );
|
return ::ReadingsVal( $name, 'sunriseTimeWeHoliday', 'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getMonitoredDevs {
|
sub getMonitoredDevs {
|
||||||
@ -152,14 +147,14 @@ sub getMonitoredDevs {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
$self->{monitoredDevs} = ReadingsVal( $name, '.monitoredDevs', 'none' );
|
$self->{monitoredDevs} = ::ReadingsVal( $name, '.monitoredDevs', 'none' );
|
||||||
return $self->{monitoredDevs};
|
return $self->{monitoredDevs};
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getOutTemp {
|
sub getOutTemp {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return ReadingsVal(
|
return ::ReadingsVal(
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getTempSensor,
|
$FHEM::Automation::ShuttersControl::ascDev->_getTempSensor,
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->getTempSensorReading,
|
$FHEM::Automation::ShuttersControl::ascDev->getTempSensorReading,
|
||||||
-100 );
|
-100 );
|
||||||
@ -169,7 +164,8 @@ sub getResidentsStatus {
|
|||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $val =
|
my $val =
|
||||||
ReadingsVal( $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
|
::ReadingsVal(
|
||||||
|
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->getResidentsReading,
|
$FHEM::Automation::ShuttersControl::ascDev->getResidentsReading,
|
||||||
'none' );
|
'none' );
|
||||||
|
|
||||||
@ -178,7 +174,7 @@ sub getResidentsStatus {
|
|||||||
return $1 && $1 eq 'pet' ? 'absent' : $2;
|
return $1 && $1 eq 'pet' ? 'absent' : $2;
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
ReadingsVal(
|
::ReadingsVal(
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
|
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
|
||||||
'homealoneType', '-' ) eq 'PET'
|
'homealoneType', '-' ) eq 'PET'
|
||||||
)
|
)
|
||||||
@ -196,7 +192,8 @@ sub getResidentsLastStatus {
|
|||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $val =
|
my $val =
|
||||||
ReadingsVal( $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
|
::ReadingsVal(
|
||||||
|
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
|
||||||
'lastState', 'none' );
|
'lastState', 'none' );
|
||||||
|
|
||||||
if ( $val =~ m{^(?:(.+)_)?(.+)$}xms ) {
|
if ( $val =~ m{^(?:(.+)_)?(.+)$}xms ) {
|
||||||
@ -204,7 +201,7 @@ sub getResidentsLastStatus {
|
|||||||
return $1 && $1 eq 'pet' ? 'absent' : $2;
|
return $1 && $1 eq 'pet' ? 'absent' : $2;
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
ReadingsVal(
|
::ReadingsVal(
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
|
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
|
||||||
'lastHomealoneType', '-' ) eq 'PET'
|
'lastHomealoneType', '-' ) eq 'PET'
|
||||||
)
|
)
|
||||||
@ -223,7 +220,7 @@ sub getAutoShuttersControlShading {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return ReadingsVal( $name, 'controlShading', 'none' );
|
return ::ReadingsVal( $name, 'controlShading', 'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getSelfDefense {
|
sub getSelfDefense {
|
||||||
@ -231,7 +228,7 @@ sub getSelfDefense {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return ReadingsVal( $name, 'selfDefense', 'none' );
|
return ::ReadingsVal( $name, 'selfDefense', 'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAzimuth {
|
sub getAzimuth {
|
||||||
@ -239,13 +236,13 @@ sub getAzimuth {
|
|||||||
|
|
||||||
my $azimuth;
|
my $azimuth;
|
||||||
|
|
||||||
$azimuth = ReadingsVal(
|
$azimuth = ::ReadingsVal(
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
|
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
|
||||||
'azimuth', -1 )
|
'azimuth', -1 )
|
||||||
if (
|
if (
|
||||||
$defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice }
|
$defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice }
|
||||||
->{TYPE} eq 'Twilight' );
|
->{TYPE} eq 'Twilight' );
|
||||||
$azimuth = ReadingsVal(
|
$azimuth = ::ReadingsVal(
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
|
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
|
||||||
'SunAz', -1 )
|
'SunAz', -1 )
|
||||||
if (
|
if (
|
||||||
@ -260,13 +257,13 @@ sub getElevation {
|
|||||||
|
|
||||||
my $elevation;
|
my $elevation;
|
||||||
|
|
||||||
$elevation = ReadingsVal(
|
$elevation = ::ReadingsVal(
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
|
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
|
||||||
'elevation', -1 )
|
'elevation', -1 )
|
||||||
if (
|
if (
|
||||||
$defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice }
|
$defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice }
|
||||||
->{TYPE} eq 'Twilight' );
|
->{TYPE} eq 'Twilight' );
|
||||||
$elevation = ReadingsVal(
|
$elevation = ::ReadingsVal(
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
|
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
|
||||||
'SunAlt', -1 )
|
'SunAlt', -1 )
|
||||||
if (
|
if (
|
||||||
@ -281,7 +278,7 @@ sub getASCenable {
|
|||||||
|
|
||||||
my $name = $self->{name};
|
my $name = $self->{name};
|
||||||
|
|
||||||
return ReadingsVal( $name, 'ascEnable', 'none' );
|
return ::ReadingsVal( $name, 'ascEnable', 'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -52,7 +52,9 @@ use FHEM::Automation::ShuttersControl::Shading qw (:ALL);
|
|||||||
use FHEM::Automation::ShuttersControl::Rainprotection qw (:ALL);
|
use FHEM::Automation::ShuttersControl::Rainprotection qw (:ALL);
|
||||||
|
|
||||||
require Exporter;
|
require Exporter;
|
||||||
our @ISA = qw(Exporter);
|
use base qw(Exporter);
|
||||||
|
|
||||||
|
# our @ISA = qw(Exporter);
|
||||||
our @EXPORT_OK = qw(
|
our @EXPORT_OK = qw(
|
||||||
EventProcessingPartyMode
|
EventProcessingPartyMode
|
||||||
EventProcessingGeneral
|
EventProcessingGeneral
|
||||||
@ -70,21 +72,6 @@ our %EXPORT_TAGS = (
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
use GPUtils qw(GP_Import);
|
|
||||||
## Import der FHEM Funktionen
|
|
||||||
BEGIN {
|
|
||||||
GP_Import(
|
|
||||||
qw(
|
|
||||||
Log3
|
|
||||||
gettimeofday
|
|
||||||
computeAlignTime
|
|
||||||
CommandSet
|
|
||||||
ReadingsVal
|
|
||||||
RemoveInternalTimer
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub EventProcessingGeneral {
|
sub EventProcessingGeneral {
|
||||||
my $hash = shift;
|
my $hash = shift;
|
||||||
my $devname = shift;
|
my $devname = shift;
|
||||||
@ -94,8 +81,12 @@ sub EventProcessingGeneral {
|
|||||||
|
|
||||||
if ( defined($devname) && ($devname) )
|
if ( defined($devname) && ($devname) )
|
||||||
{ # es wird lediglich der Devicename der Funktion mitgegeben wenn es sich nicht um global handelt daher hier die Unterscheidung
|
{ # es wird lediglich der Devicename der Funktion mitgegeben wenn es sich nicht um global handelt daher hier die Unterscheidung
|
||||||
my $windReading = $FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading // 'none';
|
my $windReading =
|
||||||
my $rainReading = $FHEM::Automation::ShuttersControl::ascDev->getRainSensorReading // 'none';
|
$FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading
|
||||||
|
// 'none';
|
||||||
|
my $rainReading =
|
||||||
|
$FHEM::Automation::ShuttersControl::ascDev->getRainSensorReading
|
||||||
|
// 'none';
|
||||||
|
|
||||||
while ( my ( $device, $deviceAttr ) =
|
while ( my ( $device, $deviceAttr ) =
|
||||||
each %{ $hash->{monitoredDevs}{$devname} } )
|
each %{ $hash->{monitoredDevs}{$devname} } )
|
||||||
@ -122,13 +113,16 @@ sub EventProcessingGeneral {
|
|||||||
EventProcessingExternalTriggerDevice( $hash, $device, $events )
|
EventProcessingExternalTriggerDevice( $hash, $device, $events )
|
||||||
if ( $deviceAttr eq 'ASC_ExternalTrigger' );
|
if ( $deviceAttr eq 'ASC_ExternalTrigger' );
|
||||||
|
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($device)
|
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
|
||||||
|
$device)
|
||||||
if ( $deviceAttr eq 'ASC_BrightnessSensor' );
|
if ( $deviceAttr eq 'ASC_BrightnessSensor' );
|
||||||
|
|
||||||
if (
|
if (
|
||||||
$deviceAttr eq 'ASC_BrightnessSensor'
|
$deviceAttr eq 'ASC_BrightnessSensor'
|
||||||
&& ( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'brightness'
|
&& ( $FHEM::Automation::ShuttersControl::shutters->getDown eq
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getUp eq 'brightness' )
|
'brightness'
|
||||||
|
|| $FHEM::Automation::ShuttersControl::shutters->getUp eq
|
||||||
|
'brightness' )
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EventProcessingBrightness( $hash, $device, $events );
|
EventProcessingBrightness( $hash, $device, $events );
|
||||||
@ -147,8 +141,9 @@ sub EventProcessingGeneral {
|
|||||||
\s(.*)$}xms
|
\s(.*)$}xms
|
||||||
)
|
)
|
||||||
{ # wurde den Attributen unserer Rolläden ein Wert zugewiesen ?
|
{ # wurde den Attributen unserer Rolläden ein Wert zugewiesen ?
|
||||||
FHEM::Automation::ShuttersControl::AddNotifyDev( $hash, $3, $1, $2 ) if ( $3 ne 'none' );
|
FHEM::Automation::ShuttersControl::AddNotifyDev( $hash, $3, $1, $2 )
|
||||||
Log3( $name, 4,
|
if ( $3 ne 'none' );
|
||||||
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessing: ATTR" );
|
"AutoShuttersControl ($name) - EventProcessing: ATTR" );
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
@ -160,7 +155,7 @@ sub EventProcessingGeneral {
|
|||||||
$}xms
|
$}xms
|
||||||
)
|
)
|
||||||
{ # wurde das Attribut unserer Rolläden gelöscht ?
|
{ # wurde das Attribut unserer Rolläden gelöscht ?
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessing: DELETEATTR" );
|
"AutoShuttersControl ($name) - EventProcessing: DELETEATTR" );
|
||||||
FHEM::Automation::ShuttersControl::DeleteNotifyDev( $hash, $1, $2 );
|
FHEM::Automation::ShuttersControl::DeleteNotifyDev( $hash, $1, $2 );
|
||||||
}
|
}
|
||||||
@ -175,11 +170,13 @@ sub EventProcessingGeneral {
|
|||||||
(.*)?}xms
|
(.*)?}xms
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
FHEM::Automation::ShuttersControl::CreateSunRiseSetShuttersTimer( $hash, $2 )
|
FHEM::Automation::ShuttersControl::CreateSunRiseSetShuttersTimer(
|
||||||
|
$hash, $2 )
|
||||||
if (
|
if (
|
||||||
$3 ne 'ASC_Time_Up_WE_Holiday'
|
$3 ne 'ASC_Time_Up_WE_Holiday'
|
||||||
|| ( $3 eq 'ASC_Time_Up_WE_Holiday'
|
|| ( $3 eq 'ASC_Time_Up_WE_Holiday'
|
||||||
&& $FHEM::Automation::ShuttersControl::ascDev->getSunriseTimeWeHoliday eq 'on' )
|
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||||
|
->getSunriseTimeWeHoliday eq 'on' )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
@ -189,7 +186,8 @@ sub EventProcessingGeneral {
|
|||||||
(.*)?}xms
|
(.*)?}xms
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
FHEM::Automation::ShuttersControl::RenewSunRiseSetShuttersTimer($hash);
|
FHEM::Automation::ShuttersControl::RenewSunRiseSetShuttersTimer(
|
||||||
|
$hash);
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
$events =~ m{^(DELETEATTR|ATTR)
|
$events =~ m{^(DELETEATTR|ATTR)
|
||||||
@ -197,7 +195,8 @@ sub EventProcessingGeneral {
|
|||||||
(.*)?}xms
|
(.*)?}xms
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$FHEM::Automation::ShuttersControl::shutters->deleteShadingStateChangeSunny;
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->deleteShadingStateChangeSunny;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
@ -210,7 +209,7 @@ m{^(DELETEATTR|ATTR) #global ATTR myASC ASC_tempSensor Cellar
|
|||||||
(.*)?}xms
|
(.*)?}xms
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
# ATTR RolloKinZimSteven_F1 ASC_Shading_Mode off
|
# ATTR RolloKinZimSteven_F1 ASC_Shading_Mode off
|
||||||
if ( $events =~ m{^ATTR\s(.*)\sASC_Shading_Mode\s(off)}xms ) {
|
if ( $events =~ m{^ATTR\s(.*)\sASC_Shading_Mode\s(off)}xms ) {
|
||||||
my %funcHash = (
|
my %funcHash = (
|
||||||
hash => $hash,
|
hash => $hash,
|
||||||
@ -219,11 +218,13 @@ m{^(DELETEATTR|ATTR) #global ATTR myASC ASC_tempSensor Cellar
|
|||||||
attrEvent => 1,
|
attrEvent => 1,
|
||||||
);
|
);
|
||||||
|
|
||||||
FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn(\%funcHash);
|
FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn(
|
||||||
|
\%funcHash );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
CommandSet( undef, $name . ' controlShading on' )
|
::CommandSet( undef, $name . ' controlShading on' )
|
||||||
if ( ReadingsVal( $name, 'controlShading', 'off' ) ne 'off' );
|
if (
|
||||||
|
::ReadingsVal( $name, 'controlShading', 'off' ) ne 'off' );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -243,9 +244,17 @@ sub EventProcessingWindowRec {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->getWinDevReading;
|
$FHEM::Automation::ShuttersControl::shutters->getWinDevReading;
|
||||||
|
|
||||||
if ( $events =~
|
if ( $events =~
|
||||||
m{.*$reading:.*?([Oo]pen(?>ed)?|[Cc]losed?|tilt(?>ed)?|true|false)}xms
|
m{.*$reading:.*?([Oo]pen(?>ed)?|[Cc]losed?|tilt(?>ed)?|true|false)}xms )
|
||||||
&& IsAfterShuttersManualBlocking($shuttersDev) )
|
|
||||||
{
|
{
|
||||||
|
return
|
||||||
|
if (
|
||||||
|
!IsAfterShuttersManualBlocking($shuttersDev)
|
||||||
|
&& ( $FHEM::Automation::ShuttersControl::shutters->getLockOut eq
|
||||||
|
'off'
|
||||||
|
|| $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getShuttersPlace ne 'terrace' )
|
||||||
|
);
|
||||||
|
|
||||||
my $match = $1;
|
my $match = $1;
|
||||||
|
|
||||||
FHEM::Automation::ShuttersControl::ASC_Debug(
|
FHEM::Automation::ShuttersControl::ASC_Debug(
|
||||||
@ -260,11 +269,6 @@ sub EventProcessingWindowRec {
|
|||||||
|
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
|
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
|
||||||
$shuttersDev);
|
$shuttersDev);
|
||||||
my $homemode =
|
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
|
|
||||||
$homemode =
|
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->getResidentsStatus
|
|
||||||
if ( $homemode eq 'none' );
|
|
||||||
|
|
||||||
#### Hardware Lock der Rollläden
|
#### Hardware Lock der Rollläden
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setHardLockOut('off')
|
$FHEM::Automation::ShuttersControl::shutters->setHardLockOut('off')
|
||||||
@ -272,9 +276,25 @@ sub EventProcessingWindowRec {
|
|||||||
&& $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
|
&& $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
|
||||||
eq 'terrace' );
|
eq 'terrace' );
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setHardLockOut('on')
|
$FHEM::Automation::ShuttersControl::shutters->setHardLockOut('on')
|
||||||
if ( $match =~ m{[Oo]pen|false}xms
|
if (
|
||||||
|
$match =~ m{[Oo]pen|false}xms
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
|
&& $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
|
||||||
eq 'terrace' );
|
eq 'terrace'
|
||||||
|
&& ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters->getOpenPos
|
||||||
|
|| $FHEM::Automation::ShuttersControl::shutters->getStatus ==
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters->getComfortOpenPos
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return
|
||||||
|
if ( !IsAfterShuttersManualBlocking($shuttersDev) );
|
||||||
|
|
||||||
|
my $homemode =
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
|
||||||
|
$homemode =
|
||||||
|
$FHEM::Automation::ShuttersControl::ascDev->getResidentsStatus
|
||||||
|
if ( $homemode eq 'none' );
|
||||||
|
|
||||||
FHEM::Automation::ShuttersControl::ASC_Debug(
|
FHEM::Automation::ShuttersControl::ASC_Debug(
|
||||||
'EventProcessingWindowRec: '
|
'EventProcessingWindowRec: '
|
||||||
@ -303,18 +323,33 @@ sub EventProcessingWindowRec {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->getComfortOpenPos
|
$FHEM::Automation::ShuttersControl::shutters->getComfortOpenPos
|
||||||
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
|
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getOpenPos
|
$FHEM::Automation::ShuttersControl::shutters->getOpenPos
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getLastDrive
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
eq 'ventilate - window open'
|
->getLastDrive eq 'ventilate - window open'
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getSubTyp
|
&& $FHEM::Automation::ShuttersControl::shutters->getSubTyp
|
||||||
eq 'twostate'
|
eq 'twostate'
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
eq 'on' )
|
->getVentilateOpen eq 'on' )
|
||||||
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
|
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getPrivacyDownPos
|
->getPrivacyDownPos
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getPrivacyDownStatus == 1
|
->getPrivacyDownStatus != 2
|
||||||
&& !$FHEM::Automation::ShuttersControl::shutters->getIsDay )
|
&& !$FHEM::Automation::ShuttersControl::shutters->getIsDay )
|
||||||
|
|| (
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters->getStatus ==
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters->getOpenPos
|
||||||
|
&& ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getLockOut ne 'off'
|
||||||
|
|| $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getShuttersPlace eq 'terrace' )
|
||||||
|
&& !$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
||||||
|
)
|
||||||
|
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus ==
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters->getOpenPos
|
||||||
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getDelayCmd ne 'none'
|
||||||
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getShuttersPlace eq 'terrace' )
|
||||||
)
|
)
|
||||||
&& ( $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen
|
&& ( $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen
|
||||||
eq 'on'
|
eq 'on'
|
||||||
@ -355,13 +390,19 @@ sub EventProcessingWindowRec {
|
|||||||
elsif (
|
elsif (
|
||||||
!$FHEM::Automation::ShuttersControl::shutters
|
!$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getIfInShading
|
->getIfInShading
|
||||||
&& ( $FHEM::Automation::ShuttersControl::shutters->getStatus
|
&& (
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters->getStatus
|
||||||
!= $FHEM::Automation::ShuttersControl::shutters
|
!= $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getOpenPos
|
->getOpenPos
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters
|
|| $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getStatus !=
|
->getStatus !=
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getLastManPos )
|
->getLastManPos
|
||||||
|
|| ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getDelayCmd ne 'none'
|
||||||
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getShuttersPlace eq 'terrace' )
|
||||||
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if ( $FHEM::Automation::ShuttersControl::shutters
|
if ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -385,6 +426,13 @@ sub EventProcessingWindowRec {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->setDriveCmd(
|
->setDriveCmd(
|
||||||
(
|
(
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getDelayCmd ne 'none'
|
||||||
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getShuttersPlace eq 'terrace'
|
||||||
|
? $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getDelayCmd
|
||||||
|
: (
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getVentilatePosAfterDayClosed eq 'open'
|
->getVentilatePosAfterDayClosed eq 'open'
|
||||||
? $FHEM::Automation::ShuttersControl::shutters
|
? $FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -392,19 +440,22 @@ sub EventProcessingWindowRec {
|
|||||||
: $FHEM::Automation::ShuttersControl::shutters
|
: $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getLastManPos
|
->getLastManPos
|
||||||
)
|
)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
!$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
!$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getModeDown eq 'roommate'
|
&& $FHEM::Automation::ShuttersControl::shutters->getModeDown eq
|
||||||
&& ( $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus eq 'home'
|
'roommate'
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus eq 'awoken' )
|
&& ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getRoommatesStatus eq 'home'
|
||||||
|
|| $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getRoommatesStatus eq 'awoken' )
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
|
||||||
->setDriveCmd(
|
|
||||||
(
|
(
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getVentilatePosAfterDayClosed eq 'open'
|
->getVentilatePosAfterDayClosed eq 'open'
|
||||||
@ -468,9 +519,16 @@ sub EventProcessingWindowRec {
|
|||||||
)
|
)
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen
|
&& $FHEM::Automation::ShuttersControl::shutters->getVentilateOpen
|
||||||
eq 'on'
|
eq 'on'
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters
|
&& (
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getQueryShuttersPos(
|
->getQueryShuttersPos(
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getVentilatePos
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getVentilatePos
|
||||||
|
)
|
||||||
|
|| ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getShuttersPlace eq 'terrace'
|
||||||
|
&& $FHEM::Automation::ShuttersControl::shutters->getSubTyp
|
||||||
|
eq 'twostate' )
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -501,7 +559,7 @@ sub EventProcessingWindowRec {
|
|||||||
if (
|
if (
|
||||||
$FHEM::Automation::ShuttersControl::ascDev
|
$FHEM::Automation::ShuttersControl::ascDev
|
||||||
->getAutoShuttersControlComfort eq 'on'
|
->getAutoShuttersControlComfort eq 'on'
|
||||||
and $FHEM::Automation::ShuttersControl::shutters
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getQueryShuttersPos(
|
->getQueryShuttersPos(
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getComfortOpenPos
|
->getComfortOpenPos
|
||||||
@ -527,7 +585,7 @@ sub EventProcessingWindowRec {
|
|||||||
$setLastDrive = 'ventilate - window open';
|
$setLastDrive = 'ventilate - window open';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( defined($posValue) && $posValue ) {
|
if ( defined($posValue) ) {
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
||||||
$setLastDrive);
|
$setLastDrive);
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setNoDelay(1);
|
$FHEM::Automation::ShuttersControl::shutters->setNoDelay(1);
|
||||||
@ -553,14 +611,15 @@ sub EventProcessingRoommate {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->getRoommatesReading;
|
$FHEM::Automation::ShuttersControl::shutters->getRoommatesReading;
|
||||||
|
|
||||||
if ( $events =~ m{$reading:\s(absent|gotosleep|asleep|awoken|home)}xms ) {
|
if ( $events =~ m{$reading:\s(absent|gotosleep|asleep|awoken|home)}xms ) {
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessingRoommate: "
|
"AutoShuttersControl ($name) - EventProcessingRoommate: "
|
||||||
. $FHEM::Automation::ShuttersControl::shutters
|
. $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getRoommatesReading );
|
->getRoommatesReading );
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessingRoommate: $shuttersDev und Events $events"
|
"AutoShuttersControl ($name) - EventProcessingRoommate: $shuttersDev und Events $events"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
my $event = $1;
|
||||||
my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp;
|
my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp;
|
||||||
my $getModeDown =
|
my $getModeDown =
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getModeDown;
|
$FHEM::Automation::ShuttersControl::shutters->getModeDown;
|
||||||
@ -568,21 +627,30 @@ sub EventProcessingRoommate {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
|
$FHEM::Automation::ShuttersControl::shutters->getRoommatesStatus;
|
||||||
my $getRoommatesLastStatus =
|
my $getRoommatesLastStatus =
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getRoommatesLastStatus;
|
$FHEM::Automation::ShuttersControl::shutters->getRoommatesLastStatus;
|
||||||
my $event = $1;
|
my $getUp = $FHEM::Automation::ShuttersControl::shutters->getUp;
|
||||||
my $posValue = $FHEM::Automation::ShuttersControl::shutters->getStatus;
|
my $getDown = $FHEM::Automation::ShuttersControl::shutters->getDown;
|
||||||
|
my $getIsDay = $FHEM::Automation::ShuttersControl::shutters->getIsDay;
|
||||||
|
|
||||||
|
my $posValue = $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getStatus; # !!! ACHTUNG!!!
|
||||||
|
|
||||||
if (
|
if (
|
||||||
( $event eq 'home' || $event eq 'awoken' )
|
( $event eq 'home' || $event eq 'awoken' )
|
||||||
&& ( $getRoommatesStatus eq 'home'
|
&& ( $getRoommatesStatus eq 'home'
|
||||||
|| $getRoommatesStatus eq 'awoken' )
|
|| $getRoommatesStatus eq 'awoken' )
|
||||||
&& ( $FHEM::Automation::ShuttersControl::ascDev
|
&& (
|
||||||
|
$FHEM::Automation::ShuttersControl::ascDev
|
||||||
->getAutoShuttersControlMorning eq 'on'
|
->getAutoShuttersControlMorning eq 'on'
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getUp eq
|
|| (
|
||||||
'roommate' )
|
$getUp eq 'roommate'
|
||||||
|
&& ( $getRoommatesLastStatus eq 'asleep'
|
||||||
|
|| $getRoommatesLastStatus ne 'awoken' )
|
||||||
|
)
|
||||||
|
)
|
||||||
&& IsAfterShuttersManualBlocking($shuttersDev)
|
&& IsAfterShuttersManualBlocking($shuttersDev)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessingRoommate_1: $shuttersDev und Events $events"
|
"AutoShuttersControl ($name) - EventProcessingRoommate_1: $shuttersDev und Events $events"
|
||||||
);
|
);
|
||||||
if (
|
if (
|
||||||
@ -591,26 +659,24 @@ sub EventProcessingRoommate {
|
|||||||
$getRoommatesLastStatus eq 'asleep'
|
$getRoommatesLastStatus eq 'asleep'
|
||||||
&& ( $FHEM::Automation::ShuttersControl::shutters
|
&& ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getModeUp eq 'always'
|
->getModeUp eq 'always'
|
||||||
or $FHEM::Automation::ShuttersControl::shutters
|
|| $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getModeUp eq $event )
|
->getModeUp eq $event )
|
||||||
)
|
)
|
||||||
|| (
|
|| (
|
||||||
$getRoommatesLastStatus eq 'awoken'
|
$getRoommatesLastStatus eq 'awoken'
|
||||||
&& ( $FHEM::Automation::ShuttersControl::shutters
|
&& ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getModeUp eq 'always'
|
->getModeUp eq 'always'
|
||||||
or $FHEM::Automation::ShuttersControl::shutters
|
|| $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getModeUp eq $event )
|
->getModeUp eq $event )
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
&& ( $FHEM::Automation::ShuttersControl::shutters->getIsDay
|
&& ( $getIsDay
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getUp eq
|
|| $getUp eq 'roommate' )
|
||||||
'roommate' )
|
|
||||||
&& ( IsAfterShuttersTimeBlocking($shuttersDev)
|
&& ( IsAfterShuttersTimeBlocking($shuttersDev)
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getUp eq
|
|| $getUp eq 'roommate' )
|
||||||
'roommate' )
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessingRoommate_2: $shuttersDev und Events $events"
|
"AutoShuttersControl ($name) - EventProcessingRoommate_2: $shuttersDev und Events $events"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -648,7 +714,7 @@ sub EventProcessingRoommate {
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
$getIsDay
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getIfInShading
|
->getIfInShading
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getStatus
|
&& $FHEM::Automation::ShuttersControl::shutters->getStatus
|
||||||
@ -668,12 +734,11 @@ sub EventProcessingRoommate {
|
|||||||
ShadingProcessingDriveCommand( $hash, $shuttersDev, 1 );
|
ShadingProcessingDriveCommand( $hash, $shuttersDev, 1 );
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
!$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
!$getIsDay
|
||||||
&& IsAfterShuttersTimeBlocking($shuttersDev)
|
&& IsAfterShuttersTimeBlocking($shuttersDev)
|
||||||
&& ( $getModeDown eq 'home'
|
&& ( $getModeDown eq 'home'
|
||||||
|| $getModeDown eq 'always' )
|
|| $getModeDown eq 'always' )
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getDown ne
|
&& $getDown ne 'roommate'
|
||||||
'roommate'
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
||||||
@ -711,11 +776,7 @@ sub EventProcessingRoommate {
|
|||||||
$hash, $shuttersDev, $posValue );
|
$hash, $shuttersDev, $posValue );
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
(
|
( $getIsDay || $getUp eq 'roommate' )
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getUp
|
|
||||||
eq 'roommate'
|
|
||||||
)
|
|
||||||
&& IsAfterShuttersTimeBlocking($shuttersDev)
|
&& IsAfterShuttersTimeBlocking($shuttersDev)
|
||||||
&& ( $getModeUp eq 'home'
|
&& ( $getModeUp eq 'home'
|
||||||
|| $getModeUp eq 'always' )
|
|| $getModeUp eq 'always' )
|
||||||
@ -797,11 +858,9 @@ sub EventProcessingRoommate {
|
|||||||
'absent'
|
'absent'
|
||||||
&& ( $FHEM::Automation::ShuttersControl::ascDev
|
&& ( $FHEM::Automation::ShuttersControl::ascDev
|
||||||
->getAutoShuttersControlEvening eq 'on'
|
->getAutoShuttersControlEvening eq 'on'
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getDown eq
|
|| $getDown eq 'roommate' )
|
||||||
'roommate' )
|
|
||||||
&& ( IsAfterShuttersManualBlocking($shuttersDev)
|
&& ( IsAfterShuttersManualBlocking($shuttersDev)
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getDown eq
|
|| $getDown eq 'roommate' )
|
||||||
'roommate' )
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
||||||
@ -831,9 +890,8 @@ sub EventProcessingRoommate {
|
|||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
$event eq 'absent'
|
$event eq 'absent'
|
||||||
&& ( !$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
&& ( !$getIsDay
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getDown eq
|
|| $getDown eq 'roommate'
|
||||||
'roommate'
|
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getShadingMode
|
|| $FHEM::Automation::ShuttersControl::shutters->getShadingMode
|
||||||
eq 'absent'
|
eq 'absent'
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getModeUp eq
|
|| $FHEM::Automation::ShuttersControl::shutters->getModeUp eq
|
||||||
@ -842,16 +900,12 @@ sub EventProcessingRoommate {
|
|||||||
'absent' )
|
'absent' )
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessingRoommate absent: $shuttersDev"
|
"AutoShuttersControl ($name) - EventProcessingRoommate absent: $shuttersDev"
|
||||||
);
|
);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
(
|
$getIsDay
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getUp eq
|
|
||||||
'roommate'
|
|
||||||
)
|
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getIfInShading
|
&& $FHEM::Automation::ShuttersControl::shutters->getIfInShading
|
||||||
&& !$FHEM::Automation::ShuttersControl::shutters
|
&& !$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getQueryShuttersPos(
|
->getQueryShuttersPos(
|
||||||
@ -861,7 +915,7 @@ sub EventProcessingRoommate {
|
|||||||
eq 'absent'
|
eq 'absent'
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessingRoommate Shading: $shuttersDev"
|
"AutoShuttersControl ($name) - EventProcessingRoommate Shading: $shuttersDev"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -873,17 +927,11 @@ sub EventProcessingRoommate {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->getShadingPos
|
$FHEM::Automation::ShuttersControl::shutters->getShadingPos
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (( !$getIsDay || $getDown eq 'roommate' )
|
||||||
(
|
|
||||||
!$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getDown eq
|
|
||||||
'roommate'
|
|
||||||
)
|
|
||||||
&& $getModeDown eq 'absent'
|
&& $getModeDown eq 'absent'
|
||||||
&& $getRoommatesStatus eq 'absent'
|
&& $getRoommatesStatus eq 'absent' )
|
||||||
)
|
|
||||||
{
|
{
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessingRoommate Down: $shuttersDev"
|
"AutoShuttersControl ($name) - EventProcessingRoommate Down: $shuttersDev"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -895,12 +943,12 @@ sub EventProcessingRoommate {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
$FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
elsif ($FHEM::Automation::ShuttersControl::shutters->getIsDay
|
elsif ($getIsDay
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getModeUp eq
|
&& $FHEM::Automation::ShuttersControl::shutters->getModeUp eq
|
||||||
'absent'
|
'absent'
|
||||||
&& $getRoommatesStatus eq 'absent' )
|
&& $getRoommatesStatus eq 'absent' )
|
||||||
{
|
{
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessingRoommate Up: $shuttersDev"
|
"AutoShuttersControl ($name) - EventProcessingRoommate Up: $shuttersDev"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -911,7 +959,7 @@ sub EventProcessingRoommate {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->getOpenPos );
|
$FHEM::Automation::ShuttersControl::shutters->getOpenPos );
|
||||||
}
|
}
|
||||||
|
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessingRoommate NICHTS: $shuttersDev"
|
"AutoShuttersControl ($name) - EventProcessingRoommate NICHTS: $shuttersDev"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -948,6 +996,7 @@ sub EventProcessingResidents {
|
|||||||
&& $FHEM::Automation::ShuttersControl::shutters
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getSelfDefenseMode ne 'off'
|
->getSelfDefenseMode ne 'off'
|
||||||
|| $getModeDown eq 'absent'
|
|| $getModeDown eq 'absent'
|
||||||
|
|
||||||
# || $getModeDown eq 'always' ) Wird zu Testzwecken auskommentiert, siehe #90 Github
|
# || $getModeDown eq 'always' ) Wird zu Testzwecken auskommentiert, siehe #90 Github
|
||||||
|| ( $FHEM::Automation::ShuttersControl::shutters
|
|| ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getShadingMode eq 'absent'
|
->getShadingMode eq 'absent'
|
||||||
@ -965,13 +1014,17 @@ sub EventProcessingResidents {
|
|||||||
&& (
|
&& (
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getSelfDefenseMode eq 'absent'
|
->getSelfDefenseMode eq 'absent'
|
||||||
|| ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2
|
|| (
|
||||||
|
CheckIfShuttersWindowRecOpen($shuttersDev) == 2
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getSelfDefenseMode eq 'gone'
|
->getSelfDefenseMode eq 'gone'
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters
|
&& ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getShuttersPlace eq 'terrace'
|
->getShuttersPlace eq 'terrace'
|
||||||
|
|| $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getShuttersPlace eq 'EG_window' )
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getSelfDefenseMode ne 'off' )
|
->getSelfDefenseMode ne 'off'
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -1022,11 +1075,14 @@ sub EventProcessingResidents {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getLastPos );
|
->getLastPos );
|
||||||
}
|
}
|
||||||
elsif ( $getModeDown eq 'absent' # || $getModeDown eq 'always' ) Wird zu Testzwecken auskommentiert, siehe #90 Github
|
elsif (
|
||||||
|
$getModeDown eq
|
||||||
|
'absent' # || $getModeDown eq 'always' ) Wird zu Testzwecken auskommentiert, siehe #90 Github
|
||||||
&& !$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
&& !$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
||||||
&& IsAfterShuttersTimeBlocking($shuttersDev)
|
&& IsAfterShuttersTimeBlocking($shuttersDev)
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getRoommatesStatus eq 'none' )
|
->getRoommatesStatus eq 'none'
|
||||||
|
)
|
||||||
{
|
{
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
||||||
'residents absent');
|
'residents absent');
|
||||||
@ -1086,6 +1142,8 @@ sub EventProcessingResidents {
|
|||||||
->getRoommatesStatus eq 'none'
|
->getRoommatesStatus eq 'none'
|
||||||
&& ( $getModeDown eq 'home'
|
&& ( $getModeDown eq 'home'
|
||||||
|| $getModeDown eq 'always' )
|
|| $getModeDown eq 'always' )
|
||||||
|
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||||
|
->getAutoShuttersControlEvening eq 'on'
|
||||||
&& $getResidentsLastStatus ne 'asleep'
|
&& $getResidentsLastStatus ne 'asleep'
|
||||||
&& $getResidentsLastStatus ne 'awoken'
|
&& $getResidentsLastStatus ne 'awoken'
|
||||||
&& IsAfterShuttersTimeBlocking($shuttersDev)
|
&& IsAfterShuttersTimeBlocking($shuttersDev)
|
||||||
@ -1169,7 +1227,7 @@ sub EventProcessingResidents {
|
|||||||
->getSelfDefenseState
|
->getSelfDefenseState
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
RemoveInternalTimer(
|
::RemoveInternalTimer(
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getSelfDefenseAbsentTimerhash )
|
->getSelfDefenseAbsentTimerhash )
|
||||||
if ( $getResidentsLastStatus eq 'absent'
|
if ( $getResidentsLastStatus eq 'absent'
|
||||||
@ -1233,6 +1291,8 @@ sub EventProcessingResidents {
|
|||||||
->getRoommatesStatus eq 'none'
|
->getRoommatesStatus eq 'none'
|
||||||
&& ( $getModeUp eq 'home'
|
&& ( $getModeUp eq 'home'
|
||||||
|| $getModeUp eq 'always' )
|
|| $getModeUp eq 'always' )
|
||||||
|
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||||
|
->getAutoShuttersControlMorning eq 'on'
|
||||||
&& IsAfterShuttersTimeBlocking($shuttersDev)
|
&& IsAfterShuttersTimeBlocking($shuttersDev)
|
||||||
&& !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
|
&& !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
|
||||||
&& !$FHEM::Automation::ShuttersControl::shutters
|
&& !$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -1351,6 +1411,11 @@ sub EventProcessingWind {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
||||||
? $FHEM::Automation::ShuttersControl::shutters
|
? $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getLastPos
|
->getLastPos
|
||||||
|
: (
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getShuttersPlace eq 'awning'
|
||||||
|
? $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getOpenPos
|
||||||
: (
|
: (
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getPrivacyDownStatus == 2
|
->getPrivacyDownStatus == 2
|
||||||
@ -1366,6 +1431,7 @@ sub EventProcessingWind {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->setWindProtectionStatus('unprotected');
|
->setWindProtectionStatus('unprotected');
|
||||||
@ -1422,8 +1488,8 @@ sub EventProcessingBrightness {
|
|||||||
(
|
(
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
int( gettimeofday() / 86400 ) == int(
|
int( ::gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpEarly
|
->getTimeUpEarly
|
||||||
@ -1444,8 +1510,8 @@ sub EventProcessingBrightness {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|| (
|
|| (
|
||||||
int( gettimeofday() / 86400 ) == int(
|
int( ::gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpWeHoliday
|
->getTimeUpWeHoliday
|
||||||
@ -1458,8 +1524,8 @@ sub EventProcessingBrightness {
|
|||||||
->getTimeUpWeHoliday ne '01:25'
|
->getTimeUpWeHoliday ne '01:25'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
&& int( gettimeofday() / 86400 ) == int(
|
&& int( ::gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpLate
|
->getTimeUpLate
|
||||||
@ -1468,8 +1534,8 @@ sub EventProcessingBrightness {
|
|||||||
|
|
||||||
|| (
|
|| (
|
||||||
(
|
(
|
||||||
int( gettimeofday() / 86400 ) != int(
|
int( ::gettimeofday() / 86400 ) != int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpEarly
|
->getTimeUpEarly
|
||||||
@ -1490,8 +1556,8 @@ sub EventProcessingBrightness {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|| (
|
|| (
|
||||||
int( gettimeofday() / 86400 ) != int(
|
int( ::gettimeofday() / 86400 ) != int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpWeHoliday
|
->getTimeUpWeHoliday
|
||||||
@ -1504,8 +1570,8 @@ sub EventProcessingBrightness {
|
|||||||
->getTimeUpWeHoliday ne '01:25'
|
->getTimeUpWeHoliday ne '01:25'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
&& int( gettimeofday() / 86400 ) != int(
|
&& int( ::gettimeofday() / 86400 ) != int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpLate
|
->getTimeUpLate
|
||||||
@ -1514,15 +1580,15 @@ sub EventProcessingBrightness {
|
|||||||
)
|
)
|
||||||
&& (
|
&& (
|
||||||
(
|
(
|
||||||
int( gettimeofday() / 86400 ) == int(
|
int( ::gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeDownEarly
|
->getTimeDownEarly
|
||||||
) / 86400
|
) / 86400
|
||||||
)
|
)
|
||||||
&& int( gettimeofday() / 86400 ) == int(
|
&& int( ::gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeDownLate
|
->getTimeDownLate
|
||||||
@ -1530,15 +1596,15 @@ sub EventProcessingBrightness {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|| (
|
|| (
|
||||||
int( gettimeofday() / 86400 ) != int(
|
int( ::gettimeofday() / 86400 ) != int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeDownEarly
|
->getTimeDownEarly
|
||||||
) / 86400
|
) / 86400
|
||||||
)
|
)
|
||||||
&& int( gettimeofday() / 86400 ) != int(
|
&& int( ::gettimeofday() / 86400 ) != int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeDownLate
|
->getTimeDownLate
|
||||||
@ -1611,8 +1677,8 @@ sub EventProcessingBrightness {
|
|||||||
(
|
(
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
int( gettimeofday() / 86400 ) != int(
|
int( ::gettimeofday() / 86400 ) != int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpEarly
|
->getTimeUpEarly
|
||||||
@ -1632,8 +1698,8 @@ sub EventProcessingBrightness {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|| (
|
|| (
|
||||||
int( gettimeofday() / 86400 ) != int(
|
int( ::gettimeofday() / 86400 ) != int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpWeHoliday
|
->getTimeUpWeHoliday
|
||||||
@ -1646,8 +1712,8 @@ sub EventProcessingBrightness {
|
|||||||
->getTimeUpWeHoliday ne '01:25'
|
->getTimeUpWeHoliday ne '01:25'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
&& int( gettimeofday() / 86400 ) == int(
|
&& int( ::gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpLate
|
->getTimeUpLate
|
||||||
@ -1677,7 +1743,7 @@ sub EventProcessingBrightness {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($shuttersDev) - EventProcessingBrightness: Steuerung für Morgens"
|
"AutoShuttersControl ($shuttersDev) - EventProcessingBrightness: Steuerung für Morgens"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -1758,7 +1824,8 @@ sub EventProcessingBrightness {
|
|||||||
. $FHEM::Automation::ShuttersControl::shutters
|
. $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getLastDrive );
|
->getLastDrive );
|
||||||
|
|
||||||
FHEM::Automation::ShuttersControl::CreateSunRiseSetShuttersTimer( $hash, $shuttersDev );
|
FHEM::Automation::ShuttersControl::CreateSunRiseSetShuttersTimer(
|
||||||
|
$hash, $shuttersDev );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -1801,13 +1868,15 @@ sub EventProcessingBrightness {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
int( gettimeofday() / 86400 ) != int(
|
int( ::gettimeofday() / 86400 ) != int(
|
||||||
computeAlignTime( '24:00',
|
::computeAlignTime(
|
||||||
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeDownEarly ) / 86400
|
->getTimeDownEarly
|
||||||
|
) / 86400
|
||||||
)
|
)
|
||||||
&& int( gettimeofday() / 86400 ) == int(
|
&& int( ::gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeDownLate
|
->getTimeDownLate
|
||||||
@ -1827,7 +1896,7 @@ sub EventProcessingBrightness {
|
|||||||
->getAutoShuttersControlEvening eq 'on'
|
->getAutoShuttersControlEvening eq 'on'
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($shuttersDev) - EventProcessingBrightness: Steuerung für Abends"
|
"AutoShuttersControl ($shuttersDev) - EventProcessingBrightness: Steuerung für Abends"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -1935,10 +2004,8 @@ sub EventProcessingBrightness {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
||||||
$lastDrive);
|
$lastDrive);
|
||||||
|
|
||||||
if (
|
if ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
->getPrivacyDownStatus != 2 )
|
||||||
->getPrivacyDownStatus != 2
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setSunrise(0);
|
$FHEM::Automation::ShuttersControl::shutters->setSunrise(0);
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setSunset(1);
|
$FHEM::Automation::ShuttersControl::shutters->setSunset(1);
|
||||||
@ -2008,7 +2075,7 @@ sub EventProcessingShadingBrightness {
|
|||||||
: $FHEM::Automation::ShuttersControl::ascDev->getOutTemp
|
: $FHEM::Automation::ShuttersControl::ascDev->getOutTemp
|
||||||
);
|
);
|
||||||
|
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness"
|
"AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness"
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -2019,7 +2086,7 @@ sub EventProcessingShadingBrightness {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if ( $events =~ m{$reading:\s(\d+(\.\d+)?)}xms ) {
|
if ( $events =~ m{$reading:\s(\d+(\.\d+)?)}xms ) {
|
||||||
Log3(
|
::Log3(
|
||||||
$name, 4,
|
$name, 4,
|
||||||
"AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness
|
"AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness
|
||||||
Brightness: " . $1
|
Brightness: " . $1
|
||||||
@ -2186,18 +2253,18 @@ sub EventProcessingPartyMode {
|
|||||||
&& $FHEM::Automation::ShuttersControl::shutters->getSubTyp eq
|
&& $FHEM::Automation::ShuttersControl::shutters->getSubTyp eq
|
||||||
'threestate' )
|
'threestate' )
|
||||||
{
|
{
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessingPartyMode Fenster offen"
|
"AutoShuttersControl ($name) - EventProcessingPartyMode Fenster offen"
|
||||||
);
|
);
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setDelayCmd(
|
$FHEM::Automation::ShuttersControl::shutters->setDelayCmd(
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
$FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
||||||
);
|
);
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessingPartyMode - Spring in ShuttersCommandDelaySet"
|
"AutoShuttersControl ($name) - EventProcessingPartyMode - Spring in ShuttersCommandDelaySet"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - EventProcessingPartyMode Fenster nicht offen"
|
"AutoShuttersControl ($name) - EventProcessingPartyMode Fenster nicht offen"
|
||||||
);
|
);
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
||||||
@ -2207,12 +2274,14 @@ sub EventProcessingPartyMode {
|
|||||||
$shuttersDev,
|
$shuttersDev,
|
||||||
(
|
(
|
||||||
CheckIfShuttersWindowRecOpen($shuttersDev) == 0
|
CheckIfShuttersWindowRecOpen($shuttersDev) == 0
|
||||||
? ($FHEM::Automation::ShuttersControl::shutters
|
? (
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getSleepPos > 0
|
->getSleepPos > 0
|
||||||
? $FHEM::Automation::ShuttersControl::shutters
|
? $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getSleepPos
|
->getSleepPos
|
||||||
: $FHEM::Automation::ShuttersControl::shutters
|
: $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getClosedPos)
|
->getClosedPos
|
||||||
|
)
|
||||||
: $FHEM::Automation::ShuttersControl::shutters
|
: $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getVentilatePos
|
->getVentilatePos
|
||||||
)
|
)
|
||||||
@ -2286,8 +2355,8 @@ sub EventProcessingShutters {
|
|||||||
'EventProcessingShutters: '
|
'EventProcessingShutters: '
|
||||||
. $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
. $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
||||||
. ' - Event vom Rollo erkannt. Es wird nun eine etwaige manuelle Fahrt ausgewertet.'
|
. ' - Event vom Rollo erkannt. Es wird nun eine etwaige manuelle Fahrt ausgewertet.'
|
||||||
. ' Int von gettimeofday: '
|
. ' Int von ::gettimeofday: '
|
||||||
. int( gettimeofday() )
|
. int( ::gettimeofday() )
|
||||||
. ' Last Position Timestamp: '
|
. ' Last Position Timestamp: '
|
||||||
. $FHEM::Automation::ShuttersControl::shutters
|
. $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getLastPosTimestamp
|
->getLastPosTimestamp
|
||||||
@ -2301,13 +2370,13 @@ sub EventProcessingShutters {
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
(
|
(
|
||||||
int( gettimeofday() ) -
|
int( ::gettimeofday() ) -
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getLastPosTimestamp
|
->getLastPosTimestamp
|
||||||
) >
|
) >
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration
|
$FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration
|
||||||
&& (
|
&& (
|
||||||
int( gettimeofday() ) -
|
int( ::gettimeofday() ) -
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getLastManPosTimestamp ) >
|
->getLastManPosTimestamp ) >
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration
|
$FHEM::Automation::ShuttersControl::shutters->getDriveUpMaxDuration
|
||||||
@ -2332,6 +2401,22 @@ sub EventProcessingShutters {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->setLastDriveReading;
|
$FHEM::Automation::ShuttersControl::shutters->setLastDriveReading;
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->setStateReading;
|
$FHEM::Automation::ShuttersControl::ascDev->setStateReading;
|
||||||
|
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters->setHardLockOut('on')
|
||||||
|
if (
|
||||||
|
(
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters->getStatus ==
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getComfortOpenPos
|
||||||
|
|| ( $FHEM::Automation::ShuttersControl::shutters->getStatus
|
||||||
|
== $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getOpenPos
|
||||||
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getLastDrive eq 'ventilate - window open' )
|
||||||
|
)
|
||||||
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getShuttersPlace eq 'terrace'
|
||||||
|
);
|
||||||
|
|
||||||
FHEM::Automation::ShuttersControl::ASC_Debug(
|
FHEM::Automation::ShuttersControl::ASC_Debug(
|
||||||
'EventProcessingShutters: eine automatisierte Fahrt durch ASC wurde erkannt! Es werden nun die LastDriveReading und StateReading Werte gesetzt!'
|
'EventProcessingShutters: eine automatisierte Fahrt durch ASC wurde erkannt! Es werden nun die LastDriveReading und StateReading Werte gesetzt!'
|
||||||
);
|
);
|
||||||
@ -2426,7 +2511,7 @@ sub EventProcessingExternalTriggerDevice {
|
|||||||
'external trigger device inactive');
|
'external trigger device inactive');
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setNoDelay(1);
|
$FHEM::Automation::ShuttersControl::shutters->setNoDelay(1);
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(
|
$FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(
|
||||||
1);
|
0);
|
||||||
FHEM::Automation::ShuttersControl::ShuttersCommandSet(
|
FHEM::Automation::ShuttersControl::ShuttersCommandSet(
|
||||||
$hash,
|
$hash,
|
||||||
$shuttersDev,
|
$shuttersDev,
|
||||||
@ -2444,7 +2529,4 @@ sub EventProcessingExternalTriggerDevice {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2020 Copyright: Marko Oldenburg (fhemsupport@cooltux.net)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -46,7 +46,9 @@ use POSIX qw(strftime);
|
|||||||
use utf8;
|
use utf8;
|
||||||
|
|
||||||
require Exporter;
|
require Exporter;
|
||||||
our @ISA = qw(Exporter);
|
use base qw(Exporter);
|
||||||
|
|
||||||
|
# our @ISA = qw(Exporter);
|
||||||
our @EXPORT_OK = qw(
|
our @EXPORT_OK = qw(
|
||||||
PositionValueWindowRec
|
PositionValueWindowRec
|
||||||
AutoSearchTwilightDev
|
AutoSearchTwilightDev
|
||||||
@ -89,21 +91,7 @@ our %EXPORT_TAGS = (
|
|||||||
use GPUtils qw(GP_Import);
|
use GPUtils qw(GP_Import);
|
||||||
## Import der FHEM Funktionen
|
## Import der FHEM Funktionen
|
||||||
BEGIN {
|
BEGIN {
|
||||||
GP_Import(
|
GP_Import(qw(cmdFromAnalyze));
|
||||||
qw(
|
|
||||||
devspec2array
|
|
||||||
CommandAttr
|
|
||||||
AttrVal
|
|
||||||
Log3
|
|
||||||
computeAlignTime
|
|
||||||
gettimeofday
|
|
||||||
sunset
|
|
||||||
sunset_abs
|
|
||||||
sunrise
|
|
||||||
sunrise_abs
|
|
||||||
cmdFromAnalyze
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub PositionValueWindowRec {
|
sub PositionValueWindowRec {
|
||||||
@ -156,12 +144,12 @@ sub AutoSearchTwilightDev {
|
|||||||
|
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
if ( devspec2array('TYPE=(Astro|Twilight)') > 0 ) {
|
if ( ::devspec2array('TYPE=(Astro|Twilight)') > 0 ) {
|
||||||
CommandAttr( undef,
|
::CommandAttr( undef,
|
||||||
$name
|
$name
|
||||||
. ' ASC_twilightDevice '
|
. ' ASC_twilightDevice '
|
||||||
. ( devspec2array('TYPE=(Astro|Twilight)') )[0] )
|
. ( ::devspec2array('TYPE=(Astro|Twilight)') )[0] )
|
||||||
if ( AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' );
|
if ( ::AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -172,8 +160,10 @@ sub GetAttrValues {
|
|||||||
my $attribut = shift;
|
my $attribut = shift;
|
||||||
my $default = shift;
|
my $default = shift;
|
||||||
|
|
||||||
my @values = split( ' ',
|
my @values = split(
|
||||||
AttrVal( $dev, $attribut, ( defined($default) ? $default : 'none' ) ) );
|
' ',
|
||||||
|
::AttrVal( $dev, $attribut, ( defined($default) ? $default : 'none' ) )
|
||||||
|
);
|
||||||
my ( $value1, $value2 ) = split( ':', $values[0] );
|
my ( $value1, $value2 ) = split( ':', $values[0] );
|
||||||
|
|
||||||
my ( $value3, $value4, $value5, $value6, $value7, $value8 );
|
my ( $value3, $value4, $value5, $value6, $value7, $value8 );
|
||||||
@ -227,10 +217,10 @@ sub ExtractNotifyDevFromEvent {
|
|||||||
|
|
||||||
my %notifyDevs;
|
my %notifyDevs;
|
||||||
while ( my $notifyDev = each %{ $hash->{monitoredDevs} } ) {
|
while ( my $notifyDev = each %{ $hash->{monitoredDevs} } ) {
|
||||||
Log3( $hash->{NAME}, 4,
|
::Log3( $hash->{NAME}, 4,
|
||||||
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - NotifyDev: "
|
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - NotifyDev: "
|
||||||
. $notifyDev );
|
. $notifyDev );
|
||||||
Log3( $hash->{NAME}, 5,
|
::Log3( $hash->{NAME}, 5,
|
||||||
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDev: "
|
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDev: "
|
||||||
. $shuttersDev );
|
. $shuttersDev );
|
||||||
|
|
||||||
@ -238,10 +228,10 @@ sub ExtractNotifyDevFromEvent {
|
|||||||
&& $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} eq
|
&& $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} eq
|
||||||
$shuttersAttr )
|
$shuttersAttr )
|
||||||
{
|
{
|
||||||
Log3( $hash->{NAME}, 4,
|
::Log3( $hash->{NAME}, 4,
|
||||||
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDevHash: "
|
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDevHash: "
|
||||||
. $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} );
|
. $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} );
|
||||||
Log3( $hash->{NAME}, 5,
|
::Log3( $hash->{NAME}, 5,
|
||||||
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - return ShuttersDev: "
|
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - return ShuttersDev: "
|
||||||
. $notifyDev );
|
. $notifyDev );
|
||||||
$notifyDevs{$notifyDev} = $shuttersDev;
|
$notifyDevs{$notifyDev} = $shuttersDev;
|
||||||
@ -279,24 +269,27 @@ sub _IsDay {
|
|||||||
(
|
(
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
int( gettimeofday() / 86400 ) != int(
|
int( ::gettimeofday() / 86400 ) != int(
|
||||||
computeAlignTime( '24:00',
|
::computeAlignTime(
|
||||||
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpEarly ) / 86400
|
->getTimeUpEarly
|
||||||
|
) / 86400
|
||||||
)
|
)
|
||||||
&& ( !IsWe()
|
&& (
|
||||||
|| ( IsWe()
|
!IsWe()
|
||||||
|
|| (
|
||||||
|
IsWe()
|
||||||
&& ( $FHEM::Automation::ShuttersControl::ascDev
|
&& ( $FHEM::Automation::ShuttersControl::ascDev
|
||||||
->getSunriseTimeWeHoliday eq 'off'
|
->getSunriseTimeWeHoliday eq 'off'
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters
|
|| $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpWeHoliday eq '01:25'
|
->getTimeUpWeHoliday eq '01:25' )
|
||||||
)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|| (
|
|| (
|
||||||
int( gettimeofday() / 86400 ) != int(
|
int( ::gettimeofday() / 86400 ) != int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpWeHoliday
|
->getTimeUpWeHoliday
|
||||||
@ -309,23 +302,23 @@ sub _IsDay {
|
|||||||
->getTimeUpWeHoliday ne '01:25'
|
->getTimeUpWeHoliday ne '01:25'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
&& int( gettimeofday() / 86400 ) == int(
|
&& int( ::gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getTimeUpLate
|
$FHEM::Automation::ShuttersControl::shutters->getTimeUpLate
|
||||||
) / 86400
|
) / 86400
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|| (
|
|| (
|
||||||
int( gettimeofday() / 86400 ) != int(
|
int( ::gettimeofday() / 86400 ) != int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeDownEarly
|
->getTimeDownEarly
|
||||||
) / 86400
|
) / 86400
|
||||||
)
|
)
|
||||||
&& int( gettimeofday() / 86400 ) == int(
|
&& int( ::gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeDownLate
|
->getTimeDownLate
|
||||||
@ -390,16 +383,21 @@ sub _IsDay {
|
|||||||
. $FHEM::Automation::ShuttersControl::shutters->getSunrise );
|
. $FHEM::Automation::ShuttersControl::shutters->getSunrise );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$respIsDay = 1
|
$respIsDay = 1
|
||||||
if (
|
if (
|
||||||
( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'roommate'
|
(
|
||||||
and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'asleep'
|
$FHEM::Automation::ShuttersControl::shutters->getDown eq 'roommate'
|
||||||
or $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'gotosleep' )
|
and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne
|
||||||
|
'asleep'
|
||||||
|
or $FHEM::Automation::ShuttersControl::shutters->getRoommates
|
||||||
|
ne 'gotosleep' )
|
||||||
)
|
)
|
||||||
or ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'roommate'
|
or (
|
||||||
and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'asleep'
|
$FHEM::Automation::ShuttersControl::shutters->getUp eq 'roommate'
|
||||||
or $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'gotosleep' )
|
and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne
|
||||||
|
'asleep'
|
||||||
|
or $FHEM::Automation::ShuttersControl::shutters->getRoommates
|
||||||
|
ne 'gotosleep' )
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -436,7 +434,7 @@ sub ShuttersSunrise {
|
|||||||
my $oldFuncHash =
|
my $oldFuncHash =
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash;
|
$FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash;
|
||||||
my $shuttersSunriseUnixtime =
|
my $shuttersSunriseUnixtime =
|
||||||
computeAlignTime( '24:00', sunrise( 'REAL', 0, '4:30', '8:30' ) );
|
::computeAlignTime( '24:00', ::sunrise( 'REAL', 0, '4:30', '8:30' ) );
|
||||||
|
|
||||||
if ( $tm eq 'unix' ) {
|
if ( $tm eq 'unix' ) {
|
||||||
if ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'astro' ) {
|
if ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'astro' ) {
|
||||||
@ -449,11 +447,11 @@ sub ShuttersSunrise {
|
|||||||
if ( !IsWe('tomorrow') ) {
|
if ( !IsWe('tomorrow') ) {
|
||||||
if (
|
if (
|
||||||
IsWe()
|
IsWe()
|
||||||
&& int( gettimeofday() / 86400 ) == int(
|
&& int( ::gettimeofday() / 86400 ) == int(
|
||||||
(
|
(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -465,9 +463,9 @@ sub ShuttersSunrise {
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
$shuttersSunriseUnixtime = (
|
$shuttersSunriseUnixtime = (
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -477,11 +475,11 @@ sub ShuttersSunrise {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
int( gettimeofday() / 86400 ) == int(
|
int( ::gettimeofday() / 86400 ) == int(
|
||||||
(
|
(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -495,9 +493,9 @@ sub ShuttersSunrise {
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
$shuttersSunriseUnixtime = (
|
$shuttersSunriseUnixtime = (
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -508,9 +506,9 @@ sub ShuttersSunrise {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$shuttersSunriseUnixtime = (
|
$shuttersSunriseUnixtime = (
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -526,11 +524,11 @@ sub ShuttersSunrise {
|
|||||||
if (
|
if (
|
||||||
IsWe()
|
IsWe()
|
||||||
&& (
|
&& (
|
||||||
int( gettimeofday() / 86400 ) == int(
|
int( ::gettimeofday() / 86400 ) == int(
|
||||||
(
|
(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -539,11 +537,11 @@ sub ShuttersSunrise {
|
|||||||
) + 1
|
) + 1
|
||||||
) / 86400
|
) / 86400
|
||||||
)
|
)
|
||||||
|| int( gettimeofday() / 86400 ) != int(
|
|| int( ::gettimeofday() / 86400 ) != int(
|
||||||
(
|
(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -556,9 +554,9 @@ sub ShuttersSunrise {
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
$shuttersSunriseUnixtime = (
|
$shuttersSunriseUnixtime = (
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -568,11 +566,11 @@ sub ShuttersSunrise {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
int( gettimeofday() / 86400 ) == int(
|
int( ::gettimeofday() / 86400 ) == int(
|
||||||
(
|
(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -586,9 +584,9 @@ sub ShuttersSunrise {
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
$shuttersSunriseUnixtime = (
|
$shuttersSunriseUnixtime = (
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -601,11 +599,11 @@ sub ShuttersSunrise {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (
|
if (
|
||||||
int( gettimeofday() / 86400 ) == int(
|
int( ::gettimeofday() / 86400 ) == int(
|
||||||
(
|
(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -617,9 +615,9 @@ sub ShuttersSunrise {
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
$shuttersSunriseUnixtime = (
|
$shuttersSunriseUnixtime = (
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -630,9 +628,9 @@ sub ShuttersSunrise {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$shuttersSunriseUnixtime = (
|
$shuttersSunriseUnixtime = (
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -646,9 +644,9 @@ sub ShuttersSunrise {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$shuttersSunriseUnixtime = (
|
$shuttersSunriseUnixtime = (
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -669,11 +667,11 @@ sub ShuttersSunrise {
|
|||||||
{
|
{
|
||||||
if ( !IsWe('tomorrow') ) {
|
if ( !IsWe('tomorrow') ) {
|
||||||
if (
|
if (
|
||||||
int( gettimeofday() / 86400 ) == int(
|
int( ::gettimeofday() / 86400 ) == int(
|
||||||
(
|
(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunrise_abs(
|
::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -690,7 +688,7 @@ sub ShuttersSunrise {
|
|||||||
( $shuttersSunriseUnixtime + 86400 )
|
( $shuttersSunriseUnixtime + 86400 )
|
||||||
if ( $shuttersSunriseUnixtime <
|
if ( $shuttersSunriseUnixtime <
|
||||||
( $oldFuncHash->{sunrisetime} + 180 )
|
( $oldFuncHash->{sunrisetime} + 180 )
|
||||||
&& $oldFuncHash->{sunrisetime} < gettimeofday() );
|
&& $oldFuncHash->{sunrisetime} < ::gettimeofday() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -698,7 +696,7 @@ sub ShuttersSunrise {
|
|||||||
$shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime + 86400 )
|
$shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime + 86400 )
|
||||||
if ( $shuttersSunriseUnixtime <
|
if ( $shuttersSunriseUnixtime <
|
||||||
( $oldFuncHash->{sunrisetime} + 180 )
|
( $oldFuncHash->{sunrisetime} + 180 )
|
||||||
&& $oldFuncHash->{sunrisetime} < gettimeofday() );
|
&& $oldFuncHash->{sunrisetime} < ::gettimeofday() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'time' )
|
elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'time' )
|
||||||
@ -711,8 +709,8 @@ sub ShuttersSunrise {
|
|||||||
{
|
{
|
||||||
if ( !IsWe('tomorrow') ) {
|
if ( !IsWe('tomorrow') ) {
|
||||||
if (
|
if (
|
||||||
int( gettimeofday() / 86400 ) == int(
|
int( ::gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpWeHoliday
|
->getTimeUpWeHoliday
|
||||||
@ -720,13 +718,13 @@ sub ShuttersSunrise {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpWeHoliday );
|
->getTimeUpWeHoliday );
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
int( gettimeofday() / 86400 ) == int(
|
int( ::gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpEarly
|
->getTimeUpEarly
|
||||||
@ -736,12 +734,12 @@ sub ShuttersSunrise {
|
|||||||
->getSunrise
|
->getSunrise
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpEarly ) + 86400;
|
->getTimeUpEarly ) + 86400;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpEarly );
|
->getTimeUpEarly );
|
||||||
}
|
}
|
||||||
@ -749,8 +747,8 @@ sub ShuttersSunrise {
|
|||||||
else {
|
else {
|
||||||
if (
|
if (
|
||||||
IsWe()
|
IsWe()
|
||||||
&& int( gettimeofday() / 86400 ) == int(
|
&& int( ::gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpWeHoliday
|
->getTimeUpWeHoliday
|
||||||
@ -758,13 +756,13 @@ sub ShuttersSunrise {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpWeHoliday );
|
->getTimeUpWeHoliday );
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
int( gettimeofday() / 86400 ) == int(
|
int( ::gettimeofday() / 86400 ) == int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpEarly
|
->getTimeUpEarly
|
||||||
@ -772,13 +770,13 @@ sub ShuttersSunrise {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpEarly );
|
->getTimeUpEarly );
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
int( gettimeofday() / 86400 ) != int(
|
int( ::gettimeofday() / 86400 ) != int(
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpWeHoliday
|
->getTimeUpWeHoliday
|
||||||
@ -786,19 +784,19 @@ sub ShuttersSunrise {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpWeHoliday );
|
->getTimeUpWeHoliday );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpWeHoliday ) + 86400;
|
->getTimeUpWeHoliday ) + 86400;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getTimeUpEarly );
|
->getTimeUpEarly );
|
||||||
}
|
}
|
||||||
@ -806,15 +804,14 @@ sub ShuttersSunrise {
|
|||||||
elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq
|
elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq
|
||||||
'brightness' )
|
'brightness' )
|
||||||
{
|
{
|
||||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getTimeUpLate
|
$FHEM::Automation::ShuttersControl::shutters->getTimeUpLate );
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $shuttersSunriseUnixtime;
|
return $shuttersSunriseUnixtime;
|
||||||
}
|
}
|
||||||
elsif ( $tm eq 'real' ) {
|
elsif ( $tm eq 'real' ) {
|
||||||
return sunrise_abs(
|
return ::sunrise_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getTimeUpEarly,
|
$FHEM::Automation::ShuttersControl::shutters->getTimeUpEarly,
|
||||||
@ -858,15 +855,15 @@ sub ShuttersSunset {
|
|||||||
my $oldFuncHash =
|
my $oldFuncHash =
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash;
|
$FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash;
|
||||||
my $shuttersSunsetUnixtime =
|
my $shuttersSunsetUnixtime =
|
||||||
computeAlignTime( '24:00', sunset( 'REAL', 0, '15:30', '21:30' ) );
|
::computeAlignTime( '24:00', ::sunset( 'REAL', 0, '15:30', '21:30' ) );
|
||||||
|
|
||||||
if ( $tm eq 'unix' ) {
|
if ( $tm eq 'unix' ) {
|
||||||
if ( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'astro' )
|
if ( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'astro' )
|
||||||
{
|
{
|
||||||
$shuttersSunsetUnixtime = (
|
$shuttersSunsetUnixtime = (
|
||||||
computeAlignTime(
|
::computeAlignTime(
|
||||||
'24:00',
|
'24:00',
|
||||||
sunset_abs(
|
::sunset_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -880,13 +877,13 @@ sub ShuttersSunset {
|
|||||||
$shuttersSunsetUnixtime += 86400
|
$shuttersSunsetUnixtime += 86400
|
||||||
if ( $shuttersSunsetUnixtime <
|
if ( $shuttersSunsetUnixtime <
|
||||||
( $oldFuncHash->{sunsettime} + 180 )
|
( $oldFuncHash->{sunsettime} + 180 )
|
||||||
&& $oldFuncHash->{sunsettime} < gettimeofday() );
|
&& $oldFuncHash->{sunsettime} < ::gettimeofday() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getDown eq 'time' )
|
$FHEM::Automation::ShuttersControl::shutters->getDown eq 'time' )
|
||||||
{
|
{
|
||||||
$shuttersSunsetUnixtime = computeAlignTime( '24:00',
|
$shuttersSunsetUnixtime = ::computeAlignTime( '24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly
|
$FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -894,13 +891,13 @@ sub ShuttersSunset {
|
|||||||
'brightness' )
|
'brightness' )
|
||||||
{
|
{
|
||||||
$shuttersSunsetUnixtime =
|
$shuttersSunsetUnixtime =
|
||||||
computeAlignTime( '24:00',
|
::computeAlignTime( '24:00',
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getTimeDownLate );
|
$FHEM::Automation::ShuttersControl::shutters->getTimeDownLate );
|
||||||
}
|
}
|
||||||
return $shuttersSunsetUnixtime;
|
return $shuttersSunsetUnixtime;
|
||||||
}
|
}
|
||||||
elsif ( $tm eq 'real' ) {
|
elsif ( $tm eq 'real' ) {
|
||||||
return sunset_abs(
|
return ::sunset_abs(
|
||||||
$autoAstroMode,
|
$autoAstroMode,
|
||||||
0,
|
0,
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly,
|
$FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly,
|
||||||
@ -923,7 +920,7 @@ sub IsAfterShuttersTimeBlocking {
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
(
|
(
|
||||||
int( gettimeofday() ) -
|
int( ::gettimeofday() ) -
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
|
$FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
|
||||||
) <
|
) <
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
|
$FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
|
||||||
@ -933,7 +930,7 @@ sub IsAfterShuttersTimeBlocking {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
|
$FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
|
||||||
)
|
)
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
|
&& $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
|
||||||
- ( int( gettimeofday() ) ) <
|
- ( int( ::gettimeofday() ) ) <
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getBlockingTimeBeforDayOpen
|
->getBlockingTimeBeforDayOpen
|
||||||
)
|
)
|
||||||
@ -943,7 +940,7 @@ sub IsAfterShuttersTimeBlocking {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
|
$FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
|
||||||
)
|
)
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getSunsetUnixTime
|
&& $FHEM::Automation::ShuttersControl::shutters->getSunsetUnixTime
|
||||||
- ( int( gettimeofday() ) ) <
|
- ( int( ::gettimeofday() ) ) <
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getBlockingTimeBeforNightClose
|
->getBlockingTimeBeforNightClose
|
||||||
)
|
)
|
||||||
@ -982,7 +979,7 @@ sub IsAfterShuttersManualBlocking {
|
|||||||
}
|
}
|
||||||
elsif (
|
elsif (
|
||||||
(
|
(
|
||||||
int( gettimeofday() ) -
|
int( ::gettimeofday() ) -
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
|
$FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
|
||||||
) <
|
) <
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
|
$FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
|
||||||
@ -994,25 +991,6 @@ sub IsAfterShuttersManualBlocking {
|
|||||||
else { return 1 }
|
else { return 1 }
|
||||||
}
|
}
|
||||||
|
|
||||||
sub makeReadingName {
|
|
||||||
my ($rname) = shift;
|
|
||||||
my %charHash = (
|
|
||||||
chr(0xe4) => "ae", # ä
|
|
||||||
chr(0xc4) => "Ae", # Ä
|
|
||||||
chr(0xfc) => "ue", # ü
|
|
||||||
chr(0xdc) => "Ue", # Ü
|
|
||||||
chr(0xf6) => "oe", # ö
|
|
||||||
chr(0xd6) => "Oe", # Ö
|
|
||||||
chr(0xdf) => "ss" # ß
|
|
||||||
);
|
|
||||||
my $charHashkeys = join( "", keys(%charHash) );
|
|
||||||
|
|
||||||
return $rname if ( $rname =~ m{^\./}xms );
|
|
||||||
$rname =~ s/([$charHashkeys])/$charHash{$1}/xgi;
|
|
||||||
$rname =~ s/[^a-z0-9._\-\/]/_/xgi;
|
|
||||||
return $rname;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub IsWe {
|
sub IsWe {
|
||||||
return main::IsWe( shift, shift );
|
return main::IsWe( shift, shift );
|
||||||
}
|
}
|
||||||
@ -1038,23 +1016,31 @@ sub PerlCodeCheck {
|
|||||||
sub IsAdv {
|
sub IsAdv {
|
||||||
use HTTP::Date;
|
use HTTP::Date;
|
||||||
my ( undef, undef, undef, $monthday, $month, $year, undef, undef, undef ) =
|
my ( undef, undef, undef, $monthday, $month, $year, undef, undef, undef ) =
|
||||||
localtime( gettimeofday() );
|
localtime( ::gettimeofday() );
|
||||||
my $adv = 0;
|
my $adv = 0;
|
||||||
$year += 1900;
|
$year += 1900;
|
||||||
|
|
||||||
if ( $month < 1 ) {
|
if ( $month < 1
|
||||||
if ( $monthday < 7 ) {
|
&& $FHEM::Automation::ShuttersControl::ascDev->getAdvEndDate eq
|
||||||
$adv = 1;
|
'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 {
|
else {
|
||||||
my $time = str2time( $year . '-12-25' );
|
my $time = str2time( $year . '-12-25' );
|
||||||
my $wday = ( localtime($time) )[6];
|
my $wday = ( localtime($time) )[6];
|
||||||
$wday = $wday ? $wday : 7;
|
$wday = $wday ? $wday : 7;
|
||||||
$time -= ( $FHEM::Automation::ShuttersControl::ascDev
|
$time -= (
|
||||||
->getAdvDate eq 'DeadSunday'
|
$FHEM::Automation::ShuttersControl::ascDev->getAdvStartDate eq
|
||||||
? ($wday + 27) * 86400
|
'DeadSunday'
|
||||||
: ($wday + 21) * 86400
|
? ( $wday + 27 ) * 86400
|
||||||
|
: ( $wday + 21 ) * 86400
|
||||||
);
|
);
|
||||||
$adv = 1 if ( $time < time );
|
$adv = 1 if ( $time < time );
|
||||||
}
|
}
|
||||||
@ -1066,14 +1052,15 @@ sub IsInTime {
|
|||||||
my $dfi = shift;
|
my $dfi = shift;
|
||||||
|
|
||||||
$dfi =~ s/{([^\x7d]*)}/$cmdFromAnalyze=$1; eval $1/ge; # Forum #69787
|
$dfi =~ s/{([^\x7d]*)}/$cmdFromAnalyze=$1; eval $1/ge; # Forum #69787
|
||||||
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(gettimeofday());
|
my ( $sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst ) =
|
||||||
my $dhms = sprintf("%s\@%02d:%02d:%02d", $wday, $hour, $min, $sec);
|
localtime( ::gettimeofday() );
|
||||||
foreach my $ft (split(" ", $dfi)) {
|
my $dhms = sprintf( "%s\@%02d:%02d:%02d", $wday, $hour, $min, $sec );
|
||||||
my ($from, $to) = split("-", $ft);
|
foreach my $ft ( split( " ", $dfi ) ) {
|
||||||
if(defined($from) && defined($to)) {
|
my ( $from, $to ) = split( "-", $ft );
|
||||||
$from = "$wday\@$from" if(index($from,"@") < 0);
|
if ( defined($from) && defined($to) ) {
|
||||||
$to = "$wday\@$to" if(index($to, "@") < 0);
|
$from = "$wday\@$from" if ( index( $from, "@" ) < 0 );
|
||||||
return 1 if($from le $dhms && $dhms le $to);
|
$to = "$wday\@$to" if ( index( $to, "@" ) < 0 );
|
||||||
|
return 1 if ( $from le $dhms && $dhms le $to );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2021 Copyright: Marko Oldenburg (fhemdevelopment@cooltux.net)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -47,7 +47,9 @@ use utf8;
|
|||||||
use FHEM::Automation::ShuttersControl::Helper qw (:ALL);
|
use FHEM::Automation::ShuttersControl::Helper qw (:ALL);
|
||||||
|
|
||||||
require Exporter;
|
require Exporter;
|
||||||
our @ISA = qw(Exporter);
|
use base qw(Exporter);
|
||||||
|
|
||||||
|
# our @ISA = qw(Exporter);
|
||||||
our @EXPORT_OK = qw(
|
our @EXPORT_OK = qw(
|
||||||
RainProcessing
|
RainProcessing
|
||||||
);
|
);
|
||||||
@ -59,7 +61,6 @@ our %EXPORT_TAGS = (
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
sub RainProcessing {
|
sub RainProcessing {
|
||||||
my ( $hash, $val, $triggerMax, $triggerMin ) = @_;
|
my ( $hash, $val, $triggerMax, $triggerMin ) = @_;
|
||||||
|
|
||||||
@ -75,7 +76,8 @@ sub RainProcessing {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->getRainProtection eq
|
$FHEM::Automation::ShuttersControl::shutters->getRainProtection eq
|
||||||
'off' );
|
'off' );
|
||||||
|
|
||||||
if ( $val > $triggerMax
|
if (
|
||||||
|
$val > $triggerMax
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
|
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
|
||||||
$rainClosedPos
|
$rainClosedPos
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -83,7 +85,7 @@ sub RainProcessing {
|
|||||||
|| ( $FHEM::Automation::ShuttersControl::shutters
|
|| ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getRainProtectionStatus eq 'unprotected'
|
->getRainProtectionStatus eq 'unprotected'
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getRainUnprotectionDelayObj ne 'none')
|
->getRainUnprotectionDelayObj ne 'none' )
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
_RainProtected();
|
_RainProtected();
|
||||||
@ -95,18 +97,33 @@ sub RainProcessing {
|
|||||||
&& $FHEM::Automation::ShuttersControl::shutters
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getRainProtectionStatus eq 'protected' )
|
->getRainProtectionStatus eq 'protected' )
|
||||||
{
|
{
|
||||||
my %funcHash = (
|
my %funcHash = ( shuttersdevice => $shuttersDev, );
|
||||||
shuttersdevice => $shuttersDev,
|
|
||||||
);
|
|
||||||
|
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj(\%funcHash);
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
::InternalTimer( ::gettimeofday() + $FHEM::Automation::ShuttersControl::ascDev->getRainWaitingTime
|
->setRainUnprotectionDelayObj( \%funcHash );
|
||||||
, \&_RainUnprotected
|
::InternalTimer(
|
||||||
, \%funcHash );
|
::gettimeofday() +
|
||||||
|
$FHEM::Automation::ShuttersControl::ascDev
|
||||||
|
->getRainWaitingTime,
|
||||||
|
\&_RainUnprotected, \%funcHash
|
||||||
|
);
|
||||||
|
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->setRainProtectionStatus('unprotected');
|
->setRainProtectionStatus('unprotected');
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if ( $FHEM::Automation::ShuttersControl::shutters->getStatus !=
|
||||||
|
$rainClosedPos
|
||||||
|
&& ( $val == 0 || $val < $triggerMin ) )
|
||||||
|
{
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->setRainProtectionStatus('unprotected');
|
||||||
|
}
|
||||||
|
elsif ( $val > $triggerMax ) {
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->setRainProtectionStatus('protected');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -114,39 +131,53 @@ sub RainProcessing {
|
|||||||
|
|
||||||
### es muss noch beobachtet werden ob die Auswahl des Rollos welches bearbeitet werden soll bestehen bleibt oder mit in die neuen Funktionen übergeben werden muss
|
### es muss noch beobachtet werden ob die Auswahl des Rollos welches bearbeitet werden soll bestehen bleibt oder mit in die neuen Funktionen übergeben werden muss
|
||||||
sub _RainProtected {
|
sub _RainProtected {
|
||||||
::RemoveInternalTimer($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj)
|
::RemoveInternalTimer( $FHEM::Automation::ShuttersControl::shutters
|
||||||
if($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj ne 'none');
|
->getRainUnprotectionDelayObj )
|
||||||
|
if ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getRainUnprotectionDelayObj ne 'none' );
|
||||||
|
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none');
|
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj(
|
||||||
|
'none');
|
||||||
|
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
||||||
'rain protected');
|
'rain protected');
|
||||||
|
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
|
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
|
||||||
$FHEM::Automation::ShuttersControl::ascDev
|
$FHEM::Automation::ShuttersControl::ascDev
|
||||||
->getRainSensorShuttersClosedPos);
|
->getRainSensorShuttersClosedPos );
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
|
||||||
->setRainProtectionStatus('protected');
|
$FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus(
|
||||||
|
'protected');
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub _RainUnprotected {
|
sub _RainUnprotected {
|
||||||
my $h = shift;
|
my $h = shift;
|
||||||
|
|
||||||
my $shuttersDev = $h->{shuttersdevice};
|
my $shuttersDev = $h->{shuttersdevice};
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
|
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
|
||||||
$shuttersDev);
|
|
||||||
|
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
||||||
'rain un-protected');
|
'rain un-protected');
|
||||||
|
|
||||||
if ( $FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj ne 'none' ) {
|
if ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
::RemoveInternalTimer($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj);
|
->getRainUnprotectionDelayObj ne 'none' )
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none');
|
{
|
||||||
|
::RemoveInternalTimer( $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getRainUnprotectionDelayObj );
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->setRainUnprotectionDelayObj('none');
|
||||||
}
|
}
|
||||||
|
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
|
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
|
||||||
(
|
(
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
||||||
? $FHEM::Automation::ShuttersControl::shutters->getLastPos
|
? $FHEM::Automation::ShuttersControl::shutters->getLastPos
|
||||||
|
: (
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
|
||||||
|
eq 'awning'
|
||||||
|
? $FHEM::Automation::ShuttersControl::shutters->getOpenPos
|
||||||
: (
|
: (
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getPrivacyDownStatus == 2
|
->getPrivacyDownStatus == 2
|
||||||
@ -156,13 +187,13 @@ sub _RainUnprotected {
|
|||||||
->getClosedPos
|
->getClosedPos
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
)
|
||||||
|
) if ( IsAfterShuttersTimeBlocking($shuttersDev) );
|
||||||
|
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus(
|
||||||
->setRainProtectionStatus('unprotected');
|
'unprotected');
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2020 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -44,37 +44,41 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use utf8;
|
use utf8;
|
||||||
|
|
||||||
use GPUtils qw(GP_Import);
|
require Exporter;
|
||||||
|
use base qw(Exporter);
|
||||||
|
|
||||||
## Import der FHEM Funktionen
|
# our @ISA = qw(Exporter);
|
||||||
BEGIN {
|
our @EXPORT_OK = qw(
|
||||||
GP_Import(
|
getRoommateStatus
|
||||||
|
getRoommateLastStatus
|
||||||
|
);
|
||||||
|
our %EXPORT_TAGS = (
|
||||||
|
ALL => [
|
||||||
qw(
|
qw(
|
||||||
ReadingsVal)
|
getRoommateStatus
|
||||||
);
|
getRoommateLastStatus
|
||||||
}
|
)
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
sub _getRoommateStatus {
|
sub getRoommateStatus {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $roommate = $self->{roommate};
|
my $roommate = $self->{roommate};
|
||||||
|
|
||||||
return ReadingsVal( $roommate,
|
return ::ReadingsVal( $roommate,
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getRoommatesReading,
|
$FHEM::Automation::ShuttersControl::shutters->getRoommatesReading,
|
||||||
'none' );
|
'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub _getRoommateLastStatus {
|
sub getRoommateLastStatus {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $roommate = $self->{roommate};
|
my $roommate = $self->{roommate};
|
||||||
my $default = $self->{defaultarg};
|
my $default = $self->{defaultarg};
|
||||||
|
|
||||||
$default = 'none' if ( !defined($default) );
|
$default = 'none' if ( !defined($default) );
|
||||||
return ReadingsVal( $roommate, 'lastState', $default );
|
return ::ReadingsVal( $roommate, 'lastState', $default );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2020 Copyright: Marko Oldenburg (fhemsupport@cooltux.net)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -48,7 +48,9 @@ use utf8;
|
|||||||
use FHEM::Automation::ShuttersControl::Helper qw (IsInTime);
|
use FHEM::Automation::ShuttersControl::Helper qw (IsInTime);
|
||||||
|
|
||||||
require Exporter;
|
require Exporter;
|
||||||
our @ISA = qw(Exporter);
|
use base qw(Exporter);
|
||||||
|
|
||||||
|
# our @ISA = qw(Exporter);
|
||||||
our @EXPORT_OK = qw(
|
our @EXPORT_OK = qw(
|
||||||
CheckASC_ConditionsForShadingFn
|
CheckASC_ConditionsForShadingFn
|
||||||
ShadingProcessing
|
ShadingProcessing
|
||||||
@ -64,24 +66,6 @@ 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 {
|
sub CheckASC_ConditionsForShadingFn {
|
||||||
my $hash = shift;
|
my $hash = shift;
|
||||||
my $value = shift;
|
my $value = shift;
|
||||||
@ -104,8 +88,8 @@ sub CheckASC_ConditionsForShadingFn {
|
|||||||
attrEvent => 0,
|
attrEvent => 0,
|
||||||
);
|
);
|
||||||
|
|
||||||
InternalTimer(
|
::InternalTimer(
|
||||||
gettimeofday() + $count,
|
::gettimeofday() + $count,
|
||||||
'FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn',
|
'FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn',
|
||||||
\%funcHash
|
\%funcHash
|
||||||
);
|
);
|
||||||
@ -128,7 +112,7 @@ sub _CheckShuttersConditionsForShadingFn {
|
|||||||
my $value = $funcHash->{value};
|
my $value = $funcHash->{value};
|
||||||
|
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
|
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
|
||||||
my $shuttersDevHash = $defs{$shuttersDev};
|
my $shuttersDevHash = $::defs{$shuttersDev};
|
||||||
my $message = '';
|
my $message = '';
|
||||||
my $errorMessage;
|
my $errorMessage;
|
||||||
my $warnMessage;
|
my $warnMessage;
|
||||||
@ -136,22 +120,26 @@ sub _CheckShuttersConditionsForShadingFn {
|
|||||||
|
|
||||||
if ( $value eq 'off' ) {
|
if ( $value eq 'off' ) {
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setShadingStatus('out');
|
$FHEM::Automation::ShuttersControl::shutters->setShadingStatus('out');
|
||||||
$infoMessage .= ' shading was deactivated ' . ($funcHash->{attrEvent} ? 'in the device' : 'globally');
|
$infoMessage .= ' shading was deactivated '
|
||||||
|
. ( $funcHash->{attrEvent} ? 'in the device' : 'globally' );
|
||||||
$errorMessage .= '';
|
$errorMessage .= '';
|
||||||
ShadingProcessingDriveCommand( $hash, $shuttersDev );
|
ShadingProcessingDriveCommand( $hash, $shuttersDev );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$infoMessage .= (
|
$infoMessage .= (
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getShadingMode ne 'off'
|
$FHEM::Automation::ShuttersControl::shutters->getShadingMode ne
|
||||||
|
'off'
|
||||||
&& $FHEM::Automation::ShuttersControl::ascDev
|
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||||
->getAutoShuttersControlShading eq 'on'
|
->getAutoShuttersControlShading eq 'on'
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getOutTemp == -100
|
&& $FHEM::Automation::ShuttersControl::shutters->getOutTemp ==
|
||||||
|
-100
|
||||||
? ' shading active, global temp sensor is set, but shutters temperature sensor is not set'
|
? ' shading active, global temp sensor is set, but shutters temperature sensor is not set'
|
||||||
: ''
|
: ''
|
||||||
);
|
);
|
||||||
|
|
||||||
$warnMessage .= (
|
$warnMessage .= (
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off'
|
$FHEM::Automation::ShuttersControl::shutters->getShadingMode eq
|
||||||
|
'off'
|
||||||
&& $FHEM::Automation::ShuttersControl::ascDev
|
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||||
->getAutoShuttersControlShading eq 'on'
|
->getAutoShuttersControlShading eq 'on'
|
||||||
? ' global shading active but ASC_Shading_Mode attribut is not set or off'
|
? ' global shading active but ASC_Shading_Mode attribut is not set or off'
|
||||||
@ -159,7 +147,8 @@ sub _CheckShuttersConditionsForShadingFn {
|
|||||||
);
|
);
|
||||||
|
|
||||||
$errorMessage .= (
|
$errorMessage .= (
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getShadingMode ne 'off'
|
$FHEM::Automation::ShuttersControl::shutters->getShadingMode ne
|
||||||
|
'off'
|
||||||
&& $FHEM::Automation::ShuttersControl::ascDev
|
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||||
->getAutoShuttersControlShading ne 'on'
|
->getAutoShuttersControlShading ne 'on'
|
||||||
&& $FHEM::Automation::ShuttersControl::ascDev
|
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||||
@ -167,17 +156,17 @@ sub _CheckShuttersConditionsForShadingFn {
|
|||||||
? ' ASC_Shading_Mode attribut is set but global shading has errors, look at ASC device '
|
? ' ASC_Shading_Mode attribut is set but global shading has errors, look at ASC device '
|
||||||
. '<a href="'
|
. '<a href="'
|
||||||
. '/fhem?detail='
|
. '/fhem?detail='
|
||||||
. ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
|
. ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
|
||||||
. $::FW_CSRF . '">'
|
. $::FW_CSRF . '">'
|
||||||
. ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
|
. ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
|
||||||
. '</a>'
|
. '</a>'
|
||||||
: ''
|
: ''
|
||||||
);
|
);
|
||||||
|
|
||||||
$errorMessage .= (
|
$errorMessage .= (
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getBrightness == -1
|
$FHEM::Automation::ShuttersControl::shutters->getBrightness == -1
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne
|
&& $FHEM::Automation::ShuttersControl::shutters->getShadingMode
|
||||||
'off'
|
ne 'off'
|
||||||
? ' no brightness sensor found, please set ASC_BrightnessSensor attribut'
|
? ' no brightness sensor found, please set ASC_BrightnessSensor attribut'
|
||||||
: ''
|
: ''
|
||||||
);
|
);
|
||||||
@ -197,10 +186,12 @@ sub _CheckShuttersConditionsForShadingFn {
|
|||||||
&& $infoMessage ne ''
|
&& $infoMessage ne ''
|
||||||
&& $errorMessage eq '' );
|
&& $errorMessage eq '' );
|
||||||
|
|
||||||
readingsBeginUpdate($shuttersDevHash);
|
::readingsBeginUpdate($shuttersDevHash);
|
||||||
readingsBulkUpdateIfChanged( $shuttersDevHash, 'ASC_ShadingMessage',
|
::readingsBulkUpdateIfChanged( $shuttersDevHash, 'ASC_ShadingMessage',
|
||||||
'<html>' . $message . ' </html>' );
|
'<html>' . $message . ' </html>' );
|
||||||
readingsEndUpdate( $shuttersDevHash, 1 );
|
::readingsEndUpdate( $shuttersDevHash, 1 );
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub ShadingProcessing {
|
sub ShadingProcessing {
|
||||||
@ -216,10 +207,16 @@ sub ShadingProcessing {
|
|||||||
my $brightness =
|
my $brightness =
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getBrightnessAverage;
|
$FHEM::Automation::ShuttersControl::shutters->getBrightnessAverage;
|
||||||
|
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setShadingBetweenTheTimeSuspend(
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
( IsInTime($FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTime)
|
->setShadingBetweenTheTimeSuspend(
|
||||||
|
(
|
||||||
|
IsInTime(
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getShadingBetweenTheTime
|
||||||
|
)
|
||||||
? 0
|
? 0
|
||||||
: 1 )
|
: 1
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
FHEM::Automation::ShuttersControl::ASC_Debug(
|
FHEM::Automation::ShuttersControl::ASC_Debug(
|
||||||
@ -250,7 +247,7 @@ sub ShadingProcessing {
|
|||||||
. ', Ist es nach der Hälfte der Beschattungswartezeit: '
|
. ', Ist es nach der Hälfte der Beschattungswartezeit: '
|
||||||
. (
|
. (
|
||||||
(
|
(
|
||||||
int( gettimeofday() ) -
|
int( ::gettimeofday() ) -
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getShadingStatusTimestamp
|
->getShadingStatusTimestamp
|
||||||
) < (
|
) < (
|
||||||
@ -260,7 +257,7 @@ sub ShadingProcessing {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
|
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
|
||||||
. $shuttersDev
|
. $shuttersDev
|
||||||
. " Azimuth: "
|
. " Azimuth: "
|
||||||
@ -279,18 +276,20 @@ sub ShadingProcessing {
|
|||||||
|| $brightness == -1
|
|| $brightness == -1
|
||||||
|| $outTemp == -100
|
|| $outTemp == -100
|
||||||
|| (
|
|| (
|
||||||
int( gettimeofday() ) -
|
int( ::gettimeofday() ) -
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getShadingStatusTimestamp ) < (
|
->getShadingStatusTimestamp ) < (
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getShadingWaitingPeriod / 2
|
->getShadingWaitingPeriod / 2
|
||||||
)
|
)
|
||||||
|
|| $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getExternalTriggerStatus
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off'
|
|| $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off'
|
||||||
|| $FHEM::Automation::ShuttersControl::ascDev
|
|| $FHEM::Automation::ShuttersControl::ascDev
|
||||||
->getAutoShuttersControlShading eq 'off'
|
->getAutoShuttersControlShading eq 'off'
|
||||||
);
|
);
|
||||||
|
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
|
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
|
||||||
. $shuttersDev
|
. $shuttersDev
|
||||||
. " Nach dem return" );
|
. " Nach dem return" );
|
||||||
@ -300,7 +299,7 @@ sub ShadingProcessing {
|
|||||||
my $getStatus = $FHEM::Automation::ShuttersControl::shutters->getStatus;
|
my $getStatus = $FHEM::Automation::ShuttersControl::shutters->getStatus;
|
||||||
my $oldShadingStatus =
|
my $oldShadingStatus =
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus;
|
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus;
|
||||||
my $shuttersDevHash = $defs{$shuttersDev};
|
my $shuttersDevHash = $::defs{$shuttersDev};
|
||||||
|
|
||||||
my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp;
|
my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp;
|
||||||
my $homemode = $FHEM::Automation::ShuttersControl::shutters->getHomemode;
|
my $homemode = $FHEM::Automation::ShuttersControl::shutters->getHomemode;
|
||||||
@ -317,8 +316,8 @@ sub ShadingProcessing {
|
|||||||
|| $azimuth < $azimuthLeft
|
|| $azimuth < $azimuthLeft
|
||||||
|| $azimuth > $azimuthRight
|
|| $azimuth > $azimuthRight
|
||||||
|| ( !$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
|| ( !$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
|
&& $FHEM::Automation::ShuttersControl::shutters
|
||||||
- ( int( gettimeofday() ) ) > 7200 )
|
->getSunriseUnixTime - ( int( ::gettimeofday() ) ) > 7200 )
|
||||||
)
|
)
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ne
|
&& $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ne
|
||||||
'out'
|
'out'
|
||||||
@ -331,7 +330,7 @@ sub ShadingProcessing {
|
|||||||
. ' - Es ist Nacht oder die Aussentemperatur unterhalb der Shading Temperatur. Die Beschattung wird Zwangsbeendet'
|
. ' - 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 "
|
"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
|
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus
|
||||||
eq 'out reserved'
|
eq 'out reserved'
|
||||||
and (
|
and (
|
||||||
int( gettimeofday() ) -
|
int( ::gettimeofday() ) -
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getShadingStatusTimestamp )
|
->getShadingStatusTimestamp )
|
||||||
) > $FHEM::Automation::ShuttersControl::shutters
|
) > $FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -369,7 +368,7 @@ sub ShadingProcessing {
|
|||||||
'out');
|
'out');
|
||||||
}
|
}
|
||||||
|
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
|
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
|
||||||
. $shuttersDev
|
. $shuttersDev
|
||||||
. " In der Out Abfrage, Shadingwert: "
|
. " In der Out Abfrage, Shadingwert: "
|
||||||
@ -411,7 +410,7 @@ sub ShadingProcessing {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq
|
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq
|
||||||
'in reserved'
|
'in reserved'
|
||||||
and (
|
and (
|
||||||
int( gettimeofday() ) -
|
int( ::gettimeofday() ) -
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getShadingStatusTimestamp ) > (
|
->getShadingStatusTimestamp ) > (
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
@ -423,7 +422,7 @@ sub ShadingProcessing {
|
|||||||
'in');
|
'in');
|
||||||
}
|
}
|
||||||
|
|
||||||
Log3( $name, 4,
|
::Log3( $name, 4,
|
||||||
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
|
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
|
||||||
. $shuttersDev
|
. $shuttersDev
|
||||||
. " In der In Abfrage, Shadingwert: "
|
. " In der In Abfrage, Shadingwert: "
|
||||||
@ -469,21 +468,17 @@ sub ShadingProcessing {
|
|||||||
$homemode )
|
$homemode )
|
||||||
&& (
|
&& (
|
||||||
$getModeUp eq 'always'
|
$getModeUp eq 'always'
|
||||||
|| $getModeUp eq
|
|| $getModeUp eq $homemode
|
||||||
$homemode
|
|
||||||
|| $getModeUp eq 'off'
|
|| $getModeUp eq 'off'
|
||||||
|| $getModeUp eq
|
|| $getModeUp eq 'absent'
|
||||||
'absent'
|
|| $getModeUp eq 'gone'
|
||||||
|| $getModeUp eq
|
|| ( $getModeUp eq 'home'
|
||||||
'gone'
|
|
||||||
|| ( $getModeUp eq
|
|
||||||
'home'
|
|
||||||
&& $homemode ne 'asleep' )
|
&& $homemode ne 'asleep' )
|
||||||
)
|
)
|
||||||
&& (
|
&& (
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
int( gettimeofday() ) -
|
int( ::gettimeofday() ) -
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getShadingStatusTimestamp
|
->getShadingStatusTimestamp
|
||||||
) < 2
|
) < 2
|
||||||
@ -499,16 +494,16 @@ sub ShadingProcessing {
|
|||||||
)
|
)
|
||||||
|| ( !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
|
|| ( !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getStatus ==
|
&& $FHEM::Automation::ShuttersControl::shutters->getStatus ==
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getShadingPos
|
$FHEM::Automation::ShuttersControl::shutters->getShadingPos )
|
||||||
)
|
|| ( !$FHEM::Automation::ShuttersControl::shutters
|
||||||
|| ( !$FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTimeSuspend
|
->getShadingBetweenTheTimeSuspend
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
|
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getShadingPos )
|
$FHEM::Automation::ShuttersControl::shutters->getShadingPos )
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
readingsBeginUpdate($shuttersDevHash);
|
::readingsBeginUpdate($shuttersDevHash);
|
||||||
readingsBulkUpdate(
|
::readingsBulkUpdate(
|
||||||
$shuttersDevHash,
|
$shuttersDevHash,
|
||||||
'ASC_ShadingMessage',
|
'ASC_ShadingMessage',
|
||||||
'INFO: current shading status is \''
|
'INFO: current shading status is \''
|
||||||
@ -531,7 +526,7 @@ sub ShadingProcessing {
|
|||||||
) / 60
|
) / 60
|
||||||
. 'm'
|
. 'm'
|
||||||
);
|
);
|
||||||
readingsEndUpdate( $shuttersDevHash, 1 );
|
::readingsEndUpdate( $shuttersDevHash, 1 );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -551,18 +546,27 @@ sub ShadingProcessingDriveCommand {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->setShadingStatus(
|
$FHEM::Automation::ShuttersControl::shutters->setShadingStatus(
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus );
|
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus );
|
||||||
|
|
||||||
if ( IsInTime($FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTime)
|
if (
|
||||||
&& $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'in'
|
IsInTime(
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
|
->getShadingBetweenTheTime
|
||||||
|
)
|
||||||
|
&& $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq
|
||||||
|
'in'
|
||||||
&& $getShadingPos != $getStatus
|
&& $getShadingPos != $getStatus
|
||||||
&& ( $getStatus != $FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
&& (
|
||||||
|| ( $getStatus == $FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
$getStatus !=
|
||||||
&& $marker
|
$FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
||||||
)
|
|| ( $getStatus ==
|
||||||
)
|
$FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
||||||
&& ( $getStatus != $FHEM::Automation::ShuttersControl::shutters->getSleepPos
|
&& $marker )
|
||||||
|| ( $getStatus == $FHEM::Automation::ShuttersControl::shutters->getSleepPos
|
|
||||||
&& $marker
|
|
||||||
)
|
)
|
||||||
|
&& (
|
||||||
|
$getStatus !=
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters->getSleepPos
|
||||||
|
|| ( $getStatus ==
|
||||||
|
$FHEM::Automation::ShuttersControl::shutters->getSleepPos
|
||||||
|
&& $marker )
|
||||||
)
|
)
|
||||||
&& (
|
&& (
|
||||||
FHEM::Automation::ShuttersControl::CheckIfShuttersWindowRecOpen(
|
FHEM::Automation::ShuttersControl::CheckIfShuttersWindowRecOpen(
|
||||||
@ -626,8 +630,10 @@ sub ShadingProcessingDriveCommand {
|
|||||||
: $FHEM::Automation::ShuttersControl::shutters->getOpenPos
|
: $FHEM::Automation::ShuttersControl::shutters->getOpenPos
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
) if ( $FHEM::Automation::ShuttersControl::shutters->getIsDay
|
)
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace eq 'awning' );
|
if ( $FHEM::Automation::ShuttersControl::shutters->getIsDay
|
||||||
|
|| $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
|
||||||
|
eq 'awning' );
|
||||||
|
|
||||||
FHEM::Automation::ShuttersControl::ASC_Debug(
|
FHEM::Automation::ShuttersControl::ASC_Debug(
|
||||||
'ShadingProcessingDriveCommand: '
|
'ShadingProcessingDriveCommand: '
|
||||||
@ -639,7 +645,7 @@ sub ShadingProcessingDriveCommand {
|
|||||||
. ' zum beenden der Beschattung gefahren' );
|
. ' 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: "
|
"AutoShuttersControl ($name) - Shading Processing - In der Routine zum fahren der Rollläden, Shading Wert: "
|
||||||
. $FHEM::Automation::ShuttersControl::shutters->getShadingStatus );
|
. $FHEM::Automation::ShuttersControl::shutters->getShadingStatus );
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2020 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -45,18 +45,18 @@
|
|||||||
|
|
||||||
package FHEM::Automation::ShuttersControl::Shutters;
|
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 strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use utf8;
|
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 {
|
sub new {
|
||||||
my $class = shift;
|
my $class = shift;
|
||||||
my $self = {
|
my $self = {
|
||||||
@ -161,9 +161,10 @@ sub setDriveCmd {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->setDelayCmd($posValue);
|
$FHEM::Automation::ShuttersControl::shutters->setDelayCmd($posValue);
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->setDelayCmdReading;
|
$FHEM::Automation::ShuttersControl::ascDev->setDelayCmdReading;
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setNoDelay(0);
|
$FHEM::Automation::ShuttersControl::shutters->setNoDelay(0);
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0)
|
|
||||||
if ( $FHEM::Automation::ShuttersControl::shutters
|
# $FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0)
|
||||||
->getExternalTriggerStatus );
|
# if ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
|
# ->getExternalTriggerStatus );
|
||||||
|
|
||||||
FHEM::Automation::ShuttersControl::ASC_Debug( 'setDriveCmd: '
|
FHEM::Automation::ShuttersControl::ASC_Debug( 'setDriveCmd: '
|
||||||
. $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
. $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
||||||
@ -177,7 +178,8 @@ sub setDriveCmd {
|
|||||||
if ( $FHEM::Automation::ShuttersControl::shutters->getDelayCmd ne
|
if ( $FHEM::Automation::ShuttersControl::shutters->getDelayCmd ne
|
||||||
'none' )
|
'none' )
|
||||||
; # setzt den Wert auf none da der Rolladen nun gesteuert werden kann.
|
; # setzt den Wert auf none da der Rolladen nun gesteuert werden kann.
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0)
|
$FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(
|
||||||
|
0)
|
||||||
if ( $FHEM::Automation::ShuttersControl::shutters
|
if ( $FHEM::Automation::ShuttersControl::shutters
|
||||||
->getExternalTriggerStatus );
|
->getExternalTriggerStatus );
|
||||||
|
|
||||||
@ -233,7 +235,7 @@ sub setDriveCmd {
|
|||||||
::gettimeofday() +
|
::gettimeofday() +
|
||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getSelfDefenseAbsentDelay,
|
->getSelfDefenseAbsentDelay,
|
||||||
\&FHEM::Automation::ShuttersControl::_SetCmdFn, \%h
|
\&FHEM::Automation::ShuttersControl::SetCmdFn, \%h
|
||||||
);
|
);
|
||||||
$FHEM::Automation::ShuttersControl::shutters->setSelfDefenseAbsent(
|
$FHEM::Automation::ShuttersControl::shutters->setSelfDefenseAbsent(
|
||||||
1, 0, \%h );
|
1, 0, \%h );
|
||||||
@ -247,7 +249,7 @@ sub setDriveCmd {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters
|
$FHEM::Automation::ShuttersControl::shutters
|
||||||
->getDelayStart
|
->getDelayStart
|
||||||
),
|
),
|
||||||
\&FHEM::Automation::ShuttersControl::_SetCmdFn,
|
\&FHEM::Automation::ShuttersControl::SetCmdFn,
|
||||||
\%h
|
\%h
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -258,7 +260,7 @@ sub setDriveCmd {
|
|||||||
elsif ($offSetStart < 1
|
elsif ($offSetStart < 1
|
||||||
|| $FHEM::Automation::ShuttersControl::shutters->getNoDelay )
|
|| $FHEM::Automation::ShuttersControl::shutters->getNoDelay )
|
||||||
{
|
{
|
||||||
FHEM::Automation::ShuttersControl::_SetCmdFn( \%h );
|
FHEM::Automation::ShuttersControl::SetCmdFn( \%h );
|
||||||
FHEM::Automation::ShuttersControl::ASC_Debug( 'FnSetDriveCmd: '
|
FHEM::Automation::ShuttersControl::ASC_Debug( 'FnSetDriveCmd: '
|
||||||
. $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
. $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
||||||
. ' - NICHT versetztes fahren' );
|
. ' - NICHT versetztes fahren' );
|
||||||
@ -346,8 +348,7 @@ sub setLastDriveReading {
|
|||||||
);
|
);
|
||||||
|
|
||||||
::InternalTimer( ::gettimeofday() + 0.1,
|
::InternalTimer( ::gettimeofday() + 0.1,
|
||||||
\&FHEM::Automation::ShuttersControl::_setShuttersLastDriveDelayed,
|
\&FHEM::Automation::ShuttersControl::setShuttersLastDriveDelayed, \%h );
|
||||||
\%h );
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -460,7 +461,8 @@ sub setRainUnprotectionDelayObj {
|
|||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $value = shift;
|
my $value = shift;
|
||||||
|
|
||||||
$self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} = $value
|
$self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL}
|
||||||
|
= $value
|
||||||
if ( defined($value) );
|
if ( defined($value) );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -545,7 +547,8 @@ sub getAttrUpdateChanges {
|
|||||||
sub getIsDay {
|
sub getIsDay {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return FHEM::Automation::ShuttersControl::Helper::_IsDay( $self->{shuttersDev} );
|
return FHEM::Automation::ShuttersControl::Helper::_IsDay(
|
||||||
|
$self->{shuttersDev} );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getAntiFreezeStatus {
|
sub getAntiFreezeStatus {
|
||||||
@ -756,10 +759,12 @@ sub getRainUnprotectionDelayObj {
|
|||||||
(
|
(
|
||||||
defined( $self->{ $self->{shuttersDev} }->{RainProtection} )
|
defined( $self->{ $self->{shuttersDev} }->{RainProtection} )
|
||||||
&& defined(
|
&& defined(
|
||||||
$self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL}
|
$self->{ $self->{shuttersDev} }->{RainProtection}
|
||||||
|
->{UNPROTECTIONDELAYOBJVAL}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
? $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL}
|
? $self->{ $self->{shuttersDev} }->{RainProtection}
|
||||||
|
->{UNPROTECTIONDELAYOBJVAL}
|
||||||
: 'none'
|
: 'none'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -821,7 +826,7 @@ sub getRoommatesStatus {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->setRoommate($ro);
|
$FHEM::Automation::ShuttersControl::shutters->setRoommate($ro);
|
||||||
my $currentPrio =
|
my $currentPrio =
|
||||||
$statePrio{ $FHEM::Automation::ShuttersControl::shutters
|
$statePrio{ $FHEM::Automation::ShuttersControl::shutters
|
||||||
->_getRoommateStatus };
|
->getRoommateStatus };
|
||||||
$minPrio = $currentPrio if ( $minPrio > $currentPrio );
|
$minPrio = $currentPrio if ( $minPrio > $currentPrio );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -854,7 +859,7 @@ sub getRoommatesLastStatus {
|
|||||||
$FHEM::Automation::ShuttersControl::shutters->setRoommate($ro);
|
$FHEM::Automation::ShuttersControl::shutters->setRoommate($ro);
|
||||||
my $currentPrio =
|
my $currentPrio =
|
||||||
$statePrio{ $FHEM::Automation::ShuttersControl::shutters
|
$statePrio{ $FHEM::Automation::ShuttersControl::shutters
|
||||||
->_getRoommateLastStatus };
|
->getRoommateLastStatus };
|
||||||
$minPrio = $currentPrio if ( $minPrio > $currentPrio );
|
$minPrio = $currentPrio if ( $minPrio > $currentPrio );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -899,7 +904,8 @@ sub setShadingStatus {
|
|||||||
|
|
||||||
$self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} = $value
|
$self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} = $value
|
||||||
if ( defined($value) );
|
if ( defined($value) );
|
||||||
$self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} = int( ::gettimeofday() )
|
$self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} =
|
||||||
|
int( ::gettimeofday() )
|
||||||
if ( defined( $self->{ $self->{shuttersDev} }{ShadingStatus} ) );
|
if ( defined( $self->{ $self->{shuttersDev} }{ShadingStatus} ) );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -1011,8 +1017,12 @@ sub getShadingBetweenTheTimeSuspend { # Werte für value = 0, 1
|
|||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
defined( $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend} )
|
defined(
|
||||||
&& defined( $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL} )
|
$self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}
|
||||||
|
)
|
||||||
|
&& defined(
|
||||||
|
$self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL}
|
||||||
|
)
|
||||||
? $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL}
|
? $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL}
|
||||||
: 0
|
: 0
|
||||||
);
|
);
|
||||||
@ -1084,9 +1094,7 @@ sub getShadingLastPos {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
defined( $self->{ $self->{shuttersDev} }{ShadingLastPos} )
|
defined( $self->{ $self->{shuttersDev} }{ShadingLastPos} )
|
||||||
&& defined(
|
&& defined( $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL} )
|
||||||
$self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL}
|
|
||||||
)
|
|
||||||
? $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL}
|
? $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL}
|
||||||
: $FHEM::Automation::ShuttersControl::shutters->getShadingPos
|
: $FHEM::Automation::ShuttersControl::shutters->getShadingPos
|
||||||
);
|
);
|
||||||
@ -1094,7 +1102,4 @@ sub getShadingLastPos {
|
|||||||
|
|
||||||
### Ende Beschattung
|
### Ende Beschattung
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2020 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -46,24 +46,12 @@ use utf8;
|
|||||||
|
|
||||||
use FHEM::Automation::ShuttersControl::Helper qw (IsAdv PerlCodeCheck);
|
use FHEM::Automation::ShuttersControl::Helper qw (IsAdv PerlCodeCheck);
|
||||||
|
|
||||||
use GPUtils qw(GP_Import);
|
|
||||||
|
|
||||||
## Import der FHEM Funktionen
|
|
||||||
BEGIN {
|
|
||||||
GP_Import(
|
|
||||||
qw(
|
|
||||||
AttrVal
|
|
||||||
CommandAttr
|
|
||||||
gettimeofday)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub _setAttributs {
|
sub _setAttributs {
|
||||||
my $shuttersDev = shift;
|
my $shuttersDev = shift;
|
||||||
my $attr = shift;
|
my $attr = shift;
|
||||||
my $attrVal = shift;
|
my $attrVal = shift;
|
||||||
|
|
||||||
CommandAttr( undef, $shuttersDev . ' ' . $attr . ' ' . $attrVal );
|
::CommandAttr( undef, $shuttersDev . ' ' . $attr . ' ' . $attrVal );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -77,28 +65,28 @@ sub _getPosition {
|
|||||||
return $self->{ $self->{shuttersDev} }->{$attr}->{position}
|
return $self->{ $self->{shuttersDev} }->{$attr}->{position}
|
||||||
if (
|
if (
|
||||||
exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} )
|
exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2
|
$self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
$self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} =
|
$self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} =
|
||||||
int( gettimeofday() );
|
int( ::gettimeofday() );
|
||||||
|
|
||||||
my $position;
|
my $position;
|
||||||
my $posAssignment;
|
my $posAssignment;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
AttrVal( $self->{shuttersDev}, $attr,
|
::AttrVal( $self->{shuttersDev}, $attr,
|
||||||
$FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
$FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
||||||
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ) =~
|
[ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ) =~
|
||||||
m{\A\{.+\}\z}xms
|
m{\A\{.+\}\z}xms
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
my $response = PerlCodeCheck(
|
my $response = PerlCodeCheck(
|
||||||
AttrVal(
|
::AttrVal(
|
||||||
$self->{shuttersDev},
|
$self->{shuttersDev},
|
||||||
$attr,
|
$attr,
|
||||||
$FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
$FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
||||||
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
[ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -108,7 +96,7 @@ sub _getPosition {
|
|||||||
$position =~ m{\A\d+(\.\d+)?\z}xms
|
$position =~ m{\A\d+(\.\d+)?\z}xms
|
||||||
? $position
|
? $position
|
||||||
: $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
: $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
||||||
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
[ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
||||||
);
|
);
|
||||||
|
|
||||||
$posAssignment = (
|
$posAssignment = (
|
||||||
@ -124,7 +112,7 @@ sub _getPosition {
|
|||||||
$self->{shuttersDev},
|
$self->{shuttersDev},
|
||||||
$attr,
|
$attr,
|
||||||
$FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
$FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
||||||
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
[ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,8 +133,7 @@ sub _getPosition {
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
$self->{ $self->{shuttersDev} }->{$attr}->{position} =
|
$self->{ $self->{shuttersDev} }->{$attr}->{position} =
|
||||||
PerlCodeCheck(
|
PerlCodeCheck( $self->{ $self->{shuttersDev} }->{$attr}->{position} );
|
||||||
$self->{ $self->{shuttersDev} }->{$attr}->{position} );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -154,7 +141,7 @@ sub _getPosition {
|
|||||||
m{^\d+(\.\d+)?$}xms
|
m{^\d+(\.\d+)?$}xms
|
||||||
? $self->{ $self->{shuttersDev} }->{$attr}->{position}
|
? $self->{ $self->{shuttersDev} }->{$attr}->{position}
|
||||||
: $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
: $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
||||||
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
[ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,7 +154,7 @@ sub _getPositionAssignment {
|
|||||||
return $self->{ $self->{shuttersDev} }->{$attr}->{posAssignment}
|
return $self->{ $self->{shuttersDev} }->{$attr}->{posAssignment}
|
||||||
if (
|
if (
|
||||||
exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} )
|
exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} )
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2
|
$self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
$FHEM::Automation::ShuttersControl::shutters->$getFn;
|
$FHEM::Automation::ShuttersControl::shutters->$getFn;
|
||||||
@ -213,7 +200,7 @@ sub setShuttersPlace {
|
|||||||
sub getShuttersPlace {
|
sub getShuttersPlace {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setSlatPosCmd {
|
sub setSlatPosCmd {
|
||||||
@ -236,15 +223,15 @@ sub getSlatPosCmd {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
|
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
|
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}->{LASTGETTIME}
|
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}->{LASTGETTIME}
|
||||||
= int( gettimeofday() );
|
= int( ::gettimeofday() );
|
||||||
my ( $slatPosCmd, $slatDevice ) =
|
my ( $slatPosCmd, $slatDevice ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||||
'ASC_SlatPosCmd_SlatDevice', 'none:none' );
|
$self->{shuttersDev}, 'ASC_SlatPosCmd_SlatDevice', 'none:none' );
|
||||||
|
|
||||||
## Erwartetes Ergebnis
|
## Erwartetes Ergebnis
|
||||||
# upTime:upBrightnessVal
|
# upTime:upBrightnessVal
|
||||||
@ -268,7 +255,7 @@ sub getSlatDevice {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
|
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
|
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -299,15 +286,15 @@ sub getPrivacyUpTime {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
||||||
->{LASTGETTIME} = int( gettimeofday() );
|
->{LASTGETTIME} = int( ::gettimeofday() );
|
||||||
my ( $upTime, $upBrightnessVal ) =
|
my ( $upTime, $upBrightnessVal ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||||
'ASC_PrivacyUpValue_beforeDayOpen', '-1:-1' );
|
$self->{shuttersDev}, 'ASC_PrivacyUpValue_beforeDayOpen', '-1:-1' );
|
||||||
|
|
||||||
## Erwartetes Ergebnis
|
## Erwartetes Ergebnis
|
||||||
# upTime:upBrightnessVal
|
# upTime:upBrightnessVal
|
||||||
@ -341,7 +328,7 @@ sub getPrivacyUpBrightnessVal {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -378,14 +365,15 @@ sub getPrivacyDownTime {
|
|||||||
$self->{ $self->{shuttersDev} }
|
$self->{ $self->{shuttersDev} }
|
||||||
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME}
|
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }
|
$self->{ $self->{shuttersDev} }
|
||||||
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2
|
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_PrivacyDownValue_beforeNightClose}
|
$self->{ $self->{shuttersDev} }->{ASC_PrivacyDownValue_beforeNightClose}
|
||||||
->{LASTGETTIME} = int( gettimeofday() );
|
->{LASTGETTIME} = int( ::gettimeofday() );
|
||||||
my ( $downTime, $downBrightnessVal ) =
|
my ( $downTime, $downBrightnessVal ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||||
|
$self->{shuttersDev},
|
||||||
'ASC_PrivacyDownValue_beforeNightClose', '-1:-1' );
|
'ASC_PrivacyDownValue_beforeNightClose', '-1:-1' );
|
||||||
|
|
||||||
## Erwartetes Ergebnis
|
## Erwartetes Ergebnis
|
||||||
@ -420,7 +408,7 @@ sub getPrivacyDownBrightnessVal {
|
|||||||
$self->{ $self->{shuttersDev} }
|
$self->{ $self->{shuttersDev} }
|
||||||
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME}
|
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }
|
$self->{ $self->{shuttersDev} }
|
||||||
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2
|
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -497,7 +485,7 @@ sub setSelfDefenseMode {
|
|||||||
sub getSelfDefenseMode {
|
sub getSelfDefenseMode {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_Mode', 'gone' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_Mode', 'gone' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setSelfDefenseAbsentDelay {
|
sub setSelfDefenseAbsentDelay {
|
||||||
@ -513,7 +501,14 @@ sub setSelfDefenseAbsentDelay {
|
|||||||
sub getSelfDefenseAbsentDelay {
|
sub getSelfDefenseAbsentDelay {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_AbsentDelay', 300 );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_AbsentDelay',
|
||||||
|
300 );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub getCommandTemplate {
|
||||||
|
my $self = shift;
|
||||||
|
|
||||||
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_CommandTemplate', 'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setWiggleValue {
|
sub setWiggleValue {
|
||||||
@ -528,7 +523,7 @@ sub setWiggleValue {
|
|||||||
sub getWiggleValue {
|
sub getWiggleValue {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setAdv {
|
sub setAdv {
|
||||||
@ -544,7 +539,7 @@ sub getAdv {
|
|||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
AttrVal( $self->{shuttersDev}, 'ASC_Adv', 'off' ) eq 'on'
|
::AttrVal( $self->{shuttersDev}, 'ASC_Adv', 'off' ) eq 'on'
|
||||||
? ( IsAdv == 1 ? 1 : 0 )
|
? ( IsAdv == 1 ? 1 : 0 )
|
||||||
: 0
|
: 0
|
||||||
);
|
);
|
||||||
@ -587,7 +582,7 @@ sub setShadingMode {
|
|||||||
sub getShadingMode {
|
sub getShadingMode {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'off' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'off' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub _getTempSensor {
|
sub _getTempSensor {
|
||||||
@ -598,15 +593,15 @@ sub _getTempSensor {
|
|||||||
exists(
|
exists(
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME}
|
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} )
|
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} )
|
||||||
< 2
|
< 2
|
||||||
);
|
);
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} =
|
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} =
|
||||||
int( gettimeofday() );
|
int( ::gettimeofday() );
|
||||||
my ( $device, $reading ) =
|
my ( $device, $reading ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||||
'ASC_TempSensor', 'none' );
|
$self->{shuttersDev}, 'ASC_TempSensor', 'none' );
|
||||||
|
|
||||||
### erwartetes Ergebnis
|
### erwartetes Ergebnis
|
||||||
# DEVICE:READING
|
# DEVICE:READING
|
||||||
@ -625,7 +620,7 @@ sub getTempSensorReading {
|
|||||||
exists(
|
exists(
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME}
|
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} )
|
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} )
|
||||||
< 2
|
< 2
|
||||||
);
|
);
|
||||||
@ -658,15 +653,15 @@ sub _getIdleDetectionReading {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
|
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
|
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}->{LASTGETTIME}
|
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}->{LASTGETTIME}
|
||||||
= int( gettimeofday() );
|
= int( ::gettimeofday() );
|
||||||
my ( $reading, $value ) =
|
my ( $reading, $value ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||||
'ASC_Shutter_IdleDetection', 'none' );
|
$self->{shuttersDev}, 'ASC_Shutter_IdleDetection', 'none' );
|
||||||
|
|
||||||
### erwartetes Ergebnis
|
### erwartetes Ergebnis
|
||||||
# READING:VALUE
|
# READING:VALUE
|
||||||
@ -688,7 +683,7 @@ sub getIdleDetectionValue {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
|
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
|
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -722,15 +717,15 @@ sub _getBrightnessSensor {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}->{LASTGETTIME} =
|
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}->{LASTGETTIME} =
|
||||||
int( gettimeofday() );
|
int( ::gettimeofday() );
|
||||||
my ( $device, $reading, $max, $min ) =
|
my ( $device, $reading, $max, $min ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||||
'ASC_BrightnessSensor', 'none' );
|
$self->{shuttersDev}, 'ASC_BrightnessSensor', 'none' );
|
||||||
|
|
||||||
### erwartetes Ergebnis
|
### erwartetes Ergebnis
|
||||||
# DEVICE:READING MAX:MIN
|
# DEVICE:READING MAX:MIN
|
||||||
@ -754,7 +749,7 @@ sub getBrightnessReading {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -779,7 +774,7 @@ sub getShadingAzimuthLeft {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
|
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
|
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -808,15 +803,15 @@ sub getShadingAzimuthRight {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
|
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
|
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}->{LASTGETTIME}
|
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}->{LASTGETTIME}
|
||||||
= int( gettimeofday() );
|
= int( ::gettimeofday() );
|
||||||
my ( $left, $right ) =
|
my ( $left, $right ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||||
'ASC_Shading_InOutAzimuth', '95:265' );
|
$self->{shuttersDev}, 'ASC_Shading_InOutAzimuth', '95:265' );
|
||||||
|
|
||||||
### erwartetes Ergebnis
|
### erwartetes Ergebnis
|
||||||
# MIN:MAX
|
# MIN:MAX
|
||||||
@ -843,8 +838,8 @@ sub setShadingMinOutsideTemperature {
|
|||||||
sub getShadingMinOutsideTemperature {
|
sub getShadingMinOutsideTemperature {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Min_OutsideTemperature',
|
return ::AttrVal( $self->{shuttersDev},
|
||||||
18 );
|
'ASC_Shading_Min_OutsideTemperature', 18 );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setShadingMinMaxElevation {
|
sub setShadingMinMaxElevation {
|
||||||
@ -867,15 +862,15 @@ sub getShadingMinElevation {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
||||||
->{LASTGETTIME} = int( gettimeofday() );
|
->{LASTGETTIME} = int( ::gettimeofday() );
|
||||||
my ( $min, $max ) =
|
my ( $min, $max ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||||
'ASC_Shading_MinMax_Elevation', '25.0:100.0' );
|
$self->{shuttersDev}, 'ASC_Shading_MinMax_Elevation', '25.0:100.0' );
|
||||||
|
|
||||||
### erwartetes Ergebnis
|
### erwartetes Ergebnis
|
||||||
# MIN:MAX
|
# MIN:MAX
|
||||||
@ -899,7 +894,7 @@ sub getShadingMaxElevation {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -937,15 +932,15 @@ sub getShadingStateChangeSunny {
|
|||||||
$self->{ $self->{shuttersDev} }
|
$self->{ $self->{shuttersDev} }
|
||||||
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
|
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }
|
$self->{ $self->{shuttersDev} }
|
||||||
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
|
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_StateChange_SunnyCloudy}
|
$self->{ $self->{shuttersDev} }->{ASC_Shading_StateChange_SunnyCloudy}
|
||||||
->{LASTGETTIME} = int( gettimeofday() );
|
->{LASTGETTIME} = int( ::gettimeofday() );
|
||||||
my ( $sunny, $cloudy, $maxBrightnessAverageArrayObjects ) =
|
my ( $sunny, $cloudy, $maxBrightnessAverageArrayObjects ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||||
'ASC_Shading_StateChange_SunnyCloudy',
|
$self->{shuttersDev}, 'ASC_Shading_StateChange_SunnyCloudy',
|
||||||
'35000:20000' );
|
'35000:20000' );
|
||||||
|
|
||||||
### erwartetes Ergebnis
|
### erwartetes Ergebnis
|
||||||
@ -976,7 +971,7 @@ sub getShadingStateChangeCloudy {
|
|||||||
$self->{ $self->{shuttersDev} }
|
$self->{ $self->{shuttersDev} }
|
||||||
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
|
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }
|
$self->{ $self->{shuttersDev} }
|
||||||
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
|
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -996,7 +991,7 @@ sub getMaxBrightnessAverageArrayObjects {
|
|||||||
$self->{ $self->{shuttersDev} }
|
$self->{ $self->{shuttersDev} }
|
||||||
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
|
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }
|
$self->{ $self->{shuttersDev} }
|
||||||
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
|
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -1019,7 +1014,7 @@ sub setShadingWaitingPeriod {
|
|||||||
sub getShadingWaitingPeriod {
|
sub getShadingWaitingPeriod {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_WaitingPeriod', 1200 );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_WaitingPeriod', 1200 );
|
||||||
}
|
}
|
||||||
### Ende Beschattung
|
### Ende Beschattung
|
||||||
sub setExternalTrigger {
|
sub setExternalTrigger {
|
||||||
@ -1040,16 +1035,16 @@ sub getExternalTriggerDevice {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{LASTGETTIME} =
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{LASTGETTIME} =
|
||||||
int( gettimeofday() );
|
int( ::gettimeofday() );
|
||||||
my ( $device, $reading, $valueActive, $valueInactive, $posActive,
|
my ( $device, $reading, $valueActive, $valueInactive, $posActive,
|
||||||
$posInactive, $valueActive2, $posActive2 )
|
$posInactive, $valueActive2, $posActive2 )
|
||||||
= FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
= FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||||
'ASC_ExternalTrigger', 'none' );
|
$self->{shuttersDev}, 'ASC_ExternalTrigger', 'none' );
|
||||||
|
|
||||||
### erwartetes Ergebnis
|
### erwartetes Ergebnis
|
||||||
# DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE VALUEACTIVE2:POSACTIVE2
|
# DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE VALUEACTIVE2:POSACTIVE2
|
||||||
@ -1064,10 +1059,11 @@ sub getExternalTriggerDevice {
|
|||||||
$valueInactive;
|
$valueInactive;
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive} =
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive} =
|
||||||
$posActive;
|
$posActive;
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posinactive} =
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posinactive} = (
|
||||||
( $posInactive ne 'none'
|
$posInactive ne 'none'
|
||||||
? $posInactive
|
? $posInactive
|
||||||
: $FHEM::Automation::ShuttersControl::shutters->getLastPos );
|
: $FHEM::Automation::ShuttersControl::shutters->getLastPos
|
||||||
|
);
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{valueactive2} =
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{valueactive2} =
|
||||||
$valueActive2;
|
$valueActive2;
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive2} =
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive2} =
|
||||||
@ -1086,7 +1082,7 @@ sub getExternalTriggerReading {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -1104,7 +1100,7 @@ sub getExternalTriggerValueActive {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -1124,7 +1120,7 @@ sub getExternalTriggerValueActive2 {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -1144,7 +1140,7 @@ sub getExternalTriggerValueInactive {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -1163,7 +1159,7 @@ sub getExternalTriggerPosActive {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -1181,7 +1177,7 @@ sub getExternalTriggerPosActive2 {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -1199,7 +1195,7 @@ sub getExternalTriggerPosInactive {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -1221,7 +1217,7 @@ sub setDelay {
|
|||||||
sub getDelay {
|
sub getDelay {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Drive_Delay', -1 );
|
my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Drive_Delay', -1 );
|
||||||
return ( $val =~ m{^\d+$}xms ? $val : -1 );
|
return ( $val =~ m{^\d+$}xms ? $val : -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1237,7 +1233,7 @@ sub setDelayStart {
|
|||||||
sub getDelayStart {
|
sub getDelayStart {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Drive_DelayStart', -1 );
|
my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Drive_DelayStart', -1 );
|
||||||
return ( ( $val > 0 && $val =~ m{^\d+$}xms ) ? $val : -1 );
|
return ( ( $val > 0 && $val =~ m{^\d+$}xms ) ? $val : -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1254,7 +1250,7 @@ sub setBlockingTimeAfterManual {
|
|||||||
sub getBlockingTimeAfterManual {
|
sub getBlockingTimeAfterManual {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_afterManual',
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_afterManual',
|
||||||
1200 );
|
1200 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1271,7 +1267,7 @@ sub setBlockingTimeBeforNightClose {
|
|||||||
sub getBlockingTimeBeforNightClose {
|
sub getBlockingTimeBeforNightClose {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforNightClose',
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforNightClose',
|
||||||
3600 );
|
3600 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1288,7 +1284,7 @@ sub setBlockingTimeBeforDayOpen {
|
|||||||
sub getBlockingTimeBeforDayOpen {
|
sub getBlockingTimeBeforDayOpen {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforDayOpen',
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforDayOpen',
|
||||||
3600 );
|
3600 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1304,9 +1300,9 @@ sub setPosCmd {
|
|||||||
sub getPosCmd {
|
sub getPosCmd {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading',
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading',
|
||||||
$FHEM::Automation::ShuttersControl::userAttrList{'ASC_Pos_Reading'}
|
$FHEM::Automation::ShuttersControl::userAttrList{'ASC_Pos_Reading'}
|
||||||
[ AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] );
|
[ ::AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setOpenPos {
|
sub setOpenPos {
|
||||||
@ -1371,7 +1367,7 @@ sub setVentilatePosAfterDayClosed {
|
|||||||
sub getVentilatePosAfterDayClosed {
|
sub getVentilatePosAfterDayClosed {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_PosAfterDayClosed',
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_PosAfterDayClosed',
|
||||||
'open' );
|
'open' );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1436,7 +1432,7 @@ sub setVentilateOpen {
|
|||||||
sub getVentilateOpen {
|
sub getVentilateOpen {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Window_Open', 'on' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Window_Open', 'on' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setComfortOpenPos {
|
sub setComfortOpenPos {
|
||||||
@ -1476,7 +1472,7 @@ sub setPartyMode {
|
|||||||
sub getPartyMode {
|
sub getPartyMode {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Partymode', 'off' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Partymode', 'off' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setRoommates {
|
sub setRoommates {
|
||||||
@ -1491,7 +1487,7 @@ sub setRoommates {
|
|||||||
sub getRoommates {
|
sub getRoommates {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Device', 'none' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Device', 'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setRoommatesReading {
|
sub setRoommatesReading {
|
||||||
@ -1506,7 +1502,7 @@ sub setRoommatesReading {
|
|||||||
sub getRoommatesReading {
|
sub getRoommatesReading {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Reading', 'state' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Reading', 'state' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getWindPos {
|
sub getWindPos {
|
||||||
@ -1519,7 +1515,7 @@ sub getWindPos {
|
|||||||
exists(
|
exists(
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
||||||
) < 2
|
) < 2
|
||||||
);
|
);
|
||||||
@ -1538,15 +1534,15 @@ sub getWindMax {
|
|||||||
exists(
|
exists(
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
||||||
) < 2
|
) < 2
|
||||||
);
|
);
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} =
|
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} =
|
||||||
int( gettimeofday() );
|
int( ::gettimeofday() );
|
||||||
my ( $max, $hyst, $pos ) =
|
my ( $max, $hyst, $pos ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||||
'ASC_WindParameters', '50:20' );
|
$self->{shuttersDev}, 'ASC_WindParameters', '50:20' );
|
||||||
|
|
||||||
## Erwartetes Ergebnis
|
## Erwartetes Ergebnis
|
||||||
# max:hyst pos
|
# max:hyst pos
|
||||||
@ -1554,10 +1550,11 @@ sub getWindMax {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax} = $max;
|
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax} = $max;
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggerhyst} =
|
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggerhyst} =
|
||||||
( $hyst ne 'none' ? $max - $hyst : $max - 20 );
|
( $hyst ne 'none' ? $max - $hyst : $max - 20 );
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{closedPos} =
|
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{closedPos} = (
|
||||||
( $pos ne 'none'
|
$pos ne 'none'
|
||||||
? $pos
|
? $pos
|
||||||
: $FHEM::Automation::ShuttersControl::shutters->getOpenPos );
|
: $FHEM::Automation::ShuttersControl::shutters->getOpenPos
|
||||||
|
);
|
||||||
|
|
||||||
return $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax};
|
return $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax};
|
||||||
}
|
}
|
||||||
@ -1581,7 +1578,7 @@ sub getWindMin {
|
|||||||
exists(
|
exists(
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
||||||
) < 2
|
) < 2
|
||||||
);
|
);
|
||||||
@ -1602,7 +1599,7 @@ sub setWindProtection {
|
|||||||
sub getWindProtection {
|
sub getWindProtection {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_WindProtection', 'off' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_WindProtection', 'off' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setRainProtection {
|
sub setRainProtection {
|
||||||
@ -1617,7 +1614,7 @@ sub setRainProtection {
|
|||||||
sub getRainProtection {
|
sub getRainProtection {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_RainProtection', 'off' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_RainProtection', 'off' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setModeUp {
|
sub setModeUp {
|
||||||
@ -1632,7 +1629,7 @@ sub setModeUp {
|
|||||||
sub getModeUp {
|
sub getModeUp {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Mode_Up', 'always' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Mode_Up', 'always' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setModeDown {
|
sub setModeDown {
|
||||||
@ -1647,7 +1644,7 @@ sub setModeDown {
|
|||||||
sub getModeDown {
|
sub getModeDown {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Mode_Down', 'always' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Mode_Down', 'always' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setLockOut {
|
sub setLockOut {
|
||||||
@ -1662,7 +1659,7 @@ sub setLockOut {
|
|||||||
sub getLockOut {
|
sub getLockOut {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_LockOut', 'off' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_LockOut', 'off' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setLockOutCmd {
|
sub setLockOutCmd {
|
||||||
@ -1677,7 +1674,7 @@ sub setLockOutCmd {
|
|||||||
sub getLockOutCmd {
|
sub getLockOutCmd {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_LockOut_Cmd', 'none' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_LockOut_Cmd', 'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setAntiFreeze {
|
sub setAntiFreeze {
|
||||||
@ -1692,7 +1689,7 @@ sub setAntiFreeze {
|
|||||||
sub getAntiFreeze {
|
sub getAntiFreeze {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Antifreeze', 'off' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Antifreeze', 'off' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setAutoAstroModeMorning {
|
sub setAutoAstroModeMorning {
|
||||||
@ -1707,7 +1704,8 @@ sub setAutoAstroModeMorning {
|
|||||||
sub getAutoAstroModeMorning {
|
sub getAutoAstroModeMorning {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorning', 'none' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorning',
|
||||||
|
'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setAutoAstroModeEvening {
|
sub setAutoAstroModeEvening {
|
||||||
@ -1722,7 +1720,8 @@ sub setAutoAstroModeEvening {
|
|||||||
sub getAutoAstroModeEvening {
|
sub getAutoAstroModeEvening {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEvening', 'none' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEvening',
|
||||||
|
'none' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setAutoAstroModeMorningHorizon {
|
sub setAutoAstroModeMorningHorizon {
|
||||||
@ -1738,7 +1737,7 @@ sub setAutoAstroModeMorningHorizon {
|
|||||||
sub getAutoAstroModeMorningHorizon {
|
sub getAutoAstroModeMorningHorizon {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorningHorizon',
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorningHorizon',
|
||||||
0 );
|
0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1755,7 +1754,7 @@ sub setAutoAstroModeEveningHorizon {
|
|||||||
sub getAutoAstroModeEveningHorizon {
|
sub getAutoAstroModeEveningHorizon {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEveningHorizon',
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEveningHorizon',
|
||||||
0 );
|
0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1771,7 +1770,7 @@ sub setUp {
|
|||||||
sub getUp {
|
sub getUp {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Up', 'astro' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Up', 'astro' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setDown {
|
sub setDown {
|
||||||
@ -1786,14 +1785,15 @@ sub setDown {
|
|||||||
sub getDown {
|
sub getDown {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Down', 'astro' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Down', 'astro' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setShadingBetweenTheTime {
|
sub setShadingBetweenTheTime {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $attrVal = shift;
|
my $attrVal = shift;
|
||||||
|
|
||||||
_setAttributs( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime', $attrVal );
|
_setAttributs( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime',
|
||||||
|
$attrVal );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1801,7 +1801,8 @@ sub setShadingBetweenTheTime {
|
|||||||
sub getShadingBetweenTheTime {
|
sub getShadingBetweenTheTime {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime', '00:00-24:00' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime',
|
||||||
|
'00:00-24:00' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setTimeUpEarly {
|
sub setTimeUpEarly {
|
||||||
@ -1816,7 +1817,7 @@ sub setTimeUpEarly {
|
|||||||
sub getTimeUpEarly {
|
sub getTimeUpEarly {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Early', '05:00' );
|
my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Early', '05:00' );
|
||||||
|
|
||||||
if ( defined( PerlCodeCheck($val) ) ) {
|
if ( defined( PerlCodeCheck($val) ) ) {
|
||||||
$val = PerlCodeCheck($val);
|
$val = PerlCodeCheck($val);
|
||||||
@ -1841,7 +1842,7 @@ sub setTimeUpLate {
|
|||||||
sub getTimeUpLate {
|
sub getTimeUpLate {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Late', '08:30' );
|
my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Late', '08:30' );
|
||||||
|
|
||||||
if ( defined( PerlCodeCheck($val) ) ) {
|
if ( defined( PerlCodeCheck($val) ) ) {
|
||||||
$val = PerlCodeCheck($val);
|
$val = PerlCodeCheck($val);
|
||||||
@ -1866,7 +1867,7 @@ sub setTimeDownEarly {
|
|||||||
sub getTimeDownEarly {
|
sub getTimeDownEarly {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Early', '16:00' );
|
my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Early', '16:00' );
|
||||||
|
|
||||||
if ( defined( PerlCodeCheck($val) ) ) {
|
if ( defined( PerlCodeCheck($val) ) ) {
|
||||||
$val = PerlCodeCheck($val);
|
$val = PerlCodeCheck($val);
|
||||||
@ -1891,7 +1892,7 @@ sub setTimeDownLate {
|
|||||||
sub getTimeDownLate {
|
sub getTimeDownLate {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Late', '22:00' );
|
my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Late', '22:00' );
|
||||||
|
|
||||||
if ( defined( PerlCodeCheck($val) ) ) {
|
if ( defined( PerlCodeCheck($val) ) ) {
|
||||||
$val = PerlCodeCheck($val);
|
$val = PerlCodeCheck($val);
|
||||||
@ -1917,7 +1918,7 @@ sub getTimeUpWeHoliday {
|
|||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
my $val =
|
my $val =
|
||||||
AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_WE_Holiday', '01:25' );
|
::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_WE_Holiday', '01:25' );
|
||||||
|
|
||||||
if ( defined( PerlCodeCheck($val) ) ) {
|
if ( defined( PerlCodeCheck($val) ) ) {
|
||||||
$val = PerlCodeCheck($val);
|
$val = PerlCodeCheck($val);
|
||||||
@ -1939,7 +1940,7 @@ sub getBrightnessMinVal {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -1958,7 +1959,7 @@ sub getBrightnessMaxVal {
|
|||||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||||
->{LASTGETTIME}
|
->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||||
->{LASTGETTIME} ) < 2
|
->{LASTGETTIME} ) < 2
|
||||||
);
|
);
|
||||||
@ -1980,7 +1981,7 @@ sub setDriveUpMaxDuration {
|
|||||||
sub getDriveUpMaxDuration {
|
sub getDriveUpMaxDuration {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_DriveUpMaxDuration', 60 );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_DriveUpMaxDuration', 60 );
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2020 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -44,21 +44,10 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use utf8;
|
use utf8;
|
||||||
|
|
||||||
use GPUtils qw(GP_Import);
|
|
||||||
|
|
||||||
## Import der FHEM Funktionen
|
|
||||||
BEGIN {
|
|
||||||
GP_Import(
|
|
||||||
qw(
|
|
||||||
ReadingsVal
|
|
||||||
ReadingsNum)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub getBrightness {
|
sub getBrightness {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return ReadingsNum(
|
return ::ReadingsNum(
|
||||||
$FHEM::Automation::ShuttersControl::shutters->_getBrightnessSensor,
|
$FHEM::Automation::ShuttersControl::shutters->_getBrightnessSensor,
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getBrightnessReading,
|
$FHEM::Automation::ShuttersControl::shutters->getBrightnessReading,
|
||||||
-1 );
|
-1 );
|
||||||
@ -67,7 +56,7 @@ sub getBrightness {
|
|||||||
sub getWindStatus {
|
sub getWindStatus {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return ReadingsVal(
|
return ::ReadingsVal(
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->_getWindSensor,
|
$FHEM::Automation::ShuttersControl::ascDev->_getWindSensor,
|
||||||
$FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading, -1 );
|
$FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading, -1 );
|
||||||
}
|
}
|
||||||
@ -75,7 +64,7 @@ sub getWindStatus {
|
|||||||
sub getStatus {
|
sub getStatus {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return ReadingsNum( $self->{shuttersDev},
|
return ::ReadingsNum( $self->{shuttersDev},
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getPosCmd, 0 );
|
$FHEM::Automation::ShuttersControl::shutters->getPosCmd, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,7 +77,7 @@ sub getDelayCmd {
|
|||||||
sub getASCenable {
|
sub getASCenable {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return ReadingsVal( $self->{shuttersDev}, 'ASC_Enable', 'on' );
|
return ::ReadingsVal( $self->{shuttersDev}, 'ASC_Enable', 'on' );
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2020 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -47,7 +47,7 @@ use utf8;
|
|||||||
use FHEM::Automation::ShuttersControl::Window::Attr;
|
use FHEM::Automation::ShuttersControl::Window::Attr;
|
||||||
use FHEM::Automation::ShuttersControl::Window::Readings;
|
use FHEM::Automation::ShuttersControl::Window::Readings;
|
||||||
|
|
||||||
our @ISA =
|
use base
|
||||||
qw(FHEM::Automation::ShuttersControl::Window::Attr FHEM::Automation::ShuttersControl::Window::Readings);
|
qw(FHEM::Automation::ShuttersControl::Window::Attr FHEM::Automation::ShuttersControl::Window::Readings);
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2020 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -44,17 +44,6 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use utf8;
|
use utf8;
|
||||||
|
|
||||||
use GPUtils qw(GP_Import);
|
|
||||||
|
|
||||||
## Import der FHEM Funktionen
|
|
||||||
BEGIN {
|
|
||||||
GP_Import(
|
|
||||||
qw(
|
|
||||||
AttrVal
|
|
||||||
gettimeofday)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub setSubTyp {
|
sub setSubTyp {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $attrVal = shift;
|
my $attrVal = shift;
|
||||||
@ -67,7 +56,8 @@ sub setSubTyp {
|
|||||||
sub getSubTyp {
|
sub getSubTyp {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_subType', 'twostate' );
|
return ::AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_subType',
|
||||||
|
'twostate' );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub setWinDev {
|
sub setWinDev {
|
||||||
@ -87,15 +77,15 @@ sub _getWinDev {
|
|||||||
exists(
|
exists(
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME}
|
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) <
|
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) <
|
||||||
2
|
2
|
||||||
);
|
);
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} =
|
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} =
|
||||||
int( gettimeofday() );
|
int( ::gettimeofday() );
|
||||||
my ( $device, $reading ) =
|
my ( $device, $reading ) =
|
||||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||||
'ASC_WindowRec', 'none' );
|
$self->{shuttersDev}, 'ASC_WindowRec', 'none' );
|
||||||
|
|
||||||
### erwartetes Ergebnis
|
### erwartetes Ergebnis
|
||||||
# DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE
|
# DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE
|
||||||
@ -116,7 +106,7 @@ sub getWinDevReading {
|
|||||||
exists(
|
exists(
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME}
|
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME}
|
||||||
)
|
)
|
||||||
&& ( gettimeofday() -
|
&& ( ::gettimeofday() -
|
||||||
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) <
|
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) <
|
||||||
2
|
2
|
||||||
);
|
);
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Developed with Kate
|
# Developed with VSCodium and richterger perl plugin
|
||||||
#
|
#
|
||||||
# (c) 2018-2020 Copyright: Marko Oldenburg (leongaultier at gmail dot com)
|
# (c) 2018-2022 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||||
# All rights reserved
|
# All rights reserved
|
||||||
#
|
#
|
||||||
# Special thanks goes to:
|
# Special thanks goes to:
|
||||||
@ -44,20 +44,10 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use utf8;
|
use utf8;
|
||||||
|
|
||||||
use GPUtils qw(GP_Import);
|
|
||||||
|
|
||||||
## Import der FHEM Funktionen
|
|
||||||
BEGIN {
|
|
||||||
GP_Import(
|
|
||||||
qw(
|
|
||||||
ReadingsVal)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub getWinStatus {
|
sub getWinStatus {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
|
||||||
return ReadingsVal(
|
return ::ReadingsVal(
|
||||||
$FHEM::Automation::ShuttersControl::shutters->_getWinDev,
|
$FHEM::Automation::ShuttersControl::shutters->_getWinDev,
|
||||||
$FHEM::Automation::ShuttersControl::shutters->getWinDevReading,
|
$FHEM::Automation::ShuttersControl::shutters->getWinDevReading,
|
||||||
'closed' );
|
'closed' );
|
||||||
|
Reference in New Issue
Block a user