Hallo,
wer kennt das nicht als FS20 Anwender: Die Pflege der Liste der vergebenen (an den FS20 devices) eingestellten Adressen.
Habe da mal eine kleine debug-Routine geschrieben, die alle FS20 - Geräte mit Hauscode, Button und Gerätenamen ausgibt und dabei auch doppelt vergebene Adressen findet.
Die Ausgabe erfolgt sortiert nach Hauscode und Button, bei jedem Hauscode-Wechsel und/oder Buttonwechsel (Gruppenanteil) wird eine Leerzeile zur Übersichtlichkeit in die Liste eingefügt.
Ausgabe erfolgt sowohl auf dem Screen, als auch ins aktuelle Log und kann per copy/paste in eine Excel-Tabelle übernommen werden.
Aufruf mit {fs20config} aus der Kommandozeile.
Und das muss in die 99-myUtils:
<code>
sub fs20config()
{
my @devs = devspec2array("TYPE=FS20");
my %tmp;
my $lfd = 1;
foreach my $d (@devs)
{
my $hash = $defs{$d};
my ($hc,$btn,$lm,$gm) = split(' ', $hash->{DEF});
$hc = hex2four($hc) if(length($hc) == 4);
$btn = hex2four($btn) if(length($btn) == 2);
$tmp{$hc . ' ' . $btn . ' ' . $lfd} = $hash->{NAME};
$lfd += 1;
} # end foreach
my $res;
my $hcold = '';
my $s1old = '';
my $btnold;
foreach my $d (sort keys %tmp)
{
my($hc,$btn) = split(' ',$d);
if($hc eq $hcold)
{
$hc = '';
}
else
{
$res .= "\n";
$hcold = $hc;
$btnold = '';
}
if($btn eq $btnold)
{
$res .= "Warnung -> gleicher Button-Code!\n";
}
$btnold = $btn;
my $s1 = substr($btn,0,2);
my $s2 = substr($btn,2,2);
if($s1 eq $s1old)
{
$s1 = ' ';
}
else
{
$res .= "\n";
$s1old = $s1;
}
$res .= sprintf("%s\t%s%s\t%s\n",$hc,$s1,$s2,$tmp{$d});
} # end foreach
Log(1,$res);
return $res;
} # end fs20config
###############################
</code>
Elektrolurch
@ Elekrolurch
Auch wenn der Beitrag schon 7 Jahre alt ist müßte die Subroutine ja eingendlich noch funktionieren.
Leider kommt bei mir nach der Eingebe in 99_myUtils diese Meldung:
syntax error at ./FHEM/99_myUtils.pm line 301, near "sub fs20config() " Can't redeclare "my" in "my" at ./FHEM/99_myUtils.pm line 303, near "my" syntax error at ./FHEM/99_myUtils.pm line 354, near "}"
Rufe ich die Sub dann trotzdem auf kommt diese Meldung:
Bareword "fs20config" not allowed while "strict subs" in use at (eval 15096) line 1.
Ich würde das kleine Programm gerne verwenden, meinst du du kannst das "reparieren" ?
Gruß aus Köln
Norbert
hi
habs bei mir probiert und es geht, ohne fehler:
sub fs20config() {
my @devs = devspec2array("TYPE=FS20");
my %tmp;
my $lfd = 1;
foreach my $d (@devs) {
my $hash = $defs{$d};
my ($hc,$btn,$lm,$gm) = split(' ', $hash->{DEF});
$hc = hex2four($hc) if(length($hc) == 4);
$btn = hex2four($btn) if(length($btn) == 2);
$tmp{$hc . ' ' . $btn . ' ' . $lfd} = $hash->{NAME};
$lfd += 1;
} # end foreach
my $res;
my $hcold = '';
my $s1old = '';
my $btnold;
foreach my $d (sort keys %tmp) {
my($hc,$btn) = split(' ',$d);
if($hc eq $hcold) {
$hc = '';
} else {
$res .= "\n";
$hcold = $hc;
$btnold = '';
}
if($btn eq $btnold) {
$res .= "Warnung -> gleicher Button-Code!\n";
}
$btnold = $btn;
my $s1 = substr($btn,0,2);
my $s2 = substr($btn,2,2);
if($s1 eq $s1old) {
$s1 = ' ';
} else {
$res .= "\n";
$s1old = $s1;
}
$res .= sprintf("%s\t%s%s\t%s\n",$hc,$s1,$s2,$tmp{$d});
} # end foreach
Log(1,$res);
return $res;
} # end fs20config
###############################
gruss
@eismann
wenn du jetzt nich geschrieben hättest es geht einwandfrei und die Sub nicht noch mal gepostet hättest, wäre ich nicht auf die Idee gekommen es noch mal zu versuchen.
Ich habe es dann nochmal mit deiner geposteten Sub probiert und tatsächlich...fehlerfrei.
Ich habe natürlich nicht nochmal mit dem Orginal probiert. Bin froh das es so funktioniert.
Wunderbar.
Gruß
Norbert
Hallo Norbert,
hatte es gerade auch noch einmal ausprobiert - ohne Fehler.
Elektrolurch