FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Elektrolurch am 15 August 2016, 10:04:09

Titel: FS20 Konfiguration ausgeben
Beitrag von: Elektrolurch am 15 August 2016, 10:04:09
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
Titel: Antw:FS20 Konfiguration ausgeben
Beitrag von: cocojambo am 24 Februar 2023, 18:55:29
@ 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
Titel: Antw:FS20 Konfiguration ausgeben
Beitrag von: eisman am 25 Februar 2023, 11:30:07
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
Titel: Antw:FS20 Konfiguration ausgeben
Beitrag von: cocojambo am 26 Februar 2023, 10:22:48
@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
Titel: Antw:FS20 Konfiguration ausgeben
Beitrag von: Elektrolurch am 26 Februar 2023, 11:46:53
Hallo Norbert,

hatte es gerade auch noch einmal ausprobiert - ohne Fehler.

Elektrolurch