diff --git a/73_AutoShuttersControl.pm b/73_AutoShuttersControl.pm index 53a4b30..134e257 100644 --- a/73_AutoShuttersControl.pm +++ b/73_AutoShuttersControl.pm @@ -53,6 +53,12 @@ sub ascAPIget { return AutoShuttersControl_ascAPIget( $getCommand, $shutterDev, $value ); } +sub ascAPIset { + my ( $setCommand, $shutterDev, $value ) = @_; + + return AutoShuttersControl_ascAPIset( $setCommand, $shutterDev, $value ); +} + ## unserer packagename package FHEM::AutoShuttersControl; @@ -186,6 +192,7 @@ GP_Export( qw( Initialize ascAPIget + ascAPIset DevStateIcon ) ); @@ -293,6 +300,26 @@ sub ascAPIget { else { return $ascDev->$getter; } + + return; +} + +sub ascAPIset { + my ( $setCommand, $shutterDev, $value ) = @_; + + my $setter = 'set' . $setCommand; + + if ( defined($shutterDev) + && $shutterDev + && defined($value) + && $value + ) + { + $shutters->setShuttersDev($shutterDev); + $shutters->$setter($value); + } + + return; } sub Initialize { @@ -333,8 +360,8 @@ sub Initialize { } sub Define { - my $hash = shift; - my $a = shift; + my $hash = shift // return; + my $aArg = shift // return; return $@ unless ( FHEM::Meta::SetInternals($hash) ); use version 0.60; our $VERSION = FHEM::Meta::Get( $hash, 'version' ); @@ -343,9 +370,9 @@ sub Define { if ( devspec2array('TYPE=AutoShuttersControl') > 1 ) ; # es wird geprüft ob bereits eine Instanz unseres Modules existiert,wenn ja wird abgebrochen return 'too few parameters: define ShuttersControl' - if ( scalar( @{$a} ) != 2 ); + if ( scalar( @{$aArg} ) != 2 ); - my $name = shift @$a; + my $name = shift @$aArg; $hash->{MID} = 'da39a3ee5e6b4b0d3255bfef95601890afd80709' ; # eine Ein Eindeutige ID für interne FHEM Belange / nicht weiter wichtig $hash->{VERSION} = version->parse($VERSION)->normal; @@ -394,8 +421,8 @@ sub Undef { } sub Notify { - my $hash = shift; - my $dev = shift; + my $hash = shift // return; + my $dev = shift // return; my $name = $hash->{NAME}; my $devname = $dev->{NAME}; @@ -629,52 +656,52 @@ m{^(DELETEATTR|ATTR) #global ATTR myASC ASC_tempSensor Cellar } sub Set { - my $hash = shift; - my $a = shift; + my $hash = shift // return; + my $aArg = shift // return; - my $name = shift @$a; - my $cmd = shift @$a // return qq{"set $name" needs at least one argument}; + my $name = shift @$aArg; + my $cmd = shift @$aArg // return qq{"set $name" needs at least one argument}; if ( lc $cmd eq 'renewalltimer' ) { - return "usage: $cmd" if ( scalar( @{$a} ) != 0 ); + return "usage: $cmd" if ( scalar( @{$aArg} ) != 0 ); RenewSunRiseSetShuttersTimer($hash); } elsif ( lc $cmd eq 'renewtimer' ) { - return "usage: $cmd" if ( scalar( @{$a} ) > 1 ); - CreateSunRiseSetShuttersTimer( $hash, $a->[0] ); + return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); + CreateSunRiseSetShuttersTimer( $hash, $aArg->[0] ); } elsif ( lc $cmd eq 'scanforshutters' ) { - return "usage: $cmd" if ( scalar( @{$a} ) != 0 ); + return "usage: $cmd" if ( scalar( @{$aArg} ) != 0 ); ShuttersDeviceScan($hash); } elsif ( lc $cmd eq 'createnewnotifydev' ) { - return "usage: $cmd" if ( scalar( @{$a} ) != 0 ); + return "usage: $cmd" if ( scalar( @{$aArg} ) != 0 ); CreateNewNotifyDev($hash); } elsif ( lc $cmd eq 'partymode' ) { - return "usage: $cmd" if ( scalar( @{$a} ) > 1 ); - readingsSingleUpdate( $hash, $cmd, $a->[0], 1 ) - if ( $a->[0] ne ReadingsVal( $name, 'partyMode', 0 ) ); + return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); + readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ) + if ( $aArg->[0] ne ReadingsVal( $name, 'partyMode', 0 ) ); } elsif ( lc $cmd eq 'hardlockout' ) { - return "usage: $cmd" if ( scalar( @{$a} ) > 1 ); - readingsSingleUpdate( $hash, $cmd, $a->[0], 1 ); - HardewareBlockForShutters( $hash, $a->[0] ); + return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); + readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ); + HardewareBlockForShutters( $hash, $aArg->[0] ); } elsif ( lc $cmd eq 'sunrisetimeweholiday' ) { - return "usage: $cmd" if ( scalar( @{$a} ) > 1 ); - readingsSingleUpdate( $hash, $cmd, $a->[0], 1 ); + return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); + readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ); } elsif ( lc $cmd eq 'controlshading' ) { - return "usage: $cmd" if ( scalar( @{$a} ) > 1 ); + return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); my $response = _CheckASC_ConditionsForShadingFn($hash); readingsSingleUpdate( $hash, $cmd, ( - $a->[0] eq 'off' ? $a->[0] + $aArg->[0] eq 'off' ? $aArg->[0] : ( - $response eq 'none' ? $a->[0] + $response eq 'none' ? $aArg->[0] : $response ) ), @@ -682,24 +709,24 @@ sub Set { ); } elsif ( lc $cmd eq 'selfdefense' ) { - return "usage: $cmd" if ( scalar( @{$a} ) > 1 ); - readingsSingleUpdate( $hash, $cmd, $a->[0], 1 ); + return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); + readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ); } elsif ( lc $cmd eq 'ascenable' ) { - return "usage: $cmd" if ( scalar( @{$a} ) > 1 ); - readingsSingleUpdate( $hash, $cmd, $a->[0], 1 ); + return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); + readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ); } elsif ( lc $cmd eq 'advdrivedown' ) { - return "usage: $cmd" if ( scalar( @{$a} ) != 0 ); + return "usage: $cmd" if ( scalar( @{$aArg} ) != 0 ); EventProcessingAdvShuttersClose($hash); } elsif ( lc $cmd eq 'shutterascenabletoggle' ) { - return "usage: $cmd" if ( scalar( @{$a} ) > 1 ); + return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); readingsSingleUpdate( - $defs{ $a->[0] }, + $defs{ $aArg->[0] }, 'ASC_Enable', ( - ReadingsVal( $a->[0], 'ASC_Enable', 'off' ) eq 'on' + ReadingsVal( $aArg->[0], 'ASC_Enable', 'off' ) eq 'on' ? 'off' : 'on' ), @@ -707,9 +734,9 @@ sub Set { ); } elsif ( lc $cmd eq 'wiggle' ) { - return "usage: $cmd" if ( scalar( @{$a} ) > 1 ); + return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); - ( $a->[0] eq 'all' ? wiggleAll($hash) : wiggle( $hash, $a->[0] ) ); + ( $aArg->[0] eq 'all' ? wiggleAll($hash) : wiggle( $hash, $aArg->[0] ) ); } else { my $list = 'scanForShutters:noArg'; @@ -733,14 +760,14 @@ sub Set { } sub Get { - my $hash = shift; - my $a = shift; + my $hash = shift // return; + my $aArg = shift // return; - my $name = shift @$a; - my $cmd = shift @$a // return qq{"set $name" needs at least one argument}; + my $name = shift @$aArg // return; + my $cmd = shift @$aArg // return qq{"get $name" needs at least one argument}; if ( lc $cmd eq 'shownotifydevsinformations' ) { - return "usage: $cmd" if ( scalar( @{$a} ) != 0 ); + return "usage: $cmd" if ( scalar( @{$aArg} ) != 0 ); my $ret = GetMonitoredDevs($hash); return $ret; } @@ -1696,7 +1723,7 @@ sub RainProtection { $shutters->setDriveCmd($closedPos); $shutters->setRainProtectionStatus('protected'); } - elsif (( $val == 0 || $val < $triggerMax ) + elsif (( $val == 0 || $val < $shutters->getWindMin ) && $shutters->getStatus == $closedPos && IsAfterShuttersManualBlocking($shuttersDev) && $shutters->getRainProtectionStatus eq 'protected' ) @@ -5585,7 +5612,7 @@ sub setShadingLastStatus { sub setShadingManualDriveStatus { my $self = shift; - my $value = shift; ### Werte für value = in, out + my $value = shift; ### Werte für value = 0, 1 $self->{ $self->{shuttersDev} }{ShadingManualDriveStatus}{VAL} = $value if ( defined($value) ); @@ -5775,10 +5802,26 @@ BEGIN { GP_Import( qw( AttrVal + CommandAttr gettimeofday) ); } +sub _setAttributs { + my $shuttersDev = shift; + my $attr = shift; + my $attrVal = shift; + + CommandAttr(undef,$shuttersDev + . ' ' + . $attr + . ' ' + . $attrVal + ); + + return; +} + sub _getPosition { my $self = shift; @@ -5885,6 +5928,15 @@ sub _getPositionAssignment { return ( $self->{ $self->{shuttersDev} }->{$attr}->{posAssignment} ); } +sub setAntiFreezePos { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Antifreeze_Pos',$attrVal); + + return; +} + sub getAntiFreezePos { my $self = shift; @@ -5900,12 +5952,30 @@ sub getAntiFreezePosAssignment { 'getAntiFreezePos' ); } +sub setShuttersPlace { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_ShuttersPlace',$attrVal); + + return; +} + sub getShuttersPlace { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_ShuttersPlace', 'window' ); } +sub setSlatPosCmd { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_SlatPosCmd_SlatDevice',$attrVal); + + return; +} + sub getSlatPosCmd { my $self = shift; @@ -5959,6 +6029,15 @@ sub getSlatDevice { ); } +sub setPrivacyUpTime { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_PrivacyUpValue_beforeDayOpen',$attrVal); + + return; +} + sub getPrivacyUpTime { my $self = shift; @@ -6024,6 +6103,15 @@ sub getPrivacyUpBrightnessVal { ); } +sub setPrivacyDownTime { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_PrivacyDownValue_beforeNightClose',$attrVal); + + return; +} + sub getPrivacyDownTime { my $self = shift; @@ -6089,6 +6177,15 @@ sub getPrivacyDownBrightnessVal { ); } +sub setPrivacyUpPos { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_PrivacyUp_Pos',$attrVal); + + return; +} + sub getPrivacyUpPos { my $self = shift; @@ -6102,6 +6199,15 @@ sub getPrivacyUpPositionAssignment { 'getPrivacyUpPos' ); } +sub setPrivacyDownPos { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_PrivacyDown_Pos',$attrVal); + + return; +} + sub getPrivacyDownPos { my $self = shift; @@ -6116,24 +6222,60 @@ sub getPrivacyDownPositionAssignment { 'getPrivacyDownPos' ); } +sub setSelfDefenseMode { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Self_Defense_Mode',$attrVal); + + return; +} + sub getSelfDefenseMode { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_Mode', 'gone' ); } +sub setSelfDefenseAbsentDelay { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Self_Defense_AbsentDelay',$attrVal); + + return; +} + sub getSelfDefenseAbsentDelay { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_Self_Defense_AbsentDelay', 300 ); } +sub setWiggleValue { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_WiggleValue',$attrVal); + + return; +} + sub getWiggleValue { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_WiggleValue', 5 ); } +sub setAdv { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Adv',$attrVal); + + return; +} + sub getAdv { my $self = shift; @@ -6145,6 +6287,15 @@ sub getAdv { } ### Begin Beschattung +sub setShadingPos { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Shading_Pos',$attrVal); + + return; +} + sub getShadingPos { my $self = shift; @@ -6159,6 +6310,15 @@ sub getShadingPositionAssignment { 'getShadingPos' ); } +sub setShadingMode { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Shading_Mode',$attrVal); + + return; +} + sub getShadingMode { my $self = shift; @@ -6213,6 +6373,15 @@ sub getTempSensorReading { ); } +sub setIdleDetectionReading { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Shutter_IdleDetection',$attrVal); + + return; +} + sub _getIdleDetectionReading { my $self = shift; @@ -6269,6 +6438,15 @@ sub getIdleDetectionValue { ); } +sub setBrightnessSensor { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_BrightnessSensor',$attrVal); + + return; +} + sub _getBrightnessSensor { my $self = shift; @@ -6345,6 +6523,15 @@ sub getShadingAzimuthLeft { ->{leftVal}; } +sub setShadingInOutAzimuth { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Shading_InOutAzimuth',$attrVal); + + return; +} + sub getShadingAzimuthRight { my $self = shift; @@ -6377,6 +6564,15 @@ sub getShadingAzimuthRight { ->{rightVal}; } +sub setShadingMinOutsideTemperature { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Shading_Min_OutsideTemperature',$attrVal); + + return; +} + sub getShadingMinOutsideTemperature { my $self = shift; @@ -6384,6 +6580,15 @@ sub getShadingMinOutsideTemperature { 18 ); } +sub setShadingMinMaxElevation { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Shading_MinMax_Elevation',$attrVal); + + return; +} + sub getShadingMinElevation { my $self = shift; @@ -6436,6 +6641,15 @@ sub getShadingMaxElevation { ->{maxVal}; } +sub setShadingStateChangeSunnyCloudy { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Shading_StateChange_SunnyCloudy',$attrVal); + + return; +} + sub getShadingStateChangeSunny { my $self = shift; @@ -6515,12 +6729,29 @@ sub getMaxBrightnessAverageArrayObjects { ->{MAXOBJECT}; } +sub setShadingWaitingPeriod { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Shading_WaitingPeriod',$attrVal); + + return; +} + sub getShadingWaitingPeriod { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_Shading_WaitingPeriod', 1200 ); } ### Ende Beschattung +sub setExternalTrigger { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_ExternalTrigger',$attrVal); + + return; +} sub getExternalTriggerDevice { my $self = shift; @@ -6712,6 +6943,15 @@ sub getExternalTriggerState { ); } +sub setDelay { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Drive_Delay',$attrVal); + + return; +} + sub getDelay { my $self = shift; @@ -6719,6 +6959,15 @@ sub getDelay { return ( $val =~ m{^\d+$}xms ? $val : -1 ); } +sub setDelayStart { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Drive_DelayStart',$attrVal); + + return; +} + sub getDelayStart { my $self = shift; @@ -6726,6 +6975,15 @@ sub getDelayStart { return ( ( $val > 0 && $val =~ m{^\d+$}xms ) ? $val : -1 ); } +sub setBlockingTimeAfterManual { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_BlockingTime_afterManual',$attrVal); + + return; +} + sub getBlockingTimeAfterManual { my $self = shift; @@ -6733,6 +6991,15 @@ sub getBlockingTimeAfterManual { 1200 ); } +sub setBlockingTimeBeforNightClose { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_BlockingTime_beforNightClose',$attrVal); + + return; +} + sub getBlockingTimeBeforNightClose { my $self = shift; @@ -6740,6 +7007,15 @@ sub getBlockingTimeBeforNightClose { 3600 ); } +sub setBlockingTimeBeforDayOpen { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_BlockingTime_beforDayOpen',$attrVal); + + return; +} + sub getBlockingTimeBeforDayOpen { my $self = shift; @@ -6747,6 +7023,15 @@ sub getBlockingTimeBeforDayOpen { 3600 ); } +sub setPosCmd { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Pos_Reading',$attrVal); + + return; +} + sub getPosCmd { my $self = shift; @@ -6755,6 +7040,15 @@ sub getPosCmd { [ AttrVal( $self->{shuttersDev}, 'ASC', 1 ) ] ); } +sub setOpenPos { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Open_Pos',$attrVal); + + return; +} + sub getOpenPos { my $self = shift; @@ -6768,6 +7062,15 @@ sub getOpenPositionAssignment { return $shutters->_getPositionAssignment( 'ASC_Open_Pos', 'getOpenPos' ); } +sub setVentilatePos { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Ventilate_Pos',$attrVal); + + return; +} + sub getVentilatePos { my $self = shift; @@ -6782,6 +7085,15 @@ sub getVentilatePositionAssignment { 'getVentilatePos' ); } +sub setVentilatePosAfterDayClosed { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_WindowRec_PosAfterDayClosed',$attrVal); + + return; +} + sub getVentilatePosAfterDayClosed { my $self = shift; @@ -6789,6 +7101,15 @@ sub getVentilatePosAfterDayClosed { 'open' ); } +sub setClosedPos { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Closed_Pos',$attrVal); + + return; +} + sub getClosedPos { my $self = shift; @@ -6803,6 +7124,15 @@ sub getClosedPositionAssignment { 'getClosedPos' ); } +sub setSleepPos { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Sleep_Pos',$attrVal); + + return; +} + sub getSleepPos { my $self = shift; @@ -6816,12 +7146,30 @@ sub getSleepPositionAssignment { return $shutters->_getPositionAssignment( 'ASC_Sleep_Pos', 'getSleepPos' ); } +sub setVentilateOpen { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Ventilate_Window_Open',$attrVal); + + return; +} + sub getVentilateOpen { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_Ventilate_Window_Open', 'on' ); } +sub setComfortOpenPos { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_ComfortOpen_Pos',$attrVal); + + return; +} + sub getComfortOpenPos { my $self = shift; @@ -6836,18 +7184,45 @@ sub getComfortOpenPositionAssignment { 'getComfortOpenPos' ); } +sub setPartyMode { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Partymode',$attrVal); + + return; +} + sub getPartyMode { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_Partymode', 'off' ); } +sub setRoommates { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Roommate_Device',$attrVal); + + return; +} + sub getRoommates { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_Roommate_Device', 'none' ); } +sub setRoommatesReading { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Roommate_Reading',$attrVal); + + return; +} + sub getRoommatesReading { my $self = shift; @@ -6905,6 +7280,15 @@ sub getWindMax { return $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggermax}; } +sub setWindParameters { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_WindParameters',$attrVal); + + return; +} + sub getWindMin { my $self = shift; @@ -6924,60 +7308,150 @@ sub getWindMin { return $self->{ $self->{shuttersDev} }->{ASC_WindParameters}->{triggerhyst}; } +sub setWindProtection { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_WindProtection',$attrVal); + + return; +} + sub getWindProtection { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_WindProtection', 'off' ); } +sub setRainProtection { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_RainProtection',$attrVal); + + return; +} + sub getRainProtection { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_RainProtection', 'off' ); } +sub setModeUp { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Mode_Up',$attrVal); + + return; +} + sub getModeUp { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_Mode_Up', 'always' ); } +sub setModeDown { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Mode_Down',$attrVal); + + return; +} + sub getModeDown { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_Mode_Down', 'always' ); } +sub setLockOut { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_LockOut',$attrVal); + + return; +} + sub getLockOut { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_LockOut', 'off' ); } +sub setLockOutCmd { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_LockOut_Cmd',$attrVal); + + return; +} + sub getLockOutCmd { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_LockOut_Cmd', 'none' ); } +sub setAntiFreeze { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Antifreeze',$attrVal); + + return; +} + sub getAntiFreeze { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_Antifreeze', 'off' ); } +sub setAutoAstroModeMorning { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_AutoAstroModeMorning',$attrVal); + + return; +} + sub getAutoAstroModeMorning { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeMorning', 'none' ); } +sub setAutoAstroModeEvening { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_AutoAstroModeEvening',$attrVal); + + return; +} + sub getAutoAstroModeEvening { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_AutoAstroModeEvening', 'none' ); } +sub setAutoAstroModeMorningHorizon { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_AutoAstroModeMorningHorizon',$attrVal); + + return; +} + sub getAutoAstroModeMorningHorizon { my $self = shift; @@ -6985,6 +7459,15 @@ sub getAutoAstroModeMorningHorizon { 0 ); } +sub setAutoAstroModeEveningHorizon { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_AutoAstroModeEveningHorizon',$attrVal); + + return; +} + sub getAutoAstroModeEveningHorizon { my $self = shift; @@ -6992,18 +7475,45 @@ sub getAutoAstroModeEveningHorizon { 0 ); } +sub setUp { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Up',$attrVal); + + return; +} + sub getUp { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_Up', 'astro' ); } +sub setDown { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Down',$attrVal); + + return; +} + sub getDown { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_Down', 'astro' ); } +sub setTimeUpEarly { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Time_Up_Early',$attrVal); + + return; +} + sub getTimeUpEarly { my $self = shift; @@ -7020,6 +7530,15 @@ sub getTimeUpEarly { ); } +sub setTimeUpLate { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Time_Up_Late',$attrVal); + + return; +} + sub getTimeUpLate { my $self = shift; @@ -7036,6 +7555,15 @@ sub getTimeUpLate { ); } +sub setTimeDownEarly { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Time_Down_Early',$attrVal); + + return; +} + sub getTimeDownEarly { my $self = shift; @@ -7052,6 +7580,15 @@ sub getTimeDownEarly { ); } +sub setTimeDownLate { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Time_Down_Late',$attrVal); + + return; +} + sub getTimeDownLate { my $self = shift; @@ -7068,6 +7605,15 @@ sub getTimeDownLate { ); } +sub setTimeUpWeHoliday { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_Time_Up_WE_Holiday',$attrVal); + + return; +} + sub getTimeUpWeHoliday { my $self = shift; @@ -7123,6 +7669,15 @@ sub getBrightnessMaxVal { ->{triggermax}; } +sub setDriveUpMaxDuration { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_DriveUpMaxDuration',$attrVal); + + return; +} + sub getDriveUpMaxDuration { my $self = shift; @@ -7206,12 +7761,30 @@ BEGIN { ); } +sub setSubTyp { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_WindowRec_subType',$attrVal); + + return; +} + sub getSubTyp { my $self = shift; return AttrVal( $self->{shuttersDev}, 'ASC_WindowRec_subType', 'twostate' ); } +sub setWinDev { + my $self = shift; + my $attrVal = shift; + + _setAttributs($self->{shuttersDev},'ASC_WindowRec',$attrVal); + + return; +} + sub _getWinDev { my $self = shift; @@ -8387,7 +8960,7 @@ sub getBlockAscDrivesAfterManual { outdoor brightness, depending also on other sensor values. Defaults to 20000.
  • ASC_Shading_StateChange_SunnyCloudy - Shading starts/stops at this - outdoor brightness, depending also on other sensor values. A optional parameter set the maximal object in brightness average array. Defaults to 35000:20000 [3]. + outdoor brightness, depending also on other sensor values. An optional parameter specifies how many successive brightness reading values should be used to average the brightness value. Defaults to 35000:20000 [3].
  • ASC_Shading_WaitingPeriod - Waiting time in seconds before additional sensor values to ASC_Shading_StateChange_Sunny or ASC_Shading_StateChange_Cloudy @@ -8749,7 +9322,7 @@ sub getBlockAscDrivesAfterManual {
  • ASC_Shading_Min_OutsideTemperature - ab welcher Temperatur soll Beschattet werden, immer in Abhängigkeit der anderen einbezogenen Sensorwerte (default: 18)
  • ASC_Shading_Mode - absent,always,off,home / wann soll die Beschattung nur stattfinden. (default: off)
  • ASC_Shading_Pos - Position des Rollladens für die Beschattung (Default: ist abhängig vom AttributASC 80/20) !!!Verwendung von Perlcode ist möglich, dieser muss in {} eingeschlossen sein. Rückgabewert muss eine positive Zahl/Dezimalzahl sein!!!
  • -
  • ASC_Shading_StateChange_SunnyCloudy - Brightness Wert ab welchen die Beschattung stattfinden und aufgehoben werden soll, immer in Abhängigkeit der anderen einbezogenen Sensorwerte. Ein optionaler dritter Wert gibt an wie viele Brightnesswerte im Average Array enthalten sein sollen (default: 35000:20000 [3])
  • +
  • ASC_Shading_StateChange_SunnyCloudy - Brightness Wert ab welchen die Beschattung stattfinden und aufgehoben werden soll, immer in Abhängigkeit der anderen einbezogenen Sensorwerte. Ein optionaler dritter Wert gibt an wie, viele Brightnesswerte für den aktuellen Brightness-Durchschnitt berücksichtigt werden. Standard ist 3, es sollte nicht höher wie 5 genommen werden. (default: 35000:20000 [3])
  • ASC_Shading_WaitingPeriod - wie viele Sekunden soll gewartet werden bevor eine weitere Auswertung der Sensordaten für die Beschattung stattfinden soll (default: 1200)
  • ASC_ShuttersPlace - window/terrace - Wenn dieses Attribut auf terrace gesetzt ist, das Residence Device in den Status "gone" geht und SelfDefense aktiv ist (ohne das das Reading selfDefense gesetzt sein muss), wird das Rollo geschlossen (default: window)
  • @@ -8849,7 +9422,7 @@ sub getBlockAscDrivesAfterManual { ], "release_status": "testing", "license": "GPL_2", - "version": "v0.9.15", + "version": "v0.9.16", "author": [ "Marko Oldenburg " ], diff --git a/API_Uebersicht.txt b/API_Uebersicht.txt new file mode 100644 index 0000000..3ec057e --- /dev/null +++ b/API_Uebersicht.txt @@ -0,0 +1,153 @@ +--- In den Rolläden --- +AntiFreezePos +AntiFreezePosAssignment - nur getter +ShuttersPlace +SlatPosCmd +SlatDevice - nur getter +PrivacyUpTime +PrivacyUpBrightnessVal - nur getter +PrivacyDownTime +PrivacyDownBrightnessVal - nur getter +PrivacyDownPos +PrivacyDownPositionAssignment - nur getter +PrivacyUpPos +PrivacyUpPositionAssignment - nur getter +SelfDefenseMode +SelfDefenseAbsentDelay +WiggleValue +Adv +ShadingPos +ShadingPositionAssignment - nur getter +ShadingMode +IdleDetectionReading - nur setter +IdleDetectionValue - nur getter +BrightnessSensor - nur setter +ShadingInOutAzimuth - nur setter +ShadingAzimuthRight - nur getter +ShadingAzimuthLeft - nur getter +ShadingMinOutsideTemperature +ShadingMinMaxElevation - nur setter +getShadingMinElevation - nur getter +getShadingMaxElevation - nur getter +ShadingStateChangeSunnyCloudy - nur setter +ShadingStateChangeSunny - nur getter +ShadingStateChangeCloudy - nur getter +ShadingWaitingPeriod +ExternalTrigger - nur setter +ExternalTriggerDevice - nur getter +ExternalTriggerReading - nur getter +ExternalTriggerValueActive - nur getter +ExternalTriggerValueActive2 - nur getter +ExternalTriggerValueInactive - nur getter +ExternalTriggerPosActive - nur getter +ExternalTriggerPosActive2 - nur getter +ExternalTriggerPosInactive - nur getter +ExternalTriggerState - nur getter +Delay +DelayStart +BlockingTimeAfterManual +BlockingTimeBeforNightClose +BlockingTimeBeforDayOpen +PosCmd - ASC_Pos_Reading +OpenPos +OpenPositionAssignment - nur getter +VentilatePos +VentilatePositionAssignment - nur getter +VentilatePosAfterDayClosed +ClosedPos +ClosedPositionAssignment - nur getter +SleepPos +SleepPositionAssignment - nur getter +VentilateOpen +ComfortOpenPos +ComfortOpenPositionAssignment - nur getter +PartyMode +Roommates +RoommatesReading +RoommatesStatus - nur getter +RoommatesLastStatus - nur getter +WindParameters - nur setter +WindPos - nur getter +WindMax - nur getter +WindMin - nur getter +WindProtection +RainProtection +ModeUp +ModeDown +LockOut +LockOutCmd +AntiFreeze +AutoAstroModeMorning +AutoAstroModeEvening +AutoAstroModeMorningHorizon +AutoAstroModeEveningHorizon +Up +Down +TimeUpEarly +TimeUpLate +TimeDownEarly +TimeDownLate +TimeUpWeHoliday +getBrightnessMinVal - nur getter +BrightnessMaxVal - nur getter +DriveUpMaxDuration +Homemode - nur getter +PrivacyDownStatus - nur getter +PrivacyUpStatus - nur getter +IsDay - nur getter +AntiFreezeStatus - nur getter +SelfDefenseState - nur getter +LastDrive - nur getter +LastPos - nur getter +Sunset - nur getter +Sunrise - nur getter +OutTemp - nur getter +IdleDetection - nur getter +BrightnessAverage - nur getter nur für die Beschattung relevant +ShadingStatus - nur getter +ShadingLastStatus - nur getter +ShadingManualDriveStatus - nur getter +IfInShading - nur getter +WindProtectionStatus - nur getter +RainProtectionStatus - nur getter +Brightness - nur getter +WindStatus - nur getter +Status - nur getter, aktuelle Position des Rollos +DelayCmd - nur getter, Status der Query von ausgesetzten Fahrten wegen PartyMod oder offnen Fenster +ASCenable - nur getter, Status der ASC Steuerung vom Rollo +SubTyp - Fenster SubType +WinDevReading - nur getter, Reading für das Fenster ExternalTriggerDevice +WinDev - nur setter, ASC_WindowRec +WinStatus - nur getter, Fensterstatus + + + + +--- Im ASC Device --- - alles nur getter für das ASC Device +PartyMode - Party Mode Reading +HardLockOut - Hard Lock Out Reading +SunriseTimeWeHoliday - Feiertags und Wochenend Sunrise Zeiten beachten +OutTemp - Wert vom Tempsensor für Aussen +ResidentsStatus - aktueller Staus des Residents Devices +ResidentsLastStatus - vorheriger Staus des Residents Devices +AutoShuttersControlShading - globale Beschattung on/off +SelfDefense - global Self Defense on/off +Azimuth - aktueller Azimutwert vom Twilight Device +Elevation - aktueller Elevationwert vom Twilight Device +ASCenable - globaler ASC Status +ShuttersOffset - globales Drive Delay +BrightnessMinVal - Brightness Wert für Sonnenuntergang +BrightnessMaxVal - Brightness Wert für Sonnenaufgang +AutoAstroModeEvening +AutoAstroModeEveningHorizon +AutoAstroModeMorning +AutoAstroModeMorningHorizon +AutoShuttersControlMorning +AutoShuttersControlEvening +AutoShuttersControlComfort +FreezeTemp +RainTriggerMax +RainTriggerMin +RainSensorShuttersClosedPos +RainWaitingTime +BlockAscDrivesAfterManual