add setter so enable/disable ASC control global or shutter

This commit is contained in:
Marko Oldenburg 2019-05-17 14:20:57 +02:00
parent e68b156d3d
commit 5928914e21

View File

@ -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 (
not IsWe()
or ( IsWe() or ( IsWe()
and $ascDev->getSunriseTimeWeHoliday eq 'off' ) 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 (
not IsWe()
or ( IsWe() or ( IsWe()
and $ascDev->getSunriseTimeWeHoliday eq 'off' ) 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'
@ -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&auml;chsten zul&auml;ssigen Event ausgef&uuml;hrt wird.</li> <li>..._lastDelayPosValue - letzter abgesetzter Fahrbefehl, welcher beim n&auml;chsten zul&auml;ssigen Event ausgef&uuml;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&auml;den gesendet wurde, wird beim off setzen durch set ASC-Device partyMode off ausgef&uuml;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&auml;den gesendet wurde, wird beim off setzen durch set ASC-Device partyMode off ausgef&uuml;hrt</li>
<li>lockOut - on/off - f&uuml;r das Aktivieren des Aussperrschutzes gem&auml;&szlig; des entsprechenden Attributs ASC_LockOut im jeweiligen Rollladen. (siehe Beschreibung bei den Attributen f&uuml;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&uuml;r das Aktivieren des Aussperrschutzes gem&auml;&szlig; des entsprechenden Attributs ASC_LockOut im jeweiligen Rollladen. (siehe Beschreibung bei den Attributen f&uuml;r die Rollladendevices)</li>
<li>room_... - Auflistung aller Rolll&auml;den, welche in den jeweiligen R&auml;men gefunden wurde,Bsp.: room_Schlafzimmer,Terrasse</li> <li>room_... - Auflistung aller Rolll&auml;den, welche in den jeweiligen R&auml;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&auml;den Devices In den Rolll&auml;den Devices
<ul> <ul>
<li>ASC_Enable - on/off, wird das Rolllo &uuml;ber ASC gesteuert oder nicht</li>
<li>ASC_Time_DriveUp - Sonnenaufgangszeit f&uuml;r das Rollo</li> <li>ASC_Time_DriveUp - Sonnenaufgangszeit f&uuml;r das Rollo</li>
<li>ASC_Time_DriveDown - Sonnenuntergangszeit f&uuml;r das Rollo</li> <li>ASC_Time_DriveDown - Sonnenuntergangszeit f&uuml;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&auml;den die Zeiten f&uuml;r Sunset und Sunrise und setzt die internen Timer neu.</li> <li>renewSetSunriseSunsetTimer - erneuert bei allen Rolll&auml;den die Zeiten f&uuml;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&uuml;r NOTIFYDEV neu an - das Attribut ASC_expert muss 1 sein.</li> <li>createNewNotifyDev - Legt die interne Struktur f&uuml;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&auml;den (f&uuml;r Abschreckungszwecke bei der Alarmierung) um 5%, und nach 1 Minute wieder zur&uuml;ck zur Ursprungsposition</li> <li>wiggle - bewegt einen Rollladen oder alle Rolll&auml;den (f&uuml;r Abschreckungszwecke bei der Alarmierung) um 5%, und nach 1 Minute wieder zur&uuml;ck zur Ursprungsposition</li>
</ul> </ul>
<br><br> <br><br>