code review and change code to PBP

This commit is contained in:
Marko Oldenburg 2020-03-29 16:46:26 +02:00
parent 9d050b7b28
commit 3e1fe3f329

View File

@ -270,8 +270,9 @@ my %posSetCmds = (
EnOcean => 'position', EnOcean => 'position',
); );
my $shutters = new ASC_Shutters(); ## 2 Objekte werden erstellt
my $ascDev = new ASC_Dev(); my $shutters = ASC_Shutters->new();
my $ascDev = ASC_Dev->new();
sub ascAPIget { sub ascAPIget {
my ( $getCommand, $shutterDev, $value ) = @_; my ( $getCommand, $shutterDev, $value ) = @_;
@ -296,11 +297,11 @@ sub Initialize {
## 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
# und davor mit :: getrennt der eigentliche package Name des Modules # und davor mit :: getrennt der eigentliche package Name des Modules
$hash->{SetFn} = 'FHEM::AutoShuttersControl::Set'; $hash->{SetFn} = \&Set;
$hash->{GetFn} = 'FHEM::AutoShuttersControl::Get'; $hash->{GetFn} = \&Get;
$hash->{DefFn} = 'FHEM::AutoShuttersControl::Define'; $hash->{DefFn} = \&Define;
$hash->{NotifyFn} = 'FHEM::AutoShuttersControl::Notify'; $hash->{NotifyFn} = \&Notify;
$hash->{UndefFn} = 'FHEM::AutoShuttersControl::Undef'; $hash->{UndefFn} = \&Undef;
$hash->{AttrList} = $hash->{AttrList} =
'ASC_tempSensor ' 'ASC_tempSensor '
. 'ASC_brightnessDriveUpDown ' . 'ASC_brightnessDriveUpDown '
@ -322,7 +323,7 @@ sub Initialize {
. 'ASC_debug:1 ' . 'ASC_debug:1 '
. $readingFnAttributes; . $readingFnAttributes;
$hash->{NotifyOrderPrefix} = '51-'; # Order Nummer für NotifyFn $hash->{NotifyOrderPrefix} = '51-'; # Order Nummer für NotifyFn
$hash->{FW_detailFn} = 'FHEM::AutoShuttersControl::ShuttersInformation'; $hash->{FW_detailFn} = \&ShuttersInformation;
$hash->{parseParams} = 1; $hash->{parseParams} = 1;
return FHEM::Meta::InitMod( __FILE__, $hash ); return FHEM::Meta::InitMod( __FILE__, $hash );
@ -338,7 +339,8 @@ sub Define {
return 'only one AutoShuttersControl instance allowed' return 'only one AutoShuttersControl instance allowed'
if ( devspec2array('TYPE=AutoShuttersControl') > 1 ) if ( devspec2array('TYPE=AutoShuttersControl') > 1 )
; # es wird geprüft ob bereits eine Instanz unseres Modules existiert,wenn ja wird abgebrochen ; # es wird geprüft ob bereits eine Instanz unseres Modules existiert,wenn ja wird abgebrochen
return 'too few parameters: define <name> ShuttersControl' if ( scalar( @{$a}) != 2 ); return 'too few parameters: define <name> ShuttersControl'
if ( scalar( @{$a} ) != 2 );
my $name = shift @$a; my $name = shift @$a;
$hash->{MID} = 'da39a3ee5e6b4b0d3255bfef95601890afd80709' $hash->{MID} = 'da39a3ee5e6b4b0d3255bfef95601890afd80709'
@ -385,7 +387,7 @@ sub Undef {
delete( $modules{AutoShuttersControl}{defptr}{ $hash->{MID} } ); delete( $modules{AutoShuttersControl}{defptr}{ $hash->{MID} } );
Log3( $name, 3, "AutoShuttersControl ($name) - delete device $name" ); Log3( $name, 3, "AutoShuttersControl ($name) - delete device $name" );
return undef; return;
} }
sub Notify { sub Notify {
@ -406,18 +408,32 @@ sub Notify {
. " Notify: " . " Notify: "
. Dumper $events); # mit Dumper . Dumper $events); # mit Dumper
my $found_event = { # container to memoize specific found events
'defined' => 0,
'initialized' => 0,
'rereadcfg' => 0,
'modified' => 0,
'rolledout' => 0,
'partyoff' => 0,
'timeweholiday' => 0,
'attrdelattr' => 0,
'posreading' => 0,
};
# iterate the event list just ONCE
for my $event ( @{$events} ) {
$found_event->{'defined'}++ if ( $event =~ m{^DEFINED\s$name$}xms );
$found_event->{'initialized'}++ if ( $event =~ m{^INITIALIZED$}xms );
$found_event->{'rereadcfg'}++ if ( $event =~ m{^REREADCFG$}xms );
$found_event->{'modified'}++ if ( $event =~ m{^MODIFIED\s$name$}xms );
}
if ( if (
( ( $found_event->{'defined'} && $devname eq 'global' && $init_done )
grep /^DEFINED.$name$/, || ( $found_event->{'initialized'}
@{$events} and $devname eq 'global' and $init_done || $found_event->{'rereadcfg'}
) || $found_event->{'modified'} )
or ( && $devname eq 'global'
grep /^INITIALIZED$/,
@{$events} or grep /^REREADCFG$/,
@{$events} or grep /^MODIFIED.$name$/,
@{$events}
)
and $devname eq 'global'
) )
{ {
readingsSingleUpdate( $hash, 'partyMode', 'off', 0 ) readingsSingleUpdate( $hash, 'partyMode', 'off', 0 )
@ -454,41 +470,74 @@ sub Notify {
} }
return return
unless ( ref( $hash->{helper}{shuttersList} ) eq 'ARRAY' unless ( ref( $hash->{helper}{shuttersList} ) eq 'ARRAY'
and scalar( @{ $hash->{helper}{shuttersList} } ) > 0 ); && scalar( @{ $hash->{helper}{shuttersList} } ) > 0 );
my $posReading = $shutters->getPosCmd; my $posReading = $shutters->getPosCmd;
for my $event ( @{$events} ) {
$found_event->{'rolledout'}++
if ( $event =~ m{^userAttrList:\srolled\sout$}xms );
$found_event->{'partyoff'}++ if ( $event =~ m{^partyMode:\soff$}xms );
$found_event->{'sunrise'}++
if ( $event =~ m{^sunriseTimeWeHoliday:\s(on|off)$}xms );
$found_event->{'attrdelattr'}++
if (
$event =~ m{^(ATTR|DELETEATTR)
\s(.*ASC_Time_Up_WE_Holiday
|.*ASC_Up
|.*ASC_Down
|.*ASC_AutoAstroModeMorning
|.*ASC_AutoAstroModeMorningHorizon
|.*ASC_AutoAstroModeEvening
|.*ASC_AutoAstroModeEveningHorizon
|.*ASC_Time_Up_Early
|.*ASC_Time_Up_Late
|.*ASC_Time_Down_Early
|.*ASC_Time_Down_Late
|.*ASC_autoAstroModeMorning
|.*ASC_autoAstroModeMorningHorizon
|.*ASC_PrivacyDownValue_beforeNightClose
|.*ASC_PrivacyUpValue_beforeDayOpen
|.*ASC_autoAstroModeEvening
|.*ASC_autoAstroModeEveningHorizon
|.*ASC_Roommate_Device
|.*ASC_WindowRec
|.*ASC_residentsDev
|.*ASC_rainSensor
|.*ASC_windSensor
|.*ASC_BrightnessSensor
|.*ASC_twilightDevice
|.*ASC_ExternalTrigger)
(\s.*|$)}xms
);
$found_event->{'posreading'}++
if ( $event =~ m{^($posReading):\s\d+$}xms );
}
if ( $devname eq $name ) { if ( $devname eq $name ) {
if ( grep /^userAttrList:.rolled.out$/, @{$events} ) { if ( $found_event->{'rolledout'} ) {
unless ( scalar( @{ $hash->{helper}{shuttersList} } ) == 0 ) { unless ( scalar( @{ $hash->{helper}{shuttersList} } ) == 0 ) {
WriteReadingsShuttersList($hash); WriteReadingsShuttersList($hash);
UserAttributs_Readings_ForShutters( $hash, 'add' ); UserAttributs_Readings_ForShutters( $hash, 'add' );
InternalTimer( gettimeofday() + 3, InternalTimer( gettimeofday() + 3,
'FHEM::AutoShuttersControl::RenewSunRiseSetShuttersTimer', \&RenewSunRiseSetShuttersTimer, $hash );
$hash );
InternalTimer( gettimeofday() + 5, InternalTimer( gettimeofday() + 5,
'FHEM::AutoShuttersControl::AutoSearchTwilightDev', $hash ); \&AutoSearchTwilightDev, $hash );
} }
} }
elsif ( grep /^partyMode:.off$/, @{$events} ) { elsif ( $found_event->{'partyoff'} ) {
EventProcessingPartyMode($hash); EventProcessingPartyMode($hash);
} }
elsif ( grep /^sunriseTimeWeHoliday:.(on|off)$/, @{$events} ) { elsif ( $found_event->{'sunrise'} ) {
RenewSunRiseSetShuttersTimer($hash); RenewSunRiseSetShuttersTimer($hash);
} }
} }
elsif ( $devname eq "global" ) elsif ( $devname eq "global" )
{ # Kommt ein globales Event und beinhaltet folgende Syntax wird die Funktion zur Verarbeitung aufgerufen { # Kommt ein globales Event und beinhaltet folgende Syntax wird die Funktion zur Verarbeitung aufgerufen
if ( if ( $found_event->{'attrdelattr'} ) {
grep
/^(ATTR|DELETEATTR)\s(.*ASC_Time_Up_WE_Holiday|.*ASC_Up|.*ASC_Down|.*ASC_AutoAstroModeMorning|.*ASC_AutoAstroModeMorningHorizon|.*ASC_AutoAstroModeEvening|.*ASC_AutoAstroModeEveningHorizon|.*ASC_Time_Up_Early|.*ASC_Time_Up_Late|.*ASC_Time_Down_Early|.*ASC_Time_Down_Late|.*ASC_autoAstroModeMorning|.*ASC_autoAstroModeMorningHorizon|.*ASC_PrivacyDownValue_beforeNightClose|.*ASC_PrivacyUpValue_beforeDayOpen|.*ASC_autoAstroModeEvening|.*ASC_autoAstroModeEveningHorizon|.*ASC_Roommate_Device|.*ASC_WindowRec|.*ASC_residentsDev|.*ASC_rainSensor|.*ASC_windSensor|.*ASC_BrightnessSensor|.*ASC_twilightDevice|.*ASC_ExternalTrigger)(\s.*|$)/,
@{$events}
)
{
EventProcessingGeneral( $hash, undef, join( ' ', @{$events} ) ); EventProcessingGeneral( $hash, undef, join( ' ', @{$events} ) );
} }
} }
elsif ( grep /^($posReading):\s\d+$/, @{$events} ) { elsif ( $found_event->{'posreading'} ) {
ASC_Debug( 'Notify: ' ASC_Debug( 'Notify: '
. ' ASC_Pos_Reading Event vom Rollo wurde erkannt ' . ' ASC_Pos_Reading Event vom Rollo wurde erkannt '
. ' - RECEIVED EVENT: ' . ' - RECEIVED EVENT: '
@ -598,6 +647,8 @@ sub EventProcessingGeneral {
RenewSunRiseSetShuttersTimer($hash); RenewSunRiseSetShuttersTimer($hash);
} }
} }
return;
} }
sub Set { sub Set {
@ -804,6 +855,8 @@ sub ShuttersDeviceScan {
} }
readingsSingleUpdate( $hash, 'userAttrList', 'rolled out', 1 ); readingsSingleUpdate( $hash, 'userAttrList', 'rolled out', 1 );
return;
} }
## 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.
@ -847,6 +900,8 @@ sub WriteReadingsShuttersList {
} }
readingsBulkUpdate( $hash, 'state', 'active' ); readingsBulkUpdate( $hash, 'state', 'active' );
readingsEndUpdate( $hash, 0 ); readingsEndUpdate( $hash, 0 );
return;
} }
sub UserAttributs_Readings_ForShutters { sub UserAttributs_Readings_ForShutters {
@ -920,6 +975,8 @@ sub UserAttributs_Readings_ForShutters {
} }
} }
} }
return;
} }
## Fügt dem NOTIFYDEV Hash weitere Devices hinzu ## Fügt dem NOTIFYDEV Hash weitere Devices hinzu
@ -950,6 +1007,8 @@ sub AddNotifyDev {
readingsSingleUpdate( $hash, '.monitoredDevs', readingsSingleUpdate( $hash, '.monitoredDevs',
eval { encode_json( $hash->{monitoredDevs} ) }, 0 ); eval { encode_json( $hash->{monitoredDevs} ) }, 0 );
return;
} }
## entfernt aus dem NOTIFYDEV Hash Devices welche als Wert in Attributen steckten ## entfernt aus dem NOTIFYDEV Hash Devices welche als Wert in Attributen steckten
@ -981,6 +1040,8 @@ sub DeleteNotifyDev {
} }
readingsSingleUpdate( $hash, '.monitoredDevs', readingsSingleUpdate( $hash, '.monitoredDevs',
eval { encode_json( $hash->{monitoredDevs} ) }, 0 ); eval { encode_json( $hash->{monitoredDevs} ) }, 0 );
return;
} }
## Sub zum steuern der Rolläden bei einem Fenster Event ## Sub zum steuern der Rolläden bei einem Fenster Event
@ -1163,6 +1224,8 @@ sub EventProcessingWindowRec {
} }
} }
} }
return;
} }
## Sub zum steuern der Rolladen bei einem Bewohner/Roommate Event ## Sub zum steuern der Rolladen bei einem Bewohner/Roommate Event
@ -1380,6 +1443,8 @@ sub EventProcessingRoommate {
} }
} }
} }
return;
} }
sub EventProcessingResidents { sub EventProcessingResidents {
@ -1586,6 +1651,8 @@ sub EventProcessingResidents {
} }
} }
} }
return;
} }
sub EventProcessingRain { sub EventProcessingRain {
@ -1609,6 +1676,8 @@ sub EventProcessingRain {
RainProtection( $hash, $val, $triggerMax, $closedPos ); RainProtection( $hash, $val, $triggerMax, $closedPos );
} }
return;
} }
sub RainProtection { sub RainProtection {
@ -1648,6 +1717,8 @@ sub RainProtection {
$shutters->setRainProtectionStatus('unprotected'); $shutters->setRainProtectionStatus('unprotected');
} }
} }
return;
} }
sub EventProcessingWind { sub EventProcessingWind {
@ -1721,6 +1792,8 @@ sub EventProcessingWind {
. $1 ); . $1 );
} }
} }
return;
} }
########## ##########
@ -1836,10 +1909,12 @@ 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' or ( $ascDev->getSunriseTimeWeHoliday eq 'on'
and $shutters->getTimeUpWeHoliday eq '01:25' ) and $shutters->getTimeUpWeHoliday eq
'01:25' )
) )
) )
) )
@ -2100,6 +2175,8 @@ sub EventProcessingBrightness {
. ' - Leider konnte kein Korrekter Brightnesswert aus dem Event erkannt werden. Entweder passt das Reading oder der tatsächliche nummerishce Wert des Events nicht' . ' - Leider konnte kein Korrekter Brightnesswert aus dem Event erkannt werden. Entweder passt das Reading oder der tatsächliche nummerishce Wert des Events nicht'
); );
} }
return;
} }
sub EventProcessingShadingBrightness { sub EventProcessingShadingBrightness {
@ -2160,6 +2237,8 @@ sub EventProcessingShadingBrightness {
); );
} }
} }
return;
} }
sub EventProcessingTwilightDevice { sub EventProcessingTwilightDevice {
@ -2232,6 +2311,8 @@ sub EventProcessingTwilightDevice {
} }
} }
} }
return;
} }
sub ShadingProcessing { sub ShadingProcessing {
@ -2418,6 +2499,8 @@ sub ShadingProcessing {
and $shutters->getShadingLastStatus eq 'out' ) and $shutters->getShadingLastStatus eq 'out' )
) )
); );
return;
} }
sub ShadingProcessingDriveCommand { sub ShadingProcessingDriveCommand {
@ -2505,6 +2588,8 @@ sub ShadingProcessingDriveCommand {
) )
); );
} }
return;
} }
sub EventProcessingPartyMode { sub EventProcessingPartyMode {
@ -2556,6 +2641,8 @@ sub EventProcessingPartyMode {
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getDelayCmd ); ShuttersCommandSet( $hash, $shuttersDev, $shutters->getDelayCmd );
} }
} }
return;
} }
sub EventProcessingAdvShuttersClose { sub EventProcessingAdvShuttersClose {
@ -2581,6 +2668,8 @@ sub EventProcessingAdvShuttersClose {
) )
); );
} }
return;
} }
sub EventProcessingShutters { sub EventProcessingShutters {
@ -2642,6 +2731,8 @@ sub EventProcessingShutters {
. ' Fn wurde durlaufen und es sollten Debugausgaben gekommen sein. ' . ' Fn wurde durlaufen und es sollten Debugausgaben gekommen sein. '
. ' !!!Wenn nicht!!! wurde der Event nicht korrekt als Nummerisch erkannt. ' . ' !!!Wenn nicht!!! wurde der Event nicht korrekt als Nummerisch erkannt. '
); );
return;
} }
sub EventProcessingExternalTriggerDevice { sub EventProcessingExternalTriggerDevice {
@ -2695,6 +2786,8 @@ sub EventProcessingExternalTriggerDevice {
ASC_Debug( ASC_Debug(
'EventProcessingExternalTriggerDevice: ' . ' Funktion durchlaufen' ); 'EventProcessingExternalTriggerDevice: ' . ' Funktion durchlaufen' );
return;
} }
# Sub für das Zusammensetzen der Rolläden Steuerbefehle # Sub für das Zusammensetzen der Rolläden Steuerbefehle
@ -2775,6 +2868,8 @@ sub ShuttersCommandSet {
. ' - Das Rollo wird gefahren. Kein Partymodus aktiv und das zugordnete Fenster ist entweder nicht offen oder keine Terassentür' . ' - Das Rollo wird gefahren. Kein Partymodus aktiv und das zugordnete Fenster ist entweder nicht offen oder keine Terassentür'
); );
} }
return;
} }
## Sub welche die InternalTimer nach entsprechenden Sunset oder Sunrise zusammen stellt ## Sub welche die InternalTimer nach entsprechenden Sunset oder Sunrise zusammen stellt
@ -2885,12 +2980,14 @@ sub CreateSunRiseSetShuttersTimer {
## Ich brauche beim löschen des InternalTimer den Hash welchen ich mitgegeben habe,dieser muss gesichert werden ## Ich brauche beim löschen des InternalTimer den Hash welchen ich mitgegeben habe,dieser muss gesichert werden
$shutters->setInTimerFuncHash( \%funcHash ); $shutters->setInTimerFuncHash( \%funcHash );
InternalTimer( $shuttersSunsetUnixtime, InternalTimer( $shuttersSunsetUnixtime, \&SunSetShuttersAfterTimerFn,
'FHEM::AutoShuttersControl::SunSetShuttersAfterTimerFn', \%funcHash ); \%funcHash );
InternalTimer( $shuttersSunriseUnixtime, InternalTimer( $shuttersSunriseUnixtime, \&SunRiseShuttersAfterTimerFn,
'FHEM::AutoShuttersControl::SunRiseShuttersAfterTimerFn', \%funcHash ); \%funcHash );
$ascDev->setStateReading('created new drive timer'); $ascDev->setStateReading('created new drive timer');
return;
} }
## 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
@ -2986,6 +3083,8 @@ sub RenewSunRiseSetShuttersTimer {
# #
# delFromDevAttrList( $name, 'ASC_ExternalTriggerDevice' ); # delFromDevAttrList( $name, 'ASC_ExternalTriggerDevice' );
} }
return;
} }
## Funktion zum hardwareseitigen setzen des lock-out oder blocking beim Rolladen selbst ## Funktion zum hardwareseitigen setzen des lock-out oder blocking beim Rolladen selbst
@ -2997,6 +3096,8 @@ sub HardewareBlockForShutters {
$shutters->setShuttersDev($_); $shutters->setShuttersDev($_);
$shutters->setHardLockOut($cmd); $shutters->setHardLockOut($cmd);
} }
return;
} }
## Funktion für das wiggle aller Shutters zusammen ## Funktion für das wiggle aller Shutters zusammen
@ -3006,6 +3107,8 @@ sub wiggleAll {
foreach ( @{ $hash->{helper}{shuttersList} } ) { foreach ( @{ $hash->{helper}{shuttersList} } ) {
wiggle( $hash, $_ ); wiggle( $hash, $_ );
} }
return;
} }
sub wiggle { sub wiggle {
@ -3043,8 +3146,9 @@ sub wiggle {
} }
} }
InternalTimer( gettimeofday() + 60, InternalTimer( gettimeofday() + 60, \&_SetCmdFn, \%h );
'FHEM::AutoShuttersControl::_SetCmdFn', \%h );
return;
} }
#### ####
@ -3117,6 +3221,8 @@ sub SunSetShuttersAfterTimerFn {
} }
CreateSunRiseSetShuttersTimer( $hash, $shuttersDev ); CreateSunRiseSetShuttersTimer( $hash, $shuttersDev );
return;
} }
## Funktion welche beim Ablaufen des Timers für Sunrise aufgerufen werden soll ## Funktion welche beim Ablaufen des Timers für Sunrise aufgerufen werden soll
@ -3219,6 +3325,8 @@ sub SunRiseShuttersAfterTimerFn {
} }
CreateSunRiseSetShuttersTimer( $hash, $shuttersDev ); CreateSunRiseSetShuttersTimer( $hash, $shuttersDev );
return;
} }
sub CreateNewNotifyDev { sub CreateNewNotifyDev {
@ -3262,6 +3370,8 @@ sub CreateNewNotifyDev {
if ( AttrVal( $name, 'ASC_windSensor', 'none' ) ne 'none' ); if ( AttrVal( $name, 'ASC_windSensor', 'none' ) ne 'none' );
$hash->{NOTIFYDEV} = $hash->{NOTIFYDEV} . $shuttersList; $hash->{NOTIFYDEV} = $hash->{NOTIFYDEV} . $shuttersList;
return;
} }
sub ShuttersInformation { sub ShuttersInformation {
@ -3271,11 +3381,11 @@ sub ShuttersInformation {
return return
if ( !exists( $hash->{helper} ) if ( !exists( $hash->{helper} )
or !defined($hash->{helper}->{shuttersList}) || !defined( $hash->{helper}->{shuttersList} )
or ref($hash->{helper}->{shuttersList}) ne 'ARRAY' || ref( $hash->{helper}->{shuttersList} ) ne 'ARRAY'
or scalar( @{$hash->{helper}->{shuttersList}} ) == 0 || scalar( @{ $hash->{helper}->{shuttersList} } ) == 0
or !defined($shutters->getSunriseUnixTime) || !defined( $shutters->getSunriseUnixTime )
or !defined($shutters->getSunsetUnixTime) ); || !defined( $shutters->getSunsetUnixTime ) );
my $ret = my $ret =
'<html><table><tr><h3>ASC Configuration and Information Summary</h3><td>'; '<html><table><tr><h3>ASC Configuration and Information Summary</h3><td>';
@ -3452,6 +3562,8 @@ sub AutoSearchTwilightDev {
. ( devspec2array('TYPE=(Astro|Twilight)') )[0] ) . ( devspec2array('TYPE=(Astro|Twilight)') )[0] )
if ( AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' ); if ( AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' );
} }
return;
} }
sub GetAttrValues { sub GetAttrValues {
@ -3460,11 +3572,13 @@ sub GetAttrValues {
my @values = split( ' ', my @values = split( ' ',
AttrVal( $dev, $attribut, ( defined($default) ? $default : 'none' ) ) ); AttrVal( $dev, $attribut, ( defined($default) ? $default : 'none' ) ) );
my ( $value1, $value2 ) = split( ':', $values[0] ); my ( $value1, $value2 ) = split( ':', $values[0] );
my ( $value3, $value4 ) = split( ':', $values[1] )
my ( $value3, $value4, $value5, $value6, $value7, $value8 );
( $value3, $value4 ) = split( ':', $values[1] )
if ( defined( $values[1] ) ); if ( defined( $values[1] ) );
my ( $value5, $value6 ) = split( ':', $values[2] ) ( $value5, $value6 ) = split( ':', $values[2] )
if ( defined( $values[2] ) ); if ( defined( $values[2] ) );
my ( $value7, $value8 ) = split( ':', $values[2] ) ( $value7, $value8 ) = split( ':', $values[3] )
if ( defined( $values[3] ) ); if ( defined( $values[3] ) );
return ( return (
@ -4080,6 +4194,8 @@ sub ShuttersSunrise {
if ( $shutters->getUp eq 'astro' ); if ( $shutters->getUp eq 'astro' );
return $shutters->getTimeUpEarly if ( $shutters->getUp eq 'time' ); return $shutters->getTimeUpEarly if ( $shutters->getUp eq 'time' );
} }
return 0;
} }
sub IsAfterShuttersTimeBlocking { sub IsAfterShuttersTimeBlocking {
@ -4193,6 +4309,8 @@ sub ShuttersSunset {
return $shutters->getTimeDownEarly return $shutters->getTimeDownEarly
if ( $shutters->getDown eq 'time' ); if ( $shutters->getDown eq 'time' );
} }
return 0;
} }
## Kontrolliert ob das Fenster von einem bestimmten Rolladen offen ist ## Kontrolliert ob das Fenster von einem bestimmten Rolladen offen ist
@ -4299,6 +4417,8 @@ sub _SetCmdFn {
$shutters->setSelfDefenseAbsent( 0, 0 ) $shutters->setSelfDefenseAbsent( 0, 0 )
if ( not $shutters->getSelfDefenseAbsent if ( not $shutters->getSelfDefenseAbsent
and $shutters->getSelfDefenseAbsentTimerrun ); and $shutters->getSelfDefenseAbsentTimerrun );
return;
} }
sub _setShuttersLastDriveDelayed { sub _setShuttersLastDriveDelayed {
@ -4309,6 +4429,8 @@ sub _setShuttersLastDriveDelayed {
readingsSingleUpdate( $shuttersDevHash, 'ASC_ShuttersLastDrive', readingsSingleUpdate( $shuttersDevHash, 'ASC_ShuttersLastDrive',
$lastDrive, 1 ); $lastDrive, 1 );
return;
} }
sub ASC_Debug { sub ASC_Debug {
@ -4323,6 +4445,8 @@ sub ASC_Debug {
"\n" . 'ASC_DEBUG!!! ' . $debugTimestamp . ' - ' . $debugMsg . "\n" "\n" . 'ASC_DEBUG!!! ' . $debugTimestamp . ' - ' . $debugMsg . "\n"
) )
); );
return;
} }
sub _averageBrightness { sub _averageBrightness {
@ -4683,14 +4807,14 @@ sub setDriveCmd {
{ {
InternalTimer( InternalTimer(
gettimeofday() + $shutters->getSelfDefenseAbsentDelay, gettimeofday() + $shutters->getSelfDefenseAbsentDelay,
'FHEM::AutoShuttersControl::_SetCmdFn', \%h ); \&FHEM::AutoShuttersControl::_SetCmdFn, \%h );
$shutters->setSelfDefenseAbsent( 1, 0, \%h ); $shutters->setSelfDefenseAbsent( 1, 0, \%h );
} }
elsif ( $offSetStart > 0 and not $shutters->getNoDelay ) { elsif ( $offSetStart > 0 and not $shutters->getNoDelay ) {
InternalTimer( InternalTimer(
gettimeofday() + gettimeofday() +
int( rand($offSet) + $shutters->getDelayStart ), int( rand($offSet) + $shutters->getDelayStart ),
'FHEM::AutoShuttersControl::_SetCmdFn', \%h \&FHEM::AutoShuttersControl::_SetCmdFn, \%h
); );
FHEM::AutoShuttersControl::ASC_Debug( 'FnSetDriveCmd: ' FHEM::AutoShuttersControl::ASC_Debug( 'FnSetDriveCmd: '
@ -4709,8 +4833,9 @@ sub setDriveCmd {
. ' - NoDelay: ' . ' - NoDelay: '
. ( $shutters->getNoDelay ? 'JA' : 'NEIN' ) ); . ( $shutters->getNoDelay ? 'JA' : 'NEIN' ) );
$shutters->setNoDelay(0); $shutters->setNoDelay(0);
return 0;
} }
return;
} }
sub setSunsetUnixTime { sub setSunsetUnixTime {
@ -4779,11 +4904,12 @@ sub setLastDriveReading {
); );
InternalTimer( gettimeofday() + 0.1, InternalTimer( gettimeofday() + 0.1,
'FHEM::AutoShuttersControl::_setShuttersLastDriveDelayed', \%h ); \&FHEM::AutoShuttersControl::_setShuttersLastDriveDelayed, \%h );
return 0; return 0;
} }
sub setLastPos { sub setLastPos {
# letzte ermittelte Position bevor die Position des Rolladen über ASC geändert wurde # letzte ermittelte Position bevor die Position des Rolladen über ASC geändert wurde
my $self = shift; my $self = shift;
my $position = shift; my $position = shift;
@ -4902,16 +5028,19 @@ sub getAttrUpdateChanges {
my $self = shift; my $self = shift;
my $attr = shift; my $attr = shift;
return $self->{ $self->{shuttersDev} }{AttrUpdateChanges}{$attr} return (
if ( defined( $self->{ $self->{shuttersDev} }{AttrUpdateChanges} ) defined( $self->{ $self->{shuttersDev} }{AttrUpdateChanges} )
and && defined(
defined( $self->{ $self->{shuttersDev} }{AttrUpdateChanges}{$attr} ) ); $self->{ $self->{shuttersDev} }{AttrUpdateChanges}{$attr} )
? $self->{ $self->{shuttersDev} }{AttrUpdateChanges}{$attr}
: 'none'
);
} }
sub getIsDay { sub getIsDay {
my $self = shift; my $self = shift;
return FHEM::AutoShuttersControl::_IsDay( $self->{shuttersDev} ); return \&FHEM::AutoShuttersControl::_IsDay( $self->{shuttersDev} );
} }
sub getFreezeStatus { sub getFreezeStatus {
@ -4980,9 +5109,11 @@ sub getNoDelay {
sub getSelfDefenseState { sub getSelfDefenseState {
my $self = shift; my $self = shift;
return $self->{ $self->{shuttersDev} }{selfDefenseState} return (
if ( defined( $self->{ $self->{shuttersDev} }{selfDefenseState} ) ); defined( $self->{ $self->{shuttersDev} }{selfDefenseState} )
? $self->{ $self->{shuttersDev} }{selfDefenseState}
: 0
);
} }
sub getSelfDefenseAbsent { sub getSelfDefenseAbsent {
@ -5000,11 +5131,12 @@ sub getSelfDefenseAbsentTimerrun {
sub getSelfDefenseAbsentTimerhash { sub getSelfDefenseAbsentTimerhash {
my $self = shift; my $self = shift;
return $self->{ $self->{shuttersDev} }{selfDefenseAbsent}{timerhash} return (
if (
defined( defined(
$self->{ $self->{shuttersDev} }{selfDefenseAbsent}{timerhash} $self->{ $self->{shuttersDev} }{selfDefenseAbsent}{timerhash}
) )
? $self->{ $self->{shuttersDev} }{selfDefenseAbsent}{timerhash}
: undef
); );
} }
@ -5022,36 +5154,48 @@ sub getLastPos
{ # letzte ermittelte Position bevor die Position des Rolladen über ASC geändert wurde { # letzte ermittelte Position bevor die Position des Rolladen über ASC geändert wurde
my $self = shift; my $self = shift;
return $self->{ $self->{shuttersDev} }{lastPos}{VAL} return (
if ( defined( $self->{ $self->{shuttersDev} }{lastPos} ) defined( $self->{ $self->{shuttersDev} }{lastPos} )
and defined( $self->{ $self->{shuttersDev} }{lastPos}{VAL} ) ); && defined( $self->{ $self->{shuttersDev} }{lastPos}{VAL} )
? $self->{ $self->{shuttersDev} }{lastPos}{VAL}
: 50
);
} }
sub getLastPosTimestamp { sub getLastPosTimestamp {
my $self = shift; my $self = shift;
return $self->{ $self->{shuttersDev} }{lastPos}{TIME} return (
if ( defined( $self->{ $self->{shuttersDev} } ) defined( $self->{ $self->{shuttersDev} } )
and defined( $self->{ $self->{shuttersDev} }{lastPos} ) && defined( $self->{ $self->{shuttersDev} }{lastPos} )
and defined( $self->{ $self->{shuttersDev} }{lastPos}{TIME} ) ); && defined( $self->{ $self->{shuttersDev} }{lastPos}{TIME} )
? $self->{ $self->{shuttersDev} }{lastPos}{TIME}
: 0
);
} }
sub getLastManPos sub getLastManPos
{ # letzte ermittelte Position bevor die Position des Rolladen manuell (nicht über ASC) geändert wurde { # letzte ermittelte Position bevor die Position des Rolladen manuell (nicht über ASC) geändert wurde
my $self = shift; my $self = shift;
return $self->{ $self->{shuttersDev} }{lastManPos}{VAL} return (
if ( defined( $self->{ $self->{shuttersDev} }{lastManPos} ) defined( $self->{ $self->{shuttersDev} }{lastManPos} )
and defined( $self->{ $self->{shuttersDev} }{lastManPos}{VAL} ) ); && defined( $self->{ $self->{shuttersDev} }{lastManPos}{VAL} )
? $self->{ $self->{shuttersDev} }{lastManPos}{VAL}
: 50
);
} }
sub getLastManPosTimestamp { sub getLastManPosTimestamp {
my $self = shift; my $self = shift;
return $self->{ $self->{shuttersDev} }{lastManPos}{TIME} return (
if ( defined( $self->{ $self->{shuttersDev} } ) defined( $self->{ $self->{shuttersDev} } )
and defined( $self->{ $self->{shuttersDev} }{lastManPos} ) && defined( $self->{ $self->{shuttersDev} }{lastManPos} )
and defined( $self->{ $self->{shuttersDev} }{lastManPos}{TIME} ) ); && defined( $self->{ $self->{shuttersDev} }{lastManPos}{TIME} )
? $self->{ $self->{shuttersDev} }{lastManPos}{TIME}
: 0
);
} }
sub getInTimerFuncHash { sub getInTimerFuncHash {
@ -5236,12 +5380,14 @@ sub setPushBrightnessInArray {
} }
) > $shutters->getMaxBrightnessAverageArrayObjects ) > $shutters->getMaxBrightnessAverageArrayObjects
); );
return;
} }
sub getBrightnessAverage { sub getBrightnessAverage {
my $self = shift; my $self = shift;
return &FHEM::AutoShuttersControl::_averageBrightness( return \&FHEM::AutoShuttersControl::_averageBrightness(
@{ $self->{ $self->{shuttersDev} }->{BrightnessAverageArray}->{VAL} } ) @{ $self->{ $self->{shuttersDev} }->{BrightnessAverageArray}->{VAL} } )
if ( if (
ref( $self->{ $self->{shuttersDev} }->{BrightnessAverageArray}->{VAL} ) ref( $self->{ $self->{shuttersDev} }->{BrightnessAverageArray}->{VAL} )
@ -5252,22 +5398,29 @@ sub getBrightnessAverage {
} }
) > 0 ) > 0
); );
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; my $self = shift;
return $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} return (
if ( defined( $self->{ $self->{shuttersDev} }{ShadingStatus} ) defined( $self->{ $self->{shuttersDev} }{ShadingStatus} )
and defined( $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} ) ); && defined( $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL} )
? $self->{ $self->{shuttersDev} }{ShadingStatus}{VAL}
: 'out'
);
} }
sub getShadingLastStatus { # Werte für value = in, out sub getShadingLastStatus { # Werte für value = in, out
my $self = shift; my $self = shift;
return $self->{ $self->{shuttersDev} }{ShadingLastStatus}{VAL} return (
if ( defined( $self->{ $self->{shuttersDev} }{ShadingLastStatus} ) defined( $self->{ $self->{shuttersDev} }{ShadingLastStatus} )
and defined( $self->{ $self->{shuttersDev} }{ShadingLastStatus}{VAL} ) && defined( $self->{ $self->{shuttersDev} }{ShadingLastStatus}{VAL} )
? $self->{ $self->{shuttersDev} }{ShadingLastStatus}{VAL}
: 'out'
); );
} }
@ -5276,7 +5429,7 @@ sub getShadingManualDriveStatus { # Werte für value = in, out
return ( return (
defined( $self->{ $self->{shuttersDev} }{ShadingManualDriveStatus} ) defined( $self->{ $self->{shuttersDev} }{ShadingManualDriveStatus} )
and defined( && defined(
$self->{ $self->{shuttersDev} }{ShadingManualDriveStatus}{VAL} $self->{ $self->{shuttersDev} }{ShadingManualDriveStatus}{VAL}
) )
? $self->{ $self->{shuttersDev} }{ShadingManualDriveStatus}{VAL} ? $self->{ $self->{shuttersDev} }{ShadingManualDriveStatus}{VAL}
@ -5328,19 +5481,24 @@ sub getRainProtectionStatus { # Werte protected, unprotected
sub getShadingStatusTimestamp { sub getShadingStatusTimestamp {
my $self = shift; my $self = shift;
return $self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} return (
if ( defined( $self->{ $self->{shuttersDev} } ) defined( $self->{ $self->{shuttersDev} } )
and defined( $self->{ $self->{shuttersDev} }{ShadingStatus} ) && defined( $self->{ $self->{shuttersDev} }{ShadingStatus} )
and defined( $self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} ) ); && defined( $self->{ $self->{shuttersDev} }{ShadingStatus}{TIME} )
? $self->{ $self->{shuttersDev} }{ShadingStatus}{TIME}
: 0
);
} }
sub getShadingLastStatusTimestamp { sub getShadingLastStatusTimestamp {
my $self = shift; my $self = shift;
return $self->{ $self->{shuttersDev} }{ShadingLastStatus}{TIME} return (
if ( defined( $self->{ $self->{shuttersDev} } ) defined( $self->{ $self->{shuttersDev} } )
and defined( $self->{ $self->{shuttersDev} }{ShadingLastStatus} ) && defined( $self->{ $self->{shuttersDev} }{ShadingLastStatus} )
and defined( $self->{ $self->{shuttersDev} }{ShadingLastStatus}{TIME} ) && defined( $self->{ $self->{shuttersDev} }{ShadingLastStatus}{TIME} )
? $self->{ $self->{shuttersDev} }{ShadingLastStatus}{TIME}
: 0
); );
} }
### Ende Beschattung ### Ende Beschattung
@ -5374,7 +5532,7 @@ sub getAntiFreezePos {
); );
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); $val = \&FHEM::AutoShuttersControl::_perlCodeCheck($val);
} }
return ( return (
@ -5526,7 +5684,7 @@ sub getPrivacyUpPos {
my $val = AttrVal( $self->{shuttersDev}, 'ASC_PrivacyUp_Pos', 50 ); my $val = AttrVal( $self->{shuttersDev}, 'ASC_PrivacyUp_Pos', 50 );
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); $val = \&FHEM::AutoShuttersControl::_perlCodeCheck($val);
} }
return ( $val =~ /^\d+(\.\d+)?$/ ? $val : 50 ); return ( $val =~ /^\d+(\.\d+)?$/ ? $val : 50 );
@ -5538,7 +5696,7 @@ sub getPrivacyDownPos {
my $val = AttrVal( $self->{shuttersDev}, 'ASC_PrivacyDown_Pos', 50 ); my $val = AttrVal( $self->{shuttersDev}, 'ASC_PrivacyDown_Pos', 50 );
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); $val = \&FHEM::AutoShuttersControl::_perlCodeCheck($val);
} }
return ( $val =~ /^\d+(\.\d+)?$/ ? $val : 50 ); return ( $val =~ /^\d+(\.\d+)?$/ ? $val : 50 );
@ -5567,7 +5725,7 @@ sub getAdv {
return ( return (
AttrVal( $self->{shuttersDev}, 'ASC_Adv', 'off' ) eq 'on' AttrVal( $self->{shuttersDev}, 'ASC_Adv', 'off' ) eq 'on'
? ( FHEM::AutoShuttersControl::_IsAdv == 1 ? 1 : 0 ) ? ( \&FHEM::AutoShuttersControl::_IsAdv == 1 ? 1 : 0 )
: 0 : 0
); );
} }
@ -5581,7 +5739,7 @@ sub getShadingPos {
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ); [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] );
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); $val = \&FHEM::AutoShuttersControl::_perlCodeCheck($val);
} }
return ( return (
@ -5613,7 +5771,7 @@ sub _getTempSensor {
$self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} = $self->{ $self->{shuttersDev} }->{ASC_TempSensor}->{LASTGETTIME} =
int( gettimeofday() ); int( gettimeofday() );
my ( $device, $reading ) = my ( $device, $reading ) =
FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev}, \&FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev},
'ASC_TempSensor', 'none' ); 'ASC_TempSensor', 'none' );
### erwartetes Ergebnis ### erwartetes Ergebnis
@ -5663,7 +5821,7 @@ sub _getIdleDetectionReading {
$self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_Shutter_IdleDetection}->{LASTGETTIME}
= int( gettimeofday() ); = int( gettimeofday() );
my ( $reading, $value ) = my ( $reading, $value ) =
FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev}, \&FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev},
'ASC_Shutter_IdleDetection', 'none' ); 'ASC_Shutter_IdleDetection', 'none' );
### erwartetes Ergebnis ### erwartetes Ergebnis
@ -5718,7 +5876,7 @@ sub _getBrightnessSensor {
$self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}->{LASTGETTIME} = $self->{ $self->{shuttersDev} }->{ASC_BrightnessSensor}->{LASTGETTIME} =
int( gettimeofday() ); int( gettimeofday() );
my ( $device, $reading, $max, $min ) = my ( $device, $reading, $max, $min ) =
FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev}, \&FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev},
'ASC_BrightnessSensor', 'none' ); 'ASC_BrightnessSensor', 'none' );
### erwartetes Ergebnis ### erwartetes Ergebnis
@ -5795,7 +5953,7 @@ sub getShadingAzimuthRight {
$self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}->{LASTGETTIME} $self->{ $self->{shuttersDev} }->{ASC_Shading_InOutAzimuth}->{LASTGETTIME}
= int( gettimeofday() ); = int( gettimeofday() );
my ( $left, $right ) = my ( $left, $right ) =
FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev}, \&FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev},
'ASC_Shading_InOutAzimuth', '95:265' ); 'ASC_Shading_InOutAzimuth', '95:265' );
### erwartetes Ergebnis ### erwartetes Ergebnis
@ -5834,7 +5992,7 @@ sub getShadingMinElevation {
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation} $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
->{LASTGETTIME} = int( gettimeofday() ); ->{LASTGETTIME} = int( gettimeofday() );
my ( $min, $max ) = my ( $min, $max ) =
FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev}, \&FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev},
'ASC_Shading_MinMax_Elevation', '25.0:100.0' ); 'ASC_Shading_MinMax_Elevation', '25.0:100.0' );
### erwartetes Ergebnis ### erwartetes Ergebnis
@ -5886,7 +6044,7 @@ sub getShadingStateChangeSunny {
$self->{ $self->{shuttersDev} }->{ASC_Shading_StateChange_SunnyCloudy} $self->{ $self->{shuttersDev} }->{ASC_Shading_StateChange_SunnyCloudy}
->{LASTGETTIME} = int( gettimeofday() ); ->{LASTGETTIME} = int( gettimeofday() );
my ( $sunny, $cloudy, $maxBrightnessAverageArrayObjects ) = my ( $sunny, $cloudy, $maxBrightnessAverageArrayObjects ) =
FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev}, \&FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev},
'ASC_Shading_StateChange_SunnyCloudy', 'ASC_Shading_StateChange_SunnyCloudy',
'35000:20000' ); '35000:20000' );
@ -5972,7 +6130,7 @@ sub getExternalTriggerDevice {
int( gettimeofday() ); int( gettimeofday() );
my ( $device, $reading, $valueActive, $valueInactive, $posActive, my ( $device, $reading, $valueActive, $valueInactive, $posActive,
$posInactive ) $posInactive )
= FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev}, = \&FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev},
'ASC_ExternalTrigger', 'none' ); 'ASC_ExternalTrigger', 'none' );
### erwartetes Ergebnis ### erwartetes Ergebnis
@ -6160,7 +6318,7 @@ sub getVentilatePos {
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ); [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] );
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); $val = \&FHEM::AutoShuttersControl::_perlCodeCheck($val);
} }
return ( return (
@ -6192,7 +6350,7 @@ sub getSleepPos {
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Sleep_Pos', -1 ); my $val = AttrVal( $self->{shuttersDev}, 'ASC_Sleep_Pos', -1 );
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); $val = \&FHEM::AutoShuttersControl::_perlCodeCheck($val);
} }
return ( $val =~ /^\d+(\.\d+)?$/ ? $val : -1 ); return ( $val =~ /^\d+(\.\d+)?$/ ? $val : -1 );
@ -6211,7 +6369,7 @@ sub getComfortOpenPos {
[ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] ); [ AttrVal( $self->{shuttersDev}, 'ASC', 2 ) ] );
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); $val = \&FHEM::AutoShuttersControl::_perlCodeCheck($val);
} }
return ( return (
@ -6276,7 +6434,7 @@ sub getWindMax {
$self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} = $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{LASTGETTIME} =
int( gettimeofday() ); int( gettimeofday() );
my ( $max, $hyst, $pos ) = my ( $max, $hyst, $pos ) =
FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev}, \&FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev},
'ASC_WindParameters', '50:20' ); 'ASC_WindParameters', '50:20' );
## Erwartetes Ergebnis ## Erwartetes Ergebnis
@ -6396,7 +6554,7 @@ sub getTimeUpEarly {
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Early', '05:00' ); my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Early', '05:00' );
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); $val = \&FHEM::AutoShuttersControl::_perlCodeCheck($val);
} }
return ( return (
@ -6412,7 +6570,7 @@ sub getTimeUpLate {
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Late', '08:30' ); my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_Late', '08:30' );
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); $val = \&FHEM::AutoShuttersControl::_perlCodeCheck($val);
} }
return ( return (
@ -6428,7 +6586,7 @@ sub getTimeDownEarly {
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Early', '16:00' ); my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Early', '16:00' );
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); $val = \&FHEM::AutoShuttersControl::_perlCodeCheck($val);
} }
return ( return (
@ -6444,7 +6602,7 @@ sub getTimeDownLate {
my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Late', '22:00' ); my $val = AttrVal( $self->{shuttersDev}, 'ASC_Time_Down_Late', '22:00' );
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); $val = \&FHEM::AutoShuttersControl::_perlCodeCheck($val);
} }
return ( return (
@ -6461,7 +6619,7 @@ sub getTimeUpWeHoliday {
AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_WE_Holiday', '01:25' ); AttrVal( $self->{shuttersDev}, 'ASC_Time_Up_WE_Holiday', '01:25' );
if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) { if ( defined( FHEM::AutoShuttersControl::_perlCodeCheck($val) ) ) {
$val = FHEM::AutoShuttersControl::_perlCodeCheck($val); $val = \&FHEM::AutoShuttersControl::_perlCodeCheck($val);
} }
return ( return (
@ -6606,7 +6764,7 @@ sub _getWinDev {
$self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} = $self->{ $self->{shuttersDev} }->{ASC_WindowRec}->{LASTGETTIME} =
int( gettimeofday() ); int( gettimeofday() );
my ( $device, $reading ) = my ( $device, $reading ) =
FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev}, \&FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev},
'ASC_WindowRec', 'none' ); 'ASC_WindowRec', 'none' );
### erwartetes Ergebnis ### erwartetes Ergebnis
@ -6980,7 +7138,7 @@ sub getBrightnessMaxVal {
$self->{ASC_brightness}->{LASTGETTIME} = int( gettimeofday() ); $self->{ASC_brightness}->{LASTGETTIME} = int( gettimeofday() );
my ( $triggermax, $triggermin ) = my ( $triggermax, $triggermin ) =
FHEM::AutoShuttersControl::GetAttrValues( $name, \&FHEM::AutoShuttersControl::GetAttrValues( $name,
'ASC_brightnessDriveUpDown', '800:500' ); 'ASC_brightnessDriveUpDown', '800:500' );
## erwartetes Ergebnis ## erwartetes Ergebnis
@ -7074,7 +7232,7 @@ sub _getTempSensor {
and ( gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 ); and ( gettimeofday() - $self->{ASC_tempSensor}->{LASTGETTIME} ) < 2 );
$self->{ASC_tempSensor}->{LASTGETTIME} = int( gettimeofday() ); $self->{ASC_tempSensor}->{LASTGETTIME} = int( gettimeofday() );
my ( $device, $reading ) = my ( $device, $reading ) =
FHEM::AutoShuttersControl::GetAttrValues( $name, 'ASC_tempSensor', \&FHEM::AutoShuttersControl::GetAttrValues( $name, 'ASC_tempSensor',
'none' ); 'none' );
## erwartetes Ergebnis ## erwartetes Ergebnis
@ -7110,7 +7268,7 @@ sub _getResidentsDev {
and ( gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < 2 ); and ( gettimeofday() - $self->{ASC_residentsDev}->{LASTGETTIME} ) < 2 );
$self->{ASC_residentsDev}->{LASTGETTIME} = int( gettimeofday() ); $self->{ASC_residentsDev}->{LASTGETTIME} = int( gettimeofday() );
my ( $device, $reading ) = my ( $device, $reading ) =
FHEM::AutoShuttersControl::GetAttrValues( $name, 'ASC_residentsDev', \&FHEM::AutoShuttersControl::GetAttrValues( $name, 'ASC_residentsDev',
'none' ); 'none' );
$self->{ASC_residentsDev}->{device} = $device; $self->{ASC_residentsDev}->{device} = $device;
@ -7142,7 +7300,7 @@ sub _getRainSensor {
and ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 ); and ( gettimeofday() - $self->{ASC_rainSensor}->{LASTGETTIME} ) < 2 );
$self->{ASC_rainSensor}->{LASTGETTIME} = int( gettimeofday() ); $self->{ASC_rainSensor}->{LASTGETTIME} = int( gettimeofday() );
my ( $device, $reading, $max, $hyst, $pos, $wait ) = my ( $device, $reading, $max, $hyst, $pos, $wait ) =
FHEM::AutoShuttersControl::GetAttrValues( $name, 'ASC_rainSensor', \&FHEM::AutoShuttersControl::GetAttrValues( $name, 'ASC_rainSensor',
'none' ); 'none' );
## erwartetes Ergebnis ## erwartetes Ergebnis
@ -7236,7 +7394,7 @@ sub _getWindSensor {
and ( gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 ); and ( gettimeofday() - $self->{ASC_windSensor}->{LASTGETTIME} ) < 2 );
$self->{ASC_windSensor}->{LASTGETTIME} = int( gettimeofday() ); $self->{ASC_windSensor}->{LASTGETTIME} = int( gettimeofday() );
my ( $device, $reading ) = my ( $device, $reading ) =
FHEM::AutoShuttersControl::GetAttrValues( $name, 'ASC_windSensor', \&FHEM::AutoShuttersControl::GetAttrValues( $name, 'ASC_windSensor',
'none' ); 'none' );
return $device if ( $device eq 'none' ); return $device if ( $device eq 'none' );