add ASC device attribut ASC_slatDriveCmdInverse
This commit is contained in:
		| @@ -350,6 +350,7 @@ sub Initialize { | ||||
|       . 'ASC_expert:1 ' | ||||
|       . 'ASC_blockAscDrivesAfterManual:0,1 ' | ||||
|       . 'ASC_debug:1 ' | ||||
|       . 'ASC_slatDriveCmdInverse:0,1 ' | ||||
|       . $readingFnAttributes; | ||||
|     $hash->{NotifyOrderPrefix} = '51-';    # Order Nummer für NotifyFn | ||||
|     $hash->{FW_detailFn} = \&ShuttersInformation; | ||||
| @@ -1203,11 +1204,14 @@ sub EventProcessingWindowRec { | ||||
|             elsif ( | ||||
|                    $shutters->getModeDown ne 'absent' | ||||
|                 && $shutters->getModeDown ne 'off' | ||||
|                 && (  (    !$shutters->getIsDay | ||||
|                 && ( | ||||
|                     ( | ||||
|                           !$shutters->getIsDay | ||||
|                         && $shutters->getModeDown ne 'roommate' | ||||
|                     ) | ||||
|                     || $homemode eq 'asleep' | ||||
|                     || $homemode eq 'gotosleep' ) | ||||
|                     || $homemode eq 'gotosleep' | ||||
|                 ) | ||||
|                 && $ascDev->getAutoShuttersControlEvening eq 'on' | ||||
|               ) | ||||
|             { | ||||
| @@ -1543,11 +1547,9 @@ sub EventProcessingResidents { | ||||
|                 || (   $getModeDown eq 'absent' | ||||
|                     || $getModeDown eq 'always' ) | ||||
|                 || (   $shutters->getShadingMode eq 'absent' | ||||
|                      && $shutters->getRoommatesStatus eq 'none' | ||||
|                    ) | ||||
|                     && $shutters->getRoommatesStatus eq 'none' ) | ||||
|                 || (   $shutters->getShadingMode eq 'home' | ||||
|                      && $shutters->getRoommatesStatus eq 'none' | ||||
|                    ) | ||||
|                     && $shutters->getRoommatesStatus eq 'none' ) | ||||
|               ) | ||||
|             { | ||||
|                 if ( | ||||
| @@ -1570,12 +1572,12 @@ sub EventProcessingResidents { | ||||
|                 elsif ($shutters->getIsDay | ||||
|                     && $shutters->getIfInShading | ||||
|                     && $shutters->getShadingMode eq 'absent' | ||||
|                         && $shutters->getRoommatesStatus eq 'none' | ||||
|                     ) | ||||
|                     && $shutters->getRoommatesStatus eq 'none' ) | ||||
|                 { | ||||
|                     ShadingProcessingDriveCommand( $hash, $shuttersDev ); | ||||
|                 } | ||||
|                 elsif ( $shutters->getShadingMode eq 'home' | ||||
|                 elsif ( | ||||
|                        $shutters->getShadingMode eq 'home' | ||||
|                     && $shutters->getIsDay | ||||
|                     && $shutters->getIfInShading | ||||
|                     && $shutters->getStatus == $shutters->getShadingPos | ||||
| @@ -2288,10 +2290,11 @@ sub EventProcessingShadingBrightness { | ||||
|     my $name = $hash->{NAME}; | ||||
|     $shutters->setShuttersDev($shuttersDev); | ||||
|     my $reading = $shutters->getBrightnessReading; | ||||
|     my $outTemp = | ||||
|       (   $shutters->getOutTemp != -100 | ||||
|     my $outTemp = ( | ||||
|           $shutters->getOutTemp != -100 | ||||
|         ? $shutters->getOutTemp | ||||
|         : $ascDev->getOutTemp ); | ||||
|         : $ascDev->getOutTemp | ||||
|     ); | ||||
|  | ||||
|     Log3( $name, 4, | ||||
|         "AutoShuttersControl ($shuttersDev) - EventProcessingShadingBrightness" | ||||
| @@ -4645,6 +4648,37 @@ sub _SetCmdFn { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if ( $ascDev->getSlatDriveCmdInverse ) { | ||||
|         CommandSet( | ||||
|             undef, | ||||
|             ( | ||||
|                   $shutters->getSlatDevice ne 'none' | ||||
|                 ? $shutters->getSlatDevice | ||||
|                 : $shuttersDev | ||||
|               ) | ||||
|               . ' ' | ||||
|               . $shutters->getSlatPosCmd . ' ' | ||||
|               . $slatPos | ||||
|           ) | ||||
|           if ( $slatPos > -1 | ||||
|             && $shutters->getSlatPosCmd ne 'none' ); | ||||
|  | ||||
|         InternalTimer( | ||||
|             gettimeofday() + 3, | ||||
|             sub() { | ||||
|                 CommandSet( undef, | ||||
|                         $shuttersDev | ||||
|                       . ':FILTER=' | ||||
|                       . $shutters->getPosCmd . '!=' | ||||
|                       . $posValue . ' ' | ||||
|                       . $driveCommand ); | ||||
|             }, | ||||
|             $shuttersDev | ||||
|           ) | ||||
|           if ( $slatPos > -1 | ||||
|             && $shutters->getSlatPosCmd ne 'none' ); | ||||
|     } | ||||
|     else { | ||||
|         CommandSet( undef, | ||||
|                 $shuttersDev | ||||
|               . ':FILTER=' | ||||
| @@ -4668,9 +4702,8 @@ sub _SetCmdFn { | ||||
|                 ); | ||||
|             }, | ||||
|             $shuttersDev | ||||
|       ) | ||||
|       if ( $slatPos > -1 | ||||
|         && $shutters->getSlatPosCmd ne 'none' ); | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     $shutters->setSelfDefenseAbsent( 0, 0 ) | ||||
|       if (!$shutters->getSelfDefenseAbsent | ||||
| @@ -8371,6 +8404,14 @@ sub getFreezeTemp { | ||||
|     return AttrVal( $name, 'ASC_freezeTemp', 3 ); | ||||
| } | ||||
|  | ||||
| sub getSlatDriveCmdInverse { | ||||
|     my $self = shift; | ||||
|  | ||||
|     my $name = $self->{name}; | ||||
|  | ||||
|     return AttrVal( $name, 'ASC_slatDriveCmdInverse', 0 ); | ||||
| } | ||||
|  | ||||
| sub _getTempSensor { | ||||
|     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>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>VentilatePos</td><td>              </td></tr> | ||||
|         <tr><td>VentilatePositionAssignment</td><td>          </td></tr> | ||||
|         <tr><td>VentilatePosAfterDayClosed</td><td>          </td></tr> | ||||
|         <tr><td>ClosedPos</td><td>           </td></tr> | ||||
|         <tr><td>ClosedPositionAssignment</td><td>  </td></tr> | ||||
|         <tr><td>VentilatePos</td><td>Lüften Position</td></tr> | ||||
|         <tr><td>VentilatePositionAssignment</td><td>Lüften Slat-Position</td></tr> | ||||
|         <tr><td>VentilatePosAfterDayClosed</td><td>Position des Rollos beim schließen des Fensters am Tag</td></tr> | ||||
|         <tr><td>ClosedPos</td><td>Position für Rollo ganz geschlossen</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