Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Plugin: Array in Array

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

    [wiregate] - √ - Plugin: Array in Array

    Hallo zusammen,

    ich versuche in einem Array wiederum ein Array zu definieren:

    Code:
    my @AlleStatus =(
     { Name => "Licht Arbeitszimmer ", 
      GA_Sammelstatus => "1/2/213", 
      DPT => "1.001", 
      ZustandMeldung => 1, 
      ZustandDefault => 0, 
      GAs_Quelle => ("1/2/223", "1/2/228"), 
     },
    Ziel ist es für einen Array Wert mehrere Gruppenadressen zu definieren, die auch nacheinander abgearbeitet werden sollen:

    Code:
    foreach my $element (@AlleStatus) {        
      my @Einzel_GA = $element->{GAs_Quelle};
      foreach my $GA (@Einzel_GA) {
      }
    }
    Geht sowas? Wie muss ich das in der Syntax denn angeben?
    Ich habe im Form kein Beispiel gefunden. Was nicht heißen mag, daß es keines gibt ;-)

    Danke
    Sascha

    #2
    Schau mal den Multi RTR an (-> https://knx-user-forum.de/code-schni...pi-regler.html), ob das Vorgehen dort nicht auch bei Dir passt.
    TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

    Kommentar


      #3
      Sieht so falsch nicht aus.

      Ansonsten online

      perllol - perldoc.perl.org
      perldsc - perldoc.perl.org

      Hashes of Arrays in perldsc sollte helfen.

      Grüße

      Björn

      Kommentar


        #4
        Jep, nur aufpassen wenn man sowas dann in $plugin_info dauerhaft ablegen will.
        Das ist "by Design" leider ein eindimensionaler (tied) Hash, das Plugin von Chris liefert dafür aber auch das beste Beispiel wie man das macht.

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

        Kommentar


          #5
          Sorry, ich schaff es nicht...

          Ich komm leider nicht damit zurecht. In dem Multi-RTR kann ich nur ein "normales Array" entdecken, da dort die einzelnen Controller durchgegangen werden, aber für einen Controller pro Wert nur eine GA definiert ist.

          In meinem Fall habe ich je Element mehrere GA, die angemeldet bzw. abgefragt werden sollen.

          Der Link von tanzbaer war hilfreich die GA in [] zu stetzen. Es geht aber trotzdem nicht. Ich gebe aber zu, daß ich nicht alles in dem Tutorial vollständig verstehe.

          Beim Anmelden der Einzelnen GA kommt schon Müll raus:
          Code:
          my @AlleStatus =({ Name => "Licht ", GAs_Quelle =>["1/2/223","1/2/228"], });
           
          foreach my $element (@AlleStatus) { 
            my @Einzel_GA = $element->{GAs_Quelle}; 
            foreach my $GA (@Einzel_GA) {
              $plugin_subscribe{$GA}{$plugname} = 1;
              ##TEST
              plugin_log($plugname, "Anmelden[$GA]");
              ##TEST
            }
          }
          2011-10-29 09:47:05.070,Sammelstatus.pl,Anmelden[ARRAY(0xac9adf8)]
          2011-10-29 09:47:14.307,Sammelstatus.pl,Anmelden[ARRAY(0xacb6cc8)]


          Danke
          Sascha

          Kommentar


            #6
            Puh,
            Code:
            my @AlleStatus =({ Name => "Licht ", GAs_Quelle =>["1/2/223","1/2/228"], });
            bereitet mir schon Schwierigkeiten auf Anhieb zu erklären was GAs_Quelle genau ist, vermutlich ein Array in einem Array of Hashes

            Wenn mans nun genau wissen will, ein paar Links:
            Perl Hash Howto
            Perl Primer 013, A Perl array of hashes, a multidimensional array. HTML FIX IT . COM
            perlref - perldoc.perl.org

            Tipp dazu: sowas erstmal Standalone mit Perl probieren,
            use Data:umper;
            print Dumper($GA);
            hilft es aufzudröseln (oder return (Dumper($GA)); im Plugin)

            Tipp2: ich persönlich halte so manch mögliches Konstrukt komplexer Datentypen in Perl für reichlich unübersichtlich und bevorzuge einfacheres..
            Wenn man jetzt z.B. statt dem Array in dem Array of Hashes einen String mit Kommasep. GA's in einen Hash (ohne array darüber) legt, dann geht man da mit (exemplarisch!)

            Code:
            while( my ($key, $value) = each(%meinhash) ) {
                my @GAs = split(/,/, $meinhash{$key};
                foreach (@GAs) {
                  ...
                }
            }
            durch und gut ists, das versteht man 2J später auch noch, statt komischer #({-Notationen.. (Klar geht es so/anders auch aber ich kanns ehrlichgesagt auf Anhieb nicht ohne Trial&Error erklären..)

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

            Kommentar


              #7
              Danke Makki!

              Zitat von makki Beitrag anzeigen
              Tipp2: ich persönlich halte so manch mögliches Konstrukt komplexer Datentypen in Perl für reichlich unübersichtlich und bevorzuge einfacheres..
              Wenn man jetzt z.B. statt dem Array in dem Array of Hashes einen String mit Kommasep. GA's in einen Hash (ohne array darüber) legt, dann geht man da mit (exemplarisch!)

              Code:
              while( my ($key, $value) = each(%meinhash) ) {
              my @GAs = split(/,/, $meinhash{$key};
              foreach (@GAs) {
              ...
              }
              }
              durch und gut ists, das versteht man 2J später auch noch, statt komischer #({-Notationen.. (Klar geht es so/anders auch aber ich kanns ehrlichgesagt auf Anhieb nicht ohne Trial&Error erklären..)
              Das war genau der Tipp, den ich gebraucht habe...

              Kommentar

              Lädt...
              X