Ankündigung

Einklappen
Keine Ankündigung bisher.

Ex- und Import-Tool um GA extern (z.B. in Excel) zu bearbeiten

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] Ex- und Import-Tool um GA extern (z.B. in Excel) zu bearbeiten

    Hallo zusammen,

    viele GA anlegen oder löschen ist mit dem eingebauten Editor etwas mühselig. Daher habe ich mir zwei Skripte geschrieben, eibga2csv.pl und csv2eibga.pl.

    Mit dem ersten wird die aktuelle eibga.conf gelesen und die Daten in eine eibga.csv geschrieben. Die kann man sich dann vom Wiregate herunterladen, z.B. in Excel importieren, bearbeiten und wieder speichern. Die geänderte Datei zurückspielen, mit dem zweiten Skript wird dann daraus eine eibga.conf.new erstellt. Ist man sicher, dass die ok ist, kann man sie an die Stelle der ursprünglichen eibga.conf kopieren (am besten vorher Backup davon machen), den Daemon neustarten und fertig.

    Benutzung natürlich auf eigenes Risiko. Achtung: GA-Namen müssen mindestens aus zwei Wörtern bestehen, sonst gehts schief. Bugfix in Arbeit.

    eibga2csv.pl:
    Code:
    #!/usr/bin/perl
    #
    # eibga2csv.pl 1.0 
    #
    # (c) 2015 Jan N. Klug 
    #
    use strict;
    
    open(my $in, '<',  "/etc/wiregate/eibga.conf");
    open(my $out, '>', "eibga.csv");
    
    my $hg="HG";
    my $mg="MG";
    my $ga="GA";
    my $name="Name";
    my $dpt="DPT";
    my $subdpt="SubDPT";
    my $dpt_subtypename = "DPT_SubtypeName";
    
    while (<$in>) {
      chomp;
      if ($_ =~ /^\[(\d*)\/(\d*)\/(\d*)\]/) {
        print $out "$hg;$mg;$ga;$name;$dpt;$subdpt;$dpt_subtypename\n";
        $hg = $1;
        $mg = $2;
        $ga = $3;
      } elsif ($_ =~ /dpt_subtypename = (.+)/i) {
        $dpt_subtypename = $1;
      }
      elsif ($_ =~ /name = (.+)/i) {
        $name = $1;
      } elsif ($_ =~ /dptid = (.+)/i) {
        $dpt = $1;
      } elsif ($_ =~ /dptsubid = (.+)/i) {
        $subdpt = $1;
      }
    }
    
    print $out "$hg;$mg;$ga;$name;$dpt;$subdpt;$dpt_subtypename\n";
    
    close $in;
    close $out;
    csv2eibga.pl:
    Code:
    #!/usr/bin/perl
    #
    # csv2eibga.pl 1.0 
    #
    # (c) 2015 Jan N. Klug
    # 
    use strict;
    
    open(my $in, '<',  "eibga.csv");
    open(my $out, '>', "eibga.conf.new");
    
    
    while (<$in>) {
      chomp;
      if ($_ =~ /(.*);(.*);(.*);(.*)\s(.*);(.*);(.*);(\w*)/) {
        print $out "[$1/$2/$3]\n";
        print $out "short = $4\n";
        print $out "DPTSubId = $7\n";
        print $out "ga = $1/$2/$3\n";
        print $out "name = $4 $5\n";
        print $out "DPTId = $6\n";
        print $out "DPT_SubTypeName = $8\n";
        print $out "\n";
      }
    }
    
    close $in;
    close $out;
    Gruss,

    der Jan
    KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

    #2
    Moin --

    Danke dafür. Allerdings: gerade probiert, geht schief:

    Code:
    HG;MG;GA;Name;DPT;SubDPT;DPT_SubtypeName
    0;1;3;Name;DPT;SubDPT;DPT_SubtypeName
    2;1;9;Name;DPT;SubDPT;DPT_SubtypeName
    3;3;9;Name;DPT;SubDPT;DPT_SubtypeName
    Zitat von JNK Beitrag anzeigen
    Benutzung natürlich auf eigenes Risiko. Achtung: GA-Namen müssen mindestens aus zwei Wörtern bestehen, sonst gehts schief. Bugfix in Arbeit.
    Ah. Meine Wörter sind durch Punkte getrennt, nicht durch Leerzeichen. Kann das davon kommen?

    Kommentar


      #3
      Eigentlich erst bei der Rücktransformation. Schick mir bitte mal Deine eibga.conf
      KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

      Kommentar


        #4
        Zitat von JNK Beitrag anzeigen
        Eigentlich erst bei der Rücktransformation. Schick mir bitte mal Deine eibga.conf

        Die ersten paar entries:

        Code:
        [0/1/3]
        short=Nacht
        DPTSubId=1.001
        ga=0/1/3
        name=Nacht
        DPTId=1
        DPT_SubTypeName=DPT_Switch
        [2/1/9]
        short=Rolladen
        DPTSubId=1.001
        ga=2/1/9
        name=Rolladen Bad Stopp
        DPTId=1
        DPT_SubTypeName=DPT_Switch
        [3/3/9]
        DPTSubId=6.020
        short=andere.music.squeeze_living_favorite
        ga=3/3/9
        DPTId=6
        name=andere.music.squeeze_living_favorite
        Die Reihenfolge der GA's ist mir etwas suspekt... aber ok, das macht nix.

        Kommentar


          #5
          Spannend. Bei mir sind Leerzeichen um die =, deswegen geht es nicht . Korrigiere ich heute Abend.
          KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

          Kommentar


            #6
            Neuer Versuch:

            eibga2csv.pl
            Code:
            #!/usr/bin/perl
            #
            use strict;
            
            open(my $in, '<',  "/etc/wiregate/eibga.conf");
            open(my $out, '>', "eibga.csv");
            
            my $hg="HG"; 
            my $mg="MG"; 
            my $ga="GA";
            my $name="Name";
            my $dpt="DPT";
            my $subdpt="SubDPT";
            my $dpt_subtypename = "DPT_SubtypeName";
            
            while (<$in>) {
              chomp;
              if ($_ =~ /^\[(\d*)\/(\d*)\/(\d*)\]/) {
                print $out "$hg;$mg;$ga;$name;$dpt;$subdpt;$dpt_subtypename\n";
                $hg = $1;
                $mg = $2;
                $ga = $3;
              } elsif ($_ =~ /dpt_subtypename = (.+)/i) {
                $dpt_subtypename = $1;
              }
              elsif ($_ =~ /name\s*=\s*(.+)/i) {
                $name = $1;
              } elsif ($_ =~ /dptid\s*=\s*(.+)/i) {
                $dpt = $1;
              } elsif ($_ =~ /dptsubid\s*=\s*(.+)/i) {
                $subdpt = $1;
              }
            }
            
            print $out "$hg;$mg;$ga;$name;$dpt;$subdpt;$dpt_subtypename\n";
            
            close $in;
            close $out;
            csv2eibga.pl
            Code:
            #!/usr/bin/perl
            #
            use strict;
            
            open(my $in, '<',  "eibga.csv");
            open(my $out, '>', "eibga.conf.new");
            
            
            while (<$in>) {
              chomp;
              if ($_ =~ /(\d*);(\d*);(\d*);(.*)\s(.*);(.*);(.*);(\w*)/) {
                print $out "[$1/$2/$3]\n";
                print $out "short = $4\n";
                print $out "DPTSubId = $7\n";
                print $out "ga = $1/$2/$3\n";
                print $out "name = $4 $5\n";
                print $out "DPTId = $6\n";
                print $out "DPT_SubTypeName = $8\n";
                print $out "\n";
              } elsif ($_ =~ /(\d*);(\d*);(\d*);(.*);(.*);(.*);(\w*)/) {
                print $out "[$1/$2/$3]\n";
                print $out "short = $4\n";
                print $out "DPTSubId = $6\n";
                print $out "ga = $1/$2/$3\n";
                print $out "name = $4\n";
                print $out "DPTId = $5\n";
                print $out "DPT_SubTypeName = $7\n";
                print $out "\n";  
                print "Warning: $_ \n";
              } else {
                print "Error: $_ \n";
              }
            }
            
            close $in;
            close $out;
            Gruss,

            der Jan
            KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

            Kommentar


              #7
              Grad noch mal probiert:

              Code:
              HG;MG;GA;Name;DPT;SubDPT;DPT_SubtypeName
              0;1;3;DPT_Switch;1;1.001;DPT_SubtypeName
              2;1;9;DPT_Switch;1;1.001;DPT_SubtypeName
              3;3;9;andere.music.squeeze_living_favorite;6;6.020;DPT_SubtypeName

              Kommentar


                #8
                Äh ja.

                [code]
                } elsif ($_ =~ /dpt_subtypename = (.+)/i) {
                [\code]

                bitte noch durch

                [code]
                } elsif ($_ =~ /dpt_subtypename\s*=\s*(.+)/i) {
                [\code]

                ersetzen. Blöder Fehler. Wär mir aufgefallen, wenn ich es mit Deiner conf probiert hätte.

                Gruss,

                der Jan
                KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                Kommentar

                Lädt...
                X