2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-25 09:55:38 +00:00

98_structure.pm: add random as set "filter" (Forum #137517)

git-svn-id: https://svn.fhem.de/fhem/trunk@28671 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2024-03-17 09:11:16 +00:00
parent 5a630a3b1a
commit 980d5932df

View File

@ -429,6 +429,21 @@ structure_Set($@)
@devList = reverse @devList; @devList = reverse @devList;
} }
if(@list > 1 && $list[$#list] =~ m/^random:(\d+)/) { #137517
my $selCount = $1;
my $devCount = $#devList + 1;
$selCount = $devCount if ($selCount > $devCount || $selCount < 1);
my @selDev = @devList;
@devList = ();
for (1..$selCount) {
my $n = int(rand($devCount));
redo if ($selDev[$n] eq "");
push(@devList,$selDev[$n]);
$selDev[$n] = "";
}
pop @list;
}
if($list[1] =~ m/^(save|restore)StructState$/) { if($list[1] =~ m/^(save|restore)StructState$/) {
return "Usage: set $me $list[1] readingName" if(@list != 3); return "Usage: set $me $list[1] readingName" if(@list != 3);
return "Bad reading name $list[2]" if(!goodReadingName($list[2])); return "Bad reading name $list[2]" if(!goodReadingName($list[2]));
@ -670,7 +685,9 @@ structure_Attr($@)
propagated set for the attached devices like this: <code>set propagated set for the attached devices like this: <code>set
&lt;devN&gt;:FILTER=&lt;filter&gt; &lt;type-specific&gt;</code><br> &lt;devN&gt;:FILTER=&lt;filter&gt; &lt;type-specific&gt;</code><br>
If the last set parameter is "reverse", then execute the set commands in If the last set parameter is "reverse", then execute the set commands in
the reverse order. the reverse order.<br/>
If the last set parameter is given as "random:4" only 4 structure members will
be selected randomly which will receive the given command.<br/>
</ul> </ul>
<br> <br>
@ -899,15 +916,17 @@ structure_Attr($@)
</li><br> </li><br>
Jedes andere set Kommando wird an alle Devices dieser Struktur Jedes andere set Kommando wird an alle Devices dieser Struktur
weitergegeben.<br> weitergegeben.<br>
Aussnahme: das Attribut structexclude ist in einem Device definiert und Ausnahme: das Attribut structexclude ist in einem Device definiert und
dessen Attributwert matched als Regexp zum Namen der aktuellen dessen Attributwert matched als Regexp zum Namen der aktuellen
Struktur.<br> Wenn das set Kommando diese Form hat <code>set Struktur.<br> Wenn das set Kommando diese Form hat <code>set
&lt;structure&gt; [FILTER=&lt;filter&gt;] &lt;type-specific&gt;</code> wird &lt;structure&gt; [FILTER=&lt;filter&gt;] &lt;type-specific&gt;</code> wird
:FILTER=&lt;filter&gt; bei der Weitergebe der set an jeden Devicenamen wie :FILTER=&lt;filter&gt; bei der Weitergabe der set an jeden Devicenamen wie
folgt angeh&auml;ngt: <code>set &lt;devN&gt;:FILTER=&lt;filter&gt; folgt angeh&auml;ngt: <code>set &lt;devN&gt;:FILTER=&lt;filter&gt;
&lt;type-specific&gt;</code><br> &lt;type-specific&gt;</code><br>
Falls der letzte Parameter reverse ist, dann werden die Befehle in der Falls der letzte Parameter reverse ist, dann werden die Befehle in der
umgekehrten Reihenfolge ausgef&uuml;hrt. umgekehrten Reihenfolge ausgef&uuml;hrt.<br/>
Falls der letzte Parameter dem Muster "random:4" entspricht, erhalten nur 4
zuf&auml;llig ausgew&auml;hlte Devices den Befehl.<br/>
</ul> </ul>
<br> <br>
<a id="structure-get"></a> <a id="structure-get"></a>