add ASC device attribut ASC_slatDriveCmdInverse
This commit is contained in:
		| @@ -350,6 +350,7 @@ sub Initialize { | |||||||
|       . 'ASC_expert:1 ' |       . 'ASC_expert:1 ' | ||||||
|       . 'ASC_blockAscDrivesAfterManual:0,1 ' |       . 'ASC_blockAscDrivesAfterManual:0,1 ' | ||||||
|       . 'ASC_debug:1 ' |       . 'ASC_debug:1 ' | ||||||
|  |       . 'ASC_slatDriveCmdInverse:0,1 ' | ||||||
|       . $readingFnAttributes; |       . $readingFnAttributes; | ||||||
|     $hash->{NotifyOrderPrefix} = '51-';    # Order Nummer für NotifyFn |     $hash->{NotifyOrderPrefix} = '51-';    # Order Nummer für NotifyFn | ||||||
|     $hash->{FW_detailFn} = \&ShuttersInformation; |     $hash->{FW_detailFn} = \&ShuttersInformation; | ||||||
| @@ -1203,11 +1204,14 @@ sub EventProcessingWindowRec { | |||||||
|             elsif ( |             elsif ( | ||||||
|                    $shutters->getModeDown ne 'absent' |                    $shutters->getModeDown ne 'absent' | ||||||
|                 && $shutters->getModeDown ne 'off' |                 && $shutters->getModeDown ne 'off' | ||||||
|                 && (  (    !$shutters->getIsDay |                 && ( | ||||||
|  |                     ( | ||||||
|  |                           !$shutters->getIsDay | ||||||
|                         && $shutters->getModeDown ne 'roommate' |                         && $shutters->getModeDown ne 'roommate' | ||||||
|                       ) |                     ) | ||||||
|                     || $homemode eq 'asleep' |                     || $homemode eq 'asleep' | ||||||
|                     || $homemode eq 'gotosleep' ) |                     || $homemode eq 'gotosleep' | ||||||
|  |                 ) | ||||||
|                 && $ascDev->getAutoShuttersControlEvening eq 'on' |                 && $ascDev->getAutoShuttersControlEvening eq 'on' | ||||||
|               ) |               ) | ||||||
|             { |             { | ||||||
| @@ -1542,12 +1546,10 @@ sub EventProcessingResidents { | |||||||
|                 && $shutters->getSelfDefenseMode ne 'off' |                 && $shutters->getSelfDefenseMode ne 'off' | ||||||
|                 || (   $getModeDown eq 'absent' |                 || (   $getModeDown eq 'absent' | ||||||
|                     || $getModeDown eq 'always' ) |                     || $getModeDown eq 'always' ) | ||||||
|                 || (    $shutters->getShadingMode eq 'absent' |                 || (   $shutters->getShadingMode eq 'absent' | ||||||
|                      && $shutters->getRoommatesStatus eq 'none' |                     && $shutters->getRoommatesStatus eq 'none' ) | ||||||
|                    ) |                 || (   $shutters->getShadingMode eq 'home' | ||||||
|                 || (    $shutters->getShadingMode eq 'home' |                     && $shutters->getRoommatesStatus eq 'none' ) | ||||||
|                      && $shutters->getRoommatesStatus eq 'none' |  | ||||||
|                    ) |  | ||||||
|               ) |               ) | ||||||
|             { |             { | ||||||
|                 if ( |                 if ( | ||||||
| @@ -1567,24 +1569,24 @@ sub EventProcessingResidents { | |||||||
|                     $shutters->setSelfDefenseState(1); |                     $shutters->setSelfDefenseState(1); | ||||||
|                     $shutters->setDriveCmd( $shutters->getClosedPos ); |                     $shutters->setDriveCmd( $shutters->getClosedPos ); | ||||||
|                 } |                 } | ||||||
|                 elsif (    $shutters->getIsDay |                 elsif ($shutters->getIsDay | ||||||
|                         && $shutters->getIfInShading |                     && $shutters->getIfInShading | ||||||
|                         && $shutters->getShadingMode eq 'absent' |                     && $shutters->getShadingMode eq 'absent' | ||||||
|                         && $shutters->getRoommatesStatus eq 'none' |                     && $shutters->getRoommatesStatus eq 'none' ) | ||||||
|                     ) |  | ||||||
|                 { |                 { | ||||||
|                     ShadingProcessingDriveCommand( $hash, $shuttersDev ); |                     ShadingProcessingDriveCommand( $hash, $shuttersDev ); | ||||||
|                 } |                 } | ||||||
|                 elsif ( $shutters->getShadingMode eq 'home' |                 elsif ( | ||||||
|                         && $shutters->getIsDay |                        $shutters->getShadingMode eq 'home' | ||||||
|                         && $shutters->getIfInShading |                     && $shutters->getIsDay | ||||||
|                         && $shutters->getStatus == $shutters->getShadingPos |                     && $shutters->getIfInShading | ||||||
|                         && $shutters->getRoommatesStatus eq 'none' |                     && $shutters->getStatus == $shutters->getShadingPos | ||||||
|                         && !( |                     && $shutters->getRoommatesStatus eq 'none' | ||||||
|                             CheckIfShuttersWindowRecOpen($shuttersDev) == 2 |                     && !( | ||||||
|                             && $shutters->getShuttersPlace eq 'terrace' |                         CheckIfShuttersWindowRecOpen($shuttersDev) == 2 | ||||||
|                         ) |                         && $shutters->getShuttersPlace eq 'terrace' | ||||||
|                         && !$shutters->getSelfDefenseState |                     ) | ||||||
|  |                     && !$shutters->getSelfDefenseState | ||||||
|                   ) |                   ) | ||||||
|                 { |                 { | ||||||
|                     $shutters->setLastDrive('shading out'); |                     $shutters->setLastDrive('shading out'); | ||||||
| @@ -2288,10 +2290,11 @@ sub EventProcessingShadingBrightness { | |||||||
|     my $name = $hash->{NAME}; |     my $name = $hash->{NAME}; | ||||||
|     $shutters->setShuttersDev($shuttersDev); |     $shutters->setShuttersDev($shuttersDev); | ||||||
|     my $reading = $shutters->getBrightnessReading; |     my $reading = $shutters->getBrightnessReading; | ||||||
|     my $outTemp = |     my $outTemp = ( | ||||||
|       (   $shutters->getOutTemp != -100 |           $shutters->getOutTemp != -100 | ||||||
|         ? $shutters->getOutTemp |         ? $shutters->getOutTemp | ||||||
|         : $ascDev->getOutTemp ); |         : $ascDev->getOutTemp | ||||||
|  |     ); | ||||||
|  |  | ||||||
|     Log3( $name, 4, |     Log3( $name, 4, | ||||||
|         "AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness" |         "AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness" | ||||||
| @@ -4645,32 +4648,62 @@ sub _SetCmdFn { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     CommandSet( undef, |     if ( $ascDev->getSlatDriveCmdInverse ) { | ||||||
|             $shuttersDev |         CommandSet( | ||||||
|           . ':FILTER=' |             undef, | ||||||
|           . $shutters->getPosCmd . '!=' |             ( | ||||||
|           . $posValue . ' ' |                   $shutters->getSlatDevice ne 'none' | ||||||
|           . $driveCommand ); |                 ? $shutters->getSlatDevice | ||||||
|  |                 : $shuttersDev | ||||||
|  |               ) | ||||||
|  |               . ' ' | ||||||
|  |               . $shutters->getSlatPosCmd . ' ' | ||||||
|  |               . $slatPos | ||||||
|  |           ) | ||||||
|  |           if ( $slatPos > -1 | ||||||
|  |             && $shutters->getSlatPosCmd ne 'none' ); | ||||||
|  |  | ||||||
|     InternalTimer( |         InternalTimer( | ||||||
|         gettimeofday() + 3, |             gettimeofday() + 3, | ||||||
|         sub() { |             sub() { | ||||||
|             CommandSet( |                 CommandSet( undef, | ||||||
|                 undef, |                         $shuttersDev | ||||||
|                 ( |                       . ':FILTER=' | ||||||
|                       $shutters->getSlatDevice ne 'none' |                       . $shutters->getPosCmd . '!=' | ||||||
|                     ? $shutters->getSlatDevice |                       . $posValue . ' ' | ||||||
|                     : $shuttersDev |                       . $driveCommand ); | ||||||
|                   ) |             }, | ||||||
|                   . ' ' |             $shuttersDev | ||||||
|                   . $shutters->getSlatPosCmd . ' ' |           ) | ||||||
|                   . $slatPos |           if ( $slatPos > -1 | ||||||
|             ); |             && $shutters->getSlatPosCmd ne 'none' ); | ||||||
|         }, |     } | ||||||
|         $shuttersDev |     else { | ||||||
|       ) |         CommandSet( undef, | ||||||
|       if ( $slatPos > -1 |                 $shuttersDev | ||||||
|         && $shutters->getSlatPosCmd ne 'none' ); |               . ':FILTER=' | ||||||
|  |               . $shutters->getPosCmd . '!=' | ||||||
|  |               . $posValue . ' ' | ||||||
|  |               . $driveCommand ); | ||||||
|  |  | ||||||
|  |         InternalTimer( | ||||||
|  |             gettimeofday() + 3, | ||||||
|  |             sub() { | ||||||
|  |                 CommandSet( | ||||||
|  |                     undef, | ||||||
|  |                     ( | ||||||
|  |                           $shutters->getSlatDevice ne 'none' | ||||||
|  |                         ? $shutters->getSlatDevice | ||||||
|  |                         : $shuttersDev | ||||||
|  |                       ) | ||||||
|  |                       . ' ' | ||||||
|  |                       . $shutters->getSlatPosCmd . ' ' | ||||||
|  |                       . $slatPos | ||||||
|  |                 ); | ||||||
|  |             }, | ||||||
|  |             $shuttersDev | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     $shutters->setSelfDefenseAbsent( 0, 0 ) |     $shutters->setSelfDefenseAbsent( 0, 0 ) | ||||||
|       if (!$shutters->getSelfDefenseAbsent |       if (!$shutters->getSelfDefenseAbsent | ||||||
| @@ -8371,6 +8404,14 @@ sub getFreezeTemp { | |||||||
|     return AttrVal( $name, 'ASC_freezeTemp', 3 ); |     return AttrVal( $name, 'ASC_freezeTemp', 3 ); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | sub getSlatDriveCmdInverse { | ||||||
|  |     my $self = shift; | ||||||
|  |  | ||||||
|  |     my $name = $self->{name}; | ||||||
|  |  | ||||||
|  |     return AttrVal( $name, 'ASC_slatDriveCmdInverse', 0 ); | ||||||
|  | } | ||||||
|  |  | ||||||
| sub _getTempSensor { | sub _getTempSensor { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
| @@ -9507,11 +9548,29 @@ sub getBlockAscDrivesAfterManual { | |||||||
|         <tr><td>PosCmd</td><td>welches Kommando wird zum fahren der Rollos verwendet (pct, position?)</td></tr> |         <tr><td>PosCmd</td><td>welches Kommando wird zum fahren der Rollos verwendet (pct, position?)</td></tr> | ||||||
|         <tr><td>OpenPos</td><td>Position für Rollo ganz auf</td></tr> |         <tr><td>OpenPos</td><td>Position für Rollo ganz auf</td></tr> | ||||||
|         <tr><td>OpenPositionAssignment</td><td>Slat-Position für Rollo ganz auf</td></tr>  |         <tr><td>OpenPositionAssignment</td><td>Slat-Position für Rollo ganz auf</td></tr>  | ||||||
|         <tr><td>VentilatePos</td><td>              </td></tr> |         <tr><td>VentilatePos</td><td>Lüften Position</td></tr> | ||||||
|         <tr><td>VentilatePositionAssignment</td><td>          </td></tr> |         <tr><td>VentilatePositionAssignment</td><td>Lüften Slat-Position</td></tr> | ||||||
|         <tr><td>VentilatePosAfterDayClosed</td><td>          </td></tr> |         <tr><td>VentilatePosAfterDayClosed</td><td>Position des Rollos beim schließen des Fensters am Tag</td></tr> | ||||||
|         <tr><td>ClosedPos</td><td>           </td></tr> |         <tr><td>ClosedPos</td><td>Position für Rollo ganz geschlossen</td></tr> | ||||||
|         <tr><td>ClosedPositionAssignment</td><td>  </td></tr> |         <tr><td>ClosedPositionAssignment</td><td>Slat-Position für Rollo ganz geschlossen</td></tr> | ||||||
|  |         <tr><td>SleepPos</td><td>Position für schlafen</td></tr> | ||||||
|  |         <tr><td>SleepPositionAssignment</td><td>Slat-Position für schlafen</td></tr> | ||||||
|  |         <tr><td>VentilateOpen</td><td>Lüften aktiv?</td></tr> | ||||||
|  |         <tr><td>ComfortOpenPos</td><td>Comfort Position</td></tr> | ||||||
|  |         <tr><td>ComfortOpenPositionAssignment</td><td>Slat-Comfort Position</td></tr> | ||||||
|  |         <tr><td>PartyMode</td><td>Abfrage Party Mode</td></tr> | ||||||
|  |         <tr><td>Roommates</td><td>Abfrage Roommates / Antwort als String</td></tr> | ||||||
|  |         <tr><td>RoommatesReading</td><td>Roommates Reading</td></tr> | ||||||
|  |         <tr><td>RoommatesStatus</td><td>Roommates Status unter Berücksichtigung aller Roommates und dessen Status</td></tr> | ||||||
|  |         <tr><td>RoommatesLastStatus</td><td>Roommates letzter Status unter Berücksichtigung aller Roommates und dessen letzten Status</td></tr> | ||||||
|  |         <tr><td>WindPos</td><td>Rollo Position bei Windtrigger</td></tr> | ||||||
|  |         <tr><td>WindMax</td><td>Wert über dem die Windprotection aktiviert werden soll</td></tr> | ||||||
|  |         <tr><td>WindMin</td><td>Wert unter dem die Windprotection aufgehoben werden soll</td></tr> | ||||||
|  |         <tr><td>WindProtection</td><td>Windprotection soll aktiv sein oder nicht</td></tr> | ||||||
|  |         <tr><td>WindProtectionStatus</td><td>aktueller Status der WindProtection</td></tr> | ||||||
|  |         <tr><td>RainProtection</td><td>Rain Protection soll aktiv sein oder nicht</td></tr> | ||||||
|  |         <tr><td>RainProtectionStatus</td><td>aktueller Staus der Rain Protection</td></tr> | ||||||
|  |          | ||||||
|          |          | ||||||
|          |          | ||||||
|          |          | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user