Compare commits
182 Commits
Author | SHA1 | Date | |
---|---|---|---|
81489d5246 | |||
833a370347 | |||
fb50355d39 | |||
d41615c90f | |||
be5e721c43 | |||
2351e5b9db | |||
d4626a068b | |||
0571adccc5 | |||
8ec3bcde54 | |||
bd97e399bf | |||
d409662969 | |||
c1c3e2cbdf | |||
72298746ab | |||
787114040c | |||
b517e032cf | |||
|
30cf6f41d7 | ||
|
eef3dc7b21 | ||
|
cfe3963f32 | ||
|
b654481df1 | ||
e19c902780 | |||
757a19bdb5 | |||
52930d9a07 | |||
e1592b8b7d | |||
7eb1079458 | |||
ceecbb063a | |||
49b0ff17fa | |||
ae5057fbc5 | |||
9cd0d364b4 | |||
f216e1b308 | |||
6f137256e0 | |||
cc5ef41e21 | |||
587d4e4316 | |||
|
3542e51375 | ||
|
f517b72f23 | ||
|
ad5cbaac12 | ||
8da3b13bcc | |||
c09edf5496 | |||
cd1c2c104a | |||
51256c1ed9 | |||
c0a7bfa6df | |||
403936fe73 | |||
5095c65d80 | |||
0bd8d6273f | |||
c3b61def25 | |||
9c096902e8 | |||
6dfc92c35e | |||
9994af6ca2 | |||
eb85a74a07 | |||
358c760b45 | |||
34a6a88401 | |||
bb80fb5d3a | |||
2907e19d3b | |||
ae86468077 | |||
7cba141447 | |||
f67d56e1cc | |||
527d72dd57 | |||
459b8508ec | |||
ac87015478 | |||
26105fa434 | |||
15be0a6885 | |||
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 |
8496
CHANGELOG.md
Normal file
8496
CHANGELOG.md
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,15 +1,16 @@
|
||||
UPD 2021-05-27_08:55:22 97974 FHEM/73_AutoShuttersControl.pm
|
||||
UPD 2021-05-27_08:51:20 74350 lib/FHEM/Automation/ShuttersControl.pm
|
||||
UPD 2021-02-18_11:11:24 2657 lib/FHEM/Automation/ShuttersControl/Dev.pm
|
||||
UPD 2021-02-18_11:11:24 2496 lib/FHEM/Automation/ShuttersControl/Roommate.pm
|
||||
UPD 2021-05-27_08:51:20 31896 lib/FHEM/Automation/ShuttersControl/Shutters.pm
|
||||
UPD 2021-04-30_18:20:51 25329 lib/FHEM/Automation/ShuttersControl/Shading.pm
|
||||
UPD 2021-05-27_08:51:20 109039 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
|
||||
UPD 2021-02-18_11:11:24 40628 lib/FHEM/Automation/ShuttersControl/Helper.pm
|
||||
UPD 2021-02-18_11:11:24 2175 lib/FHEM/Automation/ShuttersControl/Window.pm
|
||||
UPD 2021-05-27_08:51:20 11741 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm
|
||||
UPD 2021-02-18_11:11:24 7251 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm
|
||||
UPD 2021-02-18_11:11:24 52525 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm
|
||||
UPD 2021-02-18_11:11:24 2903 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm
|
||||
UPD 2021-02-18_11:11:24 3980 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm
|
||||
UPD 2021-02-18_11:11:24 2288 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm
|
||||
UPD 2025-01-21_18:19:08 116536 FHEM/73_AutoShuttersControl.pm
|
||||
UPD 2025-01-21_17:56:42 76570 lib/FHEM/Automation/ShuttersControl.pm
|
||||
UPD 2024-10-12_09:12:30 2691 lib/FHEM/Automation/ShuttersControl/Dev.pm
|
||||
UPD 2024-10-12_09:12:30 2675 lib/FHEM/Automation/ShuttersControl/Roommate.pm
|
||||
UPD 2024-10-12_09:12:30 31828 lib/FHEM/Automation/ShuttersControl/Shutters.pm
|
||||
UPD 2024-10-12_09:12:30 25541 lib/FHEM/Automation/ShuttersControl/Shading.pm
|
||||
UPD 2024-10-12_09:12:30 112297 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm
|
||||
UPD 2024-10-12_09:12:30 40681 lib/FHEM/Automation/ShuttersControl/Helper.pm
|
||||
UPD 2024-10-12_09:12:30 2209 lib/FHEM/Automation/ShuttersControl/Window.pm
|
||||
UPD 2024-10-12_09:12:30 11857 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm
|
||||
UPD 2024-10-12_09:12:30 7265 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm
|
||||
UPD 2024-10-12_09:12:30 52751 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm
|
||||
UPD 2024-10-12_09:12:30 2799 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm
|
||||
UPD 2024-10-12_09:12:30 3887 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm
|
||||
UPD 2024-10-12_09:12:30 2200 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm
|
||||
UPD 2024-10-12_09:12:30 7394 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm
|
||||
|
36
hooks/commit-msg
Executable file
36
hooks/commit-msg
Executable file
@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to check the commit log message.
|
||||
# Called by "git commit" with one argument, the name of the file
|
||||
# that has the commit message. The hook should exit with non-zero
|
||||
# status after issuing an appropriate message if it wants to stop the
|
||||
# commit. The hook is allowed to edit the commit message file.
|
||||
#
|
||||
# To enable this hook, rename this file to "commit-msg".
|
||||
|
||||
# Uncomment the below to add a Signed-off-by line to the message.
|
||||
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
|
||||
# hook is more suited to it.
|
||||
#
|
||||
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
||||
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|
||||
|
||||
# This example catches duplicate Signed-off-by lines.
|
||||
|
||||
commit_msg=$(cat "${1:?Missing commit message file}")
|
||||
|
||||
test "" = "$(grep '^Signed-off-by: ' "$1" |
|
||||
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
|
||||
echo >&2 Duplicate Signed-off-by lines.
|
||||
exit 1
|
||||
}
|
||||
|
||||
if ! echo "$commit_msg" | grep -Eq "^(build|chore|ci|docs|feat|feat!|fix|perf|refactor|revert|style|test)(\(.+\))?: .*$" ; then
|
||||
|
||||
echo "Invalid commit message"
|
||||
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
echo "Commit message is valid!"
|
18
hooks/post-commit
Executable file
18
hooks/post-commit
Executable file
@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
set -eu
|
||||
|
||||
# destination of the final changelog file
|
||||
OUTPUT_FILE=CHANGELOG.md
|
||||
|
||||
# generate the changelog
|
||||
git --no-pager log --no-merges --format="### %s%d%n>%aD%n%n>Author: %aN (%aE)%n%n>Commiter: %cN (%cE)%n%n%b%n%N%n" > $OUTPUT_FILE
|
||||
|
||||
# prevent recursion!
|
||||
# since a 'commit --amend' will trigger the post-commit script again
|
||||
# we have to check if the changelog file has changed or not
|
||||
res=$(git status --porcelain | grep -c ".\$OUTPUT_FILE$")
|
||||
if [ "$res" -gt 0 ]; then
|
||||
git add $OUTPUT_FILE
|
||||
git commit --amend
|
||||
echo "Populated Changelog in $OUTPUT_FILE"
|
||||
fi
|
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-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||
# All rights reserved
|
||||
#
|
||||
# Special thanks goes to:
|
||||
@ -43,7 +43,7 @@ package FHEM::Automation::ShuttersControl::Dev;
|
||||
use FHEM::Automation::ShuttersControl::Dev::Readings;
|
||||
use FHEM::Automation::ShuttersControl::Dev::Attr;
|
||||
|
||||
our @ISA =
|
||||
use base
|
||||
qw(FHEM::Automation::ShuttersControl::Dev::Readings FHEM::Automation::ShuttersControl::Dev::Attr);
|
||||
|
||||
use strict;
|
||||
|
@ -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-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||
# All rights reserved
|
||||
#
|
||||
# Special thanks goes to:
|
||||
@ -44,23 +44,12 @@ use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
|
||||
use GPUtils qw(GP_Import);
|
||||
|
||||
## Import der FHEM Funktionen
|
||||
BEGIN {
|
||||
GP_Import(
|
||||
qw(
|
||||
AttrVal
|
||||
gettimeofday)
|
||||
);
|
||||
}
|
||||
|
||||
sub getShuttersOffset {
|
||||
my $self = shift;
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return AttrVal( $name, 'ASC_shuttersDriveDelay', -1 );
|
||||
return ::AttrVal( $name, 'ASC_shuttersDriveDelay', -1 );
|
||||
}
|
||||
|
||||
sub getBrightnessMinVal {
|
||||
@ -70,7 +59,7 @@ sub getBrightnessMinVal {
|
||||
|
||||
return $self->{ASC_brightness}->{triggermin}
|
||||
if ( exists( $self->{ASC_brightness}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
|
||||
&& ( ::gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
|
||||
$FHEM::Automation::ShuttersControl::ascDev->getBrightnessMaxVal;
|
||||
|
||||
return $self->{ASC_brightness}->{triggermin};
|
||||
@ -83,8 +72,8 @@ sub getBrightnessMaxVal {
|
||||
|
||||
return $self->{ASC_brightness}->{triggermax}
|
||||
if ( exists( $self->{ASC_brightness}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
|
||||
$self->{ASC_brightness}->{LASTGETTIME} = int( gettimeofday() );
|
||||
&& ( ::gettimeofday() - $self->{ASC_brightness}->{LASTGETTIME} ) < 2 );
|
||||
$self->{ASC_brightness}->{LASTGETTIME} = int( ::gettimeofday() );
|
||||
|
||||
my ( $triggermax, $triggermin ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
|
||||
@ -104,7 +93,7 @@ sub _getTwilightDevice {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return AttrVal( $name, 'ASC_twilightDevice', 'none' );
|
||||
return ::AttrVal( $name, 'ASC_twilightDevice', 'none' );
|
||||
}
|
||||
|
||||
sub getAutoAstroModeEvening {
|
||||
@ -112,7 +101,7 @@ sub getAutoAstroModeEvening {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return AttrVal( $name, 'ASC_autoAstroModeEvening', 'REAL' );
|
||||
return ::AttrVal( $name, 'ASC_autoAstroModeEvening', 'REAL' );
|
||||
}
|
||||
|
||||
sub getAutoAstroModeEveningHorizon {
|
||||
@ -120,7 +109,7 @@ sub getAutoAstroModeEveningHorizon {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return AttrVal( $name, 'ASC_autoAstroModeEveningHorizon', 0 );
|
||||
return ::AttrVal( $name, 'ASC_autoAstroModeEveningHorizon', 0 );
|
||||
}
|
||||
|
||||
sub getAutoAstroModeMorning {
|
||||
@ -128,7 +117,7 @@ sub getAutoAstroModeMorning {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return AttrVal( $name, 'ASC_autoAstroModeMorning', 'REAL' );
|
||||
return ::AttrVal( $name, 'ASC_autoAstroModeMorning', 'REAL' );
|
||||
}
|
||||
|
||||
sub getAutoAstroModeMorningHorizon {
|
||||
@ -136,7 +125,7 @@ sub getAutoAstroModeMorningHorizon {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return AttrVal( $name, 'ASC_autoAstroModeMorningHorizon', 0 );
|
||||
return ::AttrVal( $name, 'ASC_autoAstroModeMorningHorizon', 0 );
|
||||
}
|
||||
|
||||
sub getAutoShuttersControlMorning {
|
||||
@ -144,7 +133,7 @@ sub getAutoShuttersControlMorning {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return AttrVal( $name, 'ASC_autoShuttersControlMorning', 'on' );
|
||||
return ::AttrVal( $name, 'ASC_autoShuttersControlMorning', 'on' );
|
||||
}
|
||||
|
||||
sub getAutoShuttersControlEvening {
|
||||
@ -152,7 +141,7 @@ sub getAutoShuttersControlEvening {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return AttrVal( $name, 'ASC_autoShuttersControlEvening', 'on' );
|
||||
return ::AttrVal( $name, 'ASC_autoShuttersControlEvening', 'on' );
|
||||
}
|
||||
|
||||
sub getAutoShuttersControlComfort {
|
||||
@ -160,7 +149,7 @@ sub getAutoShuttersControlComfort {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return AttrVal( $name, 'ASC_autoShuttersControlComfort', 'off' );
|
||||
return ::AttrVal( $name, 'ASC_autoShuttersControlComfort', 'off' );
|
||||
}
|
||||
|
||||
sub getFreezeTemp {
|
||||
@ -168,7 +157,7 @@ sub getFreezeTemp {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return AttrVal( $name, 'ASC_freezeTemp', 3 );
|
||||
return ::AttrVal( $name, 'ASC_freezeTemp', 3 );
|
||||
}
|
||||
|
||||
sub getSlatDriveCmdInverse {
|
||||
@ -176,7 +165,7 @@ sub getSlatDriveCmdInverse {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return AttrVal( $name, 'ASC_slatDriveCmdInverse', 0 );
|
||||
return ::AttrVal( $name, 'ASC_slatDriveCmdInverse', 0 );
|
||||
}
|
||||
|
||||
sub _getTempSensor {
|
||||
@ -186,11 +175,11 @@ sub _getTempSensor {
|
||||
|
||||
return $self->{ASC_tempSensor}->{device}
|
||||
if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
|
||||
$self->{ASC_tempSensor}->{LASTGETTIME} = int( gettimeofday() );
|
||||
&& ( ::gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
|
||||
$self->{ASC_tempSensor}->{LASTGETTIME} = int( ::gettimeofday() );
|
||||
my ( $device, $reading ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_tempSensor',
|
||||
'none' );
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
|
||||
'ASC_tempSensor', 'none' );
|
||||
|
||||
## erwartetes Ergebnis
|
||||
# DEVICE:READING
|
||||
@ -208,7 +197,7 @@ sub getTempSensorReading {
|
||||
|
||||
return $self->{ASC_tempSensor}->{reading}
|
||||
if ( exists( $self->{ASC_tempSensor}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
|
||||
&& ( ::gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getTempSensor;
|
||||
return $self->{ASC_tempSensor}->{reading};
|
||||
}
|
||||
@ -220,8 +209,9 @@ sub _getResidentsDev {
|
||||
|
||||
return $self->{ASC_residentsDev}->{device}
|
||||
if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < 2 );
|
||||
$self->{ASC_residentsDev}->{LASTGETTIME} = int( gettimeofday() );
|
||||
&& ( ::gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) <
|
||||
2 );
|
||||
$self->{ASC_residentsDev}->{LASTGETTIME} = int( ::gettimeofday() );
|
||||
my ( $device, $reading ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
|
||||
'ASC_residentsDev', 'none' );
|
||||
@ -240,7 +230,8 @@ sub getResidentsReading {
|
||||
|
||||
return $self->{ASC_residentsDev}->{reading}
|
||||
if ( exists( $self->{ASC_residentsDev}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < 2 );
|
||||
&& ( ::gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) <
|
||||
2 );
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev;
|
||||
return $self->{ASC_residentsDev}->{reading};
|
||||
}
|
||||
@ -252,11 +243,11 @@ sub _getRainSensor {
|
||||
|
||||
return $self->{ASC_rainSensor}->{device}
|
||||
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||
$self->{ASC_rainSensor}->{LASTGETTIME} = int( gettimeofday() );
|
||||
&& ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||
$self->{ASC_rainSensor}->{LASTGETTIME} = int( ::gettimeofday() );
|
||||
my ( $device, $reading, $max, $hyst, $pos, $wait ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_rainSensor',
|
||||
'none' );
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
|
||||
'ASC_rainSensor', 'none' );
|
||||
|
||||
## erwartetes Ergebnis
|
||||
# DEVICE:READING MAX:HYST
|
||||
@ -266,10 +257,10 @@ sub _getRainSensor {
|
||||
$self->{ASC_rainSensor}->{reading} =
|
||||
( $reading ne 'none' ? $reading : 'rain' );
|
||||
$self->{ASC_rainSensor}->{triggermax} = (
|
||||
( $max ne 'none'
|
||||
&& $max =~ m{\A(-?\d+(\.\d+)?)\z}xms )
|
||||
( $max ne 'none' && $max =~ m{\A(-?\d+(\.\d+)?)\z}xms )
|
||||
? $max
|
||||
: 1000 );
|
||||
: 1000
|
||||
);
|
||||
|
||||
$self->{ASC_rainSensor}->{triggerhyst} = (
|
||||
$hyst ne 'none'
|
||||
@ -277,10 +268,11 @@ sub _getRainSensor {
|
||||
: ( $self->{ASC_rainSensor}->{triggermax} * 0 )
|
||||
);
|
||||
|
||||
$self->{ASC_rainSensor}->{shuttersClosedPos} =
|
||||
( $pos ne 'none'
|
||||
$self->{ASC_rainSensor}->{shuttersClosedPos} = (
|
||||
$pos ne 'none'
|
||||
? $pos
|
||||
: $FHEM::Automation::ShuttersControl::shutters->getClosedPos );
|
||||
: $FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
||||
);
|
||||
$self->{ASC_rainSensor}->{waitingTime} =
|
||||
( $wait ne 'none' ? $wait : 0 );
|
||||
|
||||
@ -294,7 +286,7 @@ sub getRainSensorReading {
|
||||
|
||||
return $self->{ASC_rainSensor}->{reading}
|
||||
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||
&& ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
||||
return $self->{ASC_rainSensor}->{reading};
|
||||
}
|
||||
@ -306,7 +298,7 @@ sub getRainTriggerMax {
|
||||
|
||||
return $self->{ASC_rainSensor}->{triggermax}
|
||||
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||
&& ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
||||
return $self->{ASC_rainSensor}->{triggermax};
|
||||
}
|
||||
@ -318,7 +310,7 @@ sub getRainTriggerMin {
|
||||
|
||||
return $self->{ASC_rainSensor}->{triggerhyst}
|
||||
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||
&& ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
||||
return $self->{ASC_rainSensor}->{triggerhyst};
|
||||
}
|
||||
@ -330,7 +322,7 @@ sub getRainSensorShuttersClosedPos {
|
||||
|
||||
return $self->{ASC_rainSensor}->{shuttersClosedPos}
|
||||
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||
&& ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
||||
return $self->{ASC_rainSensor}->{shuttersClosedPos};
|
||||
}
|
||||
@ -342,7 +334,7 @@ sub getRainWaitingTime {
|
||||
|
||||
return $self->{ASC_rainSensor}->{waitingTime}
|
||||
if ( exists( $self->{ASC_rainSensor}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||
&& ( ::gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getRainSensor;
|
||||
return $self->{ASC_rainSensor}->{waitingTime};
|
||||
}
|
||||
@ -354,11 +346,11 @@ sub _getWindSensor {
|
||||
|
||||
return $self->{ASC_windSensor}->{device}
|
||||
if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
|
||||
$self->{ASC_windSensor}->{LASTGETTIME} = int( gettimeofday() );
|
||||
&& ( ::gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
|
||||
$self->{ASC_windSensor}->{LASTGETTIME} = int( ::gettimeofday() );
|
||||
my ( $device, $reading ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name, 'ASC_windSensor',
|
||||
'none' );
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $name,
|
||||
'ASC_windSensor', 'none' );
|
||||
|
||||
return $device if ( $device eq 'none' );
|
||||
$self->{ASC_windSensor}->{device} = $device;
|
||||
@ -375,7 +367,7 @@ sub getWindSensorReading {
|
||||
|
||||
return $self->{ASC_windSensor}->{reading}
|
||||
if ( exists( $self->{ASC_windSensor}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
|
||||
&& ( ::gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getWindSensor;
|
||||
return (
|
||||
defined( $self->{ASC_windSensor}->{reading} )
|
||||
@ -389,18 +381,23 @@ sub getBlockAscDrivesAfterManual {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 );
|
||||
return ::AttrVal( $name, 'ASC_blockAscDrivesAfterManual', 0 );
|
||||
}
|
||||
|
||||
sub getAdvDate {
|
||||
sub getAdvStartDate {
|
||||
my $self = shift;
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return AttrVal( $name, 'ASC_advDate', 'FirstAdvent' );
|
||||
return ::AttrVal( $name, 'ASC_advStartDate', 'FirstAdvent' );
|
||||
}
|
||||
|
||||
sub getAdvEndDate {
|
||||
my $self = shift;
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return ::AttrVal( $name, 'ASC_advEndDate', 'EpiphanyDay' );
|
||||
}
|
||||
|
||||
1;
|
||||
|
@ -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-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||
# All rights reserved
|
||||
#
|
||||
# Special thanks goes to:
|
||||
@ -48,12 +48,7 @@ use GPUtils qw(GP_Import);
|
||||
|
||||
## Import der FHEM Funktionen
|
||||
BEGIN {
|
||||
GP_Import(
|
||||
qw(
|
||||
readingsSingleUpdate
|
||||
ReadingsVal
|
||||
defs)
|
||||
);
|
||||
GP_Import(qw(defs));
|
||||
}
|
||||
|
||||
sub setDelayCmdReading {
|
||||
@ -62,7 +57,7 @@ sub setDelayCmdReading {
|
||||
my $name = $self->{name};
|
||||
my $hash = $defs{$name};
|
||||
|
||||
readingsSingleUpdate(
|
||||
::readingsSingleUpdate(
|
||||
$hash,
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
||||
. '_lastDelayPosValue',
|
||||
@ -79,7 +74,7 @@ sub setStateReading {
|
||||
my $name = $self->{name};
|
||||
my $hash = $defs{$name};
|
||||
|
||||
readingsSingleUpdate(
|
||||
::readingsSingleUpdate(
|
||||
$hash, 'state',
|
||||
(
|
||||
defined($value)
|
||||
@ -97,7 +92,7 @@ sub setPosReading {
|
||||
my $name = $self->{name};
|
||||
my $hash = $defs{$name};
|
||||
|
||||
readingsSingleUpdate(
|
||||
::readingsSingleUpdate(
|
||||
$hash,
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
||||
. '_PosValue',
|
||||
@ -113,7 +108,7 @@ sub setLastPosReading {
|
||||
my $name = $self->{name};
|
||||
my $hash = $defs{$name};
|
||||
|
||||
readingsSingleUpdate(
|
||||
::readingsSingleUpdate(
|
||||
$hash,
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
||||
. '_lastPosValue',
|
||||
@ -128,7 +123,7 @@ sub getPartyMode {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return ReadingsVal( $name, 'partyMode', 'off' );
|
||||
return ::ReadingsVal( $name, 'partyMode', 'off' );
|
||||
}
|
||||
|
||||
sub getHardLockOut {
|
||||
@ -136,7 +131,7 @@ sub getHardLockOut {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return ReadingsVal( $name, 'hardLockOut', 'none' );
|
||||
return ::ReadingsVal( $name, 'hardLockOut', 'none' );
|
||||
}
|
||||
|
||||
sub getSunriseTimeWeHoliday {
|
||||
@ -144,7 +139,7 @@ sub getSunriseTimeWeHoliday {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return ReadingsVal( $name, 'sunriseTimeWeHoliday', 'none' );
|
||||
return ::ReadingsVal( $name, 'sunriseTimeWeHoliday', 'none' );
|
||||
}
|
||||
|
||||
sub getMonitoredDevs {
|
||||
@ -152,14 +147,14 @@ sub getMonitoredDevs {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
$self->{monitoredDevs} = ReadingsVal( $name, '.monitoredDevs', 'none' );
|
||||
$self->{monitoredDevs} = ::ReadingsVal( $name, '.monitoredDevs', 'none' );
|
||||
return $self->{monitoredDevs};
|
||||
}
|
||||
|
||||
sub getOutTemp {
|
||||
my $self = shift;
|
||||
|
||||
return ReadingsVal(
|
||||
return ::ReadingsVal(
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getTempSensor,
|
||||
$FHEM::Automation::ShuttersControl::ascDev->getTempSensorReading,
|
||||
-100 );
|
||||
@ -169,7 +164,8 @@ sub getResidentsStatus {
|
||||
my $self = shift;
|
||||
|
||||
my $val =
|
||||
ReadingsVal( $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
|
||||
::ReadingsVal(
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
|
||||
$FHEM::Automation::ShuttersControl::ascDev->getResidentsReading,
|
||||
'none' );
|
||||
|
||||
@ -178,7 +174,7 @@ sub getResidentsStatus {
|
||||
return $1 && $1 eq 'pet' ? 'absent' : $2;
|
||||
}
|
||||
elsif (
|
||||
ReadingsVal(
|
||||
::ReadingsVal(
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
|
||||
'homealoneType', '-' ) eq 'PET'
|
||||
)
|
||||
@ -196,7 +192,8 @@ sub getResidentsLastStatus {
|
||||
my $self = shift;
|
||||
|
||||
my $val =
|
||||
ReadingsVal( $FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
|
||||
::ReadingsVal(
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
|
||||
'lastState', 'none' );
|
||||
|
||||
if ( $val =~ m{^(?:(.+)_)?(.+)$}xms ) {
|
||||
@ -204,7 +201,7 @@ sub getResidentsLastStatus {
|
||||
return $1 && $1 eq 'pet' ? 'absent' : $2;
|
||||
}
|
||||
elsif (
|
||||
ReadingsVal(
|
||||
::ReadingsVal(
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getResidentsDev,
|
||||
'lastHomealoneType', '-' ) eq 'PET'
|
||||
)
|
||||
@ -223,7 +220,7 @@ sub getAutoShuttersControlShading {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return ReadingsVal( $name, 'controlShading', 'none' );
|
||||
return ::ReadingsVal( $name, 'controlShading', 'none' );
|
||||
}
|
||||
|
||||
sub getSelfDefense {
|
||||
@ -231,7 +228,7 @@ sub getSelfDefense {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return ReadingsVal( $name, 'selfDefense', 'none' );
|
||||
return ::ReadingsVal( $name, 'selfDefense', 'none' );
|
||||
}
|
||||
|
||||
sub getAzimuth {
|
||||
@ -239,13 +236,13 @@ sub getAzimuth {
|
||||
|
||||
my $azimuth;
|
||||
|
||||
$azimuth = ReadingsVal(
|
||||
$azimuth = ::ReadingsVal(
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
|
||||
'azimuth', -1 )
|
||||
if (
|
||||
$defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice }
|
||||
->{TYPE} eq 'Twilight' );
|
||||
$azimuth = ReadingsVal(
|
||||
$azimuth = ::ReadingsVal(
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
|
||||
'SunAz', -1 )
|
||||
if (
|
||||
@ -260,13 +257,13 @@ sub getElevation {
|
||||
|
||||
my $elevation;
|
||||
|
||||
$elevation = ReadingsVal(
|
||||
$elevation = ::ReadingsVal(
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
|
||||
'elevation', -1 )
|
||||
if (
|
||||
$defs{ $FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice }
|
||||
->{TYPE} eq 'Twilight' );
|
||||
$elevation = ReadingsVal(
|
||||
$elevation = ::ReadingsVal(
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getTwilightDevice,
|
||||
'SunAlt', -1 )
|
||||
if (
|
||||
@ -281,7 +278,7 @@ sub getASCenable {
|
||||
|
||||
my $name = $self->{name};
|
||||
|
||||
return ReadingsVal( $name, 'ascEnable', 'none' );
|
||||
return ::ReadingsVal( $name, 'ascEnable', 'none' );
|
||||
}
|
||||
|
||||
1;
|
||||
|
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 (fhemsupport@cooltux.net)
|
||||
# (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||
# All rights reserved
|
||||
#
|
||||
# Special thanks goes to:
|
||||
@ -46,7 +46,9 @@ use POSIX qw(strftime);
|
||||
use utf8;
|
||||
|
||||
require Exporter;
|
||||
our @ISA = qw(Exporter);
|
||||
use base qw(Exporter);
|
||||
|
||||
# our @ISA = qw(Exporter);
|
||||
our @EXPORT_OK = qw(
|
||||
PositionValueWindowRec
|
||||
AutoSearchTwilightDev
|
||||
@ -82,28 +84,14 @@ our %EXPORT_TAGS = (
|
||||
PerlCodeCheck
|
||||
IsAdv
|
||||
IsInTime
|
||||
)
|
||||
)
|
||||
],
|
||||
);
|
||||
|
||||
use GPUtils qw(GP_Import);
|
||||
## Import der FHEM Funktionen
|
||||
BEGIN {
|
||||
GP_Import(
|
||||
qw(
|
||||
devspec2array
|
||||
CommandAttr
|
||||
AttrVal
|
||||
Log3
|
||||
computeAlignTime
|
||||
gettimeofday
|
||||
sunset
|
||||
sunset_abs
|
||||
sunrise
|
||||
sunrise_abs
|
||||
cmdFromAnalyze
|
||||
)
|
||||
);
|
||||
GP_Import(qw(cmdFromAnalyze));
|
||||
}
|
||||
|
||||
sub PositionValueWindowRec {
|
||||
@ -156,12 +144,12 @@ sub AutoSearchTwilightDev {
|
||||
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
if ( devspec2array('TYPE=(Astro|Twilight)') > 0 ) {
|
||||
CommandAttr( undef,
|
||||
if ( ::devspec2array('TYPE=(Astro|Twilight)') > 0 ) {
|
||||
::CommandAttr( undef,
|
||||
$name
|
||||
. ' ASC_twilightDevice '
|
||||
. ( devspec2array('TYPE=(Astro|Twilight)') )[0] )
|
||||
if ( AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' );
|
||||
. ( ::devspec2array('TYPE=(Astro|Twilight)') )[0] )
|
||||
if ( ::AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' );
|
||||
}
|
||||
|
||||
return;
|
||||
@ -172,8 +160,10 @@ sub GetAttrValues {
|
||||
my $attribut = shift;
|
||||
my $default = shift;
|
||||
|
||||
my @values = split( ' ',
|
||||
AttrVal( $dev, $attribut, ( defined($default) ? $default : 'none' ) ) );
|
||||
my @values = split(
|
||||
' ',
|
||||
::AttrVal( $dev, $attribut, ( defined($default) ? $default : 'none' ) )
|
||||
);
|
||||
my ( $value1, $value2 ) = split( ':', $values[0] );
|
||||
|
||||
my ( $value3, $value4, $value5, $value6, $value7, $value8 );
|
||||
@ -217,7 +207,7 @@ sub CheckIfShuttersWindowRecOpen {
|
||||
m{[Cc]lose|true}xms )
|
||||
{
|
||||
return 0;
|
||||
} # CK: covers: close|closed
|
||||
} # CK: covers: close|closed
|
||||
}
|
||||
|
||||
sub ExtractNotifyDevFromEvent {
|
||||
@ -227,10 +217,10 @@ sub ExtractNotifyDevFromEvent {
|
||||
|
||||
my %notifyDevs;
|
||||
while ( my $notifyDev = each %{ $hash->{monitoredDevs} } ) {
|
||||
Log3( $hash->{NAME}, 4,
|
||||
::Log3( $hash->{NAME}, 4,
|
||||
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - NotifyDev: "
|
||||
. $notifyDev );
|
||||
Log3( $hash->{NAME}, 5,
|
||||
::Log3( $hash->{NAME}, 5,
|
||||
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDev: "
|
||||
. $shuttersDev );
|
||||
|
||||
@ -238,10 +228,10 @@ sub ExtractNotifyDevFromEvent {
|
||||
&& $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} eq
|
||||
$shuttersAttr )
|
||||
{
|
||||
Log3( $hash->{NAME}, 4,
|
||||
::Log3( $hash->{NAME}, 4,
|
||||
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - ShuttersDevHash: "
|
||||
. $hash->{monitoredDevs}{$notifyDev}{$shuttersDev} );
|
||||
Log3( $hash->{NAME}, 5,
|
||||
::Log3( $hash->{NAME}, 5,
|
||||
"AutoShuttersControl ($hash->{NAME}) - ExtractNotifyDevFromEvent - return ShuttersDev: "
|
||||
. $notifyDev );
|
||||
$notifyDevs{$notifyDev} = $shuttersDev;
|
||||
@ -279,24 +269,27 @@ sub _IsDay {
|
||||
(
|
||||
(
|
||||
(
|
||||
int( gettimeofday() / 86400 ) != int(
|
||||
computeAlignTime( '24:00',
|
||||
int( ::gettimeofday() / 86400 ) != int(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpEarly ) / 86400
|
||||
->getTimeUpEarly
|
||||
) / 86400
|
||||
)
|
||||
&& ( !IsWe()
|
||||
|| ( IsWe()
|
||||
&& ( $FHEM::Automation::ShuttersControl::ascDev
|
||||
->getSunriseTimeWeHoliday eq 'off'
|
||||
|| $FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpWeHoliday eq '01:25'
|
||||
)
|
||||
)
|
||||
&& (
|
||||
!IsWe()
|
||||
|| (
|
||||
IsWe()
|
||||
&& ( $FHEM::Automation::ShuttersControl::ascDev
|
||||
->getSunriseTimeWeHoliday eq 'off'
|
||||
|| $FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpWeHoliday eq '01:25' )
|
||||
)
|
||||
)
|
||||
)
|
||||
|| (
|
||||
int( gettimeofday() / 86400 ) != int(
|
||||
computeAlignTime(
|
||||
int( ::gettimeofday() / 86400 ) != int(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpWeHoliday
|
||||
@ -309,23 +302,23 @@ sub _IsDay {
|
||||
->getTimeUpWeHoliday ne '01:25'
|
||||
)
|
||||
)
|
||||
&& int( gettimeofday() / 86400 ) == int(
|
||||
computeAlignTime(
|
||||
&& int( ::gettimeofday() / 86400 ) == int(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters->getTimeUpLate
|
||||
) / 86400
|
||||
)
|
||||
)
|
||||
|| (
|
||||
int( gettimeofday() / 86400 ) != int(
|
||||
computeAlignTime(
|
||||
int( ::gettimeofday() / 86400 ) != int(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeDownEarly
|
||||
) / 86400
|
||||
)
|
||||
&& int( gettimeofday() / 86400 ) == int(
|
||||
computeAlignTime(
|
||||
&& int( ::gettimeofday() / 86400 ) == int(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeDownLate
|
||||
@ -390,25 +383,32 @@ sub _IsDay {
|
||||
. $FHEM::Automation::ShuttersControl::shutters->getSunrise );
|
||||
}
|
||||
|
||||
|
||||
$respIsDay = 1
|
||||
if (
|
||||
( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'roommate'
|
||||
and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'asleep'
|
||||
or $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'gotosleep' )
|
||||
)
|
||||
or ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'roommate'
|
||||
and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'asleep'
|
||||
or $FHEM::Automation::ShuttersControl::shutters->getRoommates ne 'gotosleep' )
|
||||
)
|
||||
(
|
||||
$FHEM::Automation::ShuttersControl::shutters->getDown eq 'roommate'
|
||||
and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne
|
||||
'asleep'
|
||||
or $FHEM::Automation::ShuttersControl::shutters->getRoommates
|
||||
ne 'gotosleep' )
|
||||
)
|
||||
or (
|
||||
$FHEM::Automation::ShuttersControl::shutters->getUp eq 'roommate'
|
||||
and ( $FHEM::Automation::ShuttersControl::shutters->getRoommates ne
|
||||
'asleep'
|
||||
or $FHEM::Automation::ShuttersControl::shutters->getRoommates
|
||||
ne 'gotosleep' )
|
||||
)
|
||||
or ( $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace eq
|
||||
'awning' )
|
||||
);
|
||||
|
||||
|
||||
return $respIsDay;
|
||||
}
|
||||
|
||||
sub ShuttersSunrise {
|
||||
my $shuttersDev = shift;
|
||||
my $tm = shift; # Tm steht für Timemode und bedeutet Realzeit oder Unixzeit
|
||||
my $tm = shift; # Tm steht für Timemode und bedeutet Realzeit oder Unixzeit
|
||||
|
||||
my $autoAstroMode;
|
||||
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
|
||||
@ -436,7 +436,7 @@ sub ShuttersSunrise {
|
||||
my $oldFuncHash =
|
||||
$FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash;
|
||||
my $shuttersSunriseUnixtime =
|
||||
computeAlignTime( '24:00', sunrise( 'REAL', 0, '4:30', '8:30' ) );
|
||||
::computeAlignTime( '24:00', ::sunrise( 'REAL', 0, '4:30', '8:30' ) );
|
||||
|
||||
if ( $tm eq 'unix' ) {
|
||||
if ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'astro' ) {
|
||||
@ -449,11 +449,11 @@ sub ShuttersSunrise {
|
||||
if ( !IsWe('tomorrow') ) {
|
||||
if (
|
||||
IsWe()
|
||||
&& int( gettimeofday() / 86400 ) == int(
|
||||
&& int( ::gettimeofday() / 86400 ) == int(
|
||||
(
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -465,9 +465,9 @@ sub ShuttersSunrise {
|
||||
)
|
||||
{
|
||||
$shuttersSunriseUnixtime = (
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -477,11 +477,11 @@ sub ShuttersSunrise {
|
||||
);
|
||||
}
|
||||
elsif (
|
||||
int( gettimeofday() / 86400 ) == int(
|
||||
int( ::gettimeofday() / 86400 ) == int(
|
||||
(
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -495,9 +495,9 @@ sub ShuttersSunrise {
|
||||
)
|
||||
{
|
||||
$shuttersSunriseUnixtime = (
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -508,9 +508,9 @@ sub ShuttersSunrise {
|
||||
}
|
||||
else {
|
||||
$shuttersSunriseUnixtime = (
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -526,11 +526,11 @@ sub ShuttersSunrise {
|
||||
if (
|
||||
IsWe()
|
||||
&& (
|
||||
int( gettimeofday() / 86400 ) == int(
|
||||
int( ::gettimeofday() / 86400 ) == int(
|
||||
(
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -539,11 +539,11 @@ sub ShuttersSunrise {
|
||||
) + 1
|
||||
) / 86400
|
||||
)
|
||||
|| int( gettimeofday() / 86400 ) != int(
|
||||
|| int( ::gettimeofday() / 86400 ) != int(
|
||||
(
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -556,9 +556,9 @@ sub ShuttersSunrise {
|
||||
)
|
||||
{
|
||||
$shuttersSunriseUnixtime = (
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -568,11 +568,11 @@ sub ShuttersSunrise {
|
||||
);
|
||||
}
|
||||
elsif (
|
||||
int( gettimeofday() / 86400 ) == int(
|
||||
int( ::gettimeofday() / 86400 ) == int(
|
||||
(
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -586,9 +586,9 @@ sub ShuttersSunrise {
|
||||
)
|
||||
{
|
||||
$shuttersSunriseUnixtime = (
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -601,11 +601,11 @@ sub ShuttersSunrise {
|
||||
}
|
||||
else {
|
||||
if (
|
||||
int( gettimeofday() / 86400 ) == int(
|
||||
int( ::gettimeofday() / 86400 ) == int(
|
||||
(
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -617,9 +617,9 @@ sub ShuttersSunrise {
|
||||
)
|
||||
{
|
||||
$shuttersSunriseUnixtime = (
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -630,9 +630,9 @@ sub ShuttersSunrise {
|
||||
}
|
||||
else {
|
||||
$shuttersSunriseUnixtime = (
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -646,9 +646,9 @@ sub ShuttersSunrise {
|
||||
}
|
||||
else {
|
||||
$shuttersSunriseUnixtime = (
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -669,11 +669,11 @@ sub ShuttersSunrise {
|
||||
{
|
||||
if ( !IsWe('tomorrow') ) {
|
||||
if (
|
||||
int( gettimeofday() / 86400 ) == int(
|
||||
int( ::gettimeofday() / 86400 ) == int(
|
||||
(
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunrise_abs(
|
||||
::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -690,7 +690,7 @@ sub ShuttersSunrise {
|
||||
( $shuttersSunriseUnixtime + 86400 )
|
||||
if ( $shuttersSunriseUnixtime <
|
||||
( $oldFuncHash->{sunrisetime} + 180 )
|
||||
&& $oldFuncHash->{sunrisetime} < gettimeofday() );
|
||||
&& $oldFuncHash->{sunrisetime} < ::gettimeofday() );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -698,7 +698,7 @@ sub ShuttersSunrise {
|
||||
$shuttersSunriseUnixtime = ( $shuttersSunriseUnixtime + 86400 )
|
||||
if ( $shuttersSunriseUnixtime <
|
||||
( $oldFuncHash->{sunrisetime} + 180 )
|
||||
&& $oldFuncHash->{sunrisetime} < gettimeofday() );
|
||||
&& $oldFuncHash->{sunrisetime} < ::gettimeofday() );
|
||||
}
|
||||
}
|
||||
elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq 'time' )
|
||||
@ -711,8 +711,8 @@ sub ShuttersSunrise {
|
||||
{
|
||||
if ( !IsWe('tomorrow') ) {
|
||||
if (
|
||||
int( gettimeofday() / 86400 ) == int(
|
||||
computeAlignTime(
|
||||
int( ::gettimeofday() / 86400 ) == int(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpWeHoliday
|
||||
@ -720,13 +720,13 @@ sub ShuttersSunrise {
|
||||
)
|
||||
)
|
||||
{
|
||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
||||
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpWeHoliday );
|
||||
}
|
||||
elsif (
|
||||
int( gettimeofday() / 86400 ) == int(
|
||||
computeAlignTime(
|
||||
int( ::gettimeofday() / 86400 ) == int(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpEarly
|
||||
@ -736,12 +736,12 @@ sub ShuttersSunrise {
|
||||
->getSunrise
|
||||
)
|
||||
{
|
||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
||||
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpEarly ) + 86400;
|
||||
}
|
||||
else {
|
||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
||||
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpEarly );
|
||||
}
|
||||
@ -749,8 +749,8 @@ sub ShuttersSunrise {
|
||||
else {
|
||||
if (
|
||||
IsWe()
|
||||
&& int( gettimeofday() / 86400 ) == int(
|
||||
computeAlignTime(
|
||||
&& int( ::gettimeofday() / 86400 ) == int(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpWeHoliday
|
||||
@ -758,13 +758,13 @@ sub ShuttersSunrise {
|
||||
)
|
||||
)
|
||||
{
|
||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
||||
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpWeHoliday );
|
||||
}
|
||||
elsif (
|
||||
int( gettimeofday() / 86400 ) == int(
|
||||
computeAlignTime(
|
||||
int( ::gettimeofday() / 86400 ) == int(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpEarly
|
||||
@ -772,13 +772,13 @@ sub ShuttersSunrise {
|
||||
)
|
||||
)
|
||||
{
|
||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
||||
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpEarly );
|
||||
}
|
||||
elsif (
|
||||
int( gettimeofday() / 86400 ) != int(
|
||||
computeAlignTime(
|
||||
int( ::gettimeofday() / 86400 ) != int(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpWeHoliday
|
||||
@ -786,19 +786,19 @@ sub ShuttersSunrise {
|
||||
)
|
||||
)
|
||||
{
|
||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
||||
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpWeHoliday );
|
||||
}
|
||||
else {
|
||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
||||
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpWeHoliday ) + 86400;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
||||
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getTimeUpEarly );
|
||||
}
|
||||
@ -806,15 +806,14 @@ sub ShuttersSunrise {
|
||||
elsif ( $FHEM::Automation::ShuttersControl::shutters->getUp eq
|
||||
'brightness' )
|
||||
{
|
||||
$shuttersSunriseUnixtime = computeAlignTime( '24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters->getTimeUpLate
|
||||
);
|
||||
$shuttersSunriseUnixtime = ::computeAlignTime( '24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters->getTimeUpLate );
|
||||
}
|
||||
|
||||
return $shuttersSunriseUnixtime;
|
||||
}
|
||||
elsif ( $tm eq 'real' ) {
|
||||
return sunrise_abs(
|
||||
return ::sunrise_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters->getTimeUpEarly,
|
||||
@ -830,7 +829,7 @@ sub ShuttersSunrise {
|
||||
|
||||
sub ShuttersSunset {
|
||||
my $shuttersDev = shift;
|
||||
my $tm = shift; # Tm steht für Timemode und bedeutet Realzeit oder Unixzeit
|
||||
my $tm = shift; # Tm steht für Timemode und bedeutet Realzeit oder Unixzeit
|
||||
|
||||
my $autoAstroMode;
|
||||
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
|
||||
@ -858,15 +857,15 @@ sub ShuttersSunset {
|
||||
my $oldFuncHash =
|
||||
$FHEM::Automation::ShuttersControl::shutters->getInTimerFuncHash;
|
||||
my $shuttersSunsetUnixtime =
|
||||
computeAlignTime( '24:00', sunset( 'REAL', 0, '15:30', '21:30' ) );
|
||||
::computeAlignTime( '24:00', ::sunset( 'REAL', 0, '15:30', '21:30' ) );
|
||||
|
||||
if ( $tm eq 'unix' ) {
|
||||
if ( $FHEM::Automation::ShuttersControl::shutters->getDown eq 'astro' )
|
||||
{
|
||||
$shuttersSunsetUnixtime = (
|
||||
computeAlignTime(
|
||||
::computeAlignTime(
|
||||
'24:00',
|
||||
sunset_abs(
|
||||
::sunset_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -880,13 +879,13 @@ sub ShuttersSunset {
|
||||
$shuttersSunsetUnixtime += 86400
|
||||
if ( $shuttersSunsetUnixtime <
|
||||
( $oldFuncHash->{sunsettime} + 180 )
|
||||
&& $oldFuncHash->{sunsettime} < gettimeofday() );
|
||||
&& $oldFuncHash->{sunsettime} < ::gettimeofday() );
|
||||
}
|
||||
}
|
||||
elsif (
|
||||
$FHEM::Automation::ShuttersControl::shutters->getDown eq 'time' )
|
||||
{
|
||||
$shuttersSunsetUnixtime = computeAlignTime( '24:00',
|
||||
$shuttersSunsetUnixtime = ::computeAlignTime( '24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly
|
||||
);
|
||||
}
|
||||
@ -894,13 +893,13 @@ sub ShuttersSunset {
|
||||
'brightness' )
|
||||
{
|
||||
$shuttersSunsetUnixtime =
|
||||
computeAlignTime( '24:00',
|
||||
::computeAlignTime( '24:00',
|
||||
$FHEM::Automation::ShuttersControl::shutters->getTimeDownLate );
|
||||
}
|
||||
return $shuttersSunsetUnixtime;
|
||||
}
|
||||
elsif ( $tm eq 'real' ) {
|
||||
return sunset_abs(
|
||||
return ::sunset_abs(
|
||||
$autoAstroMode,
|
||||
0,
|
||||
$FHEM::Automation::ShuttersControl::shutters->getTimeDownEarly,
|
||||
@ -923,7 +922,7 @@ sub IsAfterShuttersTimeBlocking {
|
||||
|
||||
if (
|
||||
(
|
||||
int( gettimeofday() ) -
|
||||
int( ::gettimeofday() ) -
|
||||
$FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
|
||||
) <
|
||||
$FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
|
||||
@ -933,7 +932,7 @@ sub IsAfterShuttersTimeBlocking {
|
||||
$FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
|
||||
)
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
|
||||
- ( int( gettimeofday() ) ) <
|
||||
- ( int( ::gettimeofday() ) ) <
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getBlockingTimeBeforDayOpen
|
||||
)
|
||||
@ -943,7 +942,7 @@ sub IsAfterShuttersTimeBlocking {
|
||||
$FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
|
||||
)
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getSunsetUnixTime
|
||||
- ( int( gettimeofday() ) ) <
|
||||
- ( int( ::gettimeofday() ) ) <
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getBlockingTimeBeforNightClose
|
||||
)
|
||||
@ -982,7 +981,7 @@ sub IsAfterShuttersManualBlocking {
|
||||
}
|
||||
elsif (
|
||||
(
|
||||
int( gettimeofday() ) -
|
||||
int( ::gettimeofday() ) -
|
||||
$FHEM::Automation::ShuttersControl::shutters->getLastManPosTimestamp
|
||||
) <
|
||||
$FHEM::Automation::ShuttersControl::shutters->getBlockingTimeAfterManual
|
||||
@ -994,25 +993,6 @@ sub IsAfterShuttersManualBlocking {
|
||||
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 {
|
||||
return main::IsWe( shift, shift );
|
||||
}
|
||||
@ -1038,24 +1018,32 @@ sub PerlCodeCheck {
|
||||
sub IsAdv {
|
||||
use HTTP::Date;
|
||||
my ( undef, undef, undef, $monthday, $month, $year, undef, undef, undef ) =
|
||||
localtime( gettimeofday() );
|
||||
localtime( ::gettimeofday() );
|
||||
my $adv = 0;
|
||||
$year += 1900;
|
||||
|
||||
if ( $month < 1 ) {
|
||||
if ( $monthday < 7 ) {
|
||||
$adv = 1;
|
||||
}
|
||||
if ( $month < 1
|
||||
&& $FHEM::Automation::ShuttersControl::ascDev->getAdvEndDate eq
|
||||
'EpiphanyDay' )
|
||||
{
|
||||
$adv = $monthday < 7 ? 1 : 0;
|
||||
}
|
||||
elsif ($month < 2
|
||||
&& $FHEM::Automation::ShuttersControl::ascDev->getAdvEndDate eq
|
||||
'CandlemasDay' )
|
||||
{
|
||||
$adv = $month = 1 || ( $month = 2 && $monthday < 3 ) ? 1 : 0;
|
||||
}
|
||||
else {
|
||||
my $time = str2time( $year . '-12-25' );
|
||||
my $wday = ( localtime($time) )[6];
|
||||
$wday = $wday ? $wday : 7;
|
||||
$time -= ( $FHEM::Automation::ShuttersControl::ascDev
|
||||
->getAdvDate eq 'DeadSunday'
|
||||
? ($wday + 27) * 86400
|
||||
: ($wday + 21) * 86400
|
||||
);
|
||||
$time -= (
|
||||
$FHEM::Automation::ShuttersControl::ascDev->getAdvStartDate eq
|
||||
'DeadSunday'
|
||||
? ( $wday + 27 ) * 86400
|
||||
: ( $wday + 21 ) * 86400
|
||||
);
|
||||
$adv = 1 if ( $time < time );
|
||||
}
|
||||
|
||||
@ -1065,18 +1053,19 @@ sub IsAdv {
|
||||
sub IsInTime {
|
||||
my $dfi = shift;
|
||||
|
||||
$dfi =~ s/{([^\x7d]*)}/$cmdFromAnalyze=$1; eval $1/ge; # Forum #69787
|
||||
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(gettimeofday());
|
||||
my $dhms = sprintf("%s\@%02d:%02d:%02d", $wday, $hour, $min, $sec);
|
||||
foreach my $ft (split(" ", $dfi)) {
|
||||
my ($from, $to) = split("-", $ft);
|
||||
if(defined($from) && defined($to)) {
|
||||
$from = "$wday\@$from" if(index($from,"@") < 0);
|
||||
$to = "$wday\@$to" if(index($to, "@") < 0);
|
||||
return 1 if($from le $dhms && $dhms le $to);
|
||||
$dfi =~ s/{([^\x7d]*)}/$cmdFromAnalyze=$1; eval $1/ge; # Forum #69787
|
||||
my ( $sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst ) =
|
||||
localtime( ::gettimeofday() );
|
||||
my $dhms = sprintf( "%s\@%02d:%02d:%02d", $wday, $hour, $min, $sec );
|
||||
foreach my $ft ( split( " ", $dfi ) ) {
|
||||
my ( $from, $to ) = split( "-", $ft );
|
||||
if ( defined($from) && defined($to) ) {
|
||||
$from = "$wday\@$from" if ( index( $from, "@" ) < 0 );
|
||||
$to = "$wday\@$to" if ( index( $to, "@" ) < 0 );
|
||||
return 1 if ( $from le $dhms && $dhms le $to );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -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-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||
# All rights reserved
|
||||
#
|
||||
# Special thanks goes to:
|
||||
@ -47,7 +47,9 @@ use utf8;
|
||||
use FHEM::Automation::ShuttersControl::Helper qw (:ALL);
|
||||
|
||||
require Exporter;
|
||||
our @ISA = qw(Exporter);
|
||||
use base qw(Exporter);
|
||||
|
||||
# our @ISA = qw(Exporter);
|
||||
our @EXPORT_OK = qw(
|
||||
RainProcessing
|
||||
);
|
||||
@ -55,16 +57,15 @@ our %EXPORT_TAGS = (
|
||||
ALL => [
|
||||
qw(
|
||||
RainProcessing
|
||||
)
|
||||
)
|
||||
],
|
||||
);
|
||||
|
||||
|
||||
sub RainProcessing {
|
||||
my ( $hash, $val, $triggerMax, $triggerMin ) = @_;
|
||||
|
||||
|
||||
my $rainClosedPos = $FHEM::Automation::ShuttersControl::ascDev
|
||||
->getRainSensorShuttersClosedPos;
|
||||
->getRainSensorShuttersClosedPos;
|
||||
|
||||
for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
|
||||
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
|
||||
@ -75,37 +76,53 @@ sub RainProcessing {
|
||||
$FHEM::Automation::ShuttersControl::shutters->getRainProtection eq
|
||||
'off' );
|
||||
|
||||
if ( $val > $triggerMax
|
||||
if (
|
||||
$val > $triggerMax
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
|
||||
$rainClosedPos
|
||||
&& $FHEM::Automation::ShuttersControl::shutters
|
||||
->getRainProtectionStatus eq 'unprotected'
|
||||
->getRainProtectionStatus eq 'unprotected'
|
||||
|| ( $FHEM::Automation::ShuttersControl::shutters
|
||||
->getRainProtectionStatus eq 'unprotected'
|
||||
&& $FHEM::Automation::ShuttersControl::shutters
|
||||
->getRainUnprotectionDelayObj ne 'none')
|
||||
->getRainProtectionStatus eq 'unprotected'
|
||||
&& $FHEM::Automation::ShuttersControl::shutters
|
||||
->getRainUnprotectionDelayObj ne 'none' )
|
||||
)
|
||||
{
|
||||
_RainProtected();
|
||||
}
|
||||
elsif ( ( $val == 0 || $val < $triggerMin )
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getStatus ==
|
||||
$rainClosedPos
|
||||
$rainClosedPos
|
||||
&& IsAfterShuttersManualBlocking($shuttersDev)
|
||||
&& $FHEM::Automation::ShuttersControl::shutters
|
||||
->getRainProtectionStatus eq 'protected' )
|
||||
->getRainProtectionStatus eq 'protected' )
|
||||
{
|
||||
my %funcHash = (
|
||||
shuttersdevice => $shuttersDev,
|
||||
my %funcHash = ( shuttersdevice => $shuttersDev, );
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->setRainUnprotectionDelayObj( \%funcHash );
|
||||
::InternalTimer(
|
||||
::gettimeofday() +
|
||||
$FHEM::Automation::ShuttersControl::ascDev
|
||||
->getRainWaitingTime,
|
||||
\&_RainUnprotected, \%funcHash
|
||||
);
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj(\%funcHash);
|
||||
::InternalTimer( ::gettimeofday() + $FHEM::Automation::ShuttersControl::ascDev->getRainWaitingTime
|
||||
, \&_RainUnprotected
|
||||
, \%funcHash );
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->setRainProtectionStatus('unprotected');
|
||||
->setRainProtectionStatus('unprotected');
|
||||
}
|
||||
else {
|
||||
if ( $FHEM::Automation::ShuttersControl::shutters->getStatus !=
|
||||
$rainClosedPos
|
||||
&& ( $val == 0 || $val < $triggerMin ) )
|
||||
{
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->setRainProtectionStatus('unprotected');
|
||||
}
|
||||
elsif ( $val > $triggerMax ) {
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->setRainProtectionStatus('protected');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -114,55 +131,76 @@ sub RainProcessing {
|
||||
|
||||
### es muss noch beobachtet werden ob die Auswahl des Rollos welches bearbeitet werden soll bestehen bleibt oder mit in die neuen Funktionen übergeben werden muss
|
||||
sub _RainProtected {
|
||||
::RemoveInternalTimer($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj)
|
||||
if($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj ne 'none');
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none');
|
||||
::RemoveInternalTimer( $FHEM::Automation::ShuttersControl::shutters
|
||||
->getRainUnprotectionDelayObj )
|
||||
if ( $FHEM::Automation::ShuttersControl::shutters
|
||||
->getRainUnprotectionDelayObj ne 'none' );
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj(
|
||||
'none');
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
||||
'rain protected');
|
||||
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
|
||||
$FHEM::Automation::ShuttersControl::ascDev
|
||||
->getRainSensorShuttersClosedPos);
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->setRainProtectionStatus('protected');
|
||||
'rain protected');
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
|
||||
$FHEM::Automation::ShuttersControl::ascDev
|
||||
->getRainSensorShuttersClosedPos );
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus(
|
||||
'protected');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
sub _RainUnprotected {
|
||||
my $h = shift;
|
||||
|
||||
my $h = shift;
|
||||
my $targetPos = $FHEM::Automation::ShuttersControl::shutters->getLastPos;
|
||||
|
||||
my $shuttersDev = $h->{shuttersdevice};
|
||||
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev(
|
||||
$shuttersDev);
|
||||
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters->setLastDrive(
|
||||
'rain un-protected');
|
||||
'rain un-protected');
|
||||
|
||||
if ( $FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj ne 'none' ) {
|
||||
::RemoveInternalTimer($FHEM::Automation::ShuttersControl::shutters->getRainUnprotectionDelayObj);
|
||||
$FHEM::Automation::ShuttersControl::shutters->setRainUnprotectionDelayObj('none');
|
||||
if ( $FHEM::Automation::ShuttersControl::shutters
|
||||
->getRainUnprotectionDelayObj ne 'none' )
|
||||
{
|
||||
::RemoveInternalTimer( $FHEM::Automation::ShuttersControl::shutters
|
||||
->getRainUnprotectionDelayObj );
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->setRainUnprotectionDelayObj('none');
|
||||
}
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd(
|
||||
(
|
||||
$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
||||
? $FHEM::Automation::ShuttersControl::shutters->getLastPos
|
||||
: (
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getPrivacyDownStatus == 2
|
||||
? $FHEM::Automation::ShuttersControl::shutters
|
||||
->getPrivacyDownPos
|
||||
: $FHEM::Automation::ShuttersControl::shutters
|
||||
->getClosedPos
|
||||
)
|
||||
)
|
||||
);
|
||||
if ( $FHEM::Automation::ShuttersControl::shutters->getIsDay
|
||||
&& !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getLastPos ==
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShadingPos )
|
||||
{
|
||||
$targetPos = $FHEM::Automation::ShuttersControl::shutters->getOpenPos;
|
||||
}
|
||||
else {
|
||||
$targetPos = $FHEM::Automation::ShuttersControl::shutters->getLastPos;
|
||||
}
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->setRainProtectionStatus('unprotected');
|
||||
if ( !$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace ne
|
||||
'awning' )
|
||||
{
|
||||
$targetPos = (
|
||||
$FHEM::Automation::ShuttersControl::shutters->getPrivacyDownStatus
|
||||
== 2
|
||||
? $FHEM::Automation::ShuttersControl::shutters->getPrivacyDownPos
|
||||
: $FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
||||
);
|
||||
}
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters->setRainProtectionStatus(
|
||||
'unprotected');
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters->setDriveCmd($targetPos)
|
||||
if ( IsAfterShuttersTimeBlocking($shuttersDev) );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
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-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||
# All rights reserved
|
||||
#
|
||||
# Special thanks goes to:
|
||||
@ -44,37 +44,41 @@ use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
|
||||
use GPUtils qw(GP_Import);
|
||||
require Exporter;
|
||||
use base qw(Exporter);
|
||||
|
||||
## Import der FHEM Funktionen
|
||||
BEGIN {
|
||||
GP_Import(
|
||||
# our @ISA = qw(Exporter);
|
||||
our @EXPORT_OK = qw(
|
||||
getRoommateStatus
|
||||
getRoommateLastStatus
|
||||
);
|
||||
our %EXPORT_TAGS = (
|
||||
ALL => [
|
||||
qw(
|
||||
ReadingsVal)
|
||||
);
|
||||
}
|
||||
getRoommateStatus
|
||||
getRoommateLastStatus
|
||||
)
|
||||
],
|
||||
);
|
||||
|
||||
sub _getRoommateStatus {
|
||||
sub getRoommateStatus {
|
||||
my $self = shift;
|
||||
|
||||
my $roommate = $self->{roommate};
|
||||
|
||||
return ReadingsVal( $roommate,
|
||||
return ::ReadingsVal( $roommate,
|
||||
$FHEM::Automation::ShuttersControl::shutters->getRoommatesReading,
|
||||
'none' );
|
||||
}
|
||||
|
||||
sub _getRoommateLastStatus {
|
||||
sub getRoommateLastStatus {
|
||||
my $self = shift;
|
||||
|
||||
my $roommate = $self->{roommate};
|
||||
my $default = $self->{defaultarg};
|
||||
|
||||
$default = 'none' if ( !defined($default) );
|
||||
return ReadingsVal( $roommate, 'lastState', $default );
|
||||
return ::ReadingsVal( $roommate, 'lastState', $default );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
@ -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-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||
# All rights reserved
|
||||
#
|
||||
# Special thanks goes to:
|
||||
@ -48,7 +48,9 @@ use utf8;
|
||||
use FHEM::Automation::ShuttersControl::Helper qw (IsInTime);
|
||||
|
||||
require Exporter;
|
||||
our @ISA = qw(Exporter);
|
||||
use base qw(Exporter);
|
||||
|
||||
# our @ISA = qw(Exporter);
|
||||
our @EXPORT_OK = qw(
|
||||
CheckASC_ConditionsForShadingFn
|
||||
ShadingProcessing
|
||||
@ -60,31 +62,13 @@ our %EXPORT_TAGS = (
|
||||
CheckASC_ConditionsForShadingFn
|
||||
ShadingProcessing
|
||||
ShadingProcessingDriveCommand
|
||||
)
|
||||
)
|
||||
],
|
||||
);
|
||||
|
||||
use GPUtils qw(GP_Import);
|
||||
## Import der FHEM Funktionen
|
||||
BEGIN {
|
||||
GP_Import(
|
||||
qw(
|
||||
Log3
|
||||
gettimeofday
|
||||
InternalTimer
|
||||
ReadingsVal
|
||||
readingsBeginUpdate
|
||||
readingsBulkUpdate
|
||||
readingsBulkUpdateIfChanged
|
||||
readingsEndUpdate
|
||||
defs
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
sub CheckASC_ConditionsForShadingFn {
|
||||
my $hash = shift;
|
||||
my $value = shift;
|
||||
my $hash = shift;
|
||||
my $value = shift;
|
||||
|
||||
my $error;
|
||||
|
||||
@ -98,14 +82,14 @@ sub CheckASC_ConditionsForShadingFn {
|
||||
my $count = 1;
|
||||
for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
|
||||
my %funcHash = (
|
||||
hash => $hash,
|
||||
shuttersdevice => $shuttersDev,
|
||||
value => $value,
|
||||
attrEvent => 0,
|
||||
hash => $hash,
|
||||
shuttersdevice => $shuttersDev,
|
||||
value => $value,
|
||||
attrEvent => 0,
|
||||
);
|
||||
|
||||
InternalTimer(
|
||||
gettimeofday() + $count,
|
||||
::InternalTimer(
|
||||
::gettimeofday() + $count,
|
||||
'FHEM::Automation::ShuttersControl::Shading::_CheckShuttersConditionsForShadingFn',
|
||||
\%funcHash
|
||||
);
|
||||
@ -121,86 +105,93 @@ sub CheckASC_ConditionsForShadingFn {
|
||||
}
|
||||
|
||||
sub _CheckShuttersConditionsForShadingFn {
|
||||
my $funcHash = shift;
|
||||
|
||||
my $funcHash = shift;
|
||||
|
||||
my $hash = $funcHash->{hash};
|
||||
my $shuttersDev = $funcHash->{shuttersdevice};
|
||||
my $value = $funcHash->{value};
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
|
||||
my $shuttersDevHash = $defs{$shuttersDev};
|
||||
my $shuttersDevHash = $::defs{$shuttersDev};
|
||||
my $message = '';
|
||||
my $errorMessage;
|
||||
my $warnMessage;
|
||||
my $infoMessage;
|
||||
|
||||
|
||||
if ( $value eq 'off' ) {
|
||||
$FHEM::Automation::ShuttersControl::shutters->setShadingStatus('out');
|
||||
$infoMessage .= ' shading was deactivated ' . ($funcHash->{attrEvent} ? 'in the device' : 'globally');
|
||||
$errorMessage .= '';
|
||||
$infoMessage .= ' shading was deactivated '
|
||||
. ( $funcHash->{attrEvent} ? 'in the device' : 'globally' );
|
||||
$errorMessage .= '';
|
||||
ShadingProcessingDriveCommand( $hash, $shuttersDev );
|
||||
}
|
||||
else {
|
||||
$infoMessage .= (
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShadingMode ne 'off'
|
||||
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||
->getAutoShuttersControlShading eq 'on'
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getOutTemp == -100
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShadingMode ne
|
||||
'off'
|
||||
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||
->getAutoShuttersControlShading eq 'on'
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getOutTemp ==
|
||||
-100
|
||||
? ' shading active, global temp sensor is set, but shutters temperature sensor is not set'
|
||||
: ''
|
||||
);
|
||||
|
||||
$warnMessage .= (
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off'
|
||||
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||
->getAutoShuttersControlShading eq 'on'
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShadingMode eq
|
||||
'off'
|
||||
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||
->getAutoShuttersControlShading eq 'on'
|
||||
? ' global shading active but ASC_Shading_Mode attribut is not set or off'
|
||||
: ''
|
||||
);
|
||||
|
||||
$errorMessage .= (
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShadingMode ne 'off'
|
||||
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||
->getAutoShuttersControlShading ne 'on'
|
||||
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||
->getAutoShuttersControlShading ne 'off'
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShadingMode ne
|
||||
'off'
|
||||
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||
->getAutoShuttersControlShading ne 'on'
|
||||
&& $FHEM::Automation::ShuttersControl::ascDev
|
||||
->getAutoShuttersControlShading ne 'off'
|
||||
? ' ASC_Shading_Mode attribut is set but global shading has errors, look at ASC device '
|
||||
. '<a href="'
|
||||
. '/fhem?detail='
|
||||
. ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
|
||||
. $::FW_CSRF . '">'
|
||||
. ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
|
||||
. '</a>'
|
||||
. '<a href="'
|
||||
. '/fhem?detail='
|
||||
. ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
|
||||
. $::FW_CSRF . '">'
|
||||
. ::ReadingsVal( $shuttersDev, 'associatedWith', 'ASC device' )
|
||||
. '</a>'
|
||||
: ''
|
||||
);
|
||||
|
||||
$errorMessage .= (
|
||||
$FHEM::Automation::ShuttersControl::shutters->getBrightness == -1
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getShadingMode ne
|
||||
'off'
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getShadingMode
|
||||
ne 'off'
|
||||
? ' no brightness sensor found, please set ASC_BrightnessSensor attribut'
|
||||
: ''
|
||||
);
|
||||
}
|
||||
|
||||
$message .= ' ERROR: ' . $errorMessage
|
||||
if ( defined($errorMessage)
|
||||
if ( defined($errorMessage)
|
||||
&& $errorMessage ne '' );
|
||||
|
||||
$message .= ' WARN: ' . $warnMessage
|
||||
if ( defined($warnMessage)
|
||||
if ( defined($warnMessage)
|
||||
&& $warnMessage ne ''
|
||||
&& $errorMessage eq '' );
|
||||
|
||||
$message .= ' INFO: ' . $infoMessage
|
||||
if ( defined($infoMessage)
|
||||
if ( defined($infoMessage)
|
||||
&& $infoMessage ne ''
|
||||
&& $errorMessage eq '' );
|
||||
|
||||
readingsBeginUpdate($shuttersDevHash);
|
||||
readingsBulkUpdateIfChanged( $shuttersDevHash, 'ASC_ShadingMessage',
|
||||
::readingsBeginUpdate($shuttersDevHash);
|
||||
::readingsBulkUpdateIfChanged( $shuttersDevHash, 'ASC_ShadingMessage',
|
||||
'<html>' . $message . ' </html>' );
|
||||
readingsEndUpdate( $shuttersDevHash, 1 );
|
||||
::readingsEndUpdate( $shuttersDevHash, 1 );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
sub ShadingProcessing {
|
||||
@ -215,12 +206,18 @@ sub ShadingProcessing {
|
||||
$FHEM::Automation::ShuttersControl::shutters->setShuttersDev($shuttersDev);
|
||||
my $brightness =
|
||||
$FHEM::Automation::ShuttersControl::shutters->getBrightnessAverage;
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters->setShadingBetweenTheTimeSuspend(
|
||||
( IsInTime($FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTime)
|
||||
? 0
|
||||
: 1 )
|
||||
);
|
||||
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->setShadingBetweenTheTimeSuspend(
|
||||
(
|
||||
IsInTime(
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getShadingBetweenTheTime
|
||||
)
|
||||
? 0
|
||||
: 1
|
||||
)
|
||||
);
|
||||
|
||||
FHEM::Automation::ShuttersControl::ASC_Debug(
|
||||
'ShadingProcessing: '
|
||||
@ -250,7 +247,7 @@ sub ShadingProcessing {
|
||||
. ', Ist es nach der Hälfte der Beschattungswartezeit: '
|
||||
. (
|
||||
(
|
||||
int( gettimeofday() ) -
|
||||
int( ::gettimeofday() ) -
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getShadingStatusTimestamp
|
||||
) < (
|
||||
@ -260,7 +257,7 @@ sub ShadingProcessing {
|
||||
)
|
||||
);
|
||||
|
||||
Log3( $name, 4,
|
||||
::Log3( $name, 4,
|
||||
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
|
||||
. $shuttersDev
|
||||
. " Azimuth: "
|
||||
@ -279,18 +276,22 @@ sub ShadingProcessing {
|
||||
|| $brightness == -1
|
||||
|| $outTemp == -100
|
||||
|| (
|
||||
int( gettimeofday() ) -
|
||||
int( ::gettimeofday() ) -
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getShadingStatusTimestamp ) < (
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getShadingWaitingPeriod / 2
|
||||
)
|
||||
|| $FHEM::Automation::ShuttersControl::shutters
|
||||
->getExternalTriggerStatus
|
||||
|| $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq 'off'
|
||||
|| $FHEM::Automation::ShuttersControl::ascDev
|
||||
->getAutoShuttersControlShading eq 'off'
|
||||
->getAutoShuttersControlShading eq 'off'
|
||||
|| $FHEM::Automation::ShuttersControl::shutters
|
||||
->getExternalTriggerStatus
|
||||
);
|
||||
|
||||
Log3( $name, 4,
|
||||
::Log3( $name, 4,
|
||||
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
|
||||
. $shuttersDev
|
||||
. " Nach dem return" );
|
||||
@ -300,7 +301,7 @@ sub ShadingProcessing {
|
||||
my $getStatus = $FHEM::Automation::ShuttersControl::shutters->getStatus;
|
||||
my $oldShadingStatus =
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus;
|
||||
my $shuttersDevHash = $defs{$shuttersDev};
|
||||
my $shuttersDevHash = $::defs{$shuttersDev};
|
||||
|
||||
my $getModeUp = $FHEM::Automation::ShuttersControl::shutters->getModeUp;
|
||||
my $homemode = $FHEM::Automation::ShuttersControl::shutters->getHomemode;
|
||||
@ -316,9 +317,9 @@ sub ShadingProcessing {
|
||||
->getShadingMinOutsideTemperature - 4
|
||||
|| $azimuth < $azimuthLeft
|
||||
|| $azimuth > $azimuthRight
|
||||
|| ( !$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getSunriseUnixTime
|
||||
- ( int( gettimeofday() ) ) > 7200 )
|
||||
|| ( !$FHEM::Automation::ShuttersControl::shutters->getIsDay
|
||||
&& $FHEM::Automation::ShuttersControl::shutters
|
||||
->getSunriseUnixTime - ( int( ::gettimeofday() ) ) > 7200 )
|
||||
)
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getShadingStatus ne
|
||||
'out'
|
||||
@ -331,7 +332,7 @@ sub ShadingProcessing {
|
||||
. ' - Es ist Nacht oder die Aussentemperatur unterhalb der Shading Temperatur. Die Beschattung wird Zwangsbeendet'
|
||||
);
|
||||
|
||||
Log3( $name, 4,
|
||||
::Log3( $name, 4,
|
||||
"AutoShuttersControl ($name) - Shading Processing - Der Sonnenstand ist ausserhalb der Winkelangaben oder die Aussentemperatur unterhalb der Shading Temperatur "
|
||||
);
|
||||
}
|
||||
@ -358,7 +359,7 @@ sub ShadingProcessing {
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus
|
||||
eq 'out reserved'
|
||||
and (
|
||||
int( gettimeofday() ) -
|
||||
int( ::gettimeofday() ) -
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getShadingStatusTimestamp )
|
||||
) > $FHEM::Automation::ShuttersControl::shutters
|
||||
@ -369,7 +370,7 @@ sub ShadingProcessing {
|
||||
'out');
|
||||
}
|
||||
|
||||
Log3( $name, 4,
|
||||
::Log3( $name, 4,
|
||||
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
|
||||
. $shuttersDev
|
||||
. " In der Out Abfrage, Shadingwert: "
|
||||
@ -411,7 +412,7 @@ sub ShadingProcessing {
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq
|
||||
'in reserved'
|
||||
and (
|
||||
int( gettimeofday() ) -
|
||||
int( ::gettimeofday() ) -
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getShadingStatusTimestamp ) > (
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -423,7 +424,7 @@ sub ShadingProcessing {
|
||||
'in');
|
||||
}
|
||||
|
||||
Log3( $name, 4,
|
||||
::Log3( $name, 4,
|
||||
"AutoShuttersControl ($name) - Shading Processing, Rollladen: "
|
||||
. $shuttersDev
|
||||
. " In der In Abfrage, Shadingwert: "
|
||||
@ -468,22 +469,18 @@ sub ShadingProcessing {
|
||||
|| $FHEM::Automation::ShuttersControl::shutters->getShadingMode eq
|
||||
$homemode )
|
||||
&& (
|
||||
$getModeUp eq 'always'
|
||||
|| $getModeUp eq
|
||||
$homemode
|
||||
$getModeUp eq 'always'
|
||||
|| $getModeUp eq $homemode
|
||||
|| $getModeUp eq 'off'
|
||||
|| $getModeUp eq
|
||||
'absent'
|
||||
|| $getModeUp eq
|
||||
'gone'
|
||||
|| ( $getModeUp eq
|
||||
'home'
|
||||
|| $getModeUp eq 'absent'
|
||||
|| $getModeUp eq 'gone'
|
||||
|| ( $getModeUp eq 'home'
|
||||
&& $homemode ne 'asleep' )
|
||||
)
|
||||
&& (
|
||||
(
|
||||
(
|
||||
int( gettimeofday() ) -
|
||||
int( ::gettimeofday() ) -
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getShadingStatusTimestamp
|
||||
) < 2
|
||||
@ -497,18 +494,18 @@ sub ShadingProcessing {
|
||||
)
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getIfInShading
|
||||
)
|
||||
|| ( !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
|
||||
|| ( !$FHEM::Automation::ShuttersControl::shutters->getIfInShading
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getStatus ==
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShadingPos
|
||||
)
|
||||
|| ( !$FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTimeSuspend
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShadingPos )
|
||||
|| ( !$FHEM::Automation::ShuttersControl::shutters
|
||||
->getShadingBetweenTheTimeSuspend
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getStatus !=
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShadingPos )
|
||||
)
|
||||
);
|
||||
|
||||
readingsBeginUpdate($shuttersDevHash);
|
||||
readingsBulkUpdate(
|
||||
::readingsBeginUpdate($shuttersDevHash);
|
||||
::readingsBulkUpdate(
|
||||
$shuttersDevHash,
|
||||
'ASC_ShadingMessage',
|
||||
'INFO: current shading status is \''
|
||||
@ -531,7 +528,7 @@ sub ShadingProcessing {
|
||||
) / 60
|
||||
. 'm'
|
||||
);
|
||||
readingsEndUpdate( $shuttersDevHash, 1 );
|
||||
::readingsEndUpdate( $shuttersDevHash, 1 );
|
||||
|
||||
return;
|
||||
}
|
||||
@ -551,19 +548,28 @@ sub ShadingProcessingDriveCommand {
|
||||
$FHEM::Automation::ShuttersControl::shutters->setShadingStatus(
|
||||
$FHEM::Automation::ShuttersControl::shutters->getShadingStatus );
|
||||
|
||||
if ( IsInTime($FHEM::Automation::ShuttersControl::shutters->getShadingBetweenTheTime)
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq 'in'
|
||||
if (
|
||||
IsInTime(
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getShadingBetweenTheTime
|
||||
)
|
||||
&& $FHEM::Automation::ShuttersControl::shutters->getShadingStatus eq
|
||||
'in'
|
||||
&& $getShadingPos != $getStatus
|
||||
&& ( $getStatus != $FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
||||
|| ( $getStatus == $FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
||||
&& $marker
|
||||
)
|
||||
)
|
||||
&& ( $getStatus != $FHEM::Automation::ShuttersControl::shutters->getSleepPos
|
||||
|| ( $getStatus == $FHEM::Automation::ShuttersControl::shutters->getSleepPos
|
||||
&& $marker
|
||||
)
|
||||
)
|
||||
&& (
|
||||
$getStatus !=
|
||||
$FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
||||
|| ( $getStatus ==
|
||||
$FHEM::Automation::ShuttersControl::shutters->getClosedPos
|
||||
&& $marker )
|
||||
)
|
||||
&& (
|
||||
$getStatus !=
|
||||
$FHEM::Automation::ShuttersControl::shutters->getSleepPos
|
||||
|| ( $getStatus ==
|
||||
$FHEM::Automation::ShuttersControl::shutters->getSleepPos
|
||||
&& $marker )
|
||||
)
|
||||
&& (
|
||||
FHEM::Automation::ShuttersControl::CheckIfShuttersWindowRecOpen(
|
||||
$shuttersDev) != 2
|
||||
@ -602,10 +608,10 @@ sub ShadingProcessingDriveCommand {
|
||||
(
|
||||
(
|
||||
$getShadingPos ==
|
||||
$FHEM::Automation::ShuttersControl::shutters->getLastPos
|
||||
$FHEM::Automation::ShuttersControl::shutters->getLastPos
|
||||
|| $getShadingPos ==
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getShadingLastPos
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getShadingLastPos
|
||||
)
|
||||
? $FHEM::Automation::ShuttersControl::shutters->getOpenPos
|
||||
: (
|
||||
@ -626,8 +632,10 @@ sub ShadingProcessingDriveCommand {
|
||||
: $FHEM::Automation::ShuttersControl::shutters->getOpenPos
|
||||
)
|
||||
)
|
||||
) if ( $FHEM::Automation::ShuttersControl::shutters->getIsDay
|
||||
|| $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace eq 'awning' );
|
||||
)
|
||||
if ( $FHEM::Automation::ShuttersControl::shutters->getIsDay
|
||||
|| $FHEM::Automation::ShuttersControl::shutters->getShuttersPlace
|
||||
eq 'awning' );
|
||||
|
||||
FHEM::Automation::ShuttersControl::ASC_Debug(
|
||||
'ShadingProcessingDriveCommand: '
|
||||
@ -639,7 +647,7 @@ sub ShadingProcessingDriveCommand {
|
||||
. ' zum beenden der Beschattung gefahren' );
|
||||
}
|
||||
|
||||
Log3( $name, 4,
|
||||
::Log3( $name, 4,
|
||||
"AutoShuttersControl ($name) - Shading Processing - In der Routine zum fahren der Rollläden, Shading Wert: "
|
||||
. $FHEM::Automation::ShuttersControl::shutters->getShadingStatus );
|
||||
|
||||
|
@ -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-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||
# All rights reserved
|
||||
#
|
||||
# Special thanks goes to:
|
||||
@ -45,18 +45,18 @@
|
||||
|
||||
package FHEM::Automation::ShuttersControl::Shutters;
|
||||
|
||||
use FHEM::Automation::ShuttersControl::Shutters::Readings;
|
||||
use FHEM::Automation::ShuttersControl::Shutters::Attr;
|
||||
use FHEM::Automation::ShuttersControl::Roommate;
|
||||
use FHEM::Automation::ShuttersControl::Window;
|
||||
|
||||
our @ISA =
|
||||
qw(FHEM::Automation::ShuttersControl::Shutters::Readings FHEM::Automation::ShuttersControl::Shutters::Attr FHEM::Automation::ShuttersControl::Roommate FHEM::Automation::ShuttersControl::Window);
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
|
||||
use FHEM::Automation::ShuttersControl::Shutters::Readings;
|
||||
use FHEM::Automation::ShuttersControl::Shutters::Attr;
|
||||
use FHEM::Automation::ShuttersControl::Roommate qw (:ALL);
|
||||
use FHEM::Automation::ShuttersControl::Window;
|
||||
|
||||
use base
|
||||
qw(FHEM::Automation::ShuttersControl::Shutters::Readings FHEM::Automation::ShuttersControl::Shutters::Attr FHEM::Automation::ShuttersControl::Roommate FHEM::Automation::ShuttersControl::Window);
|
||||
|
||||
sub new {
|
||||
my $class = shift;
|
||||
my $self = {
|
||||
@ -161,9 +161,6 @@ sub setDriveCmd {
|
||||
$FHEM::Automation::ShuttersControl::shutters->setDelayCmd($posValue);
|
||||
$FHEM::Automation::ShuttersControl::ascDev->setDelayCmdReading;
|
||||
$FHEM::Automation::ShuttersControl::shutters->setNoDelay(0);
|
||||
$FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0)
|
||||
if ( $FHEM::Automation::ShuttersControl::shutters
|
||||
->getExternalTriggerStatus );
|
||||
|
||||
FHEM::Automation::ShuttersControl::ASC_Debug( 'setDriveCmd: '
|
||||
. $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
||||
@ -177,7 +174,8 @@ sub setDriveCmd {
|
||||
if ( $FHEM::Automation::ShuttersControl::shutters->getDelayCmd ne
|
||||
'none' )
|
||||
; # setzt den Wert auf none da der Rolladen nun gesteuert werden kann.
|
||||
$FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(0)
|
||||
$FHEM::Automation::ShuttersControl::shutters->setExternalTriggerStatus(
|
||||
0)
|
||||
if ( $FHEM::Automation::ShuttersControl::shutters
|
||||
->getExternalTriggerStatus );
|
||||
|
||||
@ -233,7 +231,7 @@ sub setDriveCmd {
|
||||
::gettimeofday() +
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getSelfDefenseAbsentDelay,
|
||||
\&FHEM::Automation::ShuttersControl::_SetCmdFn, \%h
|
||||
\&FHEM::Automation::ShuttersControl::SetCmdFn, \%h
|
||||
);
|
||||
$FHEM::Automation::ShuttersControl::shutters->setSelfDefenseAbsent(
|
||||
1, 0, \%h );
|
||||
@ -247,7 +245,7 @@ sub setDriveCmd {
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
->getDelayStart
|
||||
),
|
||||
\&FHEM::Automation::ShuttersControl::_SetCmdFn,
|
||||
\&FHEM::Automation::ShuttersControl::SetCmdFn,
|
||||
\%h
|
||||
);
|
||||
|
||||
@ -258,7 +256,7 @@ sub setDriveCmd {
|
||||
elsif ($offSetStart < 1
|
||||
|| $FHEM::Automation::ShuttersControl::shutters->getNoDelay )
|
||||
{
|
||||
FHEM::Automation::ShuttersControl::_SetCmdFn( \%h );
|
||||
FHEM::Automation::ShuttersControl::SetCmdFn( \%h );
|
||||
FHEM::Automation::ShuttersControl::ASC_Debug( 'FnSetDriveCmd: '
|
||||
. $FHEM::Automation::ShuttersControl::shutters->getShuttersDev
|
||||
. ' - NICHT versetztes fahren' );
|
||||
@ -346,8 +344,7 @@ sub setLastDriveReading {
|
||||
);
|
||||
|
||||
::InternalTimer( ::gettimeofday() + 0.1,
|
||||
\&FHEM::Automation::ShuttersControl::_setShuttersLastDriveDelayed,
|
||||
\%h );
|
||||
\&FHEM::Automation::ShuttersControl::setShuttersLastDriveDelayed, \%h );
|
||||
return;
|
||||
}
|
||||
|
||||
@ -460,7 +457,8 @@ sub setRainUnprotectionDelayObj {
|
||||
my $self = shift;
|
||||
my $value = shift;
|
||||
|
||||
$self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL} = $value
|
||||
$self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL}
|
||||
= $value
|
||||
if ( defined($value) );
|
||||
return;
|
||||
}
|
||||
@ -545,12 +543,13 @@ sub getAttrUpdateChanges {
|
||||
sub getIsDay {
|
||||
my $self = shift;
|
||||
|
||||
return FHEM::Automation::ShuttersControl::Helper::_IsDay( $self->{shuttersDev} );
|
||||
return FHEM::Automation::ShuttersControl::Helper::_IsDay(
|
||||
$self->{shuttersDev} );
|
||||
}
|
||||
|
||||
sub getAntiFreezeStatus {
|
||||
use POSIX qw(strftime);
|
||||
my $self = shift;
|
||||
my $self = shift;
|
||||
my $daytime = strftime( "%P", localtime() );
|
||||
$daytime = (
|
||||
defined($daytime) && $daytime
|
||||
@ -595,7 +594,7 @@ sub getShuttersPosCmdValueNegate {
|
||||
sub getQueryShuttersPos
|
||||
{ # Es wird geschaut ob die aktuelle Position des Rollos unterhalb der Zielposition ist
|
||||
my $self = shift;
|
||||
my $posValue = shift; # wenn dem so ist wird 1 zurück gegeben ansonsten 0
|
||||
my $posValue = shift; # wenn dem so ist wird 1 zurück gegeben ansonsten 0
|
||||
|
||||
return (
|
||||
$FHEM::Automation::ShuttersControl::shutters
|
||||
@ -756,10 +755,12 @@ sub getRainUnprotectionDelayObj {
|
||||
(
|
||||
defined( $self->{ $self->{shuttersDev} }->{RainProtection} )
|
||||
&& defined(
|
||||
$self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL}
|
||||
$self->{ $self->{shuttersDev} }->{RainProtection}
|
||||
->{UNPROTECTIONDELAYOBJVAL}
|
||||
)
|
||||
)
|
||||
? $self->{ $self->{shuttersDev} }->{RainProtection}->{UNPROTECTIONDELAYOBJVAL}
|
||||
? $self->{ $self->{shuttersDev} }->{RainProtection}
|
||||
->{UNPROTECTIONDELAYOBJVAL}
|
||||
: 'none'
|
||||
);
|
||||
}
|
||||
@ -821,7 +822,7 @@ sub getRoommatesStatus {
|
||||
$FHEM::Automation::ShuttersControl::shutters->setRoommate($ro);
|
||||
my $currentPrio =
|
||||
$statePrio{ $FHEM::Automation::ShuttersControl::shutters
|
||||
->_getRoommateStatus };
|
||||
->getRoommateStatus };
|
||||
$minPrio = $currentPrio if ( $minPrio > $currentPrio );
|
||||
}
|
||||
|
||||
@ -854,7 +855,7 @@ sub getRoommatesLastStatus {
|
||||
$FHEM::Automation::ShuttersControl::shutters->setRoommate($ro);
|
||||
my $currentPrio =
|
||||
$statePrio{ $FHEM::Automation::ShuttersControl::shutters
|
||||
->_getRoommateLastStatus };
|
||||
->getRoommateLastStatus };
|
||||
$minPrio = $currentPrio if ( $minPrio > $currentPrio );
|
||||
}
|
||||
|
||||
@ -884,7 +885,7 @@ sub getIdleDetection {
|
||||
### Begin Beschattung Objekt mit Daten befüllen
|
||||
sub setShadingStatus {
|
||||
my $self = shift;
|
||||
my $value = shift; ### Werte für value = in, out, in reserved, out reserved
|
||||
my $value = shift; ### Werte für value = in, out, in reserved, out reserved
|
||||
|
||||
# Es wird durch das return die ShadingWaitingTime nicht mehr beachtet, Bugmeldung von Bernd Griemsmann
|
||||
# return
|
||||
@ -899,7 +900,8 @@ sub setShadingStatus {
|
||||
|
||||
$self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} = $value
|
||||
if ( defined($value) );
|
||||
$self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} = int( ::gettimeofday() )
|
||||
$self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} =
|
||||
int( ::gettimeofday() )
|
||||
if ( defined( $self->{ $self->{shuttersDev} }{ShadingStatus} ) );
|
||||
|
||||
return;
|
||||
@ -945,7 +947,7 @@ sub setShadingLastPos {
|
||||
return;
|
||||
}
|
||||
|
||||
sub setShadingBetweenTheTimeSuspend { # Werte für value = 0, 1
|
||||
sub setShadingBetweenTheTimeSuspend { # Werte für value = 0, 1
|
||||
my $self = shift;
|
||||
my $value = shift;
|
||||
|
||||
@ -996,7 +998,7 @@ sub getBrightnessAverage {
|
||||
return;
|
||||
}
|
||||
|
||||
sub getShadingStatus { # Werte für value = in, out, in reserved, out reserved
|
||||
sub getShadingStatus { # Werte für value = in, out, in reserved, out reserved
|
||||
my $self = shift;
|
||||
|
||||
return (
|
||||
@ -1007,12 +1009,16 @@ sub getShadingStatus { # Werte für value = in, out, in reserved, out reserved
|
||||
);
|
||||
}
|
||||
|
||||
sub getShadingBetweenTheTimeSuspend { # Werte für value = 0, 1
|
||||
sub getShadingBetweenTheTimeSuspend { # Werte für value = 0, 1
|
||||
my $self = shift;
|
||||
|
||||
return (
|
||||
defined( $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend} )
|
||||
&& defined( $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL} )
|
||||
defined(
|
||||
$self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}
|
||||
)
|
||||
&& defined(
|
||||
$self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL}
|
||||
)
|
||||
? $self->{ $self->{shuttersDev} }{ShadingBetweenTheTimeSuspend}{VAL}
|
||||
: 0
|
||||
);
|
||||
@ -1084,9 +1090,7 @@ sub getShadingLastPos {
|
||||
|
||||
return (
|
||||
defined( $self->{ $self->{shuttersDev} }{ShadingLastPos} )
|
||||
&& defined(
|
||||
$self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL}
|
||||
)
|
||||
&& defined( $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL} )
|
||||
? $self->{ $self->{shuttersDev} }{ShadingLastPos}{VAL}
|
||||
: $FHEM::Automation::ShuttersControl::shutters->getShadingPos
|
||||
);
|
||||
@ -1094,7 +1098,4 @@ sub getShadingLastPos {
|
||||
|
||||
### Ende Beschattung
|
||||
|
||||
|
||||
|
||||
|
||||
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-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||
# All rights reserved
|
||||
#
|
||||
# Special thanks goes to:
|
||||
@ -46,24 +46,12 @@ use utf8;
|
||||
|
||||
use FHEM::Automation::ShuttersControl::Helper qw (IsAdv PerlCodeCheck);
|
||||
|
||||
use GPUtils qw(GP_Import);
|
||||
|
||||
## Import der FHEM Funktionen
|
||||
BEGIN {
|
||||
GP_Import(
|
||||
qw(
|
||||
AttrVal
|
||||
CommandAttr
|
||||
gettimeofday)
|
||||
);
|
||||
}
|
||||
|
||||
sub _setAttributs {
|
||||
my $shuttersDev = shift;
|
||||
my $attr = shift;
|
||||
my $attrVal = shift;
|
||||
|
||||
CommandAttr( undef, $shuttersDev . ' ' . $attr . ' ' . $attrVal );
|
||||
::CommandAttr( undef, $shuttersDev . ' ' . $attr . ' ' . $attrVal );
|
||||
|
||||
return;
|
||||
}
|
||||
@ -77,28 +65,28 @@ sub _getPosition {
|
||||
return $self->{ $self->{shuttersDev} }->{$attr}->{position}
|
||||
if (
|
||||
exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2
|
||||
);
|
||||
$self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} =
|
||||
int( gettimeofday() );
|
||||
int( ::gettimeofday() );
|
||||
|
||||
my $position;
|
||||
my $posAssignment;
|
||||
|
||||
if (
|
||||
AttrVal( $self->{shuttersDev}, $attr,
|
||||
::AttrVal( $self->{shuttersDev}, $attr,
|
||||
$FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
||||
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ) =~
|
||||
[ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ) =~
|
||||
m{\A\{.+\}\z}xms
|
||||
)
|
||||
{
|
||||
my $response = PerlCodeCheck(
|
||||
AttrVal(
|
||||
::AttrVal(
|
||||
$self->{shuttersDev},
|
||||
$attr,
|
||||
$FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
||||
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
||||
[ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
||||
)
|
||||
);
|
||||
|
||||
@ -108,14 +96,14 @@ sub _getPosition {
|
||||
$position =~ m{\A\d+(\.\d+)?\z}xms
|
||||
? $position
|
||||
: $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
||||
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
||||
[ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
||||
);
|
||||
|
||||
$posAssignment = (
|
||||
defined($posAssignment)
|
||||
&& $posAssignment =~ m{\A\d+(\.\d+)?\z}xms
|
||||
? $posAssignment
|
||||
: 'none'
|
||||
defined($posAssignment)
|
||||
&& $posAssignment =~ m{\A\d+(\.\d+)?\z}xms
|
||||
? $posAssignment
|
||||
: 'none'
|
||||
);
|
||||
}
|
||||
else {
|
||||
@ -124,7 +112,7 @@ sub _getPosition {
|
||||
$self->{shuttersDev},
|
||||
$attr,
|
||||
$FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
||||
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
||||
[ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
||||
);
|
||||
}
|
||||
|
||||
@ -145,8 +133,7 @@ sub _getPosition {
|
||||
)
|
||||
{
|
||||
$self->{ $self->{shuttersDev} }->{$attr}->{position} =
|
||||
PerlCodeCheck(
|
||||
$self->{ $self->{shuttersDev} }->{$attr}->{position} );
|
||||
PerlCodeCheck( $self->{ $self->{shuttersDev} }->{$attr}->{position} );
|
||||
}
|
||||
|
||||
return (
|
||||
@ -154,7 +141,7 @@ sub _getPosition {
|
||||
m{^\d+(\.\d+)?$}xms
|
||||
? $self->{ $self->{shuttersDev} }->{$attr}->{position}
|
||||
: $FHEM::Automation::ShuttersControl::userAttrList{$userAttrList}
|
||||
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
||||
[ ::AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ]
|
||||
);
|
||||
}
|
||||
|
||||
@ -167,7 +154,7 @@ sub _getPositionAssignment {
|
||||
return $self->{ $self->{shuttersDev} }->{$attr}->{posAssignment}
|
||||
if (
|
||||
exists( $self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} )
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{$attr}->{LASTGETTIME} ) < 2
|
||||
);
|
||||
$FHEM::Automation::ShuttersControl::shutters->$getFn;
|
||||
@ -213,7 +200,7 @@ sub setShuttersPlace {
|
||||
sub getShuttersPlace {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' );
|
||||
}
|
||||
|
||||
sub setSlatPosCmd {
|
||||
@ -236,15 +223,15 @@ sub getSlatPosCmd {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}->{LASTGETTIME}
|
||||
= int( gettimeofday() );
|
||||
= int( ::gettimeofday() );
|
||||
my ( $slatPosCmd, $slatDevice ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
||||
'ASC_SlatPosCmd_SlatDevice', 'none:none' );
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||
$self->{shuttersDev}, 'ASC_SlatPosCmd_SlatDevice', 'none:none' );
|
||||
|
||||
## Erwartetes Ergebnis
|
||||
# upTime:upBrightnessVal
|
||||
@ -268,7 +255,7 @@ sub getSlatDevice {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_SlatPosCmd_SlatDevice}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -299,15 +286,15 @@ sub getPrivacyUpTime {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
||||
->{LASTGETTIME} = int( gettimeofday() );
|
||||
->{LASTGETTIME} = int( ::gettimeofday() );
|
||||
my ( $upTime, $upBrightnessVal ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
||||
'ASC_PrivacyUpValue_beforeDayOpen', '-1:-1' );
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||
$self->{shuttersDev}, 'ASC_PrivacyUpValue_beforeDayOpen', '-1:-1' );
|
||||
|
||||
## Erwartetes Ergebnis
|
||||
# upTime:upBrightnessVal
|
||||
@ -341,7 +328,7 @@ sub getPrivacyUpBrightnessVal {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_PrivacyUpValue_beforeDayOpen}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -378,14 +365,15 @@ sub getPrivacyDownTime {
|
||||
$self->{ $self->{shuttersDev} }
|
||||
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }
|
||||
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2
|
||||
);
|
||||
$self->{ $self->{shuttersDev} }->{ASC_PrivacyDownValue_beforeNightClose}
|
||||
->{LASTGETTIME} = int( gettimeofday() );
|
||||
->{LASTGETTIME} = int( ::gettimeofday() );
|
||||
my ( $downTime, $downBrightnessVal ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||
$self->{shuttersDev},
|
||||
'ASC_PrivacyDownValue_beforeNightClose', '-1:-1' );
|
||||
|
||||
## Erwartetes Ergebnis
|
||||
@ -420,7 +408,7 @@ sub getPrivacyDownBrightnessVal {
|
||||
$self->{ $self->{shuttersDev} }
|
||||
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }
|
||||
->{ASC_PrivacyDownValue_beforeNightClose}->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -497,7 +485,7 @@ sub setSelfDefenseMode {
|
||||
sub getSelfDefenseMode {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_Mode', 'gone' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_Mode', 'gone' );
|
||||
}
|
||||
|
||||
sub setSelfDefenseAbsentDelay {
|
||||
@ -513,7 +501,14 @@ sub setSelfDefenseAbsentDelay {
|
||||
sub getSelfDefenseAbsentDelay {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_AbsentDelay', 300 );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_AbsentDelay',
|
||||
300 );
|
||||
}
|
||||
|
||||
sub getCommandTemplate {
|
||||
my $self = shift;
|
||||
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_CommandTemplate', 'none' );
|
||||
}
|
||||
|
||||
sub setWiggleValue {
|
||||
@ -528,7 +523,7 @@ sub setWiggleValue {
|
||||
sub getWiggleValue {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 );
|
||||
}
|
||||
|
||||
sub setAdv {
|
||||
@ -544,7 +539,7 @@ sub getAdv {
|
||||
my $self = shift;
|
||||
|
||||
return (
|
||||
AttrVal( $self->{shuttersDev}, 'ASC_Adv', 'off' ) eq 'on'
|
||||
::AttrVal( $self->{shuttersDev}, 'ASC_Adv', 'off' ) eq 'on'
|
||||
? ( IsAdv == 1 ? 1 : 0 )
|
||||
: 0
|
||||
);
|
||||
@ -587,7 +582,7 @@ sub setShadingMode {
|
||||
sub getShadingMode {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'off' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_Mode', 'off' );
|
||||
}
|
||||
|
||||
sub _getTempSensor {
|
||||
@ -598,15 +593,15 @@ sub _getTempSensor {
|
||||
exists(
|
||||
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} )
|
||||
< 2
|
||||
);
|
||||
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} =
|
||||
int( gettimeofday() );
|
||||
int( ::gettimeofday() );
|
||||
my ( $device, $reading ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
||||
'ASC_TempSensor', 'none' );
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||
$self->{shuttersDev}, 'ASC_TempSensor', 'none' );
|
||||
|
||||
### erwartetes Ergebnis
|
||||
# DEVICE:READING
|
||||
@ -625,7 +620,7 @@ sub getTempSensorReading {
|
||||
exists(
|
||||
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} )
|
||||
< 2
|
||||
);
|
||||
@ -658,15 +653,15 @@ sub _getIdleDetectionReading {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}->{LASTGETTIME}
|
||||
= int( gettimeofday() );
|
||||
= int( ::gettimeofday() );
|
||||
my ( $reading, $value ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
||||
'ASC_Shutter_IdleDetection', 'none' );
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||
$self->{shuttersDev}, 'ASC_Shutter_IdleDetection', 'none' );
|
||||
|
||||
### erwartetes Ergebnis
|
||||
# READING:VALUE
|
||||
@ -688,7 +683,7 @@ sub getIdleDetectionValue {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -722,15 +717,15 @@ sub _getBrightnessSensor {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}->{LASTGETTIME} =
|
||||
int( gettimeofday() );
|
||||
int( ::gettimeofday() );
|
||||
my ( $device, $reading, $max, $min ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
||||
'ASC_BrightnessSensor', 'none' );
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||
$self->{shuttersDev}, 'ASC_BrightnessSensor', 'none' );
|
||||
|
||||
### erwartetes Ergebnis
|
||||
# DEVICE:READING MAX:MIN
|
||||
@ -754,7 +749,7 @@ sub getBrightnessReading {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -779,7 +774,7 @@ sub getShadingAzimuthLeft {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -808,15 +803,15 @@ sub getShadingAzimuthRight {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}->{LASTGETTIME}
|
||||
= int( gettimeofday() );
|
||||
= int( ::gettimeofday() );
|
||||
my ( $left, $right ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
||||
'ASC_Shading_InOutAzimuth', '95:265' );
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||
$self->{shuttersDev}, 'ASC_Shading_InOutAzimuth', '95:265' );
|
||||
|
||||
### erwartetes Ergebnis
|
||||
# MIN:MAX
|
||||
@ -843,8 +838,8 @@ sub setShadingMinOutsideTemperature {
|
||||
sub getShadingMinOutsideTemperature {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Min_OutsideTemperature',
|
||||
18 );
|
||||
return ::AttrVal( $self->{shuttersDev},
|
||||
'ASC_Shading_Min_OutsideTemperature', 18 );
|
||||
}
|
||||
|
||||
sub setShadingMinMaxElevation {
|
||||
@ -867,15 +862,15 @@ sub getShadingMinElevation {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
||||
->{LASTGETTIME} = int( gettimeofday() );
|
||||
->{LASTGETTIME} = int( ::gettimeofday() );
|
||||
my ( $min, $max ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
||||
'ASC_Shading_MinMax_Elevation', '25.0:100.0' );
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||
$self->{shuttersDev}, 'ASC_Shading_MinMax_Elevation', '25.0:100.0' );
|
||||
|
||||
### erwartetes Ergebnis
|
||||
# MIN:MAX
|
||||
@ -899,7 +894,7 @@ sub getShadingMaxElevation {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -937,15 +932,15 @@ sub getShadingStateChangeSunny {
|
||||
$self->{ $self->{shuttersDev} }
|
||||
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }
|
||||
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
|
||||
);
|
||||
$self->{ $self->{shuttersDev} }->{ASC_Shading_StateChange_SunnyCloudy}
|
||||
->{LASTGETTIME} = int( gettimeofday() );
|
||||
->{LASTGETTIME} = int( ::gettimeofday() );
|
||||
my ( $sunny, $cloudy, $maxBrightnessAverageArrayObjects ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
||||
'ASC_Shading_StateChange_SunnyCloudy',
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||
$self->{shuttersDev}, 'ASC_Shading_StateChange_SunnyCloudy',
|
||||
'35000:20000' );
|
||||
|
||||
### erwartetes Ergebnis
|
||||
@ -976,7 +971,7 @@ sub getShadingStateChangeCloudy {
|
||||
$self->{ $self->{shuttersDev} }
|
||||
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }
|
||||
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -996,7 +991,7 @@ sub getMaxBrightnessAverageArrayObjects {
|
||||
$self->{ $self->{shuttersDev} }
|
||||
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }
|
||||
->{ASC_Shading_StateChange_SunnyCloudy}->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -1019,7 +1014,7 @@ sub setShadingWaitingPeriod {
|
||||
sub getShadingWaitingPeriod {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_WaitingPeriod', 1200 );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_WaitingPeriod', 1200 );
|
||||
}
|
||||
### Ende Beschattung
|
||||
sub setExternalTrigger {
|
||||
@ -1040,16 +1035,16 @@ sub getExternalTriggerDevice {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{LASTGETTIME} =
|
||||
int( gettimeofday() );
|
||||
int( ::gettimeofday() );
|
||||
my ( $device, $reading, $valueActive, $valueInactive, $posActive,
|
||||
$posInactive, $valueActive2, $posActive2 )
|
||||
= FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
||||
'ASC_ExternalTrigger', 'none' );
|
||||
= FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||
$self->{shuttersDev}, 'ASC_ExternalTrigger', 'none' );
|
||||
|
||||
### erwartetes Ergebnis
|
||||
# DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE VALUEACTIVE2:POSACTIVE2
|
||||
@ -1064,10 +1059,11 @@ sub getExternalTriggerDevice {
|
||||
$valueInactive;
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive} =
|
||||
$posActive;
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posinactive} =
|
||||
( $posInactive ne 'none'
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posinactive} = (
|
||||
$posInactive ne 'none'
|
||||
? $posInactive
|
||||
: $FHEM::Automation::ShuttersControl::shutters->getLastPos );
|
||||
: $FHEM::Automation::ShuttersControl::shutters->getLastPos
|
||||
);
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{valueactive2} =
|
||||
$valueActive2;
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}->{posactive2} =
|
||||
@ -1086,7 +1082,7 @@ sub getExternalTriggerReading {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -1104,7 +1100,7 @@ sub getExternalTriggerValueActive {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -1124,7 +1120,7 @@ sub getExternalTriggerValueActive2 {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -1144,7 +1140,7 @@ sub getExternalTriggerValueInactive {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -1163,7 +1159,7 @@ sub getExternalTriggerPosActive {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -1181,7 +1177,7 @@ sub getExternalTriggerPosActive2 {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -1199,7 +1195,7 @@ sub getExternalTriggerPosInactive {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_ExternalTrigger}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -1221,7 +1217,7 @@ sub setDelay {
|
||||
sub getDelay {
|
||||
my $self = shift;
|
||||
|
||||
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Drive_Delay', -1 );
|
||||
my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Drive_Delay', -1 );
|
||||
return ( $val =~ m{^\d+$}xms ? $val : -1 );
|
||||
}
|
||||
|
||||
@ -1237,7 +1233,7 @@ sub setDelayStart {
|
||||
sub getDelayStart {
|
||||
my $self = shift;
|
||||
|
||||
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Drive_DelayStart', -1 );
|
||||
my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Drive_DelayStart', -1 );
|
||||
return ( ( $val > 0 && $val =~ m{^\d+$}xms ) ? $val : -1 );
|
||||
}
|
||||
|
||||
@ -1254,7 +1250,7 @@ sub setBlockingTimeAfterManual {
|
||||
sub getBlockingTimeAfterManual {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_afterManual',
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_afterManual',
|
||||
1200 );
|
||||
}
|
||||
|
||||
@ -1271,7 +1267,7 @@ sub setBlockingTimeBeforNightClose {
|
||||
sub getBlockingTimeBeforNightClose {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforNightClose',
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforNightClose',
|
||||
3600 );
|
||||
}
|
||||
|
||||
@ -1288,7 +1284,7 @@ sub setBlockingTimeBeforDayOpen {
|
||||
sub getBlockingTimeBeforDayOpen {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforDayOpen',
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_BlockingTime_beforDayOpen',
|
||||
3600 );
|
||||
}
|
||||
|
||||
@ -1304,9 +1300,9 @@ sub setPosCmd {
|
||||
sub getPosCmd {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading',
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Pos_Reading',
|
||||
$FHEM::Automation::ShuttersControl::userAttrList{'ASC_Pos_Reading'}
|
||||
[ AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] );
|
||||
[ ::AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] );
|
||||
}
|
||||
|
||||
sub setOpenPos {
|
||||
@ -1371,7 +1367,7 @@ sub setVentilatePosAfterDayClosed {
|
||||
sub getVentilatePosAfterDayClosed {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_PosAfterDayClosed',
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_PosAfterDayClosed',
|
||||
'open' );
|
||||
}
|
||||
|
||||
@ -1436,7 +1432,7 @@ sub setVentilateOpen {
|
||||
sub getVentilateOpen {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Window_Open', 'on' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Window_Open', 'on' );
|
||||
}
|
||||
|
||||
sub setComfortOpenPos {
|
||||
@ -1476,7 +1472,7 @@ sub setPartyMode {
|
||||
sub getPartyMode {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Partymode', 'off' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Partymode', 'off' );
|
||||
}
|
||||
|
||||
sub setRoommates {
|
||||
@ -1491,7 +1487,7 @@ sub setRoommates {
|
||||
sub getRoommates {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Device', 'none' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Device', 'none' );
|
||||
}
|
||||
|
||||
sub setRoommatesReading {
|
||||
@ -1506,7 +1502,7 @@ sub setRoommatesReading {
|
||||
sub getRoommatesReading {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Reading', 'state' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Reading', 'state' );
|
||||
}
|
||||
|
||||
sub getWindPos {
|
||||
@ -1519,7 +1515,7 @@ sub getWindPos {
|
||||
exists(
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
||||
) < 2
|
||||
);
|
||||
@ -1538,15 +1534,15 @@ sub getWindMax {
|
||||
exists(
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
||||
) < 2
|
||||
);
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} =
|
||||
int( gettimeofday() );
|
||||
int( ::gettimeofday() );
|
||||
my ( $max, $hyst, $pos ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
||||
'ASC_WindParameters', '50:20' );
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||
$self->{shuttersDev}, 'ASC_WindParameters', '50:20' );
|
||||
|
||||
## Erwartetes Ergebnis
|
||||
# max:hyst pos
|
||||
@ -1554,10 +1550,11 @@ sub getWindMax {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax} = $max;
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggerhyst} =
|
||||
( $hyst ne 'none' ? $max - $hyst : $max - 20 );
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{closedPos} =
|
||||
( $pos ne 'none'
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{closedPos} = (
|
||||
$pos ne 'none'
|
||||
? $pos
|
||||
: $FHEM::Automation::ShuttersControl::shutters->getOpenPos );
|
||||
: $FHEM::Automation::ShuttersControl::shutters->getOpenPos
|
||||
);
|
||||
|
||||
return $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax};
|
||||
}
|
||||
@ -1581,7 +1578,7 @@ sub getWindMin {
|
||||
exists(
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME}
|
||||
) < 2
|
||||
);
|
||||
@ -1602,7 +1599,7 @@ sub setWindProtection {
|
||||
sub getWindProtection {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_WindProtection', 'off' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_WindProtection', 'off' );
|
||||
}
|
||||
|
||||
sub setRainProtection {
|
||||
@ -1617,7 +1614,7 @@ sub setRainProtection {
|
||||
sub getRainProtection {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_RainProtection', 'off' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_RainProtection', 'off' );
|
||||
}
|
||||
|
||||
sub setModeUp {
|
||||
@ -1632,7 +1629,7 @@ sub setModeUp {
|
||||
sub getModeUp {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Mode_Up', 'always' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Mode_Up', 'always' );
|
||||
}
|
||||
|
||||
sub setModeDown {
|
||||
@ -1647,7 +1644,7 @@ sub setModeDown {
|
||||
sub getModeDown {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Mode_Down', 'always' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Mode_Down', 'always' );
|
||||
}
|
||||
|
||||
sub setLockOut {
|
||||
@ -1662,7 +1659,7 @@ sub setLockOut {
|
||||
sub getLockOut {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_LockOut', 'off' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_LockOut', 'off' );
|
||||
}
|
||||
|
||||
sub setLockOutCmd {
|
||||
@ -1677,7 +1674,7 @@ sub setLockOutCmd {
|
||||
sub getLockOutCmd {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_LockOut_Cmd', 'none' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_LockOut_Cmd', 'none' );
|
||||
}
|
||||
|
||||
sub setAntiFreeze {
|
||||
@ -1692,7 +1689,7 @@ sub setAntiFreeze {
|
||||
sub getAntiFreeze {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Antifreeze', 'off' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Antifreeze', 'off' );
|
||||
}
|
||||
|
||||
sub setAutoAstroModeMorning {
|
||||
@ -1707,7 +1704,8 @@ sub setAutoAstroModeMorning {
|
||||
sub getAutoAstroModeMorning {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorning', 'none' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorning',
|
||||
'none' );
|
||||
}
|
||||
|
||||
sub setAutoAstroModeEvening {
|
||||
@ -1722,7 +1720,8 @@ sub setAutoAstroModeEvening {
|
||||
sub getAutoAstroModeEvening {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEvening', 'none' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEvening',
|
||||
'none' );
|
||||
}
|
||||
|
||||
sub setAutoAstroModeMorningHorizon {
|
||||
@ -1738,7 +1737,7 @@ sub setAutoAstroModeMorningHorizon {
|
||||
sub getAutoAstroModeMorningHorizon {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorningHorizon',
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorningHorizon',
|
||||
0 );
|
||||
}
|
||||
|
||||
@ -1755,7 +1754,7 @@ sub setAutoAstroModeEveningHorizon {
|
||||
sub getAutoAstroModeEveningHorizon {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEveningHorizon',
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEveningHorizon',
|
||||
0 );
|
||||
}
|
||||
|
||||
@ -1771,7 +1770,7 @@ sub setUp {
|
||||
sub getUp {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Up', 'astro' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Up', 'astro' );
|
||||
}
|
||||
|
||||
sub setDown {
|
||||
@ -1786,14 +1785,15 @@ sub setDown {
|
||||
sub getDown {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Down', 'astro' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Down', 'astro' );
|
||||
}
|
||||
|
||||
sub setShadingBetweenTheTime {
|
||||
my $self = shift;
|
||||
my $attrVal = shift;
|
||||
|
||||
_setAttributs( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime', $attrVal );
|
||||
_setAttributs( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime',
|
||||
$attrVal );
|
||||
|
||||
return;
|
||||
}
|
||||
@ -1801,7 +1801,8 @@ sub setShadingBetweenTheTime {
|
||||
sub getShadingBetweenTheTime {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime', '00:00-24:00' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_Shading_BetweenTheTime',
|
||||
'00:00-24:00' );
|
||||
}
|
||||
|
||||
sub setTimeUpEarly {
|
||||
@ -1816,7 +1817,7 @@ sub setTimeUpEarly {
|
||||
sub getTimeUpEarly {
|
||||
my $self = shift;
|
||||
|
||||
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Early', '05:00' );
|
||||
my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Early', '05:00' );
|
||||
|
||||
if ( defined( PerlCodeCheck($val) ) ) {
|
||||
$val = PerlCodeCheck($val);
|
||||
@ -1841,7 +1842,7 @@ sub setTimeUpLate {
|
||||
sub getTimeUpLate {
|
||||
my $self = shift;
|
||||
|
||||
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Late', '08:30' );
|
||||
my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Late', '08:30' );
|
||||
|
||||
if ( defined( PerlCodeCheck($val) ) ) {
|
||||
$val = PerlCodeCheck($val);
|
||||
@ -1866,7 +1867,7 @@ sub setTimeDownEarly {
|
||||
sub getTimeDownEarly {
|
||||
my $self = shift;
|
||||
|
||||
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Early', '16:00' );
|
||||
my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Early', '16:00' );
|
||||
|
||||
if ( defined( PerlCodeCheck($val) ) ) {
|
||||
$val = PerlCodeCheck($val);
|
||||
@ -1891,7 +1892,7 @@ sub setTimeDownLate {
|
||||
sub getTimeDownLate {
|
||||
my $self = shift;
|
||||
|
||||
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Late', '22:00' );
|
||||
my $val = ::AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Late', '22:00' );
|
||||
|
||||
if ( defined( PerlCodeCheck($val) ) ) {
|
||||
$val = PerlCodeCheck($val);
|
||||
@ -1917,7 +1918,7 @@ sub getTimeUpWeHoliday {
|
||||
my $self = shift;
|
||||
|
||||
my $val =
|
||||
AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_WE_Holiday', '01:25' );
|
||||
::AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_WE_Holiday', '01:25' );
|
||||
|
||||
if ( defined( PerlCodeCheck($val) ) ) {
|
||||
$val = PerlCodeCheck($val);
|
||||
@ -1939,7 +1940,7 @@ sub getBrightnessMinVal {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -1958,7 +1959,7 @@ sub getBrightnessMaxVal {
|
||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||
->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}
|
||||
->{LASTGETTIME} ) < 2
|
||||
);
|
||||
@ -1980,7 +1981,7 @@ sub setDriveUpMaxDuration {
|
||||
sub getDriveUpMaxDuration {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_DriveUpMaxDuration', 60 );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_DriveUpMaxDuration', 60 );
|
||||
}
|
||||
|
||||
1;
|
||||
|
@ -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-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||
# All rights reserved
|
||||
#
|
||||
# Special thanks goes to:
|
||||
@ -44,21 +44,10 @@ use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
|
||||
use GPUtils qw(GP_Import);
|
||||
|
||||
## Import der FHEM Funktionen
|
||||
BEGIN {
|
||||
GP_Import(
|
||||
qw(
|
||||
ReadingsVal
|
||||
ReadingsNum)
|
||||
);
|
||||
}
|
||||
|
||||
sub getBrightness {
|
||||
my $self = shift;
|
||||
|
||||
return ReadingsNum(
|
||||
return ::ReadingsNum(
|
||||
$FHEM::Automation::ShuttersControl::shutters->_getBrightnessSensor,
|
||||
$FHEM::Automation::ShuttersControl::shutters->getBrightnessReading,
|
||||
-1 );
|
||||
@ -67,7 +56,7 @@ sub getBrightness {
|
||||
sub getWindStatus {
|
||||
my $self = shift;
|
||||
|
||||
return ReadingsVal(
|
||||
return ::ReadingsVal(
|
||||
$FHEM::Automation::ShuttersControl::ascDev->_getWindSensor,
|
||||
$FHEM::Automation::ShuttersControl::ascDev->getWindSensorReading, -1 );
|
||||
}
|
||||
@ -75,7 +64,7 @@ sub getWindStatus {
|
||||
sub getStatus {
|
||||
my $self = shift;
|
||||
|
||||
return ReadingsNum( $self->{shuttersDev},
|
||||
return ::ReadingsNum( $self->{shuttersDev},
|
||||
$FHEM::Automation::ShuttersControl::shutters->getPosCmd, 0 );
|
||||
}
|
||||
|
||||
@ -88,7 +77,7 @@ sub getDelayCmd {
|
||||
sub getASCenable {
|
||||
my $self = shift;
|
||||
|
||||
return ReadingsVal( $self->{shuttersDev}, 'ASC_Enable', 'on' );
|
||||
return ::ReadingsVal( $self->{shuttersDev}, 'ASC_Enable', 'on' );
|
||||
}
|
||||
|
||||
1;
|
||||
|
@ -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-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||
# All rights reserved
|
||||
#
|
||||
# Special thanks goes to:
|
||||
@ -47,7 +47,7 @@ use utf8;
|
||||
use FHEM::Automation::ShuttersControl::Window::Attr;
|
||||
use FHEM::Automation::ShuttersControl::Window::Readings;
|
||||
|
||||
our @ISA =
|
||||
use base
|
||||
qw(FHEM::Automation::ShuttersControl::Window::Attr FHEM::Automation::ShuttersControl::Window::Readings);
|
||||
|
||||
1;
|
||||
|
@ -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-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||
# All rights reserved
|
||||
#
|
||||
# Special thanks goes to:
|
||||
@ -44,17 +44,6 @@ use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
|
||||
use GPUtils qw(GP_Import);
|
||||
|
||||
## Import der FHEM Funktionen
|
||||
BEGIN {
|
||||
GP_Import(
|
||||
qw(
|
||||
AttrVal
|
||||
gettimeofday)
|
||||
);
|
||||
}
|
||||
|
||||
sub setSubTyp {
|
||||
my $self = shift;
|
||||
my $attrVal = shift;
|
||||
@ -67,7 +56,8 @@ sub setSubTyp {
|
||||
sub getSubTyp {
|
||||
my $self = shift;
|
||||
|
||||
return AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_subType', 'twostate' );
|
||||
return ::AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_subType',
|
||||
'twostate' );
|
||||
}
|
||||
|
||||
sub setWinDev {
|
||||
@ -87,15 +77,15 @@ sub _getWinDev {
|
||||
exists(
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) <
|
||||
2
|
||||
);
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} =
|
||||
int( gettimeofday() );
|
||||
int( ::gettimeofday() );
|
||||
my ( $device, $reading ) =
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues( $self->{shuttersDev},
|
||||
'ASC_WindowRec', 'none' );
|
||||
FHEM::Automation::ShuttersControl::Helper::GetAttrValues(
|
||||
$self->{shuttersDev}, 'ASC_WindowRec', 'none' );
|
||||
|
||||
### erwartetes Ergebnis
|
||||
# DEVICE:READING VALUEACTIVE:VALUEINACTIVE POSACTIVE:POSINACTIVE
|
||||
@ -116,7 +106,7 @@ sub getWinDevReading {
|
||||
exists(
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME}
|
||||
)
|
||||
&& ( gettimeofday() -
|
||||
&& ( ::gettimeofday() -
|
||||
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} ) <
|
||||
2
|
||||
);
|
||||
|
@ -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-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net)
|
||||
# All rights reserved
|
||||
#
|
||||
# Special thanks goes to:
|
||||
@ -44,20 +44,10 @@ use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
|
||||
use GPUtils qw(GP_Import);
|
||||
|
||||
## Import der FHEM Funktionen
|
||||
BEGIN {
|
||||
GP_Import(
|
||||
qw(
|
||||
ReadingsVal)
|
||||
);
|
||||
}
|
||||
|
||||
sub getWinStatus {
|
||||
my $self = shift;
|
||||
|
||||
return ReadingsVal(
|
||||
return ::ReadingsVal(
|
||||
$FHEM::Automation::ShuttersControl::shutters->_getWinDev,
|
||||
$FHEM::Automation::ShuttersControl::shutters->getWinDevReading,
|
||||
'closed' );
|
||||
|
Loading…
x
Reference in New Issue
Block a user