add setter so enable/disable ASC control global or shutter
This commit is contained in:
		| @@ -338,6 +338,8 @@ sub Notify($$) { | |||||||
|           if ( $ascDev->getSelfDefense eq 'none' ); |           if ( $ascDev->getSelfDefense eq 'none' ); | ||||||
|         readingsSingleUpdate( $hash, 'controlShading', 'off', 0 ) |         readingsSingleUpdate( $hash, 'controlShading', 'off', 0 ) | ||||||
|           if ( $ascDev->getAutoShuttersControlShading eq 'none' ); |           if ( $ascDev->getAutoShuttersControlShading eq 'none' ); | ||||||
|  |         readingsSingleUpdate( $hash, 'ascEnable', 'on', 0 ) | ||||||
|  |           if ( $ascDev->getASCenable eq 'none' ); | ||||||
|  |  | ||||||
| # Ist der Event ein globaler und passt zum Rest der Abfrage oben wird nach neuen Rolläden Devices gescannt und eine Liste im Rolladenmodul sortiert nach Raum generiert | # Ist der Event ein globaler und passt zum Rest der Abfrage oben wird nach neuen Rolläden Devices gescannt und eine Liste im Rolladenmodul sortiert nach Raum generiert | ||||||
|         ShuttersDeviceScan($hash) |         ShuttersDeviceScan($hash) | ||||||
| @@ -504,20 +506,41 @@ sub Set($$@) { | |||||||
|         return "usage: $cmd" if ( @args > 1 ); |         return "usage: $cmd" if ( @args > 1 ); | ||||||
|         readingsSingleUpdate( $hash, $cmd, join( ' ', @args ), 1 ); |         readingsSingleUpdate( $hash, $cmd, join( ' ', @args ), 1 ); | ||||||
|     } |     } | ||||||
|  |     elsif ( lc $cmd eq 'ascenable' ) { | ||||||
|  |         return "usage: $cmd" if ( @args > 1 ); | ||||||
|  |         readingsSingleUpdate( $hash, $cmd, join( ' ', @args ), 1 ); | ||||||
|  |     } | ||||||
|  |     elsif ( lc $cmd eq 'shutterascenabletoggle' ) { | ||||||
|  |         return "usage: $cmd" if ( @args > 1 ); | ||||||
|  |         readingsSingleUpdate( | ||||||
|  |             $defs{ $args[0] }, | ||||||
|  |             'ASC_Enable', | ||||||
|  |             ( | ||||||
|  |                 ReadingsVal( $args[0], 'ASC_Enable', 'off' ) eq 'on' | ||||||
|  |                 ? 'off' | ||||||
|  |                 : 'on' | ||||||
|  |             ), | ||||||
|  |             1 | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|     elsif ( lc $cmd eq 'wiggle' ) { |     elsif ( lc $cmd eq 'wiggle' ) { | ||||||
|         return "usage: $cmd" if ( @args > 1 ); |         return "usage: $cmd" if ( @args > 1 ); | ||||||
|  |  | ||||||
|         ( $args[0] eq 'all' ? wiggleAll($hash) : wiggle( $hash, $args[0] ) ); |         ( $args[0] eq 'all' ? wiggleAll($hash) : wiggle( $hash, $args[0] ) ); | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|         my $list = "scanForShutters:noArg"; |         my $list = 'scanForShutters:noArg'; | ||||||
|         $list .= |         $list .= | ||||||
| " renewSetSunriseSunsetTimer:noArg partyMode:on,off hardLockOut:on,off sunriseTimeWeHoliday:on,off controlShading:on,off selfDefense:on,off wiggle:all," | ' renewSetSunriseSunsetTimer:noArg partyMode:on,off hardLockOut:on,off sunriseTimeWeHoliday:on,off controlShading:on,off selfDefense:on,off ascEnable:on,off wiggle:all,' | ||||||
|           . join( ',', @{ $hash->{helper}{shuttersList} } ) |           . join( ',', @{ $hash->{helper}{shuttersList} } ) | ||||||
|           if ( ReadingsVal( $name, 'userAttrList', 'none' ) eq 'rolled out' ); |           if ( ReadingsVal( $name, 'userAttrList', 'none' ) eq 'rolled out' ); | ||||||
|         $list .= " createNewNotifyDev:noArg" |         $list .= ' createNewNotifyDev:noArg' | ||||||
|           if (  ReadingsVal( $name, 'userAttrList', 'none' ) eq 'rolled out' |           if (  ReadingsVal( $name, 'userAttrList', 'none' ) eq 'rolled out' | ||||||
|             and AttrVal( $name, 'ASC_expert', 0 ) == 1 ); |             and AttrVal( $name, 'ASC_expert', 0 ) == 1 ); | ||||||
|  |         $list .= | ||||||
|  |           ' shutterASCenableToggle:' | ||||||
|  |           . join( ',', @{ $hash->{helper}{shuttersList} } ) | ||||||
|  |           if ( ReadingsVal( $name, 'userAttrList', 'none' ) eq 'rolled out' ); | ||||||
|  |  | ||||||
|         return "Unknown argument $cmd,choose one of $list"; |         return "Unknown argument $cmd,choose one of $list"; | ||||||
|     } |     } | ||||||
| @@ -596,6 +619,8 @@ sub ShuttersDeviceScan($) { | |||||||
|         $shutters->setShadingStatus( |         $shutters->setShadingStatus( | ||||||
|             ( $shutters->getStatus != $shutters->getShadingPos ? 'out' : 'in' ) |             ( $shutters->getStatus != $shutters->getShadingPos ? 'out' : 'in' ) | ||||||
|         ); |         ); | ||||||
|  |         readingsSingleUpdate( $defs{$_}, 'ASC_Enable', 'on', 0 ) | ||||||
|  |           if ( ReadingsVal( $_, 'ASC_Enable', 'none' ) eq 'none' ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     ### Temporär und muss später entfernt werden |     ### Temporär und muss später entfernt werden | ||||||
| @@ -1356,10 +1381,12 @@ sub EventProcessingBrightness($@) { | |||||||
|                             computeAlignTime( '24:00', |                             computeAlignTime( '24:00', | ||||||
|                                 $shutters->getTimeUpEarly ) / 86400 |                                 $shutters->getTimeUpEarly ) / 86400 | ||||||
|                         ) |                         ) | ||||||
|                         and ( not IsWe() |                         and ( | ||||||
|                           or (IsWe() |                             not IsWe() | ||||||
|                             and $ascDev->getSunriseTimeWeHoliday eq 'off') |                             or ( IsWe() | ||||||
|                     ) ) |                                 and $ascDev->getSunriseTimeWeHoliday eq 'off' ) | ||||||
|  |                         ) | ||||||
|  |                     ) | ||||||
|                     or ( |                     or ( | ||||||
|                         int( gettimeofday() / 86400 ) != int( |                         int( gettimeofday() / 86400 ) != int( | ||||||
|                             computeAlignTime( '24:00', |                             computeAlignTime( '24:00', | ||||||
| @@ -1435,10 +1462,12 @@ sub EventProcessingBrightness($@) { | |||||||
|                             computeAlignTime( '24:00', |                             computeAlignTime( '24:00', | ||||||
|                                 $shutters->getTimeUpEarly ) / 86400 |                                 $shutters->getTimeUpEarly ) / 86400 | ||||||
|                         ) |                         ) | ||||||
|                         and ( not IsWe() |                         and ( | ||||||
|                           or (IsWe() |                             not IsWe() | ||||||
|                             and $ascDev->getSunriseTimeWeHoliday eq 'off') |                             or ( IsWe() | ||||||
|                     ) ) |                                 and $ascDev->getSunriseTimeWeHoliday eq 'off' ) | ||||||
|  |                         ) | ||||||
|  |                     ) | ||||||
|                     or ( |                     or ( | ||||||
|                         int( gettimeofday() / 86400 ) != int( |                         int( gettimeofday() / 86400 ) != int( | ||||||
|                             computeAlignTime( '24:00', |                             computeAlignTime( '24:00', | ||||||
| @@ -2096,12 +2125,10 @@ sub ShuttersCommandSet($$$) { | |||||||
|                     or $shutters->getComfortOpenPos != $posValue ) |                     or $shutters->getComfortOpenPos != $posValue ) | ||||||
|                 and $shutters->getVentilateOpen eq 'on' |                 and $shutters->getVentilateOpen eq 'on' | ||||||
|             ) |             ) | ||||||
|             or ( |             or (    CheckIfShuttersWindowRecOpen($shuttersDev) == 2 | ||||||
|                     CheckIfShuttersWindowRecOpen($shuttersDev) == 2 |  | ||||||
|                 and $shutters->getSubTyp eq 'threestate' |                 and $shutters->getSubTyp eq 'threestate' | ||||||
|                 and $ascDev->getAutoShuttersControlComfort eq 'on' |                 and $ascDev->getAutoShuttersControlComfort eq 'on' | ||||||
|                 and $shutters->getVentilateOpen eq 'off' |                 and $shutters->getVentilateOpen eq 'off' ) | ||||||
|             ) |  | ||||||
|             or ( |             or ( | ||||||
|                 CheckIfShuttersWindowRecOpen($shuttersDev) == 2 |                 CheckIfShuttersWindowRecOpen($shuttersDev) == 2 | ||||||
|                 and (  $shutters->getLockOut eq 'soft' |                 and (  $shutters->getLockOut eq 'soft' | ||||||
| @@ -2341,7 +2368,7 @@ sub SunSetShuttersAfterTimerFn($) { | |||||||
|  |  | ||||||
|     $shutters->setSunset(1); |     $shutters->setSunset(1); | ||||||
|     $shutters->setSunrise(0); |     $shutters->setSunrise(0); | ||||||
|      |  | ||||||
|     my $posValue; |     my $posValue; | ||||||
|     if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 0 |     if ( CheckIfShuttersWindowRecOpen($shuttersDev) == 0 | ||||||
|         or $shutters->getVentilateOpen eq 'off' ) |         or $shutters->getVentilateOpen eq 'off' ) | ||||||
| @@ -2391,7 +2418,7 @@ sub SunRiseShuttersAfterTimerFn($) { | |||||||
|     my $hash        = $funcHash->{hash}; |     my $hash        = $funcHash->{hash}; | ||||||
|     my $shuttersDev = $funcHash->{shuttersdevice}; |     my $shuttersDev = $funcHash->{shuttersdevice}; | ||||||
|     $shutters->setShuttersDev($shuttersDev); |     $shutters->setShuttersDev($shuttersDev); | ||||||
|      |  | ||||||
|     $shutters->setSunset(0); |     $shutters->setSunset(0); | ||||||
|     $shutters->setSunrise(1); |     $shutters->setSunrise(1); | ||||||
|  |  | ||||||
| @@ -3286,7 +3313,8 @@ sub SetCmdFn($) { | |||||||
|       if ( defined( $h->{lastDrive} ) ); |       if ( defined( $h->{lastDrive} ) ); | ||||||
|  |  | ||||||
|     return |     return | ||||||
|       unless ( $shutters->getASC != 0 ); |       unless ( $shutters->getASCenable eq 'on' | ||||||
|  |         and $ascDev->getASCenable eq 'on' ); | ||||||
|  |  | ||||||
|     if ( $shutters->getStatus != $posValue ) { |     if ( $shutters->getStatus != $posValue ) { | ||||||
|         $shutters->setLastPos( $shutters->getStatus ); |         $shutters->setLastPos( $shutters->getStatus ); | ||||||
| @@ -3857,13 +3885,6 @@ BEGIN { | |||||||
|     ); |     ); | ||||||
| } | } | ||||||
|  |  | ||||||
| sub getASC { |  | ||||||
|     ## Dient der Erkennung des Rolladen, 0 bedeutet soll nicht erkannt werden beim ersten Scan und soll nicht bediehnt werden wenn Events kommen |  | ||||||
|     my $self = shift; |  | ||||||
|  |  | ||||||
|     return AttrVal( $self->{shuttersDev}, 'ASC', 0 ); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| sub getAntiFreezePos { | sub getAntiFreezePos { | ||||||
|     my $self = shift; |     my $self = shift; | ||||||
|  |  | ||||||
| @@ -4391,6 +4412,12 @@ sub getDelayCmd { | |||||||
|     return $self->{ $self->{shuttersDev} }{delayCmd}; |     return $self->{ $self->{shuttersDev} }{delayCmd}; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | sub getASCenable { | ||||||
|  |     my $self = shift; | ||||||
|  |  | ||||||
|  |     return ReadingsVal( $self->{shuttersDev}, 'ASC_Enable', 'on' ); | ||||||
|  | } | ||||||
|  |  | ||||||
| ## Klasse Fenster (Window) und die Subklassen Attr und Readings ## | ## Klasse Fenster (Window) und die Subklassen Attr und Readings ## | ||||||
| package ASC_Window; | package ASC_Window; | ||||||
| our @ISA = qw(ASC_Window::Attr ASC_Window::Readings); | our @ISA = qw(ASC_Window::Attr ASC_Window::Readings); | ||||||
| @@ -4658,6 +4685,13 @@ sub getElevation { | |||||||
|     return $elevation; |     return $elevation; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | sub getASCenable { | ||||||
|  |     my $self = shift; | ||||||
|  |     my $name = $self->{name}; | ||||||
|  |  | ||||||
|  |     return ReadingsVal( $name, 'ascEnable', 'none' ); | ||||||
|  | } | ||||||
|  |  | ||||||
| ## Subklasse Attr ## | ## Subklasse Attr ## | ||||||
| package ASC_Dev::Attr; | package ASC_Dev::Attr; | ||||||
|  |  | ||||||
| @@ -5197,7 +5231,9 @@ sub getblockAscDrivesAfterManual { | |||||||
|       <li>..._lastPosValue - letzte Position des Rollladen</li> |       <li>..._lastPosValue - letzte Position des Rollladen</li> | ||||||
|       <li>..._lastDelayPosValue - letzter abgesetzter Fahrbefehl, welcher beim nächsten zulässigen Event ausgeführt wird.</li> |       <li>..._lastDelayPosValue - letzter abgesetzter Fahrbefehl, welcher beim nächsten zulässigen Event ausgeführt wird.</li> | ||||||
|       <li>partyMode - on/off - aktiviert den globalen Partymodus: Alle Rollladen Devices, welche das Attribut ASC_Partymode auf on gestellt haben, werden nicht mehr gesteuert. Der letzte Schaltbefehl, der durch ein Fensterevent oder Bewohnerstatus an die Rollläden gesendet wurde, wird beim off setzen durch set ASC-Device partyMode off ausgeführt</li> |       <li>partyMode - on/off - aktiviert den globalen Partymodus: Alle Rollladen Devices, welche das Attribut ASC_Partymode auf on gestellt haben, werden nicht mehr gesteuert. Der letzte Schaltbefehl, der durch ein Fensterevent oder Bewohnerstatus an die Rollläden gesendet wurde, wird beim off setzen durch set ASC-Device partyMode off ausgeführt</li> | ||||||
|       <li>lockOut - on/off - für das Aktivieren des Aussperrschutzes gemäß des entsprechenden Attributs ASC_LockOut im jeweiligen Rollladen. (siehe Beschreibung bei den Attributen für die Rollladendevices)</li> |       <li>ascEnable - on/off, globale ASC Steuerung bei den Rolllos aktiv oder inaktiv | ||||||
|  |       <li>controlShading - on/off, globale Beschattungsfunktion aktiv oder inaktiv | ||||||
|  |       <li>hardLockOut - on/off - für das Aktivieren des Aussperrschutzes gemäß des entsprechenden Attributs ASC_LockOut im jeweiligen Rollladen. (siehe Beschreibung bei den Attributen für die Rollladendevices)</li> | ||||||
|       <li>room_... - Auflistung aller Rollläden, welche in den jeweiligen Rämen gefunden wurde,Bsp.: room_Schlafzimmer,Terrasse</li> |       <li>room_... - Auflistung aller Rollläden, welche in den jeweiligen Rämen gefunden wurde,Bsp.: room_Schlafzimmer,Terrasse</li> | ||||||
|       <li>state - Status des Devices: active,enabled,disabled oder Info zur letzten Fahrt</li> |       <li>state - Status des Devices: active,enabled,disabled oder Info zur letzten Fahrt</li> | ||||||
|       <li>sunriseTimeWeHoliday - on/off - wird das Rollladen Device Attribut  ASC_Time_Up_WE_Holiday beachtet oder nicht</li> |       <li>sunriseTimeWeHoliday - on/off - wird das Rollladen Device Attribut  ASC_Time_Up_WE_Holiday beachtet oder nicht</li> | ||||||
| @@ -5205,6 +5241,7 @@ sub getblockAscDrivesAfterManual { | |||||||
|     </ul><br> |     </ul><br> | ||||||
|     In den Rollläden Devices |     In den Rollläden Devices | ||||||
|     <ul> |     <ul> | ||||||
|  |       <li>ASC_Enable - on/off, wird das Rolllo über ASC gesteuert oder nicht</li> | ||||||
|       <li>ASC_Time_DriveUp - Sonnenaufgangszeit für das Rollo</li> |       <li>ASC_Time_DriveUp - Sonnenaufgangszeit für das Rollo</li> | ||||||
|       <li>ASC_Time_DriveDown - Sonnenuntergangszeit für das Rollo</li> |       <li>ASC_Time_DriveDown - Sonnenuntergangszeit für das Rollo</li> | ||||||
|       <li>ASC_ShuttersLastDrive - Grund des letzten Fahrens vom Rollladen</li> |       <li>ASC_ShuttersLastDrive - Grund des letzten Fahrens vom Rollladen</li> | ||||||
| @@ -5214,6 +5251,7 @@ sub getblockAscDrivesAfterManual { | |||||||
|   <a name="AutoShuttersControlSet"></a> |   <a name="AutoShuttersControlSet"></a> | ||||||
|   <b>Set</b> |   <b>Set</b> | ||||||
|   <ul> |   <ul> | ||||||
|  |     <li>ascEnable - on/off, aktivieren oder deaktiveren der globalen ASC Steuerung</li> | ||||||
|     <li>partyMode - on/off - aktiviert den globalen Partymodus. Siehe Reading partyMode</li> |     <li>partyMode - on/off - aktiviert den globalen Partymodus. Siehe Reading partyMode</li> | ||||||
|     <li>lockOut - on/off - aktiviert den globalen Aussperrschutz. Siehe Reading partyMode</li> |     <li>lockOut - on/off - aktiviert den globalen Aussperrschutz. Siehe Reading partyMode</li> | ||||||
|     <li>renewSetSunriseSunsetTimer - erneuert bei allen Rollläden die Zeiten für Sunset und Sunrise und setzt die internen Timer neu.</li> |     <li>renewSetSunriseSunsetTimer - erneuert bei allen Rollläden die Zeiten für Sunset und Sunrise und setzt die internen Timer neu.</li> | ||||||
| @@ -5221,6 +5259,7 @@ sub getblockAscDrivesAfterManual { | |||||||
|     <li>sunriseTimeWeHoliday - on/off - aktiviert/deaktiviert die Beachtung des Rollladen Device Attributes ASC_Time_Up_WE_Holiday</li> |     <li>sunriseTimeWeHoliday - on/off - aktiviert/deaktiviert die Beachtung des Rollladen Device Attributes ASC_Time_Up_WE_Holiday</li> | ||||||
|     <li>createNewNotifyDev - Legt die interne Struktur für NOTIFYDEV neu an - das Attribut ASC_expert muss 1 sein.</li> |     <li>createNewNotifyDev - Legt die interne Struktur für NOTIFYDEV neu an - das Attribut ASC_expert muss 1 sein.</li> | ||||||
|     <li>selfDefense - on/off - aktiviert/deaktiviert den Selbstschutz, wenn das Residents Device absent meldet, selfDefense aktiv ist und ein Fenster im Haus  noch offen steht, wird an diesem Fenster das Rollo runtergefahren</li> |     <li>selfDefense - on/off - aktiviert/deaktiviert den Selbstschutz, wenn das Residents Device absent meldet, selfDefense aktiv ist und ein Fenster im Haus  noch offen steht, wird an diesem Fenster das Rollo runtergefahren</li> | ||||||
|  |     <li>shutterASCenableToggle - on/off, aktivieren oder deaktiveren der ASC Kontrolle beim einzelnen Rolllo</li> | ||||||
|     <li>wiggle - bewegt einen Rollladen oder alle Rollläden (für Abschreckungszwecke bei der Alarmierung) um 5%, und nach 1 Minute wieder zurück zur Ursprungsposition</li> |     <li>wiggle - bewegt einen Rollladen oder alle Rollläden (für Abschreckungszwecke bei der Alarmierung) um 5%, und nach 1 Minute wieder zurück zur Ursprungsposition</li> | ||||||
|   </ul> |   </ul> | ||||||
|   <br><br> |   <br><br> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user