Ankündigung

Einklappen
Keine Ankündigung bisher.

Subscribe mit RegEx-Adresse

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

    [wiregate] Subscribe mit RegEx-Adresse

    Guten Morgen, kann das funktionieren oder muß ich jede mögliche Adresse einzeln anmelden? Irgendwie klappt das nämlich nicht und ich bin kein RegEx-Experte, um zu erkennen, ob die RegEx evtl. inkorrekt ist.
    Code:
    my $fenster_ga = m/3\/[0-4]\/\d[0-2]/;
    $plugin_subscribe{$fenster_ga}{$plugname} = 1;
    Gruß
    Karsten

    #2
    Ich glaub so wird das nichts.
    Du könntest das ganze evtl. über eine foreach oder while-Schleife lösen. Die GA müsste aber auch erst wieder aus HG/MG/GA zusammengesetzt werden.

    In der Zeit bis das steht hast Du die GAs in ein array getippt

    Code:
    my @fenster_ga = ("3/0/0","3/0/1","3/0/2","3/1/0","3/1/1","3/1/1");
    foreach my $fenster (@fenster_ga)
    {
    $plugin_subscribe{$fenster}{$plugname} = 1;
    }
    Gruß

    P.S.
    Falls es doch einer mit ner RegEx kann wärs interessant. Wir lernen gerne .
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      Die RegEx dürfte soweit Ok sein, ABER das Hauptproblem dürfte sein, dass an der Stelle (Key im Hash) gar keine RegEx ausgewertet wird. Ich habe jetzt zwar gerade keine Zeit, in den wiregated zu schauen, aber das würde mich sehr wundern.

      Im Prinzip wird beim »subscribe« nur jeweils eine GA (als Schlüssel/Key) in eine Hash-Struktur geschrieben. Beim Empfang der GAs werden (vermutlich) nur die Schlüssel durchgelaufen und auf »Gleichheit« bzw. »Vorhandensein« geprüft. Da niemals eine GA in Form deiner RegEx empfangen wird, dürfte der Eintrag auch nie aufgerufen werden.

      Für eine RegEx-Lösung müsstest du dem wiregated beibringen, dass dein Plugin bei jeder GA aufgerufen wird und dann die GA mit der RegEx matchen. Das wäre aufgrund der dabei verbrauchten Rechenleistung aber wohl nicht vernünftig/sinnvoll.

      Der Ansatz von JuMi2006 ist da sicher zielführender. Oder Alternativ könntest du die /etc/wiregate/eibga.conf einlesen und darauf deine RegEx anwenden, um dann jede passende GA wieder zu »subscriben«.
      KNX: MDT, Gira TS3, Berker, Theben, PEAR, Preussen BWM, B.E.G., BMS Quadra, WireGate, Timberwolf 2500 | Baublog

      Kommentar


        #4
        Wie waere es mit einem
        Code:
        my @fenster_ga = glob "{3}/{0,1,2,3,4}/{,1,2,3,4}{0,1,2}";
        ?
        Das erspart zumindest das eintippen aller GAn.

        Kommentar


          #5
          @foobar0815 ... der name klingt schon stark nach perl ...verstehe ich es richtig dass du eigentlich folgendes meinst:
          Code:
          my @fenster_ga = glob "{3}/{0,1,2,3,4}/{0,1,2}";
          Macht glob dann:
          3/0/0
          3/0/1
          3/0/2
          ...
          3/1/0
          3/1/1
          3/1/2
          ...
          ...
          3/4/1
          3/4/2

          und setzt das ins Array?

          Danke und Gruß
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #6
            genau so war's gedacht, aber der TE hatte urspruenglich
            Code:
            my $fenster_ga = m/3\/[0-4]\/\d[0-2]/;
            also
            Hauptgruppe 3
            Mittelgruppen 0 bis 4
            Untergruppen \d[0-2] also 00,01,02,10,11,12,... (klappt das mit fuehrender 0 ueberhaupt?)

            oder?

            Kommentar


              #7
              Ihr habt alle recht
              1. Ich mag keine RE und das funktioniert so nicht (wie es gehen würde: ist mir ehrlichgesagt sekundär, weil wissenschaftlich interessant - aber praktisch irrelevant)
              2. ein einfaches while/for aufn Array tuts ohne das es 27 Klammern mit Kopfschmerzen bereitet..

              Makki
              EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
              -> Bitte KEINE PNs!

              Kommentar


                #8
                Folgendes tut es. (Ob es sinnvoll ist, sei mal dahingestellt...)

                Code:
                for my $ga (grep m!^3/[0-4]/\d[0-2]$!, keys %eibgaconf)
                {
                   $plugin_subscribe{$ga}{$plugname} = 1;
                }
                VG, Fry

                PS. Just for the record: ich liebe regexes. Zum Glueck sind Menschen alle verschieden...

                PS2. Bitte dran denken: %eibgaconf ist seit PL 32 (oder so) mehrfach indiziert und enthält als keys nicht nur alle GAs, sondern auch alle Lang- und Kurznamen. Das bitte beim Pattern matching beachten!

                Kommentar


                  #9
                  Zitat von Fry Beitrag anzeigen
                  PS. Just for the record: ich liebe regexes. Zum Glueck sind Menschen alle verschieden...
                  Eben, deswegen soll es jeder machen können wie er mag, ein zweizeiler

                  PS2. Bitte dran denken: %eibgaconf ist seit PL 32 (oder so) mehrfach indiziert
                  Guter Hinweis, erste Stolperfalle.. Aber nachdem die dahinterliegende Datenstruktur ein simpler Hash ist, mehrfaches subscriben also keine Rolle spielt - und man eh immer prüfen sollte, ob man nicht nur subscribed sondern auch angesprochen wurde, sollte es nur bei einem "Doppelfehler" in zwei Plugins zu einem Problem werden können..

                  Grüsse Makki
                  EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                  -> Bitte KEINE PNs!

                  Kommentar

                  Lädt...
                  X