2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-26 10:34:52 +00:00

73_AutoShuttersControl: remove prototyp, add weekendholiday for brightness, code style

git-svn-id: https://svn.fhem.de/fhem/trunk@21506 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
LeonGaultier 2020-03-25 08:28:54 +00:00
parent 6baf61cdef
commit 6615dce4ca
2 changed files with 145 additions and 110 deletions

View File

@ -1,5 +1,7 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- change: 73_AutoShuttersControl: remove prototyp, add weekendholiday for
brightness, code style
- bugfix: 73_AutoShuttersControl: fix _IsDay Fn - bugfix: 73_AutoShuttersControl: fix _IsDay Fn
- feature: 73_AutoShuttersControl: add holidayWeekend support for brightness - feature: 73_AutoShuttersControl: add holidayWeekend support for brightness
- bugfix: 73_AutoShuttersControl: fix PrivacyDownStatus in Brightness, - bugfix: 73_AutoShuttersControl: fix PrivacyDownStatus in Brightness,

View File

@ -46,7 +46,7 @@ package main;
use strict; use strict;
use warnings; use warnings;
sub ascAPIget($@) { sub ascAPIget {
my ( $getCommand, $shutterDev, $value ) = @_; my ( $getCommand, $shutterDev, $value ) = @_;
return AutoShuttersControl_ascAPIget( $getCommand, $shutterDev, $value ); return AutoShuttersControl_ascAPIget( $getCommand, $shutterDev, $value );
@ -57,7 +57,7 @@ package FHEM::AutoShuttersControl;
use strict; use strict;
use warnings; use warnings;
use POSIX; use POSIX qw(strftime);
use utf8; use utf8;
use Encode; use Encode;
use FHEM::Meta; use FHEM::Meta;
@ -273,7 +273,7 @@ my %posSetCmds = (
my $shutters = new ASC_Shutters(); my $shutters = new ASC_Shutters();
my $ascDev = new ASC_Dev(); my $ascDev = new ASC_Dev();
sub ascAPIget($@) { sub ascAPIget {
my ( $getCommand, $shutterDev, $value ) = @_; my ( $getCommand, $shutterDev, $value ) = @_;
my $getter = 'get' . $getCommand; my $getter = 'get' . $getCommand;
@ -291,7 +291,7 @@ sub ascAPIget($@) {
} }
} }
sub Initialize($) { sub Initialize {
my ($hash) = @_; my ($hash) = @_;
## Da ich mit package arbeite müssen in die Initialize für die jeweiligen hash Fn Funktionen der Funktionsname ## Da ich mit package arbeite müssen in die Initialize für die jeweiligen hash Fn Funktionen der Funktionsname
@ -328,7 +328,7 @@ sub Initialize($) {
return FHEM::Meta::InitMod( __FILE__, $hash ); return FHEM::Meta::InitMod( __FILE__, $hash );
} }
sub Define($$) { sub Define {
my ( $hash, $def ) = @_; my ( $hash, $def ) = @_;
my @a = split( '[ \t][ \t]*', $def ); my @a = split( '[ \t][ \t]*', $def );
@ -374,7 +374,7 @@ sub Define($$) {
return undef; return undef;
} }
sub Undef($$) { sub Undef {
my ( $hash, $arg ) = @_; my ( $hash, $arg ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -389,7 +389,7 @@ sub Undef($$) {
return undef; return undef;
} }
sub Attr(@) { sub Attr {
my ( $cmd, $name, $attrName, $attrVal ) = @_; my ( $cmd, $name, $attrName, $attrVal ) = @_;
# my $hash = $defs{$name}; # my $hash = $defs{$name};
@ -397,7 +397,7 @@ sub Attr(@) {
return undef; return undef;
} }
sub Notify($$) { sub Notify {
my ( $hash, $dev ) = @_; my ( $hash, $dev ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -510,7 +510,7 @@ sub Notify($$) {
return; return;
} }
sub EventProcessingGeneral($$$) { sub EventProcessingGeneral {
my ( $hash, $devname, $events ) = @_; my ( $hash, $devname, $events ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -553,24 +553,40 @@ sub EventProcessingGeneral($$$) {
} }
} }
else { # alles was kein Devicenamen mit übergeben hat landet hier else { # alles was kein Devicenamen mit übergeben hat landet hier
if ( $events =~ if (
m#^ATTR\s(.*)\s(ASC_Roommate_Device|ASC_WindowRec|ASC_residentsDev|ASC_rainSensor|ASC_windSensor|ASC_BrightnessSensor|ASC_ExternalTrigger|ASC_twilightDevice)\s(.*)$# $events =~ m{^ATTR\s(.*)
\s(ASC_Roommate_Device|ASC_WindowRec|ASC_residentsDev|ASC_rainSensor
|ASC_windSensor|ASC_BrightnessSensor|ASC_ExternalTrigger
|ASC_twilightDevice)
\s(.*)$}xms
) )
{ # wurde den Attributen unserer Rolläden ein Wert zugewiesen ? { # wurde den Attributen unserer Rolläden ein Wert zugewiesen ?
AddNotifyDev( $hash, $3, $1, $2 ) if ( $3 ne 'none' ); AddNotifyDev( $hash, $3, $1, $2 ) if ( $3 ne 'none' );
Log3( $name, 4, Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessing: ATTR" ); "AutoShuttersControl ($name) - EventProcessing: ATTR" );
} }
elsif ( $events =~ elsif (
m#^DELETEATTR\s(.*)\s(ASC_Roommate_Device|ASC_WindowRec|ASC_residentsDev|ASC_rainSensor|ASC_windSensor|ASC_BrightnessSensor|ASC_ExternalTrigger|ASC_twilightDevice)$# $events =~ m{^DELETEATTR
\s(.*)\s(ASC_Roommate_Device
|ASC_WindowRec|ASC_residentsDev|ASC_rainSensor
|ASC_windSensor|ASC_BrightnessSensor|ASC_ExternalTrigger
|ASC_twilightDevice)
$}xms
) )
{ # wurde das Attribut unserer Rolläden gelöscht ? { # wurde das Attribut unserer Rolläden gelöscht ?
Log3( $name, 4, Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessing: DELETEATTR" ); "AutoShuttersControl ($name) - EventProcessing: DELETEATTR" );
DeleteNotifyDev( $hash, $1, $2 ); DeleteNotifyDev( $hash, $1, $2 );
} }
elsif ( $events =~ elsif (
m#^(DELETEATTR|ATTR)\s(.*)\s(ASC_Time_Up_WE_Holiday|ASC_Up|ASC_Down|ASC_AutoAstroModeMorning|ASC_AutoAstroModeMorningHorizon|ASC_PrivacyDownValue_beforeNightClose|ASC_PrivacyUpValue_beforeDayOpen|ASC_AutoAstroModeEvening|ASC_AutoAstroModeEveningHorizon|ASC_Time_Up_Early|ASC_Time_Up_Late|ASC_Time_Down_Early|ASC_Time_Down_Late)(.*)?# $events =~ m{^(DELETEATTR|ATTR)
\s(.*)\s(ASC_Time_Up_WE_Holiday|ASC_Up|ASC_Down
|ASC_AutoAstroModeMorning|ASC_AutoAstroModeMorningHorizon
|ASC_PrivacyDownValue_beforeNightClose
|ASC_PrivacyUpValue_beforeDayOpen|ASC_AutoAstroModeEvening
|ASC_AutoAstroModeEveningHorizon|ASC_Time_Up_Early
|ASC_Time_Up_Late|ASC_Time_Down_Early|ASC_Time_Down_Late)
(.*)?}xms
) )
{ {
CreateSunRiseSetShuttersTimer( $hash, $2 ) CreateSunRiseSetShuttersTimer( $hash, $2 )
@ -580,8 +596,11 @@ m#^(DELETEATTR|ATTR)\s(.*)\s(ASC_Time_Up_WE_Holiday|ASC_Up|ASC_Down|ASC_AutoAstr
and $ascDev->getSunriseTimeWeHoliday eq 'on' ) and $ascDev->getSunriseTimeWeHoliday eq 'on' )
); );
} }
elsif ( $events =~ elsif (
m#^(DELETEATTR|ATTR)\s(.*)\s(ASC_autoAstroModeMorning|ASC_autoAstroModeMorningHorizon|ASC_autoAstroModeEvening|ASC_autoAstroModeEveningHorizon)(.*)?# $events =~ m{^(DELETEATTR|ATTR)
\s(.*)\s(ASC_autoAstroModeMorning|ASC_autoAstroModeMorningHorizon
|ASC_autoAstroModeEvening|ASC_autoAstroModeEveningHorizon)
(.*)?}xms
) )
{ {
RenewSunRiseSetShuttersTimer($hash); RenewSunRiseSetShuttersTimer($hash);
@ -589,7 +608,7 @@ m#^(DELETEATTR|ATTR)\s(.*)\s(ASC_autoAstroModeMorning|ASC_autoAstroModeMorningHo
} }
} }
sub Set($$@) { sub Set {
my ( $hash, $name, @aa ) = @_; my ( $hash, $name, @aa ) = @_;
my ( $cmd, @args ) = @aa; my ( $cmd, @args ) = @aa;
@ -676,7 +695,7 @@ sub Set($$@) {
return undef; return undef;
} }
sub Get($$@) { sub Get {
my ( $hash, $name, @aa ) = @_; my ( $hash, $name, @aa ) = @_;
my ( $cmd, @args ) = @aa; my ( $cmd, @args ) = @aa;
@ -696,7 +715,7 @@ sub Get($$@) {
} }
} }
sub ShuttersDeviceScan($) { sub ShuttersDeviceScan {
my $hash = shift; my $hash = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -787,7 +806,7 @@ sub ShuttersDeviceScan($) {
} }
## Die Funktion schreibt in das Moduldevice Readings welche Rolläden in welchen Räumen erfasst wurden. ## Die Funktion schreibt in das Moduldevice Readings welche Rolläden in welchen Räumen erfasst wurden.
sub WriteReadingsShuttersList($) { sub WriteReadingsShuttersList {
my $hash = shift; my $hash = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -828,7 +847,7 @@ sub WriteReadingsShuttersList($) {
readingsEndUpdate( $hash, 0 ); readingsEndUpdate( $hash, 0 );
} }
sub UserAttributs_Readings_ForShutters($$) { sub UserAttributs_Readings_ForShutters {
my ( $hash, $cmd ) = @_; my ( $hash, $cmd ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -900,7 +919,7 @@ sub UserAttributs_Readings_ForShutters($$) {
} }
## Fügt dem NOTIFYDEV Hash weitere Devices hinzu ## Fügt dem NOTIFYDEV Hash weitere Devices hinzu
sub AddNotifyDev($@) { sub AddNotifyDev {
### Beispielaufruf: AddNotifyDev( $hash, $3, $1, $2 ) if ( $3 ne 'none' ); ### Beispielaufruf: AddNotifyDev( $hash, $3, $1, $2 ) if ( $3 ne 'none' );
my ( $hash, $dev, $shuttersDev, $shuttersAttr ) = @_; my ( $hash, $dev, $shuttersDev, $shuttersAttr ) = @_;
@ -930,7 +949,7 @@ sub AddNotifyDev($@) {
} }
## entfernt aus dem NOTIFYDEV Hash Devices welche als Wert in Attributen steckten ## entfernt aus dem NOTIFYDEV Hash Devices welche als Wert in Attributen steckten
sub DeleteNotifyDev($@) { sub DeleteNotifyDev {
my ( $hash, $shuttersDev, $shuttersAttr ) = @_; my ( $hash, $shuttersDev, $shuttersAttr ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -960,7 +979,7 @@ sub DeleteNotifyDev($@) {
} }
## Sub zum steuern der Rolläden bei einem Fenster Event ## Sub zum steuern der Rolläden bei einem Fenster Event
sub EventProcessingWindowRec($@) { sub EventProcessingWindowRec {
my ( $hash, $shuttersDev, $events ) = @_; my ( $hash, $shuttersDev, $events ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -1141,7 +1160,7 @@ sub EventProcessingWindowRec($@) {
} }
## Sub zum steuern der Rolladen bei einem Bewohner/Roommate Event ## Sub zum steuern der Rolladen bei einem Bewohner/Roommate Event
sub EventProcessingRoommate($@) { sub EventProcessingRoommate {
my ( $hash, $shuttersDev, $events ) = @_; my ( $hash, $shuttersDev, $events ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -1356,7 +1375,7 @@ sub EventProcessingRoommate($@) {
} }
} }
sub EventProcessingResidents($@) { sub EventProcessingResidents {
my ( $hash, $device, $events ) = @_; my ( $hash, $device, $events ) = @_;
my $name = $device; my $name = $device;
@ -1562,7 +1581,7 @@ sub EventProcessingResidents($@) {
} }
} }
sub EventProcessingRain($@) { sub EventProcessingRain {
#### Ist noch nicht fertig, es fehlt noch das verzögerte Prüfen auf erhalten bleiben des getriggerten Wertes. #### Ist noch nicht fertig, es fehlt noch das verzögerte Prüfen auf erhalten bleiben des getriggerten Wertes.
@ -1584,7 +1603,7 @@ sub EventProcessingRain($@) {
} }
} }
sub RainProtection(@) { sub RainProtection {
my ( $hash, $val, $triggerMax, $closedPos ) = @_; my ( $hash, $val, $triggerMax, $closedPos ) = @_;
foreach my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { foreach my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
@ -1623,7 +1642,7 @@ sub RainProtection(@) {
} }
} }
sub EventProcessingWind($@) { sub EventProcessingWind {
my ( $hash, $shuttersDev, $events ) = @_; my ( $hash, $shuttersDev, $events ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
@ -1696,7 +1715,7 @@ sub EventProcessingWind($@) {
} }
########## ##########
sub EventProcessingBrightness($@) { sub EventProcessingBrightness {
my ( $hash, $shuttersDev, $events ) = @_; my ( $hash, $shuttersDev, $events ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
@ -1733,6 +1752,7 @@ sub EventProcessingBrightness($@) {
) )
and IsWe() and IsWe()
and $ascDev->getSunriseTimeWeHoliday eq 'on' and $ascDev->getSunriseTimeWeHoliday eq 'on'
and $shutters->getTimeUpWeHoliday eq '01:25'
) )
) )
and int( gettimeofday() / 86400 ) == int( and int( gettimeofday() / 86400 ) == int(
@ -1807,7 +1827,10 @@ sub EventProcessingBrightness($@) {
and ( and (
not IsWe() not IsWe()
or ( IsWe() or ( IsWe()
and $ascDev->getSunriseTimeWeHoliday eq 'off' ) and $ascDev->getSunriseTimeWeHoliday eq 'off'
or ( $ascDev->getSunriseTimeWeHoliday eq 'on'
and $shutters->getTimeUpWeHoliday eq '01:25' )
)
) )
) )
or ( or (
@ -1817,6 +1840,7 @@ sub EventProcessingBrightness($@) {
) )
and IsWe() and IsWe()
and $ascDev->getSunriseTimeWeHoliday eq 'on' and $ascDev->getSunriseTimeWeHoliday eq 'on'
and $shutters->getTimeUpWeHoliday ne '01:25'
) )
) )
and int( gettimeofday() / 86400 ) == int( and int( gettimeofday() / 86400 ) == int(
@ -2068,7 +2092,7 @@ sub EventProcessingBrightness($@) {
} }
} }
sub EventProcessingShadingBrightness($@) { sub EventProcessingShadingBrightness {
my ( $hash, $shuttersDev, $events ) = @_; my ( $hash, $shuttersDev, $events ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
@ -2127,7 +2151,7 @@ sub EventProcessingShadingBrightness($@) {
} }
} }
sub EventProcessingTwilightDevice($@) { sub EventProcessingTwilightDevice {
my ( $hash, $device, $events ) = @_; my ( $hash, $device, $events ) = @_;
# Twilight # Twilight
@ -2199,7 +2223,7 @@ sub EventProcessingTwilightDevice($@) {
} }
} }
sub ShadingProcessing($@) { sub ShadingProcessing {
### angleMinus ist $shutters->getShadingAzimuthLeft ### angleMinus ist $shutters->getShadingAzimuthLeft
### anglePlus ist $shutters->getShadingAzimuthRight ### anglePlus ist $shutters->getShadingAzimuthRight
### winPos ist die Fensterposition $shutters->getDirection ### winPos ist die Fensterposition $shutters->getDirection
@ -2384,7 +2408,7 @@ sub ShadingProcessing($@) {
); );
} }
sub ShadingProcessingDriveCommand($$) { sub ShadingProcessingDriveCommand {
my ( $hash, $shuttersDev ) = @_; my ( $hash, $shuttersDev ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -2416,7 +2440,7 @@ sub ShadingProcessingDriveCommand($$) {
$shutters->setLastDrive('shading in'); $shutters->setLastDrive('shading in');
ShuttersCommandSet( $hash, $shuttersDev, $getShadingPos ); ShuttersCommandSet( $hash, $shuttersDev, $getShadingPos );
ASC_Debug( 'ShadingProcessing: ' ASC_Debug( 'ShadingProcessingDriveCommand: '
. $shutters->getShuttersDev . $shutters->getShuttersDev
. ' - Der aktuelle Beschattungsstatus ist: ' . ' - Der aktuelle Beschattungsstatus ist: '
. $shutters->getShadingStatus . $shutters->getShadingStatus
@ -2444,7 +2468,7 @@ sub ShadingProcessingDriveCommand($$) {
) )
); );
ASC_Debug( 'ShadingProcessing: ' ASC_Debug( 'ShadingProcessingDriveCommand: '
. $shutters->getShuttersDev . $shutters->getShuttersDev
. ' - Der aktuelle Beschattungsstatus ist: ' . ' - Der aktuelle Beschattungsstatus ist: '
. $shutters->getShadingStatus . $shutters->getShadingStatus
@ -2458,7 +2482,7 @@ sub ShadingProcessingDriveCommand($$) {
. $shutters->getShadingStatus ); . $shutters->getShadingStatus );
ASC_Debug( ASC_Debug(
'ShadingProcessing: ' 'ShadingProcessingDriveCommand: '
. $shutters->getShuttersDev . $shutters->getShuttersDev
. ' - Der aktuelle Beschattungsstatus ist: ' . ' - Der aktuelle Beschattungsstatus ist: '
. $shutters->getShadingStatus . $shutters->getShadingStatus
@ -2470,7 +2494,7 @@ sub ShadingProcessingDriveCommand($$) {
} }
} }
sub EventProcessingPartyMode($) { sub EventProcessingPartyMode {
my $hash = shift; my $hash = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -2520,7 +2544,7 @@ sub EventProcessingPartyMode($) {
} }
} }
sub EventProcessingAdvShuttersClose($) { sub EventProcessingAdvShuttersClose {
my $hash = shift; my $hash = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -2544,7 +2568,7 @@ sub EventProcessingAdvShuttersClose($) {
} }
} }
sub EventProcessingShutters($@) { sub EventProcessingShutters {
my ( $hash, $shuttersDev, $events ) = @_; my ( $hash, $shuttersDev, $events ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -2604,7 +2628,7 @@ sub EventProcessingShutters($@) {
); );
} }
sub EventProcessingExternalTriggerDevice($@) { sub EventProcessingExternalTriggerDevice {
my ( $hash, $shuttersDev, $events ) = @_; my ( $hash, $shuttersDev, $events ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -2657,7 +2681,7 @@ sub EventProcessingExternalTriggerDevice($@) {
} }
# Sub für das Zusammensetzen der Rolläden Steuerbefehle # Sub für das Zusammensetzen der Rolläden Steuerbefehle
sub ShuttersCommandSet($$$) { sub ShuttersCommandSet {
my ( $hash, $shuttersDev, $posValue ) = @_; my ( $hash, $shuttersDev, $posValue ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
@ -2736,7 +2760,7 @@ sub ShuttersCommandSet($$$) {
} }
## Sub welche die InternalTimer nach entsprechenden Sunset oder Sunrise zusammen stellt ## Sub welche die InternalTimer nach entsprechenden Sunset oder Sunrise zusammen stellt
sub CreateSunRiseSetShuttersTimer($$) { sub CreateSunRiseSetShuttersTimer {
my ( $hash, $shuttersDev ) = @_; my ( $hash, $shuttersDev ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $shuttersDevHash = $defs{$shuttersDev}; my $shuttersDevHash = $defs{$shuttersDev};
@ -2850,7 +2874,7 @@ sub CreateSunRiseSetShuttersTimer($$) {
} }
## Funktion zum neu setzen der Timer und der Readings für Sunset/Rise ## Funktion zum neu setzen der Timer und der Readings für Sunset/Rise
sub RenewSunRiseSetShuttersTimer($) { sub RenewSunRiseSetShuttersTimer {
my $hash = shift; my $hash = shift;
foreach ( @{ $hash->{helper}{shuttersList} } ) { foreach ( @{ $hash->{helper}{shuttersList} } ) {
@ -2945,7 +2969,7 @@ sub RenewSunRiseSetShuttersTimer($) {
} }
## Funktion zum hardwareseitigen setzen des lock-out oder blocking beim Rolladen selbst ## Funktion zum hardwareseitigen setzen des lock-out oder blocking beim Rolladen selbst
sub HardewareBlockForShutters($$) { sub HardewareBlockForShutters {
my ( $hash, $cmd ) = @_; my ( $hash, $cmd ) = @_;
foreach ( @{ $hash->{helper}{shuttersList} } ) { foreach ( @{ $hash->{helper}{shuttersList} } ) {
$shutters->setShuttersDev($_); $shutters->setShuttersDev($_);
@ -2954,7 +2978,7 @@ sub HardewareBlockForShutters($$) {
} }
## Funktion für das wiggle aller Shutters zusammen ## Funktion für das wiggle aller Shutters zusammen
sub wiggleAll($) { sub wiggleAll {
my $hash = shift; my $hash = shift;
foreach ( @{ $hash->{helper}{shuttersList} } ) { foreach ( @{ $hash->{helper}{shuttersList} } ) {
@ -2962,7 +2986,7 @@ sub wiggleAll($) {
} }
} }
sub wiggle($$) { sub wiggle {
my ( $hash, $shuttersDev ) = @_; my ( $hash, $shuttersDev ) = @_;
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
$shutters->setNoDelay(1); $shutters->setNoDelay(1);
@ -3001,7 +3025,7 @@ sub wiggle($$) {
#### ####
## Funktion welche beim Ablaufen des Timers für Sunset aufgerufen werden soll ## Funktion welche beim Ablaufen des Timers für Sunset aufgerufen werden soll
sub SunSetShuttersAfterTimerFn($) { sub SunSetShuttersAfterTimerFn {
my $funcHash = shift; my $funcHash = shift;
my $hash = $funcHash->{hash}; my $hash = $funcHash->{hash};
my $shuttersDev = $funcHash->{shuttersdevice}; my $shuttersDev = $funcHash->{shuttersdevice};
@ -3071,7 +3095,7 @@ sub SunSetShuttersAfterTimerFn($) {
} }
## Funktion welche beim Ablaufen des Timers für Sunrise aufgerufen werden soll ## Funktion welche beim Ablaufen des Timers für Sunrise aufgerufen werden soll
sub SunRiseShuttersAfterTimerFn($) { sub SunRiseShuttersAfterTimerFn {
my $funcHash = shift; my $funcHash = shift;
my $hash = $funcHash->{hash}; my $hash = $funcHash->{hash};
my $shuttersDev = $funcHash->{shuttersdevice}; my $shuttersDev = $funcHash->{shuttersdevice};
@ -3171,7 +3195,7 @@ sub SunRiseShuttersAfterTimerFn($) {
CreateSunRiseSetShuttersTimer( $hash, $shuttersDev ); CreateSunRiseSetShuttersTimer( $hash, $shuttersDev );
} }
sub CreateNewNotifyDev($) { sub CreateNewNotifyDev {
my $hash = shift; my $hash = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -3213,7 +3237,7 @@ sub CreateNewNotifyDev($) {
$hash->{NOTIFYDEV} = $hash->{NOTIFYDEV} . $shuttersList; $hash->{NOTIFYDEV} = $hash->{NOTIFYDEV} . $shuttersList;
} }
sub ShuttersInformation($@) { sub ShuttersInformation {
my ( $FW_wname, $d, $room, $pageHash ) = @_; my ( $FW_wname, $d, $room, $pageHash ) = @_;
my $hash = $defs{$d}; my $hash = $defs{$d};
@ -3300,7 +3324,7 @@ sub ShuttersInformation($@) {
return $ret; return $ret;
} }
sub GetMonitoredDevs($) { sub GetMonitoredDevs {
my $hash = shift; my $hash = shift;
my $notifydevs = eval { my $notifydevs = eval {
decode_json( ReadingsVal( $hash->{NAME}, '.monitoredDevs', 'none' ) ); decode_json( ReadingsVal( $hash->{NAME}, '.monitoredDevs', 'none' ) );
@ -3348,7 +3372,7 @@ sub GetMonitoredDevs($) {
## my little helper ## my little helper
################################# #################################
sub PositionValueWindowRec($$) { sub PositionValueWindowRec {
my ( $shuttersDev, $posValue ) = @_; my ( $shuttersDev, $posValue ) = @_;
if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 1 if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 1
@ -3379,7 +3403,7 @@ sub PositionValueWindowRec($$) {
return $posValue; return $posValue;
} }
sub AutoSearchTwilightDev($) { sub AutoSearchTwilightDev {
my $hash = shift; my $hash = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
@ -3392,7 +3416,7 @@ sub AutoSearchTwilightDev($) {
} }
} }
sub GetAttrValues($@) { sub GetAttrValues {
my ( $dev, $attribut, $default ) = @_; my ( $dev, $attribut, $default ) = @_;
my @values = split( ' ', my @values = split( ' ',
@ -3418,7 +3442,7 @@ sub GetAttrValues($@) {
} }
# Hilfsfunktion welche meinen ReadingString zum finden der getriggerten Devices und der Zurdnung was das Device überhaupt ist und zu welchen Rolladen es gehört aus liest und das Device extraiert # Hilfsfunktion welche meinen ReadingString zum finden der getriggerten Devices und der Zurdnung was das Device überhaupt ist und zu welchen Rolladen es gehört aus liest und das Device extraiert
sub ExtractNotifyDevFromEvent($$$) { sub ExtractNotifyDevFromEvent {
my ( $hash, $shuttersDev, $shuttersAttr ) = @_; my ( $hash, $shuttersDev, $shuttersAttr ) = @_;
my %notifyDevs; my %notifyDevs;
while ( my $notifyDev = each %{ $hash->{monitoredDevs} } ) { while ( my $notifyDev = each %{ $hash->{monitoredDevs} } ) {
@ -3446,7 +3470,7 @@ sub ExtractNotifyDevFromEvent($$$) {
} }
## Ist Tag oder Nacht für den entsprechende Rolladen ## Ist Tag oder Nacht für den entsprechende Rolladen
sub _IsDay($) { sub _IsDay {
my ($shuttersDev) = @_; my ($shuttersDev) = @_;
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
@ -3566,7 +3590,7 @@ sub _IsDay($) {
return $respIsDay; return $respIsDay;
} }
sub ShuttersSunrise($$) { sub ShuttersSunrise {
my ( $shuttersDev, $tm ) = my ( $shuttersDev, $tm ) =
@_; # Tm steht für Timemode und bedeutet Realzeit oder Unixzeit @_; # Tm steht für Timemode und bedeutet Realzeit oder Unixzeit
my $autoAstroMode; my $autoAstroMode;
@ -3590,11 +3614,11 @@ sub ShuttersSunrise($$) {
if ( $tm eq 'unix' ) { if ( $tm eq 'unix' ) {
if ( $shutters->getUp eq 'astro' ) { if ( $shutters->getUp eq 'astro' ) {
if ( ( IsWe() or IsWeTomorrow() ) if ( ( IsWe() or IsWe('tomorrow') )
and $ascDev->getSunriseTimeWeHoliday eq 'on' and $ascDev->getSunriseTimeWeHoliday eq 'on'
and $shutters->getTimeUpWeHoliday ne '01:25' ) and $shutters->getTimeUpWeHoliday ne '01:25' )
{ {
if ( not IsWeTomorrow() ) { if ( not IsWe('tomorrow') ) {
if ( if (
IsWe() IsWe()
and int( gettimeofday() / 86400 ) == int( and int( gettimeofday() / 86400 ) == int(
@ -3781,11 +3805,11 @@ sub ShuttersSunrise($$) {
} }
if ( defined($oldFuncHash) if ( defined($oldFuncHash)
and ref($oldFuncHash) eq 'HASH' and ref($oldFuncHash) eq 'HASH'
and ( IsWe() or IsWeTomorrow() ) and ( IsWe() or IsWe('tomorrow') )
and $ascDev->getSunriseTimeWeHoliday eq 'on' and $ascDev->getSunriseTimeWeHoliday eq 'on'
and $shutters->getTimeUpWeHoliday ne '01:25' ) and $shutters->getTimeUpWeHoliday ne '01:25' )
{ {
if ( not IsWeTomorrow() ) { if ( not IsWe('tomorrow') ) {
if ( if (
int( gettimeofday() / 86400 ) == int( int( gettimeofday() / 86400 ) == int(
( (
@ -3818,11 +3842,11 @@ sub ShuttersSunrise($$) {
} }
} }
elsif ( $shutters->getUp eq 'time' ) { elsif ( $shutters->getUp eq 'time' ) {
if ( ( IsWe() or IsWeTomorrow() ) if ( ( IsWe() or IsWe('tomorrow') )
and $ascDev->getSunriseTimeWeHoliday eq 'on' and $ascDev->getSunriseTimeWeHoliday eq 'on'
and $shutters->getTimeUpWeHoliday ne '01:25' ) and $shutters->getTimeUpWeHoliday ne '01:25' )
{ {
if ( not IsWeTomorrow() ) { if ( not IsWe('tomorrow') ) {
if ( if (
int( gettimeofday() / 86400 ) == int( int( gettimeofday() / 86400 ) == int(
computeAlignTime( '24:00', computeAlignTime( '24:00',
@ -3900,37 +3924,43 @@ sub ShuttersSunrise($$) {
} }
} }
elsif ( $shutters->getUp eq 'brightness' ) { elsif ( $shutters->getUp eq 'brightness' ) {
if ( ( IsWe() or IsWeTomorrow() ) if ( ( IsWe() or IsWe('tomorrow') )
and $ascDev->getSunriseTimeWeHoliday eq 'on' and $ascDev->getSunriseTimeWeHoliday eq 'on'
and $shutters->getTimeUpWeHoliday ne '01:25' ) and $shutters->getTimeUpWeHoliday ne '01:25' )
{ {
if ( not IsWeTomorrow() ) { if ( not IsWe('tomorrow') ) {
if ( if (
IsWe() IsWe()
and int( gettimeofday() / 86400 ) == int( and int( gettimeofday() / 86400 ) == int(
( (
computeAlignTime( '24:00', $shutters->getTimeUpWeHoliday ) computeAlignTime(
'24:00', $shutters->getTimeUpWeHoliday
)
) / 86400 ) / 86400
) )
) )
{ {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
computeAlignTime( '24:00', $shutters->getTimeUpWeHoliday ); computeAlignTime( '24:00',
$shutters->getTimeUpWeHoliday );
} }
elsif ( elsif (
int( gettimeofday() / 86400 ) == int( int( gettimeofday() / 86400 ) == int(
( (
computeAlignTime( '24:00', $shutters->getTimeUpLate ) computeAlignTime(
'24:00', $shutters->getTimeUpLate
)
) / 86400 ) / 86400
) )
) )
{ {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
computeAlignTime( '24:00', $shutters->getTimeUpWeHoliday ); computeAlignTime( '24:00',
$shutters->getTimeUpWeHoliday );
} }
else { else {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
computeAlignTime( '24:00', $shutters->getTimeUpLate ); computeAlignTime( '24:00', $shutters->getTimeUpLate );
} }
} }
else { else {
@ -3939,53 +3969,62 @@ sub ShuttersSunrise($$) {
and ( and (
int( gettimeofday() / 86400 ) == int( int( gettimeofday() / 86400 ) == int(
( (
computeAlignTime( '24:00', $shutters->getTimeUpWeHoliday ) computeAlignTime(
'24:00', $shutters->getTimeUpWeHoliday
)
) / 86400 ) / 86400
) )
or int( gettimeofday() / 86400 ) != int( or int( gettimeofday() / 86400 ) != int(
( (
computeAlignTime( '24:00', $shutters->getTimeUpWeHoliday ) computeAlignTime(
'24:00', $shutters->getTimeUpWeHoliday
)
) / 86400 ) / 86400
) )
) )
) )
{ {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
computeAlignTime( '24:00', $shutters->getTimeUpWeHoliday ); computeAlignTime( '24:00',
$shutters->getTimeUpWeHoliday );
} }
elsif ( elsif (
int( gettimeofday() / 86400 ) == int( int( gettimeofday() / 86400 ) == int(
( (
computeAlignTime( '24:00', $shutters->getTimeUpLate ) computeAlignTime(
'24:00', $shutters->getTimeUpLate
)
) / 86400 ) / 86400
) )
) )
{ {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
computeAlignTime( '24:00', $shutters->getTimeUpLate ); computeAlignTime( '24:00', $shutters->getTimeUpLate );
} }
else { else {
if ( if (
int( gettimeofday() / 86400 ) == int( int( gettimeofday() / 86400 ) == int(
( (
computeAlignTime( '24:00', $shutters->getTimeUpWeHoliday ) computeAlignTime(
'24:00', $shutters->getTimeUpWeHoliday
)
) / 86400 ) / 86400
) )
) )
{ {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
computeAlignTime( '24:00', $shutters->getTimeUpWeHoliday ); computeAlignTime( '24:00',
$shutters->getTimeUpWeHoliday );
} }
else { else {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
computeAlignTime( '24:00', $shutters->getTimeUpWeHoliday ); computeAlignTime( '24:00',
$shutters->getTimeUpWeHoliday );
} }
} }
} }
} }
else { else {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
computeAlignTime( '24:00', $shutters->getTimeUpLate ); computeAlignTime( '24:00', $shutters->getTimeUpLate );
@ -4002,7 +4041,7 @@ sub ShuttersSunrise($$) {
} }
} }
sub IsAfterShuttersTimeBlocking($) { sub IsAfterShuttersTimeBlocking {
my ($shuttersDev) = @_; my ($shuttersDev) = @_;
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
@ -4025,7 +4064,7 @@ sub IsAfterShuttersTimeBlocking($) {
else { return 1 } else { return 1 }
} }
sub IsAfterShuttersManualBlocking($) { sub IsAfterShuttersManualBlocking {
my $shuttersDev = shift; my $shuttersDev = shift;
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
@ -4050,7 +4089,7 @@ sub IsAfterShuttersManualBlocking($) {
else { return 1 } else { return 1 }
} }
sub ShuttersSunset($$) { sub ShuttersSunset {
my ( $shuttersDev, $tm ) = my ( $shuttersDev, $tm ) =
@_; # Tm steht für Timemode und bedeutet Realzeit oder Unixzeit @_; # Tm steht für Timemode und bedeutet Realzeit oder Unixzeit
my $autoAstroMode; my $autoAstroMode;
@ -4114,7 +4153,7 @@ sub ShuttersSunset($$) {
} }
## Kontrolliert ob das Fenster von einem bestimmten Rolladen offen ist ## Kontrolliert ob das Fenster von einem bestimmten Rolladen offen ist
sub CheckIfShuttersWindowRecOpen($) { sub CheckIfShuttersWindowRecOpen {
my $shuttersDev = shift; my $shuttersDev = shift;
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
@ -4132,8 +4171,8 @@ sub CheckIfShuttersWindowRecOpen($) {
} # CK: covers: close|closed } # CK: covers: close|closed
} }
sub makeReadingName($) { sub makeReadingName {
my ($rname) = @_; my ($rname) = shift;
my %charHash = ( my %charHash = (
chr(0xe4) => "ae", # ä chr(0xe4) => "ae", # ä
chr(0xc4) => "Ae", # Ä chr(0xc4) => "Ae", # Ä
@ -4151,7 +4190,7 @@ sub makeReadingName($) {
return $rname; return $rname;
} }
sub TimeMin2Sec($) { sub TimeMin2Sec {
my $min = shift; my $min = shift;
my $sec; my $sec;
@ -4159,17 +4198,11 @@ sub TimeMin2Sec($) {
return $sec; return $sec;
} }
sub IsWe() { sub IsWe {
my $we = main::IsWe(); return main::IsWe( shift, shift );
return $we;
} }
sub IsWeTomorrow() { sub _SetCmdFn {
my $we = main::IsWe('tomorrow');
return $we;
}
sub _SetCmdFn($) {
my $h = shift; my $h = shift;
my $shuttersDev = $h->{shuttersDev}; my $shuttersDev = $h->{shuttersDev};
my $posValue = $h->{posValue}; my $posValue = $h->{posValue};
@ -4224,7 +4257,7 @@ sub _SetCmdFn($) {
and $shutters->getSelfDefenseAbsentTimerrun ); and $shutters->getSelfDefenseAbsentTimerrun );
} }
sub _setShuttersLastDriveDelayed($) { sub _setShuttersLastDriveDelayed {
my $h = shift; my $h = shift;
my $shuttersDevHash = $h->{devHash}; my $shuttersDevHash = $h->{devHash};
@ -4234,7 +4267,7 @@ sub _setShuttersLastDriveDelayed($) {
$lastDrive, 1 ); $lastDrive, 1 );
} }
sub ASC_Debug($) { sub ASC_Debug {
return return
unless ( AttrVal( $ascDev->getName, 'ASC_debug', 0 ) ); unless ( AttrVal( $ascDev->getName, 'ASC_debug', 0 ) );
@ -4248,14 +4281,14 @@ sub ASC_Debug($) {
); );
} }
sub _averageBrightness(@) { sub _averageBrightness {
my @input = @_; my @input = @_;
use List::Util qw(sum); use List::Util qw(sum);
return int( sum(@input) / @input ); return int( sum(@input) / @input );
} }
sub _perlCodeCheck($) { sub _perlCodeCheck {
my $exec = shift; my $exec = shift;
my $val = undef; my $val = undef;
@ -4266,7 +4299,7 @@ sub _perlCodeCheck($) {
return $val; return $val;
} }
sub PrivacyUpTime($$) { sub PrivacyUpTime {
my ( $shuttersDevHash, $shuttersSunriseUnixtime ) = @_; my ( $shuttersDevHash, $shuttersSunriseUnixtime ) = @_;
my $privacyUpUnixtime; my $privacyUpUnixtime;
@ -4307,7 +4340,7 @@ sub PrivacyUpTime($$) {
return $shuttersSunriseUnixtime; return $shuttersSunriseUnixtime;
} }
sub PrivacyDownTime($$) { sub PrivacyDownTime {
my ( $shuttersDevHash, $shuttersSunsetUnixtime ) = @_; my ( $shuttersDevHash, $shuttersSunsetUnixtime ) = @_;
my $privacyDownUnixtime; my $privacyDownUnixtime;
@ -4371,7 +4404,7 @@ sub _IsAdv {
return $adv; return $adv;
} }
sub DevStateIcon($) { sub DevStateIcon {
my ($hash) = @_; my ($hash) = @_;
$hash = $defs{$hash} if ( ref($hash) ne 'HASH' ); $hash = $defs{$hash} if ( ref($hash) ne 'HASH' );
@ -8038,7 +8071,7 @@ sub getBlockAscDrivesAfterManual {
], ],
"release_status": "testing", "release_status": "testing",
"license": "GPL_2", "license": "GPL_2",
"version": "v0.8.20", "version": "v0.8.21",
"author": [ "author": [
"Marko Oldenburg <leongaultier@gmail.com>" "Marko Oldenburg <leongaultier@gmail.com>"
], ],