Ankündigung

Einklappen
Keine Ankündigung bisher.

I-Button Plugin

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

    #16
    Ich habe das schon behoben. Bei mir läuft es jetzt einwandfrei.

    -> Auch wenn den Code "Kraut und Rüben" ist.

    Da hat es 100 Dinge die es entweder nicht braucht oder man etwas schöner hätte lösen können. Ich habe aber deinen Code mal nur soweit bereinigt, dass er funktioniert. Der rest habe ich mal noch drinn gelassen.

    z.B.

    Du hast ein Hash in dem stehen die Namen und GA...

    Für was brauchst du dann noch :
    Code:
    my $schwarz= '13/2/1';
    my $blau= '13/2/2';
    oder für was ist die Zuweisung ein => 1 und aus => 0???

    Du beschreibst also eine Variabel mit dem Namen ein statisch mit einer 1 und eine Variabel mit dem Namen aus statisch mit dem Wert 0??? -> Das ist doch für nix oder?

    Naja egal...

    So geht es erstmal:

    Code:
    ##########################################################
    
    #################################################################
    # do not change anything below, all config stays above
    #################################################################
    
    my $schwarz= '13/2/1';
    my $blau= '13/2/2';
    my $gelb= '13/2/4';
    my $rot = '13/2/3';
    my $Anwesenheit = '13/2/0';
    my $begruessung = '13/2/5';
    # subscribe plugin and call it only when necessary
    $plugin_subscribe{$schwarz}{$plugname} = 1;
    $plugin_subscribe{$gelb}{$plugname} = 1;
    $plugin_subscribe{$blau}{$plugname} = 1;
    $plugin_subscribe{$rot}{$plugname} = 1;
    $plugin_info{$plugname.'_cycle'} = 0;
    
    
    my @AlleButtons;
    push @AlleButtons, {besitzer => "Elisa", name => "rot", GA => "13/2/3", anwesend => "13/2/0", ein => 1, aus => 0 };
    push @AlleButtons, {besitzer => "Volker", name => "schwarz", GA => "13/2/1", anwesend => "13/2/0", ein => 1, aus => 0 };
    push @AlleButtons, {besitzer => "Samuel", name => "blau", GA => "13/2/2", anwesend => "13/2/0", ein => 1, aus => 0 };
    push @AlleButtons, {besitzer => "Christina", name => "gelb", GA => "13/2/4", anwesend => "13/2/0", ein => 1, aus => 0 };
    
    
    foreach my $element (@AlleButtons) {
         if ($msg{'dst'} eq ($element->{GA}) && ($msg{'apci'} eq 'A_GroupValue_Write') && knx_read($msg{'dst'},0,1) != $plugin_info{$plugname.'_' . ($element->{name}) })
         {
              if ($msg{'value'} == 01) {
              ein($element->{ein}, $element->{anwesend});
              begruessung($element->{ein}, $element->{anwesend});
              }
              
              elsif ($msg{'value'} == 00) {               
               Alleaus($element->{aus}, $element->{anwesend});
                   plugin_log($plugname,"name: " . $element->{name} . "; aus: ");
              }
              $plugin_info{$plugname.'_' . ($element->{name}) } = knx_read($element->{GA} ,0,1);
    
         } else {
              next;
         }
    }
    sub begruessung {
        knx_write($begruessung,1,1);
    }
    
    sub Alleaus {
        my $rot_stat = knx_read($rot,0,1);
        my $schwarz_stat = knx_read($schwarz,0,1);
        my $gelb_stat = knx_read($gelb,0,1);
        my $blau_stat = knx_read($blau,0,1);
        my ($global, $GA) = @_;
        if ($global == 0 || $global == 1) {
        
            if (($rot_stat == 00) && ($blau_stat == 00) && ($gelb_stat == 00) && ($schwarz_stat == 00)) {
                knx_write($GA,0,1);
                return "keiner daheim";
            }
        }
        
        if (($rot_stat == 01) or ($blau_stat == 01) or ($gelb_stat == 01) or ($schwarz_stat == 01)) {
            knx_write($GA,1,1);
            return "Wilkommen zuahause";
        }
    }
    
    sub ein {
        my ($global, $GA) = @_;
        if ($global == 0 || $global == 1) {
            knx_write($GA,1,1);
            return "keiner daheim";
        }
        
        else {
            return;
        }
    }
    Ich hoffe bei dir läuft es nun auch
    Gruss Patrik alias swiss

    Kommentar


      #17
      Das muss ich erklären

      Ich hatte mir anfangs für an und aus jeweils ne 1 schicken lassen das hat ne kurze meldung in meinem Radio ausgelöst. Ist noch ein Rest vom Testen...

      Bevor ich das mit dem push @... gemacht hab hatte ich jeden button oben definiert. Da ich aus der copy/paste fraktion komme, war ich gerade im openautomation -> plugins verzeichniss "einkaufen" als ich über das Rolladen Plugin gestolpert bin. Dann hab ich umgestellt. Reste auch nicht entfernt. Das hätte ich mir für zum schluss aufgehoben

      Vielen Dank ich teste gleich mal

      Edit:
      Was genau hast du geändert dass es bei dir läuft? nur die returns raus?

      Kommentar


        #18
        Nö da war schon das eine oder andere...

        z.B.

        Ich habe weiter vorne geschrieben, dass der Wert von knx_read DPT1 hex ist. also musst du bei vergleichern immer 00 oder 01 verwenden.

        hier der ausschnitt der betroffen ist:

        Code:
        if (($rot_stat == 00) && ($blau_stat == 00) && ($gelb_stat == 00) && ($schwarz_stat == 00)) {
        so geht es

        ...Dann natürlich die returns raus die das Plugin zu früh beendeten.

        ...Und noch dein Merker entfernt da absolut überflüssig

        Hoffe es funktioniert nun bei dir

        PS: Ich würde dein Plugin mal überschreiben da es einfacher und wehniger fehlerbehaftet ist als deinen code durch zu kämmen.
        Gruss Patrik alias swiss

        Kommentar


          #19
          Aaaaaalllsoooo:

          Es funktioniert alles wunderbar. Es schaltet ein und aus wie es soll. Aber es gibt ein sehr seltsames Phänomen:
          Der rote I-Button verursacht es.
          Wenn ich den roten abziehe und wieder setze, schaltet die Anwesenheit aus und kurz darauf wieder ein...? Ist bei keinem anderen so hab das jetzt 1000 mal in verschiedenen Variationen gesteckt und gezogen... nur bei dem roten.
          Auch ist die Begrüßung aus folgendem Code nur beim roten. Bei keinem anderen nur bei dem roten.

          Ich hab auch jedesmal wenn ein I-button gesetzt wird eine 1 auf die Anwesenheit, auch wenn schon andere stecken. Ist nicht weiter schlimm, da es ja max 4 telegramme zuviel sind.
          Kann man den Anwesenheits status ähnlich speichern wie die einzelnen zustände? (plugin info...) Dann könnte ich die Begrüßung darüber auslösen. (oder besser ein seperates Plugin wenn die Anwesenheit von 0 auf 1 wechselt? )
          Viele Fragen ich hoffe nicht zuviele

          Code:
          ##########################################################
          
          #################################################################
          # do not change anything below, all config stays above
          #################################################################
          
          my $schwarz= '13/2/1';
          my $blau= '13/2/2';
          my $gelb= '13/2/4';
          my $rot = '13/2/3';
          my $Anwesenheit = '0/0/1';
          my $begruessung = '13/2/5';
          # subscribe plugin and call it only when necessary
          $plugin_subscribe{$schwarz}{$plugname} = 1;
          $plugin_subscribe{$gelb}{$plugname} = 1;
          $plugin_subscribe{$blau}{$plugname} = 1;
          $plugin_subscribe{$rot}{$plugname} = 1;
          $plugin_info{$plugname.'_cycle'} = 0;
          
          
          my @AlleButtons;
          push @AlleButtons, {besitzer => "Elisa", name => "rot", GA => "13/2/3", anwesend => "0/0/1"};
          push @AlleButtons, {besitzer => "Volker", name => "schwarz", GA => "13/2/1", anwesend => "0/0/1"};
          push @AlleButtons, {besitzer => "Samuel", name => "blau", GA => "13/2/2", anwesend => "0/0/1"};
          push @AlleButtons, {besitzer => "Christina", name => "gelb", GA => "13/2/4", anwesend => "0/0/1"};
          
          
          foreach my $element (@AlleButtons) {
               if ($msg{'dst'} eq ($element->{GA}) && ($msg{'apci'} eq 'A_GroupValue_Write') && knx_read($msg{'dst'},0,1) != $plugin_info{$plugname.'_' . ($element->{name}) })
               {
                    if ($msg{'value'} == 01) {
                    
                   
                     begruessung($element->{ein}, $element->{anwesend});
                    Alleaus($element->{anwesend});
                   plugin_log($plugname,"name: " . $element->{name} . "; ein: ");
                    }
                   
                    
                    elsif ($msg{'value'} == 00) {               
                     Alleaus($element->{anwesend});
                         plugin_log($plugname,"name: " . $element->{name} . "; aus: ");
                    }
                    $plugin_info{$plugname.'_' . ($element->{name}) } = knx_read($element->{GA} ,0,1);
          
               } else {
                    next;
               }
          }
          sub begruessung {
              knx_write($begruessung,1,1);
          }
          
          sub Alleaus {
              my $rot_stat = knx_read($rot,0,1);
              my $schwarz_stat = knx_read($schwarz,0,1);
              my $gelb_stat = knx_read($gelb,0,1);
              my $blau_stat = knx_read($blau,0,1);
              my ($GA) = @_;
              
                  if (($rot_stat == 00) && ($blau_stat == 00) && ($gelb_stat == 00) && ($schwarz_stat == 00)) {
                      knx_write($GA,0,1);
                      return "keiner daheim";
                  }
              
              
              if (($rot_stat == 01) or ($blau_stat == 01) or ($gelb_stat == 01) or ($schwarz_stat == 01)) {
                  knx_write($GA,1,1);
                  return "Wilkommen zuahause";
              }
             
          }
          
          sub ein {
              my ($global, $GA) = @_;
              if ($global == 0 || $global == 1) {
                  knx_write($GA,1,1);
                  return "daheim";
              }
              
              else {
                  return;
              }
          }
          Gruß

          Kommentar


            #20
            Hallo Volker.

            Ich sehe gerade einen Fehler: (hat aber warscheinlich nichts mit dem Problem zu tun)...

            Hier geht was nicht:

            Code:
            begruessung($element->{ein}, $element->{anwesend});
            $element->{ein} existiert nichtmehr und müsste durch folgendes ersetzt werden:

            Code:
            begruessung(1, $element->{anwesend});

            Ich hab auch jedesmal wenn ein I-button gesetzt wird eine 1 auf die Anwesenheit, auch wenn schon andere stecken. Ist nicht weiter schlimm, da es ja max 4 telegramme zuviel sind.
            Kann man den Anwesenheits status ähnlich speichern wie die einzelnen zustände? (plugin info...) Dann könnte ich die Begrüßung darüber auslösen. (oder besser ein seperates Plugin wenn die Anwesenheit von 0 auf 1 wechselt? )
            Jup sollte kein Problem sein. Ist der gleiche Mechanismus wie nach der foreach-schleife und muss einfach als zusätzliche Bedingung bei den beiden if Abfragen in der sub "Alleseaus" eingetragen werden.
            Gruss Patrik alias swiss

            Kommentar


              #21
              Hi,

              also so funktioniert es. Ich bekomme auch nur eine 1 auf Anwesenheit und/oder begruessung wenn alle I-Buttons da/weg sind. Puh schwere Geburt!

              das ich die GA´s 2 mal drin hab hat den Grund, da ich das plugin ja auf die GA´s der einzelnen I-buttons anmelden muss. Ich wusste nicht ob die definierten variablen ($rot usw) global verfügbar sind in den "sub´s" daher doppelt drin.

              Das der Code Kraut und Rüben ist -> kein plan von der materie aber ich arbeite daran. Bin schon rel. froh mit dem debian ein wenig klar zu kommen.

              Code:
              ##########################################################
              
              #################################################################
              # do not change anything below, all config stays above
              #################################################################
              
              my $schwarz= '13/2/1';
              my $blau= '13/2/2';
              my $gelb= '13/2/4';
              my $rot = '13/2/3';
              my $Anwesenheit = '13/2/0';
              my $begruessung = '13/2/5';
              # subscribe plugin and call it only when necessary
              $plugin_subscribe{$schwarz}{$plugname} = 1;
              $plugin_subscribe{$gelb}{$plugname} = 1;
              $plugin_subscribe{$blau}{$plugname} = 1;
              $plugin_subscribe{$rot}{$plugname} = 1;
              $plugin_info{$plugname.'_cycle'} = 0;
              
              
              my @AlleButtons;
              push @AlleButtons, {besitzer => "Elisa", name => "rot", GA => "13/2/3", anwesend => "13/2/0"};
              push @AlleButtons, {besitzer => "Volker", name => "schwarz", GA => "13/2/1", anwesend => "13/2/0"};
              push @AlleButtons, {besitzer => "Samuel", name => "blau", GA => "13/2/2", anwesend => "13/2/0"};
              push @AlleButtons, {besitzer => "Christina", name => "gelb", GA => "13/2/4", anwesend => "13/2/0"};
              
              
              foreach my $element (@AlleButtons) {
                   if ($msg{'dst'} eq ($element->{GA}) && ($msg{'apci'} eq 'A_GroupValue_Write') && knx_read($msg{'dst'},0,1) != $plugin_info{$plugname.'_' . ($element->{name}) })
                   {
                        if ($msg{'value'} == 01) {
                        begruessung();
                        Alleaus($element->{anwesend});
                       plugin_log($plugname,"name: " . $element->{name} . "; ein: ");
                        }
                       
                        
                        elsif ($msg{'value'} == 00) {               
                         Alleaus($element->{anwesend});
                             plugin_log($plugname,"name: " . $element->{name} . "; aus: ");
                        }
                        $plugin_info{$plugname.'_' . ($element->{name}) } = knx_read($element->{GA} ,0,1);
                  $plugin_info{$plugname.'_' . ($Anwesenheit) } = knx_read($Anwesenheit ,0,1);
                  
                   } else {
                        next;
                   }
              }
              ## $plugin_info{$plugname.'_' . ($Anwesenheit) } = knx_read($Anwesenheit ,0,1);
              sub begruessung {
              my $status = knx_read($Anwesenheit ,0,1);
              if ($status== 00) {
                  knx_write($begruessung,1,1);
                  return;
              }else {
              return;
              }
              } 
              
              
              sub Alleaus {
                  my $status = knx_read($Anwesenheit ,0,1);
                  my $rot_stat = knx_read($rot,0,1);
                  my $schwarz_stat = knx_read($schwarz,0,1);
                  my $gelb_stat = knx_read($gelb,0,1);
                  my $blau_stat = knx_read($blau,0,1);
                  my ($GA) = @_;
                 if ($status == 01) {
                      if (($rot_stat == 00) && ($blau_stat == 00) && ($gelb_stat == 00) && ($schwarz_stat == 00)) {
                          knx_write($GA,0,1);
                          return "keiner daheim";
                      }}
                  
                  if ($status == 00) {
                  if (($rot_stat == 01) or ($blau_stat == 01) or ($gelb_stat == 01) or ($schwarz_stat == 01)) {
                      knx_write($GA,1,1);
                      return "Wilkommen zuahause";
                  }}
              }

              Kommentar


                #22
                Hallo,

                eine frage hätte ich noch:

                Ich bekomm trotz der zeile:

                Code:
                $plugin_info{$plugname.'_' . ($Anwesenheit) } = knx_read($Anwesenheit ,0,1);
                jedes mal eine Read anfrage auf die Anwesenheit, was mir ab und zu den Strom abschaltet .

                Gruß Volker

                Kommentar


                  #23
                  Hallo Volker.

                  Bin gerade zurück aus meinem Kurzurlaub

                  Also zum Problem, dass des knx_read bei dir einen schaltbefehl auslöst, kann ich dir leider auch nichts sagen. Das sollte eigentlich nicht vorkommen ausser du hast von Hand an den Flags rumgeschraubt.

                  ->Ich weiss auch nicht wiso gewisse Leute immer an den Flag's rumspielen müssen. Das macht oft mehr Probleme als das es etwas bringt.

                  An sonsten müssten man mal im eibd log nachsehen was auf dem BUS genau passiert.

                  Was ist genau mit der GA 13/2/0 verknüpft?
                  Gruss Patrik alias swiss

                  Kommentar


                    #24
                    Also an den Flags spiele ich gerne rum. (Die Jung Taster mögen sonst mit der LED nicht so richtig mitspielen, nur wenn K,S,Ü,A gesetzt sind.

                    aber in dem Fall ist die GA nur mit 2 tastern verbunden (laut ETS)
                    über linknx schalte ich dadurch alle eine "AllesAus" GA, die leer ist (in der ETS), über linknx schaltet die alles aus die "Lichter sperren" GA und Steckdosen Fernseher Radio usw aus. Und die Bewegungsmelder von Status "Schaltbetrieb" auf Status "Melebetrieb" (derzeit eine Notdürftige Alarmanlagenlösung die relativ gut funktioniert, der einzigste der einbricht bin ich wenn ich mich ausgesperrt hab )

                    Das kommt auch nicht regelmäßig seltsamer weise. Jetzt war 16h ruhe und plötzlich schaltet er wieder? Danach 4 h Ruhe und wieder schalten. Es kommt regelmäßig eine 1 auf die 13/2/0 und ab und zu ne 0. Obwohl alle I-Buttons gesetzt sind. Kapier ich nicht!!
                    Gleich nach der 0 kommt ne 1 (ca 30sek später)
                    Ich hab das vorerst in der linknx so geschalten:
                    Wenn länger als 120s an 13/2/0 ne 0 ansteht geht die verarbeitung weiter... mal schauen obs hilft.

                    Gruß

                    Edit:

                    hier der eintrag der Read anfragen:
                    Code:
                    15:24:00.939,A_GroupValue_Read,0.0.0,13/2/0,00,0,DPT_Switch,1.001,0,low,7,T_DATA_XXX_REQ,0
                    2011-09-17 15:24:00.945,A_GroupValue_Read,0.0.0,13/2/0,00,0,DPT_Switch,1.001,0,low,5,T_DATA_XXX_REQ,0
                    2011-09-17 15:24:00.952,A_GroupValue_Response,0.0.0,13/2/0,01,1,DPT_Switch,1.001,0,low,7,T_DATA_XXX_REQ,0
                    2011-09-17 15:24:00.965,A_GroupValue_Response,0.0.0,13/2/0,01,1,DPT_Switch,1.001,0,low,5,T_DATA_XXX_REQ,0
                    2011-09-17 15:24:00.974,A_GroupValue_Response,0.0.0,13/2/0,01,1,DPT_Switch,1.001,0,low,7,T_DATA_XXX_REQ,0
                    und hier wo die Anwesenheit ausgeschaltet wurde:
                    Code:
                    16:34:59.945,A_GroupValue_Write,0.0.0,13/2/3,00,0,DPT_Bool,1.002,0,low,7,T_DATA_XXX_REQ,0
                    2011-09-18 16:35:00.185,A_GroupValue_Write,0.0.0,13/2/2,00,,,,0,low,7,T_DATA_XXX_REQ,0
                    2011-09-18 16:35:00.301,A_GroupValue_Write,0.0.0,13/2/4,00,,,,0,low,7,T_DATA_XXX_REQ,0
                    2011-09-18 16:35:00.371,A_GroupValue_Write,0.0.0,13/2/1,00,,,,0,low,7,T_DATA_XXX_REQ,0
                    2011-09-18 16:35:00.418,A_GroupValue_Write,0.0.0,13/2/0,00,0,DPT_Switch,1.001,0,low,7,T_DATA_XXX_REQ,0
                    2011-09-18 16:35:00.489,A_GroupValue_Write,0.0.11,3/0/1,00,0,DPT_Switch,1.001,0,low,6,T_DATA_XXX_REQ,0
                    2011-09-18 16:35:01.248,A_GroupValue_Write,0.0.0,13/2/3,01,1,DPT_Bool,1.002,0,low,7,T_DATA_XXX_REQ,0
                    2011-09-18 16:35:01.388,A_GroupValue_Write,0.0.0,13/2/2,01,,,,0,low,7,T_DATA_XXX_REQ,0
                    2011-09-18 16:35:01.622,A_GroupValue_Write,0.0.0,13/2/1,01,,,,0,low,7,T_DATA_XXX_REQ,0
                    2011-09-18 16:35:01.720,A_GroupValue_Write,0.0.0,13/2/4,01,,,,0,low,7,T_DATA_XXX_REQ,0
                    2011-09-18 16:35:01.811,A_GroupValue_Write,0.0.0,13/2/5,01,,,,0,low,7,T_DATA_XXX_REQ,0
                    2011-09-18 16:35:01.814,A_GroupValue_Write,0.0.0,13/2/0,01,1,DPT_Switch,1.001,0,low,7,T_DATA_XXX_REQ,0
                    2011-09-18 16:35:15.104,A_GroupValue_Write,0.0.24,11/2/0,0C 65,22.5,DPT_Value_Temp,9.001,0,low,6,T_DATA_XXX_REQ,0
                    2011-09-18
                    hier war es bloß 1sek ausgeschaltet

                    Kommentar


                      #25
                      Hmmm...

                      Ich sehe den Fehler leider nicht gerade auf anhieb aber der Code ist so unstrukturiert, dass sich da leicht auch Fehler einschleichen können.

                      z.B.

                      Die foreach schleife macht eigentlich überhaubt keinen sinn, da du innerhalb der schleife so oder so die gleiche sub "allesaus" mit den gleichen Parametern aufrufst.

                      In der allesaus sub die so oder so immer aufgerufen wird egal ob nun alle IButton 0 haben oder nicht werden wieder alle Zustände neu eingelesen und nochmals verglichen. Hier könnte das Problem liegen...

                      Wenn du den status von Anwesend einlesen und verarbeiten willst dann bitte nur 1x pro Pluginaufruf also z.B. in der foreach schleife. Das kann zu Problemen führen wenn sich wärend der ausführung der Zustand ändert.

                      ---

                      Bitte strukturiere den Code mal so dass er verständlich wird. Dabei sollte aller überflüssiger Ballast wie die 3x zugewiesenen GA's und andere Altlasten entfernt werden.

                      Dann wird auch der Code übersichtlicher und Fehler lassen sich viel einfacher finden.

                      -> Auch einrücken im Code (wie ich es in der foreach-schleife getan habe) trägt wesentlich zur Verbesserung der Lesbarkeit bei.
                      Gruss Patrik alias swiss

                      Kommentar


                        #26
                        Ich kann dir anbieten den Code mal etwas auszudünnen (optimieren) und ein paar Altlasten zu beheben. Allerdings werde ich das heute abend nicht mehr hinbekommen.
                        Gruss Patrik alias swiss

                        Kommentar


                          #27
                          Ich werde mich mal daran versuchen das Ding aufzurämen. Werde ich heute Abend noch an den post anhängen.
                          Falls ich da noch ein paar fehler mache wäre es nett wenn du mich darauf hinweist... Irgendwann muss ich es ja lernen.

                          Gruß und Dankeschön für deine Mühen!

                          Kommentar


                            #28
                            Keine Ursache

                            Vieleicht behebt sich das Problem durch die Bereinigung von selbst.

                            Dazu empfehle ich dir alle Zustände 1x am Anfang des Plugin's einzulesen und in Variabeln zu schreiben. Danach in allen Schleifen und abfragen nur noch die Variabeln benutzen. Damit werden schon gewisse Fehlerquellen und Störfaktoren ausgeschlossen
                            Gruss Patrik alias swiss

                            Kommentar


                              #29
                              jup so hatte ich das auch geplant.

                              Code:
                              ##########################################################
                              
                              #################################################################
                              # do not change anything below, all config stays above
                              #################################################################
                              
                              my $schwarz= '13/2/1';
                              my $blau= '13/2/2';
                              my $gelb= '13/2/4';
                              my $rot = '13/2/3';
                              my $Anwesenheit = '13/2/0';
                              my $begruessung = '13/2/5';
                              # subscribe plugin and call it only when necessary
                              $plugin_subscribe{$schwarz}{$plugname} = 1;
                              $plugin_subscribe{$gelb}{$plugname} = 1;
                              $plugin_subscribe{$blau}{$plugname} = 1;
                              $plugin_subscribe{$rot}{$plugname} = 1;
                              $plugin_info{$plugname.'_cycle'} = 0;
                              
                              
                              my @AlleButtons;
                              push @AlleButtons, {besitzer => "Elisa", name => "rot", GA => "13/2/3"};
                              push @AlleButtons, {besitzer => "Volker", name => "schwarz", GA => "13/2/1"};
                              push @AlleButtons, {besitzer => "Samuel", name => "blau", GA => "13/2/2"};
                              push @AlleButtons, {besitzer => "Christina", name => "gelb", GA => "13/2/4"};
                              
                                   my $status = knx_read($Anwesenheit ,0,1);
                                   my $rot_stat = knx_read($rot,0,1);
                                   my $schwarz_stat = knx_read($schwarz,0,1);
                                   my $gelb_stat = knx_read($gelb,0,1);
                                   my $blau_stat = knx_read($blau,0,1);
                               
                              
                              foreach my $element (@AlleButtons) {
                                   if ($msg{'dst'} eq ($element->{GA}) && ($msg{'apci'} eq 'A_GroupValue_Write') && knx_read($msg{'dst'},0,1) != $plugin_info{$plugname.'_' . ($element->{name}) })
                                   {
                                    
                                        if (($msg{'value'} == 01) && ($status == 00)) {
                                       knx_write($Anwesenheit ,1,1);
                                        knx_write($begruessung,1,1);
                                       plugin_log($plugname,"name: " . $status);
                                        }
                                       
                                        
                                        elsif (($msg{'value'} == 00) && ($rot_stat == 00) && ($gelb_stat == 00) && ($schwarz_stat == 00) && ($blau_stat == 00)) {               
                                         knx_write($Anwesenheit ,0,1);
                                         plugin_log($plugname,"name: " . $element->{name} . "; aus: ");
                                        }
                                  $plugin_info{$plugname.'_' . ($element->{name}) } = knx_read($element->{GA} ,0,1);
                                  $plugin_info{$plugname.'_' . ($Anwesenheit) } = knx_read($Anwesenheit ,0,1);
                                  }
                                    
                                 else {
                                        next;
                                   }
                              }
                              scheint soweit zu funktionieren. Ich spiele noch ein wenig mit den I-Buttons um mögliche Probleme auszuschließen.

                              Gruß

                              Kommentar


                                #30
                                Sieht wirklich sehr viel übersichtlicher aus.

                                Ich hoffe das klappt nun. Ansonsten würde ich in den Pluginlog noch die aktuelle Zeit schreiben. Dann läst sich später besser erkennen ob die Schaltvorgänge durch das Plugin oder durch sonst etwas ausgelöst werden.
                                Gruss Patrik alias swiss

                                Kommentar

                                Lädt...
                                X