FS20 Konfiguration ausgeben

Begonnen von Elektrolurch, 15 August 2016, 10:04:09

Vorheriges Thema - Nächstes Thema

Elektrolurch

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
configDB und Windows befreite Zone!

cocojambo

@ 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
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

eisman

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
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

cocojambo

@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
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

Elektrolurch

Hallo Norbert,

hatte es gerade auch noch einmal ausprobiert - ohne Fehler.

Elektrolurch
configDB und Windows befreite Zone!