add ASC_Shading_MinMax_Elevation, fix bug then ASC_autoShuttersControlMarning/Evening set off

This commit is contained in:
Marko Oldenburg 2019-06-10 13:41:46 +02:00
parent 207342fc64
commit 62ca4ead34

View File

@ -48,7 +48,7 @@ use strict;
use warnings; use warnings;
use FHEM::Meta; use FHEM::Meta;
my $version = '0.6.16.3'; my $version = '0.6.16.6';
sub AutoShuttersControl_Initialize($) { sub AutoShuttersControl_Initialize($) {
my ($hash) = @_; my ($hash) = @_;
@ -196,7 +196,7 @@ my %userAttrList = (
'ASC_Shading_Angle_Right' => '-', 'ASC_Shading_Angle_Right' => '-',
'ASC_Shading_StateChange_Sunny' => '-', 'ASC_Shading_StateChange_Sunny' => '-',
'ASC_Shading_StateChange_Cloudy' => '-', 'ASC_Shading_StateChange_Cloudy' => '-',
'ASC_Shading_Min_Elevation' => '-', 'ASC_Shading_MinMax_Elevation' => '-',
'ASC_Shading_Min_OutsideTemperature' => '-', 'ASC_Shading_Min_OutsideTemperature' => '-',
'ASC_Shading_WaitingPeriod' => '-', 'ASC_Shading_WaitingPeriod' => '-',
'ASC_Drive_Offset' => '-', 'ASC_Drive_Offset' => '-',
@ -1951,6 +1951,7 @@ sub ShadingProcessing($@) {
if ( $azimuth < $winPosMin if ( $azimuth < $winPosMin
or $azimuth > $winPosMax or $azimuth > $winPosMax
or $elevation < $shutters->getShadingMinElevation or $elevation < $shutters->getShadingMinElevation
or $elevation > $shutters->getShadingMaxElevation
or $brightness < $shutters->getShadingStateChangeCloudy or $brightness < $shutters->getShadingStateChangeCloudy
or $outTemp < $shutters->getShadingMinOutsideTemperature ) or $outTemp < $shutters->getShadingMinOutsideTemperature )
{ {
@ -1986,6 +1987,7 @@ sub ShadingProcessing($@) {
elsif ( $azimuth > $winPosMin elsif ( $azimuth > $winPosMin
and $azimuth < $winPosMax and $azimuth < $winPosMax
and $elevation > $shutters->getShadingMinElevation and $elevation > $shutters->getShadingMinElevation
and $elevation < $shutters->getShadingMaxElevation
and $brightness > $shutters->getShadingStateChangeSunny and $brightness > $shutters->getShadingStateChangeSunny
and $outTemp > $shutters->getShadingMinOutsideTemperature ) and $outTemp > $shutters->getShadingMinOutsideTemperature )
{ {
@ -2356,11 +2358,9 @@ sub CreateSunRiseSetShuttersTimer($$) {
} }
InternalTimer( $shuttersSunsetUnixtime, InternalTimer( $shuttersSunsetUnixtime,
'FHEM::AutoShuttersControl::SunSetShuttersAfterTimerFn', \%funcHash ) 'FHEM::AutoShuttersControl::SunSetShuttersAfterTimerFn', \%funcHash );
if ( $ascDev->getAutoShuttersControlEvening eq 'on' );
InternalTimer( $shuttersSunriseUnixtime, InternalTimer( $shuttersSunriseUnixtime,
'FHEM::AutoShuttersControl::SunRiseShuttersAfterTimerFn', \%funcHash ) 'FHEM::AutoShuttersControl::SunRiseShuttersAfterTimerFn', \%funcHash );
if ( $ascDev->getAutoShuttersControlMorning eq 'on' );
$ascDev->setStateReading('created new drive timer'); $ascDev->setStateReading('created new drive timer');
} }
@ -2394,7 +2394,12 @@ sub RenewSunRiseSetShuttersTimer($) {
# ; # temporär muss später gelöscht werden ab Version 0.4.11beta9 # ; # temporär muss später gelöscht werden ab Version 0.4.11beta9
# delFromDevAttrList( $_, 'ASC_BrightnessMaxVal' ) # delFromDevAttrList( $_, 'ASC_BrightnessMaxVal' )
# ; # temporär muss später gelöscht werden ab Version 0.4.11beta9 # ; # temporär muss später gelöscht werden ab Version 0.4.11beta9
$attr{$_}{'ASC_Shading_MinMax_Elevation'} =
AttrVal( $_, 'ASC_Shading_Min_Elevation', 'none' )
if ( AttrVal( $_, 'ASC_Shading_Min_Elevation', 'none' ) ne 'none' );
delFromDevAttrList( $_, 'ASC_Shading_Min_Elevation')
; # temporär muss später gelöscht werden ab Version 0.6.17
} }
} }
@ -2479,14 +2484,14 @@ 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 ( if ( $ascDev->getAutoShuttersControlEvening eq 'on'
( and IsAfterShuttersManualBlocking($shuttersDev)
and (
$shutters->getModeDown eq $homemode $shutters->getModeDown eq $homemode
or ( $shutters->getModeDown eq 'absent' or ( $shutters->getModeDown eq 'absent'
and $homemode eq 'gone' ) and $homemode eq 'gone' )
or $shutters->getModeDown eq 'always' or $shutters->getModeDown eq 'always'
) )
and IsAfterShuttersManualBlocking($shuttersDev)
) )
{ {
# my $queryShuttersPosPrivacyDown = ( # my $queryShuttersPosPrivacyDown = (
@ -2525,11 +2530,11 @@ 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 ( if ( $ascDev->getAutoShuttersControlMorning eq 'on'
$shutters->getModeUp eq $homemode and ( $shutters->getModeUp eq $homemode
or ( $shutters->getModeUp eq 'absent' or ( $shutters->getModeUp eq 'absent'
and $homemode eq 'gone' ) and $homemode eq 'gone' )
or $shutters->getModeUp eq 'always' or $shutters->getModeUp eq 'always' )
) )
{ {
if ( if (
@ -2552,6 +2557,7 @@ sub SunRiseShuttersAfterTimerFn($) {
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getOpenPos ); ShuttersCommandSet( $hash, $shuttersDev, $shutters->getOpenPos );
} }
} }
CreateSunRiseSetShuttersTimer( $hash, $shuttersDev ); CreateSunRiseSetShuttersTimer( $hash, $shuttersDev );
} }
@ -4154,7 +4160,47 @@ sub getShadingMinOutsideTemperature {
sub getShadingMinElevation { sub getShadingMinElevation {
my $self = shift; my $self = shift;
return AttrVal( $self->{shuttersDev}, 'ASC_Shading_Min_Elevation', 25.0 ); return $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}->{minVal}
if (
exists(
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
->{LASTGETTIME}
)
and ( gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
->{LASTGETTIME} ) < 2
);
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}->{LASTGETTIME} =
int( gettimeofday() );
my ( $min, $max ) =
FHEM::AutoShuttersControl::GetAttrValues( $self->{shuttersDev},
'ASC_Shading_MinMax_Elevation', '25.0:100.0' );
### erwartetes Ergebnis
# MIN:MAX
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}->{minVal} = $min;
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}->{maxVal} = $max;
return $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}->{minVal};
}
sub getShadingMaxElevation {
my $self = shift;
return $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}->{maxVal}
if (
exists(
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
->{LASTGETTIME}
)
and ( gettimeofday() -
$self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}
->{LASTGETTIME} ) < 2
);
$shutters->getShadingMinElevation;
return $self->{ $self->{shuttersDev} }->{ASC_Shading_MinMax_Elevation}->{maxVal};
} }
sub getShadingStateChangeSunny { sub getShadingStateChangeSunny {
@ -5643,8 +5689,8 @@ sub getblockAscDrivesAfterManual {
points. East is 90 &deg;, South 180 &deg;, West is 270 &deg; and North is 0 &deg;. points. East is 90 &deg;, South 180 &deg;, West is 270 &deg; and North is 0 &deg;.
Defaults to South (180). Defaults to South (180).
</li> </li>
<li><strong>ASC_Shading_Min_Elevation</strong> - Shading starts as this point of sun elevation is <li><strong>ASC_Shading_MinMax_Elevation</strong> - Shading starts as min point of sun elevation is
reached, depending also on other sensor values. Defaults to 25.0. reached and end as max point of sun elevation is reached, depending also on other sensor values. Defaults to 25.0:100.0.
</li> </li>
<li><strong>ASC_Shading_Min_OutsideTemperature</strong> - Shading starts at this outdoor temperature, <li><strong>ASC_Shading_Min_OutsideTemperature</strong> - Shading starts at this outdoor temperature,
depending also on other sensor values. Defaults to 18.0. depending also on other sensor values. Defaults to 18.0.
@ -5978,10 +6024,10 @@ sub getblockAscDrivesAfterManual {
<li><strong>ASC_Pos_Reading</strong> - Name des Readings, welches die Position des Rollladen in Prozent an gibt; wird bei unbekannten Device Typen auch als set Befehl zum fahren verwendet</li> <li><strong>ASC_Pos_Reading</strong> - Name des Readings, welches die Position des Rollladen in Prozent an gibt; wird bei unbekannten Device Typen auch als set Befehl zum fahren verwendet</li>
<li><strong>ASC_PrivacyDownTime_beforNightClose</strong> - wie viele Sekunden vor dem abendlichen schlie&szlig;en soll der Rollladen in die Sichtschutzposition fahren, -1 bedeutet das diese Funktion unbeachtet bleiben soll (default: -1)</li> <li><strong>ASC_PrivacyDownTime_beforNightClose</strong> - wie viele Sekunden vor dem abendlichen schlie&szlig;en soll der Rollladen in die Sichtschutzposition fahren, -1 bedeutet das diese Funktion unbeachtet bleiben soll (default: -1)</li>
<li><strong>ASC_PrivacyDown_Pos</strong> - Position den Rollladens f&uuml;r den Sichtschutz (default: 50)</li> <li><strong>ASC_PrivacyDown_Pos</strong> - Position den Rollladens f&uuml;r den Sichtschutz (default: 50)</li>
<li><strong>ASC_WindProtection - on/off</strong> - soll der Rollladen beim Regenschutz beachtet werden. On=JA, off=NEIN.</li> <li><strong>ASC_WindProtection - on/off</strong> - soll der Rollladen beim Regenschutz beachtet werden. on=JA, off=NEIN.</li>
<li><strong>ASC_Roommate_Device</strong> - mit Komma getrennte Namen des/der Roommate Device/s, welche den/die Bewohner des Raumes vom Rollladen wiedergibt. Es macht nur Sinn in Schlaf- oder Kinderzimmern (default: none)</li> <li><strong>ASC_Roommate_Device</strong> - mit Komma getrennte Namen des/der Roommate Device/s, welche den/die Bewohner des Raumes vom Rollladen wiedergibt. Es macht nur Sinn in Schlaf- oder Kinderzimmern (default: none)</li>
<li><strong>ASC_Roommate_Reading</strong> - das Reading zum Roommate Device, welches den Status wieder gibt (default: state)</li> <li><strong>ASC_Roommate_Reading</strong> - das Reading zum Roommate Device, welches den Status wieder gibt (default: state)</li>
<li><strong>SC_Self_Defense_Exclude - on/off</strong> - bei on Wert wird dieser Rollladen bei aktiven Self Defense und offenen Fenster nicht runter gefahren, wenn Residents absent ist. (default: off)</li></p> <li><strong>ASC_Self_Defense_Exclude - on/off</strong> - bei on Wert wird dieser Rollladen bei aktiven Self Defense und offenen Fenster nicht runter gefahren, wenn Residents absent ist. (default: off)</li></p>
<ul> <ul>
<strong><u>Beschreibung der Beschattungsfunktion</u></strong> <strong><u>Beschreibung der Beschattungsfunktion</u></strong>
</br>Damit die Beschattung Funktion hat, m&uuml;ssen folgende Anforderungen erf&uuml;llt sein. </br>Damit die Beschattung Funktion hat, m&uuml;ssen folgende Anforderungen erf&uuml;llt sein.
@ -5991,7 +6037,7 @@ sub getblockAscDrivesAfterManual {
<li><strong>ASC_Shading_Angle_Left</strong> - Vorlaufwinkel im Bezug zum Fenster, ab wann abgeschattet wird. Beispiel: Fenster 180° - 85° ==> ab Sonnenpos. 95° wird abgeschattet (default: 75)</li> <li><strong>ASC_Shading_Angle_Left</strong> - Vorlaufwinkel im Bezug zum Fenster, ab wann abgeschattet wird. Beispiel: Fenster 180° - 85° ==> ab Sonnenpos. 95° wird abgeschattet (default: 75)</li>
<li><strong>ASC_Shading_Angle_Right</strong> - Nachlaufwinkel im Bezug zum Fenster, bis wann abgeschattet wird. Beispiel: Fenster 180° + 85° ==> bis Sonnenpos. 265° wird abgeschattet (default: 75)</li> <li><strong>ASC_Shading_Angle_Right</strong> - Nachlaufwinkel im Bezug zum Fenster, bis wann abgeschattet wird. Beispiel: Fenster 180° + 85° ==> bis Sonnenpos. 265° wird abgeschattet (default: 75)</li>
<li><strong>ASC_Shading_Direction</strong> - Position in Grad, auf der das Fenster liegt - genau Osten w&auml;re 90, S&uuml;den 180 und Westen 270 (default: 180)</li> <li><strong>ASC_Shading_Direction</strong> - Position in Grad, auf der das Fenster liegt - genau Osten w&auml;re 90, S&uuml;den 180 und Westen 270 (default: 180)</li>
<li><strong>ASC_Shading_Min_Elevation</strong> - ab welcher H&ouml;he des Sonnenstandes soll beschattet werden, immer in Abh&auml;ngigkeit der anderen einbezogenen Sensorwerte (default: 25.0)</li> <li><strong>ASC_Shading_MinMax_Elevation</strong> - ab welcher min H&ouml;he des Sonnenstandes soll beschattet und ab welcher max H&ouml;he wieder beendet werden, immer in Abh&auml;ngigkeit der anderen einbezogenen Sensorwerte (default: 25.0:100.0)</li>
<li><strong>ASC_Shading_Min_OutsideTemperature</strong> - ab welcher Temperatur soll Beschattet werden, immer in Abh&auml;ngigkeit der anderen einbezogenen Sensorwerte (default: 18)</li> <li><strong>ASC_Shading_Min_OutsideTemperature</strong> - ab welcher Temperatur soll Beschattet werden, immer in Abh&auml;ngigkeit der anderen einbezogenen Sensorwerte (default: 18)</li>
<li><strong>ASC_Shading_Mode - absent,always,off,home</strong> / wann soll die Beschattung nur stattfinden. (default: off)</li> <li><strong>ASC_Shading_Mode - absent,always,off,home</strong> / wann soll die Beschattung nur stattfinden. (default: off)</li>
<li><strong>ASC_Shading_Pos</strong> - Position des Rollladens f&uuml;r die Beschattung</li> <li><strong>ASC_Shading_Pos</strong> - Position des Rollladens f&uuml;r die Beschattung</li>