diff --git a/fhem/CHANGED b/fhem/CHANGED index 1e83543a7..4058d1d79 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,7 @@ # 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. + - bugfix: 73_AutoShuttersControl: fix litte bugs and change manual drive + detection - feature: 49_SSCam: In detailview are buttons provided to open the camera native setup screen or Synology Surveillance Station and the Synology Surveillance Station online help diff --git a/fhem/FHEM/73_AutoShuttersControl.pm b/fhem/FHEM/73_AutoShuttersControl.pm index 845ad345f..70779ee3c 100644 --- a/fhem/FHEM/73_AutoShuttersControl.pm +++ b/fhem/FHEM/73_AutoShuttersControl.pm @@ -48,22 +48,22 @@ use strict; use warnings; use FHEM::Meta; -my $version = '0.6.15'; +my $version = '0.6.16'; sub AutoShuttersControl_Initialize($) { my ($hash) = @_; -# ### alte Attribute welche entfernt werden -# my $oldAttr = -# 'ASC_temperatureSensor ' -# . 'ASC_temperatureReading ' -# . 'ASC_residentsDevice ' -# . 'ASC_residentsDeviceReading ' -# . 'ASC_rainSensorDevice ' -# . 'ASC_rainSensorReading ' -# . 'ASC_rainSensorShuttersClosedPos:0,10,20,30,40,50,60,70,80,90,100 ' -# . 'ASC_brightnessMinVal ' -# . 'ASC_brightnessMaxVal '; + # ### alte Attribute welche entfernt werden + # my $oldAttr = + # 'ASC_temperatureSensor ' + # . 'ASC_temperatureReading ' + # . 'ASC_residentsDevice ' + # . 'ASC_residentsDeviceReading ' + # . 'ASC_rainSensorDevice ' + # . 'ASC_rainSensorReading ' + # . 'ASC_rainSensorShuttersClosedPos:0,10,20,30,40,50,60,70,80,90,100 ' + # . 'ASC_brightnessMinVal ' + # . 'ASC_brightnessMaxVal '; ## 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 @@ -92,7 +92,8 @@ sub AutoShuttersControl_Initialize($) { . 'ASC_expert:1 ' . 'ASC_blockAscDrivesAfterManual:0,1 ' . 'ASC_debug:1 ' -# . $oldAttr + + # . $oldAttr . $readingFnAttributes; $hash->{NotifyOrderPrefix} = '51-'; # Order Nummer für NotifyFn @@ -675,7 +676,7 @@ sub ShuttersDeviceScan($) { # . AttrVal( $name, 'ASC_brightnessMinVal', 500 ) . ':' # . AttrVal( $name, 'ASC_brightnessMaxVal', 800 ) ) # if ( AttrVal( $name, 'ASC_brightnessMinVal', 'none' ) ne 'none' ); -# +# # CommandDeleteAttr( undef, $name . ' ASC_temperatureSensor' ) # if ( AttrVal( $name, 'ASC_temperatureSensor', 'none' ) ne 'none' ); # CommandDeleteAttr( undef, $name . ' ASC_temperatureReading' ) @@ -916,25 +917,26 @@ sub EventProcessingWindowRec($@) { if ( $match =~ /open/ and $shutters->getShuttersPlace eq 'terrace' ); - my $queryShuttersPosWinRecTilted = ( - $shutters->getShuttersPosCmdValueNegate - ? $shutters->getStatus > $shutters->getVentilatePos - : $shutters->getStatus < $shutters->getVentilatePos - ); - my $queryShuttersPosWinRecComfort = ( - $shutters->getShuttersPosCmdValueNegate - ? $shutters->getStatus > $shutters->getComfortOpenPos - : $shutters->getStatus < $shutters->getComfortOpenPos - ); + # my $queryShuttersPosWinRecTilted = ( + # $shutters->getShuttersPosCmdValueNegate + # ? $shutters->getStatus > $shutters->getVentilatePos + # : $shutters->getStatus < $shutters->getVentilatePos + # ); + # my $queryShuttersPosWinRecComfort = ( + # $shutters->getShuttersPosCmdValueNegate + # ? $shutters->getStatus > $shutters->getComfortOpenPos + # : $shutters->getStatus < $shutters->getComfortOpenPos + # ); ASC_Debug( 'EventProcessingWindowRec: ' . $shutters->getShuttersDev . ' - HOMEMODE: ' . $homemode . ' QueryShuttersPosWinRecTilted:' - . $queryShuttersPosWinRecTilted + . $shutters->getQueryShuttersPos( $shutters->getVentilatePos ) . ' QueryShuttersPosWinRecComfort: ' - . $queryShuttersPosWinRecComfort ); + . $shutters->getQueryShuttersPos( $shutters->getComfortOpenPos ) + ); if ( $match =~ /close/ @@ -993,7 +995,7 @@ sub EventProcessingWindowRec($@) { and $shutters->getSubTyp eq 'twostate' ) ) and $shutters->getVentilateOpen eq 'on' - and $queryShuttersPosWinRecTilted + and $shutters->getQueryShuttersPos( $shutters->getVentilatePos ) ) { $shutters->setLastDrive('ventilate - window open'); @@ -1006,12 +1008,13 @@ sub EventProcessingWindowRec($@) { my $posValue; my $setLastDrive; if ( $ascDev->getAutoShuttersControlComfort eq 'on' - and $queryShuttersPosWinRecComfort ) + and + $shutters->getQueryShuttersPos( $shutters->getComfortOpenPos ) ) { $posValue = $shutters->getComfortOpenPos; $setLastDrive = 'comfort - window open'; } - elsif ( $queryShuttersPosWinRecTilted + elsif ( $shutters->getQueryShuttersPos( $shutters->getVentilatePos ) and $shutters->getVentilateOpen eq 'on' ) { $posValue = $shutters->getVentilatePos; @@ -2197,11 +2200,11 @@ sub ShuttersCommandSet($$$) { my $name = $hash->{NAME}; $shutters->setShuttersDev($shuttersDev); - my $queryShuttersPosValue = ( - $shutters->getShuttersPosCmdValueNegate - ? $shutters->getStatus > $posValue - : $shutters->getStatus < $posValue - ); + # my $queryShuttersPosValue = ( + # $shutters->getShuttersPosCmdValueNegate + # ? $shutters->getStatus > $posValue + # : $shutters->getStatus < $posValue + # ); if ( $posValue != $shutters->getShadingPos @@ -2226,11 +2229,11 @@ sub ShuttersCommandSet($$$) { and ( $shutters->getLockOut eq 'soft' or $shutters->getLockOut eq 'hard' ) and $ascDev->getHardLockOut eq 'on' - and not $queryShuttersPosValue + and not $shutters->getQueryShuttersPos($posValue) ) or ( CheckIfShuttersWindowRecOpen($shuttersDev) == 2 and $shutters->getShuttersPlace eq 'terrace' - and not $queryShuttersPosValue ) + and not $shutters->getQueryShuttersPos($posValue) ) ) ) { @@ -2382,7 +2385,7 @@ sub RenewSunRiseSetShuttersTimer($) { # . AttrVal( $_, 'ASC_BrightnessMinVal', 500 ) . ':' # . AttrVal( $_, 'ASC_BrightnessMaxVal', 700 ) # if ( AttrVal( $_, 'ASC_Brightness_Sensor', 'none' ) ne 'none' ); -# +# # delFromDevAttrList( $_, 'ASC_Brightness_Sensor' ) # ; # temporär muss später gelöscht werden ab Version 0.4.11beta9 # delFromDevAttrList( $_, 'ASC_Brightness_Reading' ) @@ -2462,11 +2465,15 @@ sub SunSetShuttersAfterTimerFn($) { $shutters->setSunrise(0); my $posValue; + if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 0 or $shutters->getVentilateOpen eq 'off' ) { $posValue = $shutters->getClosedPos; } + elsif ( $shutters->getQueryShuttersPos( $shutters->getVentilatePos ) ) { + $posValue = $shutters->getStatus; + } else { $posValue = $shutters->getVentilatePos; } my $homemode = $shutters->getRoommatesStatus; @@ -2482,14 +2489,15 @@ sub SunSetShuttersAfterTimerFn($) { and IsAfterShuttersManualBlocking($shuttersDev) ) { - my $queryShuttersPosPrivacyDown = ( - $shutters->getShuttersPosCmdValueNegate - ? $shutters->getStatus > $shutters->getPrivacyDownPos - : $shutters->getStatus < $shutters->getPrivacyDownPos - ); + # my $queryShuttersPosPrivacyDown = ( + # $shutters->getShuttersPosCmdValueNegate + # ? $shutters->getStatus > $shutters->getPrivacyDownPos + # : $shutters->getStatus < $shutters->getPrivacyDownPos + # ); if ( $funcHash->{privacyMode} == 1 - and not $queryShuttersPosPrivacyDown ) + and + not $shutters->getQueryShuttersPos( $shutters->getPrivacyDownPos ) ) { $shutters->setLastDrive('privacy position'); ShuttersCommandSet( $hash, $shuttersDev, @@ -3705,6 +3713,12 @@ sub setInTimerFuncHash { return 0; } +sub getIsDay { + my $self = shift; + + return FHEM::AutoShuttersControl::IsDay( $self->{shuttersDev} ); +} + sub getFreezeStatus { use POSIX qw(strftime); my $self = shift; @@ -3733,6 +3747,18 @@ sub getShuttersPosCmdValueNegate { return ( $shutters->getOpenPos < $shutters->getClosedPos ? 1 : 0 ); } +sub getQueryShuttersPos +{ # Es wird geschaut ob die aktuelle Position des Rollos unterhalb der Zielposition ist + my ( $self, $posValue ) = + @_; # wenn dem so ist wird 1 zurück gegeben ansonsten 0 + + return ( + $shutters->getShuttersPosCmdValueNegate + ? $shutters->getStatus > $posValue + : $shutters->getStatus < $posValue + ); +} + sub getPosSetCmd { my $self = shift; @@ -5153,29 +5179,35 @@ sub getblockAscDrivesAfterManual { Define
Readings