add my Scalar in all loop declaration, more robust for NOTIFYDEV after reboot

This commit is contained in:
Marko Oldenburg 2020-04-21 23:29:12 +02:00
parent 005340a2fa
commit d98e5a903c

View File

@ -774,43 +774,43 @@ sub ShuttersDeviceScan {
return;
}
my $shuttersList = '';
for (@list) {
push( @{ $hash->{helper}{shuttersList} }, $_ )
for my $shuttersDev (@list) {
push( @{ $hash->{helper}{shuttersList} }, $shuttersDev )
; ## einem Hash wird ein Array zugewiesen welches die Liste der erkannten Rollos beinhaltet
$shutters->setShuttersDev($_);
$shutters->setShuttersDev($shuttersDev);
#### Ab hier können temporäre Änderungen der Attribute gesetzt werden
#### Gleichlautende Attribute wo lediglich die Parameter geändert werden sollen müssen hier gelöscht und die Parameter in der Funktion renewSetSunriseSunsetTimer gesetzt werden,
#### vorher empfiehlt es sich die dort vergebenen Parameter aus zu lesen um sie dann hier wieder neu zu setzen. Dazu wird das shutters Objekt um einen Eintrag
#### 'AttrUpdateChanges' erweitert
if ( ReadingsVal( $_, '.ASC_AttrUpdateChanges_' . $hash->{VERSION}, 0 )
if ( ReadingsVal( $shuttersDev, '.ASC_AttrUpdateChanges_' . $hash->{VERSION}, 0 )
== 0 )
{
# $shutters->setAttrUpdateChanges( 'ASC_Up',
# AttrVal( $_, 'ASC_Up', 'none' ) );
# delFromDevAttrList( $_, 'ASC_Up' );
# AttrVal( $shuttersDev, 'ASC_Up', 'none' ) );
# delFromDevAttrList( $shuttersDev, 'ASC_Up' );
# $shutters->setAttrUpdateChanges( 'ASC_Down',
# AttrVal( $_, 'ASC_Down', 'none' ) );
# delFromDevAttrList( $_, 'ASC_Down' );
# AttrVal( $shuttersDev, 'ASC_Down', 'none' ) );
# delFromDevAttrList( $shuttersDev, 'ASC_Down' );
# $shutters->setAttrUpdateChanges( 'ASC_Self_Defense_Mode',
# AttrVal( $_, 'ASC_Self_Defense_Mode', 'none' ) );
# delFromDevAttrList( $_, 'ASC_Self_Defense_Mode' );
# AttrVal( $shuttersDev, 'ASC_Self_Defense_Mode', 'none' ) );
# delFromDevAttrList( $shuttersDev, 'ASC_Self_Defense_Mode' );
# $shutters->setAttrUpdateChanges( 'ASC_Self_Defense_Exclude',
# AttrVal( $_, 'ASC_Self_Defense_Exclude', 'none' ) );
# delFromDevAttrList( $_, 'ASC_Self_Defense_Exclude' );
# AttrVal( $shuttersDev, 'ASC_Self_Defense_Exclude', 'none' ) );
# delFromDevAttrList( $shuttersDev, 'ASC_Self_Defense_Exclude' );
}
####
####
$shuttersList = $shuttersList . ',' . $_;
$shuttersList = $shuttersList . ',' . $shuttersDev;
$shutters->setLastManPos( $shutters->getStatus );
$shutters->setLastPos( $shutters->getStatus );
$shutters->setDelayCmd('none');
$shutters->setNoDelay(0);
$shutters->setSelfDefenseAbsent( 0, 0 );
$shutters->setPosSetCmd( $posSetCmds{ $defs{$_}->{TYPE} } );
$shutters->setPosSetCmd( $posSetCmds{ $defs{$shuttersDev}->{TYPE} } );
$shutters->setShadingStatus(
( $shutters->getStatus != $shutters->getShadingPos ? 'out' : 'in' )
);
@ -819,8 +819,8 @@ sub ShuttersDeviceScan {
# ( $shutters->getStatus != $shutters->getShadingPos ? 'in' : 'out' )
# );
$shutters->setPushBrightnessInArray( $shutters->getBrightness );
readingsSingleUpdate( $defs{$_}, 'ASC_Enable', 'on', 0 )
if ( ReadingsVal( $_, 'ASC_Enable', 'none' ) eq 'none' );
readingsSingleUpdate( $defs{$shuttersDev}, 'ASC_Enable', 'on', 0 )
if ( ReadingsVal( $shuttersDev, 'ASC_Enable', 'none' ) eq 'none' );
if ( $shutters->getIsDay ) {
$shutters->setSunrise(1);
@ -838,8 +838,8 @@ sub ShuttersDeviceScan {
$hash->{monitoredDevs} =
eval { decode_json( $ascDev->getMonitoredDevs ) };
my $notifyDevString = $hash->{NOTIFYDEV};
while ( each %{ $hash->{monitoredDevs} } ) {
$notifyDevString .= ',' . $_;
while ( my $shuttersDev = each %{ $hash->{monitoredDevs} } ) {
$notifyDevString .= ',' . $shuttersDev;
}
$hash->{NOTIFYDEV} = $notifyDevString;
}
@ -858,32 +858,32 @@ sub WriteReadingsShuttersList {
CommandDeleteReading( undef, $name . ' room_.*' );
readingsBeginUpdate($hash);
for ( @{ $hash->{helper}{shuttersList} } ) {
for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
readingsBulkUpdate(
$hash,
'room_' . makeReadingName( AttrVal( $_, 'room', 'unsorted' ) ),
'room_' . makeReadingName( AttrVal( $shuttersDev, 'room', 'unsorted' ) ),
ReadingsVal(
$name,
'room_' . makeReadingName( AttrVal( $_, 'room', 'unsorted' ) ),
'room_' . makeReadingName( AttrVal( $shuttersDev, 'room', 'unsorted' ) ),
''
)
. ','
. $_
. $shuttersDev
)
if (
ReadingsVal(
$name,
'room_' . makeReadingName( AttrVal( $_, 'room', 'unsorted' ) ),
'room_' . makeReadingName( AttrVal( $shuttersDev, 'room', 'unsorted' ) ),
'none'
) ne 'none'
);
readingsBulkUpdate( $hash,
'room_' . makeReadingName( AttrVal( $_, 'room', 'unsorted' ) ), $_ )
'room_' . makeReadingName( AttrVal( $shuttersDev, 'room', 'unsorted' ) ), $shuttersDev )
if (
ReadingsVal(
$name,
'room_' . makeReadingName( AttrVal( $_, 'room', 'unsorted' ) ),
'room_' . makeReadingName( AttrVal( $shuttersDev, 'room', 'unsorted' ) ),
'none'
) eq 'none'
);
@ -901,64 +901,64 @@ sub UserAttributs_Readings_ForShutters {
my $name = $hash->{NAME};
while ( my ( $attrib, $attribValue ) = each %{userAttrList} ) {
for ( @{ $hash->{helper}{shuttersList} } ) {
addToDevAttrList( $_, $attrib )
for my $shuttersDev( @{ $hash->{helper}{shuttersList} } ) {
addToDevAttrList( $shuttersDev, $attrib )
; ## fhem.pl bietet eine Funktion um ein userAttr Attribut zu befüllen. Wir schreiben also in den Attribut userAttr alle unsere Attribute rein. Pro Rolladen immer ein Attribut pro Durchlauf
## Danach werden die Attribute die im userAttr stehen gesetzt und mit default Werten befüllt
## CommandAttr hat nicht funktioniert. Führte zu Problemen
## https://github.com/LeonGaultier/fhem-AutoShuttersControl/commit/e33d3cc7815031b087736c1054b98c57817e7083
if ( $cmd eq 'add' ) {
if ( ref($attribValue) ne 'ARRAY' ) {
$attr{$_}{ ( split( ':', $attrib ) )[0] } = $attribValue
if ( !defined( $attr{$_}{ ( split( ':', $attrib ) )[0] } )
$attr{$shuttersDev}{ ( split( ':', $attrib ) )[0] } = $attribValue
if ( !defined( $attr{$shuttersDev}{ ( split( ':', $attrib ) )[0] } )
&& $attribValue ne '-' );
}
else {
$attr{$_}{ ( split( ':', $attrib ) )[0] } =
$attribValue->[ AttrVal( $_, 'ASC', 2 ) ]
if ( !defined( $attr{$_}{ ( split( ':', $attrib ) )[0] } )
$attr{$shuttersDev}{ ( split( ':', $attrib ) )[0] } =
$attribValue->[ AttrVal( $shuttersDev, 'ASC', 2 ) ]
if ( !defined( $attr{$shuttersDev}{ ( split( ':', $attrib ) )[0] } )
&& $attrib eq 'ASC_Pos_Reading' );
}
### associatedWith damit man sieht das der Rollladen mit einem ASC Device verbunden ist
my $associatedString =
ReadingsVal( $_, 'associatedWith', 'none' );
ReadingsVal( $shuttersDev, 'associatedWith', 'none' );
if ( $associatedString ne 'none' ) {
my %hash;
%hash = map { ( $_ => 1 ) }
split( ',', "$associatedString,$name" );
readingsSingleUpdate( $defs{$_},
readingsSingleUpdate( $defs{$shuttersDev},
'associatedWith', join( ',', sort keys %hash ), 0 );
}
else {
readingsSingleUpdate( $defs{$_},
readingsSingleUpdate( $defs{$shuttersDev},
'associatedWith', $name, 0 );
}
#######################################
}
## Oder das Attribut wird wieder gelöscht.
elsif ( $cmd eq 'del' ) {
$shutters->setShuttersDev($_);
$shutters->setShuttersDev($shuttersDev);
RemoveInternalTimer( $shutters->getInTimerFuncHash );
CommandDeleteReading( undef, $_ . ' .?(ASC)_.*' );
CommandDeleteAttr( undef, $_ . ' ASC' );
delFromDevAttrList( $_, $attrib );
CommandDeleteReading( undef, $shuttersDev . ' .?(ASC)_.*' );
CommandDeleteAttr( undef, $shuttersDev . ' ASC' );
delFromDevAttrList( $shuttersDev, $attrib );
### associatedWith wird wieder entfernt
my $associatedString =
ReadingsVal( $_, 'associatedWith', 'none' );
ReadingsVal( $shuttersDev, 'associatedWith', 'none' );
my %hash;
%hash = map { ( $_ => 1 ) }
grep { " $name " !~ m{ $_ }xms }
grep { " $name " !~ m{ $shuttersDev }xms }
split( ',', "$associatedString,$name" );
if ( keys %hash > 1 ) {
readingsSingleUpdate( $defs{$_},
readingsSingleUpdate( $defs{$shuttersDev},
'associatedWith', join( ',', sort keys %hash ), 0 );
}
else { CommandDeleteReading( undef, $_ . ' associatedWith' ); }
else { CommandDeleteReading( undef, $shuttersDev . ' associatedWith' ); }
###################################
}
}
@ -970,12 +970,12 @@ sub UserAttributs_Readings_ForShutters {
## Fügt dem NOTIFYDEV Hash weitere Devices hinzu
sub AddNotifyDev {
### Beispielaufruf: AddNotifyDev( $hash, $3, $1, $2 ) if ( $3 ne 'none' );
my ( $hash, $dev, $shuttersDev, $shuttersAttr ) = @_;
my ( $hash, $attrVal, $shuttersDev, $shuttersAttr ) = @_;
$dev = ( split( ':', $dev ) )[0];
my ( $key, $value ) = split( ':', ( split( ' ', $dev ) )[0], 2 )
$attrVal = ( split( ':', $attrVal ) )[0];
my ( $key, $value ) = split( ':', ( split( ' ', $attrVal ) )[0], 2 )
; ## Wir versuchen die Device Attribute anders zu setzen. device=DEVICE reading=READING
$dev = $key;
$attrVal = $key;
my $name = $hash->{NAME};
@ -984,13 +984,13 @@ sub AddNotifyDev {
my %hash;
%hash = map { ( $_ => 1 ) }
split( ',', "$notifyDev,$dev" );
split( ',', "$notifyDev,$attrVal" );
$hash->{NOTIFYDEV} = join( ',', sort keys %hash );
my @devs = split( ',', $dev );
for (@devs) {
$hash->{monitoredDevs}{$_}{$shuttersDev} = $shuttersAttr;
my @devs = split( ',', $attrVal );
for my $dev (@devs) {
$hash->{monitoredDevs}{$dev}{$shuttersDev} = $shuttersAttr;
}
readingsSingleUpdate( $hash, '.monitoredDevs',
@ -1011,7 +1011,7 @@ sub DeleteNotifyDev {
for my $notifyDev ( keys( %{$notifyDevs} ) ) {
Log3( $name, 4,
"AutoShuttersControl ($name) - DeleteNotifyDev - NotifyDev: "
. $_ );
. $notifyDev );
delete $hash->{monitoredDevs}{$notifyDev}{$shuttersDev};
if ( !keys %{ $hash->{monitoredDevs}{$notifyDev} } ) {
@ -3037,15 +3037,14 @@ sub CreateSunRiseSetShuttersTimer {
sub RenewSunRiseSetShuttersTimer {
my $hash = shift;
for ( @{ $hash->{helper}{shuttersList} } ) {
my $name = $_;
my $dhash = $defs{$name};
for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
my $dhash = $defs{$shuttersDev};
$shutters->setShuttersDev($name);
$shutters->setShuttersDev($shuttersDev);
RemoveInternalTimer( $shutters->getInTimerFuncHash );
$shutters->setInTimerFuncHash(undef);
CreateSunRiseSetShuttersTimer( $hash, $name );
CreateSunRiseSetShuttersTimer( $hash, $shuttersDev );
#### Temporär angelegt damit die neue Attributs Parameter Syntax verteilt werden kann
#### Gleichlautende Attribute wo lediglich die Parameter geändert werden sollen müssen bereits in der Funktion ShuttersDeviceScan gelöscht werden
@ -3054,28 +3053,28 @@ sub RenewSunRiseSetShuttersTimer {
if (
( int( gettimeofday() ) - $::fhem_started ) < 60
and
ReadingsVal( $name, '.ASC_AttrUpdateChanges_' . $hash->{VERSION},
ReadingsVal( $shuttersDev, '.ASC_AttrUpdateChanges_' . $hash->{VERSION},
0 ) == 0
)
{
# $attr{$name}{'ASC_Up'} = $shutters->getAttrUpdateChanges('ASC_Up')
# $attr{$shuttersDev}{'ASC_Up'} = $shutters->getAttrUpdateChanges('ASC_Up')
# if ( $shutters->getAttrUpdateChanges('ASC_Up') ne 'none' );
# $attr{$name}{'ASC_Down'} =
# $attr{$shuttersDev}{'ASC_Down'} =
# $shutters->getAttrUpdateChanges('ASC_Down')
# if ( $shutters->getAttrUpdateChanges('ASC_Down') ne 'none' );
# $attr{$name}{'ASC_Self_Defense_Mode'} =
# $attr{$shuttersDev}{'ASC_Self_Defense_Mode'} =
# $shutters->getAttrUpdateChanges('ASC_Self_Defense_Mode')
# if ( $shutters->getAttrUpdateChanges('ASC_Self_Defense_Mode') ne
# 'none' );
# $attr{$name}{'ASC_Self_Defense_Mode'} = 'off'
# $attr{$shuttersDev}{'ASC_Self_Defense_Mode'} = 'off'
# if (
# $shutters->getAttrUpdateChanges('ASC_Self_Defense_Exclude') eq
# 'on' );
CommandDeleteReading( undef, $name . ' .ASC_AttrUpdateChanges_.*' )
CommandDeleteReading( undef, $shuttersDev . ' .ASC_AttrUpdateChanges_.*' )
if (
ReadingsVal(
$name, '.ASC_AttrUpdateChanges_' . $hash->{VERSION},
$shuttersDev, '.ASC_AttrUpdateChanges_' . $hash->{VERSION},
'none'
) eq 'none'
);
@ -3084,47 +3083,47 @@ sub RenewSunRiseSetShuttersTimer {
1, 0 );
}
# $attr{$name}{ASC_Drive_Delay} =
# AttrVal( $name, 'ASC_Drive_Offset', 'none' )
# if ( AttrVal( $name, 'ASC_Drive_Offset', 'none' ) ne 'none' );
# delFromDevAttrList( $name, 'ASC_Drive_Offset' );
# $attr{$shuttersDev}{ASC_Drive_Delay} =
# AttrVal( $shuttersDev, 'ASC_Drive_Offset', 'none' )
# if ( AttrVal( $shuttersDev, 'ASC_Drive_Offset', 'none' ) ne 'none' );
# delFromDevAttrList( $shuttersDev, 'ASC_Drive_Offset' );
#
# $attr{$name}{ASC_Drive_DelayStart} =
# AttrVal( $name, 'ASC_Drive_OffsetStart', 'none' )
# if ( AttrVal( $name, 'ASC_Drive_OffsetStart', 'none' ) ne 'none' );
# delFromDevAttrList( $name, 'ASC_Drive_OffsetStart' );
# $attr{$shuttersDev}{ASC_Drive_DelayStart} =
# AttrVal( $shuttersDev, 'ASC_Drive_OffsetStart', 'none' )
# if ( AttrVal( $shuttersDev, 'ASC_Drive_OffsetStart', 'none' ) ne 'none' );
# delFromDevAttrList( $shuttersDev, 'ASC_Drive_OffsetStart' );
#
# $attr{$name}{ASC_Shading_StateChange_SunnyCloudy} =
# AttrVal( $name, 'ASC_Shading_StateChange_Sunny', 'none' ) . ':'
# . AttrVal( $name, 'ASC_Shading_StateChange_Cloudy', 'none' )
# $attr{$shuttersDev}{ASC_Shading_StateChange_SunnyCloudy} =
# AttrVal( $shuttersDev, 'ASC_Shading_StateChange_Sunny', 'none' ) . ':'
# . AttrVal( $shuttersDev, 'ASC_Shading_StateChange_Cloudy', 'none' )
# if (
# AttrVal( $name, 'ASC_Shading_StateChange_Sunny', 'none' ) ne 'none'
# && AttrVal( $name, 'ASC_Shading_StateChange_Cloudy', 'none' ) ne
# AttrVal( $shuttersDev, 'ASC_Shading_StateChange_Sunny', 'none' ) ne 'none'
# && AttrVal( $shuttersDev, 'ASC_Shading_StateChange_Cloudy', 'none' ) ne
# 'none' );
# delFromDevAttrList( $name, 'ASC_Shading_StateChange_Sunny' );
# delFromDevAttrList( $name, 'ASC_Shading_StateChange_Cloudy' );
# delFromDevAttrList( $shuttersDev, 'ASC_Shading_StateChange_Sunny' );
# delFromDevAttrList( $shuttersDev, 'ASC_Shading_StateChange_Cloudy' );
#
# $attr{$name}{ASC_Shading_InOutAzimuth} =
# ( AttrVal( $name, 'ASC_Shading_Direction', 180 ) -
# AttrVal( $name, 'ASC_Shading_Angle_Left', 85 ) )
# $attr{$shuttersDev}{ASC_Shading_InOutAzimuth} =
# ( AttrVal( $shuttersDev, 'ASC_Shading_Direction', 180 ) -
# AttrVal( $shuttersDev, 'ASC_Shading_Angle_Left', 85 ) )
# . ':'
# . ( AttrVal( $name, 'ASC_Shading_Direction', 180 ) +
# AttrVal( $name, 'ASC_Shading_Angle_Right', 85 ) )
# if ( AttrVal( $name, 'ASC_Shading_Direction', 'none' ) ne 'none'
# || AttrVal( $name, 'ASC_Shading_Angle_Left', 'none' ) ne 'none'
# || AttrVal( $name, 'ASC_Shading_Angle_Right', 'none' ) ne 'none' );
# delFromDevAttrList( $name, 'ASC_Shading_Direction' );
# delFromDevAttrList( $name, 'ASC_Shading_Angle_Left' );
# delFromDevAttrList( $name, 'ASC_Shading_Angle_Right' );
# . ( AttrVal( $shuttersDev, 'ASC_Shading_Direction', 180 ) +
# AttrVal( $shuttersDev, 'ASC_Shading_Angle_Right', 85 ) )
# if ( AttrVal( $shuttersDev, 'ASC_Shading_Direction', 'none' ) ne 'none'
# || AttrVal( $shuttersDev, 'ASC_Shading_Angle_Left', 'none' ) ne 'none'
# || AttrVal( $shuttersDev, 'ASC_Shading_Angle_Right', 'none' ) ne 'none' );
# delFromDevAttrList( $shuttersDev, 'ASC_Shading_Direction' );
# delFromDevAttrList( $shuttersDev, 'ASC_Shading_Angle_Left' );
# delFromDevAttrList( $shuttersDev, 'ASC_Shading_Angle_Right' );
#
# $attr{$name}{ASC_PrivacyDownValue_beforeNightClose} =
# AttrVal( $name, 'ASC_PrivacyDownTime_beforNightClose', 'none' )
# $attr{$shuttersDev}{ASC_PrivacyDownValue_beforeNightClose} =
# AttrVal( $shuttersDev, 'ASC_PrivacyDownTime_beforNightClose', 'none' )
# if (
# AttrVal( $name, 'ASC_PrivacyDownTime_beforNightClose', 'none' ) ne
# AttrVal( $shuttersDev, 'ASC_PrivacyDownTime_beforNightClose', 'none' ) ne
# 'none' );
# delFromDevAttrList( $name, 'ASC_PrivacyDownTime_beforNightClose' );
# delFromDevAttrList( $shuttersDev, 'ASC_PrivacyDownTime_beforNightClose' );
#
# delFromDevAttrList( $name, 'ASC_ExternalTriggerDevice' );
# delFromDevAttrList( $shuttersDev, 'ASC_ExternalTriggerDevice' );
}
return;
@ -3135,8 +3134,8 @@ sub HardewareBlockForShutters {
my $hash = shift;
my $cmd = shift;
for ( @{ $hash->{helper}{shuttersList} } ) {
$shutters->setShuttersDev($_);
for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
$shutters->setShuttersDev($shuttersDev);
$shutters->setHardLockOut($cmd);
}
@ -3147,8 +3146,8 @@ sub HardewareBlockForShutters {
sub wiggleAll {
my $hash = shift;
for ( @{ $hash->{helper}{shuttersList} } ) {
wiggle( $hash, $_ );
for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
wiggle( $hash, $shuttersDev );
}
return;
@ -3382,21 +3381,21 @@ sub CreateNewNotifyDev {
CommandDeleteReading( undef, $name . ' .monitoredDevs' );
my $shuttersList = '';
for ( @{ $hash->{helper}{shuttersList} } ) {
AddNotifyDev( $hash, AttrVal( $_, 'ASC_Roommate_Device', 'none' ),
$_, 'ASC_Roommate_Device' )
if ( AttrVal( $_, 'ASC_Roommate_Device', 'none' ) ne 'none' );
AddNotifyDev( $hash, AttrVal( $_, 'ASC_WindowRec', 'none' ),
$_, 'ASC_WindowRec' )
if ( AttrVal( $_, 'ASC_WindowRec', 'none' ) ne 'none' );
AddNotifyDev( $hash, AttrVal( $_, 'ASC_BrightnessSensor', 'none' ),
$_, 'ASC_BrightnessSensor' )
if ( AttrVal( $_, 'ASC_BrightnessSensor', 'none' ) ne 'none' );
AddNotifyDev( $hash, AttrVal( $_, 'ASC_ExternalTrigger', 'none' ),
$_, 'ASC_ExternalTrigger' )
if ( AttrVal( $_, 'ASC_ExternalTrigger', 'none' ) ne 'none' );
for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
AddNotifyDev( $hash, AttrVal( $shuttersDev, 'ASC_Roommate_Device', 'none' ),
$shuttersDev, 'ASC_Roommate_Device' )
if ( AttrVal( $shuttersDev, 'ASC_Roommate_Device', 'none' ) ne 'none' );
AddNotifyDev( $hash, AttrVal( $shuttersDev, 'ASC_WindowRec', 'none' ),
$shuttersDev, 'ASC_WindowRec' )
if ( AttrVal( $shuttersDev, 'ASC_WindowRec', 'none' ) ne 'none' );
AddNotifyDev( $hash, AttrVal( $shuttersDev, 'ASC_BrightnessSensor', 'none' ),
$shuttersDev, 'ASC_BrightnessSensor' )
if ( AttrVal( $shuttersDev, 'ASC_BrightnessSensor', 'none' ) ne 'none' );
AddNotifyDev( $hash, AttrVal( $shuttersDev, 'ASC_ExternalTrigger', 'none' ),
$shuttersDev, 'ASC_ExternalTrigger' )
if ( AttrVal( $shuttersDev, 'ASC_ExternalTrigger', 'none' ) ne 'none' );
$shuttersList = $shuttersList . ',' . $_;
$shuttersList = $shuttersList . ',' . $shuttersDev;
}
AddNotifyDev( $hash, AttrVal( $name, 'ASC_residentsDev', 'none' ),
@ -3462,12 +3461,12 @@ sub ShuttersInformation {
$ret .= '</tr>';
my $linecount = 1;
for my $shutter ( @{ $hash->{helper}{shuttersList} } ) {
$shutters->setShuttersDev($shutter);
for my $shuttersDev ( @{ $hash->{helper}{shuttersList} } ) {
$shutters->setShuttersDev($shuttersDev);
if ( $linecount % 2 == 0 ) { $ret .= '<tr class="even">'; }
else { $ret .= '<tr class="odd">'; }
$ret .= "<td>$shutter</td>";
$ret .= "<td>$shuttersDev</td>";
$ret .= "<td> </td>";
$ret .= "<td>"
. strftime( "%e.%m.%Y - %H:%M:%S",
@ -3492,7 +3491,7 @@ sub ShuttersInformation {
$ret .= "<td>" . $shutters->getLockOut . "</td>";
$ret .= "<td> </td>";
$ret .= "<td>"
. ReadingsVal( $shutter, 'ASC_ShuttersLastDrive', 'none' ) . "</td>";
. ReadingsVal( $shuttersDev, 'ASC_ShuttersLastDrive', 'none' ) . "</td>";
$ret .= "<td> </td>";
$ret .= "<td>" . $shutters->getStatus . "</td>";
$ret .= "<td> </td>";
@ -3533,15 +3532,15 @@ sub GetMonitoredDevs {
my $linecount = 1;
for my $notifydev ( sort keys( %{$notifydevs} ) ) {
if ( ref( $notifydevs->{$notifydev} ) eq "HASH" ) {
for my $shutters ( sort keys( %{ $notifydevs->{$notifydev} } ) )
for my $shuttersDev ( sort keys( %{ $notifydevs->{$notifydev} } ) )
{
if ( $linecount % 2 == 0 ) { $ret .= '<tr class="even">'; }
else { $ret .= '<tr class="odd">'; }
$ret .= "<td>$shutters</td>";
$ret .= "<td>$shuttersDev</td>";
$ret .= "<td> </td>";
$ret .= "<td>$notifydev</td>";
$ret .= "<td> </td>";
$ret .= "<td>$notifydevs->{$notifydev}{$shutters}</td>";
$ret .= "<td>$notifydevs->{$notifydev}{$shuttersDev}</td>";
$ret .= "<td> </td>";
$ret .= '</tr>';
$linecount++;
@ -8848,7 +8847,7 @@ sub getBlockAscDrivesAfterManual {
],
"release_status": "testing",
"license": "GPL_2",
"version": "v0.9.14",
"version": "v0.9.15",
"author": [
"Marko Oldenburg <leongaultier@gmail.com>"
],