after code layout

This commit is contained in:
Marko Oldenburg
2018-11-19 09:10:28 +01:00

View File

@ -165,7 +165,7 @@ my %userAttrList = (
'ASC_Time_Down_Late' => '22:30', 'ASC_Time_Down_Late' => '22:30',
'ASC_WindowRec' => 'none', 'ASC_WindowRec' => 'none',
'ASC_Ventilate_Window_Open:on,off' => 'on', 'ASC_Ventilate_Window_Open:on,off' => 'on',
'ASC_LockOut:soft,hard,off' => 'off', 'ASC_LockOut:soft,hard,off' => 'off',
'ASC_LockOut_Cmd:inhibit,blocked' => 'none', 'ASC_LockOut_Cmd:inhibit,blocked' => 'none',
'ASC_Shading_Direction' => 178, 'ASC_Shading_Direction' => 178,
'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100' => [ '', 70, 30 ], 'ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100' => [ '', 70, 30 ],
@ -176,25 +176,25 @@ my %userAttrList = (
=> 85, => 85,
'ASC_Shading_Brightness_Sensor' => 'none', 'ASC_Shading_Brightness_Sensor' => 'none',
'ASC_Shading_Brightness_Reading' => 'brightness', 'ASC_Shading_Brightness_Reading' => 'brightness',
# #
# 'ASC_Shading_StateChange_Sunny' => '6000', # 'ASC_Shading_StateChange_Sunny' => '6000',
# 'ASC_Shading_StateChange_Cloudy' => '4000', # 'ASC_Shading_StateChange_Cloudy' => '4000',
# 'ASC_Shading_WaitingPeriod' => 20, # 'ASC_Shading_WaitingPeriod' => 20,
# 'ASC_Shading_Min_Elevation' => 'none', # 'ASC_Shading_Min_Elevation' => 'none',
# 'ASC_Shading_Min_OutsideTemperature' => 18, # 'ASC_Shading_Min_OutsideTemperature' => 18,
# 'ASC_Shading_BlockingTime_After_Manual' => 20, # 'ASC_Shading_BlockingTime_After_Manual' => 20,
# 'ASC_Shading_BlockingTime_Twilight' => 45, # 'ASC_Shading_BlockingTime_Twilight' => 45,
# 'ASC_Shading_Fast_Open:on,off' => 'none', # 'ASC_Shading_Fast_Open:on,off' => 'none',
# 'ASC_Shading_Fast_Close:on,off' => 'none', # 'ASC_Shading_Fast_Close:on,off' => 'none',
'ASC_Drive_Offset' => -1, 'ASC_Drive_Offset' => -1,
'ASC_WindowRec_subType:twostate,threestate' => 'twostate', 'ASC_WindowRec_subType:twostate,threestate' => 'twostate',
'ASC_ShuttersPlace:window,terrace' => 'window', 'ASC_ShuttersPlace:window,terrace' => 'window',
'ASC_Ventilate_Pos:10,20,30,40,50,60,70,80,90,100' => [ '', 70, 30 ], 'ASC_Ventilate_Pos:10,20,30,40,50,60,70,80,90,100' => [ '', 70, 30 ],
'ASC_ComfortOpen_Pos:0,10,20,30,40,50,60,70,80,90,100' => 'ASC_ComfortOpen_Pos:0,10,20,30,40,50,60,70,80,90,100' => [ '', 20, 80 ],
[ '', 20, 80 ], 'ASC_GuestRoom:on,off' => 'none',
'ASC_GuestRoom:on,off' => 'none', 'ASC_Antifreeze:off,soft,hard,am,pm' => 'off',
'ASC_Antifreeze:off,soft,hard,am,pm' => 'off', 'ASC_Antifreeze_Pos:5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100'
'ASC_Antifreeze_Pos:5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100' => [ '', 85, 15 ], => [ '', 85, 15 ],
'ASC_Partymode:on,off' => 'off', 'ASC_Partymode:on,off' => 'off',
'ASC_Roommate_Device' => 'none', 'ASC_Roommate_Device' => 'none',
'ASC_Roommate_Reading' => 'state', 'ASC_Roommate_Reading' => 'state',
@ -383,8 +383,7 @@ sub Notify($$) {
'AutoShuttersControl::RenewSunRiseSetShuttersTimer', 'AutoShuttersControl::RenewSunRiseSetShuttersTimer',
$hash ); $hash );
InternalTimer( gettimeofday() + 5, InternalTimer( gettimeofday() + 5,
'AutoShuttersControl::AutoSearchTwilightDev', 'AutoShuttersControl::AutoSearchTwilightDev', $hash );
$hash );
} }
} }
elsif ( grep /^partyMode:.off$/, @{$events} ) { elsif ( grep /^partyMode:.off$/, @{$events} ) {
@ -449,10 +448,11 @@ sub EventProcessingGeneral($$$) {
if ( $deviceAttr eq 'ASC_Shading_Brightness_Sensor' ); if ( $deviceAttr eq 'ASC_Shading_Brightness_Sensor' );
if ( if (
$deviceAttr eq 'ASC_Shading_Brightness_Sensor' $deviceAttr eq 'ASC_Shading_Brightness_Sensor'
and ( $shutters->getDown eq 'brightness' and ( $shutters->getDown eq 'brightness'
or $shutters->getUp eq 'brightness' ) or $shutters->getUp eq 'brightness' )
) { )
{
EventProcessingBrightness( $hash, $device, $events ); EventProcessingBrightness( $hash, $device, $events );
} }
elsif ( $deviceAttr eq 'ASC_Shading_Brightness_Sensor' ) { elsif ( $deviceAttr eq 'ASC_Shading_Brightness_Sensor' ) {
@ -642,17 +642,18 @@ sub ShuttersDeviceScan($) {
; # temporär muss später gelöscht werden ab Version 0.2.0.6 ; # temporär muss später gelöscht werden ab Version 0.2.0.6
delFromDevAttrList( $_, 'ASC_lock-outCmd:inhibit,blocked' ) delFromDevAttrList( $_, 'ASC_lock-outCmd:inhibit,blocked' )
; # temporär muss später gelöscht werden ab Version 0.2.0.6 ; # temporär muss später gelöscht werden ab Version 0.2.0.6
delFromDevAttrList( $_, 'ASC_Pos_after_ComfortOpen:0,10,20,30,40,50,60,70,80,90,100' ) delFromDevAttrList( $_,
'ASC_Pos_after_ComfortOpen:0,10,20,30,40,50,60,70,80,90,100' )
; # temporär muss später gelöscht werden ab Version 0.2.0.6 ; # temporär muss später gelöscht werden ab Version 0.2.0.6
delFromDevAttrList( $_, 'ASC_Antifreeze:off,on' ) delFromDevAttrList( $_, 'ASC_Antifreeze:off,on' )
if ( AttrVal( $_, 'ASC_Antifreeze', 'on' ) eq 'on' if ( AttrVal( $_, 'ASC_Antifreeze', 'on' ) eq 'on'
or AttrVal( $_, 'ASC_Antifreeze', 'on' ) eq 'off' or AttrVal( $_, 'ASC_Antifreeze', 'on' ) eq 'off' )
)
; # temporär muss später gelöscht werden ab Version 0.2.0.6 ; # temporär muss später gelöscht werden ab Version 0.2.0.6
delFromDevAttrList( $_, 'ASC_AntifreezePos:5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100' ) delFromDevAttrList( $_,
; # temporär muss später gelöscht werden ab Version 0.2.0.7 'ASC_AntifreezePos:5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100'
); # temporär muss später gelöscht werden ab Version 0.2.0.7
$shuttersList = $shuttersList . ',' . $_; $shuttersList = $shuttersList . ',' . $_;
$shutters->setShuttersDev($_); $shutters->setShuttersDev($_);
@ -662,9 +663,9 @@ sub ShuttersDeviceScan($) {
$shutters->setNoOffset(0); $shutters->setNoOffset(0);
$shutters->setPosSetCmd( $posSetCmds{ $defs{$_}->{TYPE} } ); $shutters->setPosSetCmd( $posSetCmds{ $defs{$_}->{TYPE} } );
} }
# $hash->{NOTIFYDEV} = $hash->{NOTIFYDEV} . $shuttersList;
$hash->{NOTIFYDEV} = "global," . $name . $shuttersList;
# $hash->{NOTIFYDEV} = $hash->{NOTIFYDEV} . $shuttersList;
$hash->{NOTIFYDEV} = "global," . $name . $shuttersList;
if ( $ascDev->getMonitoredDevs ne 'none' ) { if ( $ascDev->getMonitoredDevs ne 'none' ) {
$hash->{monitoredDevs} = $hash->{monitoredDevs} =
@ -833,10 +834,11 @@ sub EventProcessingWindowRec($@) {
if ( $shutters->getDelayCmd ne 'none' and $1 eq 'closed' ) if ( $shutters->getDelayCmd ne 'none' and $1 eq 'closed' )
{ # Es wird geschaut ob wärend der Fenster offen Phase ein Fahrbefehl über das Modul kam,wenn ja wird dieser aus geführt { # Es wird geschaut ob wärend der Fenster offen Phase ein Fahrbefehl über das Modul kam,wenn ja wird dieser aus geführt
# if ( $1 eq 'closed' ) {
$shutters->setLastDrive('delayed drive - window closed'); # if ( $1 eq 'closed' ) {
ShuttersCommandSet( $hash, $shuttersDev, $shutters->setLastDrive('delayed drive - window closed');
$shutters->getDelayCmd ); ShuttersCommandSet( $hash, $shuttersDev, $shutters->getDelayCmd );
# } # }
# elsif ( # elsif (
# ( # (
@ -855,22 +857,26 @@ sub EventProcessingWindowRec($@) {
elsif ( $1 eq 'closed' elsif ( $1 eq 'closed'
) # wenn nicht dann wird entsprechend dem Fensterkontakt Event der Rolladen geschlossen oder zum lüften geöffnet ) # wenn nicht dann wird entsprechend dem Fensterkontakt Event der Rolladen geschlossen oder zum lüften geöffnet
{ {
if ( $shutters->getStatus == $shutters->getVentilatePos if ( $shutters->getStatus == $shutters->getVentilatePos
or $shutters->getStatus == $shutters->getComfortOpenPos ) or $shutters->getStatus == $shutters->getComfortOpenPos )
{ {
my $homemode = $shutters->getRoommatesStatus; my $homemode = $shutters->getRoommatesStatus;
$homemode = $ascDev->getResidentsStatus if ( $homemode eq 'none' ); $homemode = $ascDev->getResidentsStatus
if ( $homemode eq 'none' );
$shutters->setLastDrive('window closed'); $shutters->setLastDrive('window closed');
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getLastPos ) ShuttersCommandSet( $hash, $shuttersDev, $shutters->getLastPos )
if ( IsDay($hash,$shuttersDev) if (
and ($homemode ne 'asleep' IsDay( $hash, $shuttersDev )
and ( $homemode ne 'asleep'
or $homemode ne 'gotosleep' or $homemode ne 'gotosleep'
or $homemode eq 'none') ); or $homemode eq 'none' )
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getClosedPos ) );
if ( not IsDay($hash,$shuttersDev) ShuttersCommandSet( $hash, $shuttersDev,
or $homemode eq 'asleep' $shutters->getClosedPos )
or $homemode eq 'gotosleep' ); if ( not IsDay( $hash, $shuttersDev )
or $homemode eq 'asleep'
or $homemode eq 'gotosleep' );
} }
} }
elsif ( elsif (
@ -908,10 +914,10 @@ sub EventProcessingRoommate($@) {
if ( $events =~ m#$reading:\s(absent|gotosleep|asleep|awoken|home)# ) { if ( $events =~ m#$reading:\s(absent|gotosleep|asleep|awoken|home)# ) {
Log3( $name, 4, Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate: " . $shutters->getRoommatesReading "AutoShuttersControl ($name) - EventProcessingRoommate: "
); . $shutters->getRoommatesReading );
Log3( $name, 4, Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate: $shuttersDev und Events $events" "AutoShuttersControl ($name) - EventProcessingRoommate: $shuttersDev und Events $events"
); );
if ( if (
@ -925,8 +931,8 @@ sub EventProcessingRoommate($@) {
) )
{ {
Log3( $name, 4, Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate_1: $shuttersDev und Events $events" "AutoShuttersControl ($name) - EventProcessingRoommate_1: $shuttersDev und Events $events"
); );
if ( if (
( (
$shutters->getRoommatesLastStatus eq 'asleep' $shutters->getRoommatesLastStatus eq 'asleep'
@ -936,8 +942,8 @@ sub EventProcessingRoommate($@) {
) )
{ {
Log3( $name, 4, Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate_2: $shuttersDev und Events $events" "AutoShuttersControl ($name) - EventProcessingRoommate_2: $shuttersDev und Events $events"
); );
$shutters->setLastDrive('roommate awoken'); $shutters->setLastDrive('roommate awoken');
ShuttersCommandSet( $hash, $shuttersDev, ShuttersCommandSet( $hash, $shuttersDev,
$shutters->getOpenPos ); $shutters->getOpenPos );
@ -959,7 +965,7 @@ sub EventProcessingRoommate($@) {
if ( not IsDay( $hash, $shuttersDev ) ) { if ( not IsDay( $hash, $shuttersDev ) ) {
my $position; my $position;
$shutters->setLastDrive('roommate home'); $shutters->setLastDrive('roommate home');
if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 0 if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 0
or $shutters->getVentilateOpen eq 'off' ) or $shutters->getVentilateOpen eq 'off' )
{ {
@ -967,9 +973,10 @@ sub EventProcessingRoommate($@) {
} }
else { else {
$position = $shutters->getVentilatePos; $position = $shutters->getVentilatePos;
$shutters->setLastDrive($shutters->getLastDrive . ' - ventilate mode'); $shutters->setLastDrive(
$shutters->getLastDrive . ' - ventilate mode' );
} }
ShuttersCommandSet( $hash, $shuttersDev, $position ); ShuttersCommandSet( $hash, $shuttersDev, $position );
} }
elsif ( IsDay( $hash, $shuttersDev ) elsif ( IsDay( $hash, $shuttersDev )
@ -992,7 +999,7 @@ sub EventProcessingRoommate($@) {
{ {
my $position; my $position;
$shutters->setLastDrive('roommate asleep'); $shutters->setLastDrive('roommate asleep');
if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 0 if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 0
or $shutters->getVentilateOpen eq 'off' ) or $shutters->getVentilateOpen eq 'off' )
{ {
@ -1000,7 +1007,8 @@ sub EventProcessingRoommate($@) {
} }
else { else {
$position = $shutters->getVentilatePos; $position = $shutters->getVentilatePos;
$shutters->setLastDrive($shutters->getLastDrive . ' - ventilate mode'); $shutters->setLastDrive(
$shutters->getLastDrive . ' - ventilate mode' );
} }
ShuttersCommandSet( $hash, $shuttersDev, $position ); ShuttersCommandSet( $hash, $shuttersDev, $position );
@ -1155,17 +1163,17 @@ sub EventProcessingBrightness($@) {
my $name = $hash->{NAME}; my $name = $hash->{NAME};
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
return EventProcessingShadingBrightness($hash, $shuttersDev, $events) return EventProcessingShadingBrightness( $hash, $shuttersDev, $events )
unless ( unless (
int( gettimeofday() / 86400 ) != int( gettimeofday() / 86400 ) !=
int( computeAlignTime( '24:00', $shutters->getTimeUpEarly ) / 86400 ) int( computeAlignTime( '24:00', $shutters->getTimeUpEarly ) / 86400 )
and int( gettimeofday() / 86400 ) == and int( gettimeofday() / 86400 ) ==
int( computeAlignTime( '24:00', $shutters->getTimeUpLate ) / 86400 ) int( computeAlignTime( '24:00', $shutters->getTimeUpLate ) / 86400 )
or int( gettimeofday() / 86400 ) != or int( gettimeofday() / 86400 ) !=
int( computeAlignTime( '24:00', $shutters->getTimeDownEarly ) / 86400 ) int( computeAlignTime( '24:00', $shutters->getTimeDownEarly ) / 86400 )
and int( gettimeofday() / 86400 ) == and int( gettimeofday() / 86400 ) ==
int( computeAlignTime( '24:00', $shutters->getTimeDownLate ) / 86400 ) int( computeAlignTime( '24:00', $shutters->getTimeDownLate ) / 86400 )
); );
my $reading = $shutters->getShadingBrightnessReading; my $reading = $shutters->getShadingBrightnessReading;
if ( $events =~ m#$reading:\s(\d+)# ) { if ( $events =~ m#$reading:\s(\d+)# ) {
@ -1211,9 +1219,15 @@ sub EventProcessingBrightness($@) {
and $ascDev->getSelfDefense eq 'off' and $ascDev->getSelfDefense eq 'off'
or ( $ascDev->getSelfDefense eq 'on' or ( $ascDev->getSelfDefense eq 'on'
and CheckIfShuttersWindowRecOpen($shuttersDev) == 0 ) and CheckIfShuttersWindowRecOpen($shuttersDev) == 0 )
) { )
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getOpenPos ); {
} else { EventProcessingShadingBrightness($hash, $shuttersDev, $events); } ShuttersCommandSet( $hash, $shuttersDev,
$shutters->getOpenPos );
}
else {
EventProcessingShadingBrightness( $hash, $shuttersDev,
$events );
}
} }
} }
elsif ( elsif (
@ -1244,14 +1258,20 @@ sub EventProcessingBrightness($@) {
if ( $homemode eq 'none' ); if ( $homemode eq 'none' );
$shutters->setLastDrive('minimum brightness threshold fell below'); $shutters->setLastDrive('minimum brightness threshold fell below');
if ( $shutters->getModeDown eq $homemode if ( $shutters->getModeDown eq $homemode
or $homemode eq 'none' or $homemode eq 'none'
or $shutters->getModeDown eq 'always' or $shutters->getModeDown eq 'always' )
) { {
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getClosedPos ); ShuttersCommandSet( $hash, $shuttersDev,
} else { EventProcessingShadingBrightness($hash, $shuttersDev, $events); } $shutters->getClosedPos );
}
else {
EventProcessingShadingBrightness( $hash, $shuttersDev,
$events );
}
} }
} else { EventProcessingShadingBrightness($hash, $shuttersDev, $events); } }
else { EventProcessingShadingBrightness( $hash, $shuttersDev, $events ); }
} }
sub EventProcessingShadingBrightness($@) { sub EventProcessingShadingBrightness($@) {
@ -1259,45 +1279,78 @@ sub EventProcessingShadingBrightness($@) {
my $name = $hash->{NAME}; my $name = $hash->{NAME};
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
my $reading = $shutters->getShadingBrightnessReading; my $reading = $shutters->getShadingBrightnessReading;
if ( $events =~ m#$reading:\s(\d+)# ) { if ( $events =~ m#$reading:\s(\d+)# ) {
ShadingProcessing($hash,$shuttersDev,$ascDev->getAzimuth,$ascDev->getElevation,$1,$ascDev->getOutTemp,$shutters->getDirection,$shutters->getShadingAngleLeft,$shutters->getShadingAngleRight) ShadingProcessing(
if ( $shutters->getShadingMode eq 'on' or $shutters->getShadingMode eq $ascDev->getResidentsStatus and IsDay( $hash, $shuttersDev ) ); $hash, $shuttersDev,
$ascDev->getAzimuth, $ascDev->getElevation,
$1, $ascDev->getOutTemp,
$shutters->getDirection, $shutters->getShadingAngleLeft,
$shutters->getShadingAngleRight
)
if ( $shutters->getShadingMode eq 'on'
or $shutters->getShadingMode eq $ascDev->getResidentsStatus
and IsDay( $hash, $shuttersDev ) );
} }
} }
sub EventProcessingTwilightDevice($@) { sub EventProcessingTwilightDevice($@) {
my ( $hash, $device, $events ) = @_; my ( $hash, $device, $events ) = @_;
# Twilight # Twilight
# azimuth = azimuth = Sonnenwinkel # azimuth = azimuth = Sonnenwinkel
# elevation = elevation = Sonnenhöhe # elevation = elevation = Sonnenhöhe
# #
# Astro # Astro
# SunAz = azimuth = Sonnenwinkel # SunAz = azimuth = Sonnenwinkel
# SunAlt = evaluation = Sonnenhöhe # SunAlt = evaluation = Sonnenhöhe
if ( $events =~ m#(azimuth|evaluation|SunAz|SunAlt):\s(\d+.\d+)# ) { if ( $events =~ m#(azimuth|evaluation|SunAz|SunAlt):\s(\d+.\d+)# ) {
my $name = $device; my $name = $device;
my ($azimuth,$elevation, $outTemp, $brightness); my ( $azimuth, $elevation, $outTemp, $brightness );
$azimuth = $2 if ( $1 eq 'azimuth' or $1 eq 'SunAz' );
$elevation = $2 if ( $1 eq 'evaluation' or $1 eq 'SunAlt' );
$azimuth = $ascDev->getAzimuth if (not defined($azimuth) and not $azimuth ); $azimuth = $2 if ( $1 eq 'azimuth' or $1 eq 'SunAz' );
$elevation = $ascDev->getElevation if (not defined($elevation) and not $elevation ); $elevation = $2 if ( $1 eq 'evaluation' or $1 eq 'SunAlt' );
$azimuth = $ascDev->getAzimuth
if ( not defined($azimuth) and not $azimuth );
$elevation = $ascDev->getElevation
if ( not defined($elevation) and not $elevation );
foreach my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) { foreach my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
ShadingProcessing($hash,$shuttersDev,$azimuth,$elevation,$shutters->getBrightness,$ascDev->getOutTemp,$shutters->getDirection,$shutters->getShadingAngleLeft,$shutters->getShadingAngleRight) ShadingProcessing(
if ( ($shutters->getShadingMode eq 'on' or $shutters->getShadingMode eq $ascDev->getResidentsStatus) and IsDay( $hash, $shuttersDev ) ); $hash,
$shuttersDev,
$azimuth,
$elevation,
$shutters->getBrightness,
$ascDev->getOutTemp,
$shutters->getDirection,
$shutters->getShadingAngleLeft,
$shutters->getShadingAngleRight
)
if (
(
$shutters->getShadingMode eq 'on'
or $shutters->getShadingMode eq $ascDev->getResidentsStatus
)
and IsDay( $hash, $shuttersDev )
);
} }
} }
} }
sub ShadingProcessing($@) { sub ShadingProcessing($@) {
my ($hash,$shuttersDev,$azimuth,$elevation,$brightness,$outTemp,$shuttersDirection,$shuttersShadingAngleLeft,$shuttersShadingAngleRight) = @_; my (
$hash, $shuttersDev,
$azimuth, $elevation,
$brightness, $outTemp,
$shuttersDirection, $shuttersShadingAngleLeft,
$shuttersShadingAngleRight
) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
Log3( $name, 1, Log3( $name, 1,
"AutoShuttersControl ($name) - Shading Processing, Rollladen: " . $shuttersDev . " Azimuth: " . $azimuth . " Elevation: " . $elevation . " Brightness: " . $brightness . " OutTemp: " . $outTemp "AutoShuttersControl ($name) - Shading Processing, Rollladen: " . $shuttersDev . " Azimuth: " . $azimuth . " Elevation: " . $elevation . " Brightness: " . $brightness . " OutTemp: " . $outTemp
@ -1312,13 +1365,11 @@ sub ShadingProcessing($@) {
# azimuth -1 # azimuth -1
# elevation -1 # elevation -1
Log3( $name, 1, Log3( $name, 1,
"AutoShuttersControl ($name) - Shading Processing hinter dem return"); "AutoShuttersControl ($name) - Shading Processing hinter dem return");
} }
sub EventProcessingPartyMode($) { sub EventProcessingPartyMode($) {
@ -1382,7 +1433,7 @@ sub ShuttersCommandSet($$$) {
my $name = $hash->{NAME}; my $name = $hash->{NAME};
$shutters->setShuttersDev($shuttersDev); $shutters->setShuttersDev($shuttersDev);
my $queryShuttersPosValue = ( my $queryShuttersPosValue = (
$shutters->getShuttersPosCmdValueNegate $shutters->getShuttersPosCmdValueNegate
? $shutters->getStatus > $posValue ? $shutters->getStatus > $posValue
@ -1407,7 +1458,7 @@ sub ShuttersCommandSet($$$) {
$shutters->setDelayCmd($posValue); $shutters->setDelayCmd($posValue);
$ascDev->setDelayCmdReading; $ascDev->setDelayCmdReading;
Log3( $name, 4, Log3( $name, 4,
"AutoShuttersControl ($name) - ShuttersCommandSet in Delay"); "AutoShuttersControl ($name) - ShuttersCommandSet in Delay" );
} }
else { else {
$shutters->setDriveCmd($posValue); $shutters->setDriveCmd($posValue);
@ -1416,7 +1467,8 @@ sub ShuttersCommandSet($$$) {
; # setzt den Wert auf none da der Rolladen nun gesteuert werden kann. ; # setzt den Wert auf none da der Rolladen nun gesteuert werden kann.
$ascDev->setLastPosReading; $ascDev->setLastPosReading;
Log3( $name, 4, Log3( $name, 4,
"AutoShuttersControl ($name) - ShuttersCommandSet setDriveCmd wird aufgerufen"); "AutoShuttersControl ($name) - ShuttersCommandSet setDriveCmd wird aufgerufen"
);
} }
} }
@ -1554,15 +1606,23 @@ sub wiggle($$) {
if ( $shutters->getShuttersPosCmdValueNegate ) { if ( $shutters->getShuttersPosCmdValueNegate ) {
if ( $shutters->getStatus >= $shutters->getOpenPos / 2 ) { if ( $shutters->getStatus >= $shutters->getOpenPos / 2 ) {
$shutters->setDriveCmd( $shutters->getStatus + $shutters->getWiggleValue ); $shutters->setDriveCmd(
$shutters->getStatus + $shutters->getWiggleValue );
}
else {
$shutters->setDriveCmd(
$shutters->getStatus - $shutters->getWiggleValue );
} }
else { $shutters->setDriveCmd( $shutters->getStatus - $shutters->getWiggleValue ); }
} }
else { else {
if ( $shutters->getStatus >= $shutters->getOpenPos / 2 ) { if ( $shutters->getStatus >= $shutters->getOpenPos / 2 ) {
$shutters->setDriveCmd( $shutters->getStatus - $shutters->getWiggleValue ); $shutters->setDriveCmd(
$shutters->getStatus - $shutters->getWiggleValue );
}
else {
$shutters->setDriveCmd(
$shutters->getStatus + $shutters->getWiggleValue );
} }
else { $shutters->setDriveCmd( $shutters->getStatus + $shutters->getWiggleValue ); }
} }
InternalTimer( gettimeofday() + 60, 'AutoShuttersControl::SetCmdFn', \%h ); InternalTimer( gettimeofday() + 60, 'AutoShuttersControl::SetCmdFn', \%h );
@ -1587,9 +1647,12 @@ sub SunSetShuttersAfterTimerFn($) {
my $homemode = $shutters->getRoommatesStatus; my $homemode = $shutters->getRoommatesStatus;
$homemode = $ascDev->getResidentsStatus if ( $homemode eq 'none' ); $homemode = $ascDev->getResidentsStatus if ( $homemode eq 'none' );
if ( $shutters->getModeDown eq $homemode if (
# or $homemode eq 'none' $shutters->getModeDown eq $homemode
or $shutters->getModeDown eq 'always' )
# or $homemode eq 'none'
or $shutters->getModeDown eq 'always'
)
{ {
$shutters->setLastDrive('night close'); $shutters->setLastDrive('night close');
ShuttersCommandSet( $hash, $shuttersDev, $posValue ); ShuttersCommandSet( $hash, $shuttersDev, $posValue );
@ -1608,9 +1671,12 @@ sub SunRiseShuttersAfterTimerFn($) {
my $homemode = $shutters->getRoommatesStatus; my $homemode = $shutters->getRoommatesStatus;
$homemode = $ascDev->getResidentsStatus if ( $homemode eq 'none' ); $homemode = $ascDev->getResidentsStatus if ( $homemode eq 'none' );
if ( $shutters->getModeUp eq $homemode if (
# or $homemode eq 'none' $shutters->getModeUp eq $homemode
or $shutters->getModeUp eq 'always' )
# or $homemode eq 'none'
or $shutters->getModeUp eq 'always'
)
{ {
if ( if (
( (
@ -1806,13 +1872,13 @@ sub GetMonitoredDevs($) {
sub AutoSearchTwilightDev($) { sub AutoSearchTwilightDev($) {
my $hash = shift; my $hash = shift;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
if ( devspec2array('TYPE=(Astro|Twilight)') > 0 ) { if ( devspec2array('TYPE=(Astro|Twilight)') > 0 ) {
CommandAttr( undef, CommandAttr( undef,
$name $name
. ' ASC_twilightDevice ' . ' ASC_twilightDevice '
. ( devspec2array('TYPE=(Astro|Twilight)') )[0] ) . ( devspec2array('TYPE=(Astro|Twilight)') )[0] )
if ( AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' ); if ( AttrVal( $name, 'ASC_twilightDevice', 'none' ) eq 'none' );
} }
} }
@ -2015,61 +2081,48 @@ sub ShuttersSunrise($$$) {
if ( if (
IsWe() IsWe()
and int( gettimeofday() / 86400 ) == int( and int( gettimeofday() / 86400 ) == int(
computeAlignTime( computeAlignTime(
'24:00', '24:00', $shutters->getTimeUpWeHoliday
$shutters->getTimeUpWeHoliday )
) ) / 86400
) / 86400 )
)
{ {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
computeAlignTime( computeAlignTime( '24:00',
'24:00', $shutters->getTimeUpWeHoliday );
$shutters->getTimeUpWeHoliday
);
} }
elsif ( elsif (
int( gettimeofday() / 86400 ) == int( int( gettimeofday() / 86400 ) == int(
computeAlignTime( computeAlignTime(
'24:00', '24:00', $shutters->getTimeUpEarly
$shutters->getTimeUpEarly )
) ) / 86400
) / 86400 )
)
{ {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
computeAlignTime( computeAlignTime( '24:00',
'24:00', $shutters->getTimeUpWeHoliday );
$shutters->getTimeUpWeHoliday
);
} }
else { else {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
computeAlignTime( computeAlignTime( '24:00',
'24:00', $shutters->getTimeUpEarly );
$shutters->getTimeUpEarly
);
} }
} }
else { else {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
computeAlignTime( computeAlignTime( '24:00',
'24:00', $shutters->getTimeUpWeHoliday );
$shutters->getTimeUpWeHoliday
);
} }
} }
else { else {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
computeAlignTime( computeAlignTime( '24:00', $shutters->getTimeUpEarly );
'24:00',
$shutters->getTimeUpEarly
);
} }
} }
elsif ( $shutters->getUp eq 'brightness' ) { elsif ( $shutters->getUp eq 'brightness' ) {
$shuttersSunriseUnixtime = $shuttersSunriseUnixtime =
computeAlignTime( '24:00', $shutters->getTimeUpLate ); computeAlignTime( '24:00', $shutters->getTimeUpLate );
} }
return $shuttersSunriseUnixtime; return $shuttersSunriseUnixtime;
} }
@ -2319,7 +2372,7 @@ sub setNoOffset {
sub setDriveCmd { sub setDriveCmd {
my ( $self, $posValue ) = @_; my ( $self, $posValue ) = @_;
my $offSet = 0; my $offSet = 0;
### antifreeze Routine ### antifreeze Routine
if ( $shutters->getFreezeStatus > 0 ) { if ( $shutters->getFreezeStatus > 0 ) {
if ( $shutters->getFreezeStatus != 1 ) { if ( $shutters->getFreezeStatus != 1 ) {
@ -2330,11 +2383,12 @@ sub setDriveCmd {
} }
elsif ( $posValue == $shutters->getClosedPos ) { elsif ( $posValue == $shutters->getClosedPos ) {
$posValue = $shutters->getAntiFreezePos; $posValue = $shutters->getAntiFreezePos;
$shutters->setLastDrive($shutters->getLastDrive . ' - antifreeze mode'); $shutters->setLastDrive(
$shutters->getLastDrive . ' - antifreeze mode' );
} }
} }
my %h = ( my %h = (
shuttersDev => $self->{shuttersDev}, shuttersDev => $self->{shuttersDev},
posValue => $posValue, posValue => $posValue,
); );
@ -2407,8 +2461,7 @@ sub setLastPos
return 0; return 0;
} }
sub setLastManPos sub setLastManPos {
{
my ( $self, $position ) = @_; my ( $self, $position ) = @_;
$self->{ $self->{shuttersDev} }{lastManPos}{VAL} = $position $self->{ $self->{shuttersDev} }{lastManPos}{VAL} = $position
@ -2443,16 +2496,17 @@ sub setInTimerFuncHash {
sub getFreezeStatus { sub getFreezeStatus {
use POSIX qw(strftime); use POSIX qw(strftime);
my $self = shift; my $self = shift;
my $daytime = strftime("%P", localtime()); my $daytime = strftime( "%P", localtime() );
if ( $shutters->getAntiFreeze ne 'off' if ( $shutters->getAntiFreeze ne 'off'
and $ascDev->getOutTemp <= $ascDev->getFreezeTemp ) { and $ascDev->getOutTemp <= $ascDev->getFreezeTemp )
{
if ( $shutters->getAntiFreeze eq 'soft') {
if ( $shutters->getAntiFreeze eq 'soft' ) {
return 1; return 1;
} }
elsif ( $shutters->getAntiFreeze eq $daytime elsif ($shutters->getAntiFreeze eq $daytime
or $shutters->getAntiFreeze eq $daytime ) or $shutters->getAntiFreeze eq $daytime )
{ {
return 2; return 2;
} }
@ -2640,7 +2694,7 @@ sub getWiggleValue {
} }
sub getShadingPos { sub getShadingPos {
my $self = shift; my $self = shift;
my $default = $self->{defaultarg}; my $default = $self->{defaultarg};
$default = 10 if ( not defined($default) ); $default = 10 if ( not defined($default) );
@ -2648,7 +2702,7 @@ sub getShadingPos {
} }
sub getShadingMode { sub getShadingMode {
my $self = shift; my $self = shift;
my $default = $self->{defaultarg}; my $default = $self->{defaultarg};
$default = 'off' if ( not defined($default) ); $default = 'off' if ( not defined($default) );
@ -2674,20 +2728,20 @@ sub getShadingBrightnessReading {
} }
sub getDirection { sub getDirection {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Direction', -1 ); return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Direction', -1 );
} }
sub getShadingAngleLeft { sub getShadingAngleLeft {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Angle_Left', -1 ); return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Angle_Left', -1 );
} }
sub getShadingAngleRight { sub getShadingAngleRight {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Angle_Right', -1 ); return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Angle_Right', -1 );
} }
@ -3129,7 +3183,8 @@ sub getMonitoredDevs {
sub getOutTemp { sub getOutTemp {
my $self = shift; my $self = shift;
return ReadingsVal( $ascDev->_getTempSensor, $ascDev->getTempReading, -100 ); return ReadingsVal( $ascDev->_getTempSensor, $ascDev->getTempReading,
-100 );
} }
sub getResidentsStatus { sub getResidentsStatus {
@ -3155,9 +3210,11 @@ sub getSelfDefense {
sub getAzimuth { sub getAzimuth {
my $self = shift; my $self = shift;
my $azimuth; my $azimuth;
$azimuth = ReadingsVal( $ascDev->_getTwilightDevice, 'azimuth', -1 ) if ( $defs{$ascDev->_getTwilightDevice}->{TYPE} eq 'Twilight' ); $azimuth = ReadingsVal( $ascDev->_getTwilightDevice, 'azimuth', -1 )
$azimuth = ReadingsVal( $ascDev->_getTwilightDevice, 'SunAz', -1 ) if ( $defs{$ascDev->_getTwilightDevice}->{TYPE} eq 'Astro' ); if ( $defs{ $ascDev->_getTwilightDevice }->{TYPE} eq 'Twilight' );
$azimuth = ReadingsVal( $ascDev->_getTwilightDevice, 'SunAz', -1 )
if ( $defs{ $ascDev->_getTwilightDevice }->{TYPE} eq 'Astro' );
return $azimuth; return $azimuth;
} }
@ -3165,9 +3222,11 @@ sub getAzimuth {
sub getElevation { sub getElevation {
my $self = shift; my $self = shift;
my $elevation; my $elevation;
$elevation = ReadingsVal( $ascDev->_getTwilightDevice, 'elevation', -1 ) if ( $defs{$ascDev->_getTwilightDevice}->{TYPE} eq 'Twilight' ); $elevation = ReadingsVal( $ascDev->_getTwilightDevice, 'elevation', -1 )
$elevation = ReadingsVal( $ascDev->_getTwilightDevice, 'SunAlt', -1 ) if ( $defs{$ascDev->_getTwilightDevice}->{TYPE} eq 'Astro' ); if ( $defs{ $ascDev->_getTwilightDevice }->{TYPE} eq 'Twilight' );
$elevation = ReadingsVal( $ascDev->_getTwilightDevice, 'SunAlt', -1 )
if ( $defs{ $ascDev->_getTwilightDevice }->{TYPE} eq 'Astro' );
return $elevation; return $elevation;
} }
@ -3214,8 +3273,8 @@ sub getBrightnessMaxVal {
} }
sub _getTwilightDevice { sub _getTwilightDevice {
my $self = shift; my $self = shift;
my $name = $self->{name}; my $name = $self->{name};
return AttrVal( $name, 'ASC_twilightDevice', 'none' ); return AttrVal( $name, 'ASC_twilightDevice', 'none' );
} }