Ankündigung

Einklappen
Keine Ankündigung bisher.

I-Button Plugin wiederholt sich ohne Grund

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

    [wiregate] I-Button Plugin wiederholt sich ohne Grund

    Hallo,

    folgendes Plugin läuft bei mir für die Anwesenheitserkennung per I-Buttons:

    Code:
    ##########################################################
    # Script zur Anwesenheits Steuerung per I-Buttons
    # Version 0.3
    #
    # Allgemeine Hinweise:
    # Begruessung per mpd Instanz
    # die globale definition der I-Buttons (Farben) dient um das Plugin auf die GA anzumelden
    # die merker definition dient dazu die telegram wiederholung alle 300s abzufangen und nicht jedesmal 
    # begruesst zu werden.
    # Die Audio Files zur Begruessung sind als "Besitzer" definiert. jeweils als "Besitzer".mp3 in der 
    # Datenbank der mpd Instanz
    
    ## GA´s der mpd Instanz
    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 $verstaerker = '13/1/2';
    
    # mpd
    my $IP = "192.168.178.33";
    my $Port = "6602";
    my $Lautstaerke = "70";
    
    # subscribe plugin and call it only when necessary, script will be activated if telegrams to the deffined GA are send.
    $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;
    
    # ein Array der Objecte mit definierten namen, und den dazugehörigen GA´s
    # GA => GA des I-Buttons
    # merker => merker GA des jeweiligen I-Buttons um die Telegram Wiederholung abzufangen
    # besitzer => Name der mp3 (Begruessung) ohne Dateiendung
    my @AlleButtons;
    push @AlleButtons, {besitzer => "Elisa", name => "rot", GA => "13/2/3", merker => "13/2/8"};
    push @AlleButtons, {besitzer => "Volker", name => "schwarz", GA => "13/2/1", merker => "13/2/10"};
    push @AlleButtons, {besitzer => "Samuel", name => "blau", GA => "13/2/2", merker => "13/2/9"};
    push @AlleButtons, {besitzer => "Christina", name => "gelb", GA => "13/2/4", merker => "13/2/7"};
    
    #################################################################
    # do not change anything below, all config stays above
    #################################################################
     
     # Plugin für jedes oben definiertes Element ausführen
    foreach my $element (@AlleButtons) {
    #nur ausführen wenn das Ziel die definierte GA ist und das Telegram ein Write Telegram ist und kein Read oder Response Telegram. Der Status der Elemente wird unten im Plugin "gemerkt"
         if ($msg{'dst'} eq ($element->{GA}) && ($msg{'apci'} eq 'A_GroupValue_Write') && knx_read($msg{'dst'},0,1) != $plugin_info{$plugname.'_' . ($element->{name}) })
         {
          ## Status der GA´s holen
         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 $stat = knx_read($element->{merker},0,1);
         ## definierte if else anweisung die ausgeführt werden soll nach bestimmten zuständen
              if (($msg{'value'} == 01) && ($status == 00)) {
             knx_write($Anwesenheit ,1,1);
              plugin_log($plugname,"name: " . $status);
              }
             if (($msg{'value'} == 01) && ($stat == 00)) {
             knx_write($verstaerker, 1,1);
             knx_write($element->{merker}, 1,1);
             my $debug = `MPD_HOST=$IP MPD_PORT=$Port mpc clear && MPD_HOST=$IP MPD_PORT=$Port mpc add $element->{besitzer}.mp3 && MPD_HOST=$IP MPD_PORT=$Port mpc volume $Lautstaerke && MPD_HOST=$IP MPD_PORT=$Port mpc play`;
             }
             
             if (($msg{'value'} == 00) && ($stat == 01)) {
             knx_write($element->{merker}, 0,1);
             }
              
              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: ");
              }
              
        #merken der Zustände:
        $plugin_info{$plugname.'_' . ($element->{name}) } = knx_read($element->{GA} ,0,1);
        $plugin_info{$plugname.'_' . ($Anwesenheit) } = knx_read($Anwesenheit ,0,1);
       # $plugin_info{$plugname.'_' . ($element->{merker}) } = knx_read($element->{merker} ,0,1);
        }
     # wenn keine der oben genannten bedingungen zutrifft dann das nächste Element abarbbeiten
       else {
              next;
         }
        
    }
    Anfangs dachte ich es läuft ohne Probleme, aber warum auch immer wiederholt sich die Ansage unregelmäßig ohne Grund.
    Die wiederholung der I-Button Telegramme alle 300s hab ich durch eine "merker" GA umgangen. Warum sich die Ansage wiederholt konnte ich nicht nachvollziehen.
    Es wird ohne das ein I-Button Telegram über den Bus gesendet wird, der Verstärker angeschalten und die Ansage abgespielt. Immer "Phasenweise" wechseln sich der rote und der gelbe I-Button ab. Nur warum ein sehr seltsames Phänomen!

    Woran könnte das liegen?

    Gruß

    #2
    Kann es sein, dass Du die Zeit für die Ausführung vorher auf 300 s gestellt hattest? Ich hatte vorgestern einen ähnlichen Effekt, bei dem ich die Zeit erst auf 0 gestellt hatte, und da hat er ca 2x in der sekunde ein telegramm geschickt, obwohl die Zeit inzwischen auf 300s stand. Nach einem wiregate-Dameon Neustart gings dann.

    Gruss,

    der Jan

    Edit: Also zumindest immer passiert das nicht. Hab das gerade mit einem Test-Plugin ausprobiert. Aber ich hatte das Gefühl schonmal, dass ich eine Zeitänderung vorgenommen hatte und die nicht übernommen wurde. Vielleicht kann sich da was verschlucken beim Speichern?
    KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

    Kommentar


      #3
      Ne leider nicht. Das Plugin war immer ohne zyklus Zeit. Es wird trotzdem alle 300s ausgeführt (ersichtlich an den I-Button Telegrammen). Deshalb auch der merker...
      Wenn der Verstärker angeschalten wird, bzw die Ansage abgespielt wird ist der Auslöser aber kein I-Button Telegram, es wird "einfach so" abgespielt?

      Ist es möglich das "alte" Plugins die gelöscht wurden noch irgendwo als Leiche liegen? So dass sie die laufenden durcheinander bringen?

      Gruß

      Edit: Nicht das Plugin wird ausgeführt, sondern die I-Buttons senden alle 300s. Deshalb auch der Merker!

      Kommentar


        #4
        Zitat von vlamers Beitrag anzeigen
        Ist es möglich das "alte" Plugins die gelöscht wurden noch irgendwo als Leiche liegen? So dass sie die laufenden durcheinander bringen?
        Nein, die Plugins werden "heiss" gelesen und ausgeführt, wo keine Datei, da ist auch keine Plugin-Leiche.
        Allerdings ist $plugin_info{PLUGINNAME_..} sehr persistent, daher könnte etwas unerwünschtes kommen(?)

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

        Kommentar


          #5
          Hmm ok da könnte das problem liegen denke ich.

          wie krieg ich den das plugin_info wieder raus? Wenn ich es nur auskommentiere bleibt er am letzten status hängen....

          Code:
          $plugin_info{$plugname.'_' . ($element->{merker}) } = knx_read($element->{merker} ,0,1);
          hatte es mit auskommentieren versucht aber entweder scheitert es an meinem Plugin oder er hat noch stati irgendwo gespeichert...

          Gruß

          Kommentar


            #6
            emax hat mir das schon abgenommen: https://knx-user-forum.de/wiregate/1...tml#post184453

            Im Prinzip wollte ich das - alles aus $plugin_info automatisch löschen, was nicht mit einem noch existierenden $plugname beginnt - schon lange machen aber ich trau mich nun nicht mehr so recht. Weil wissentlich eben einige Plugins im Feld dann Probleme bekommen.
            Es kostet nicht die Welt, höchstens Übersicht und daher lieber explizit, ausserdem hat sich ja gezeigt das die User hier sehr wohl damit umzugehen wissen, was da nun drinsteht oder drinstehen soll, also irgendwelches automagic-löschen vermutlich nur mehr Verwirrung stiftet..

            Aber explizit löschen geht so:
            delete $plugin_info{$plugname.'_MEINS');
            wie "MEINS" heisst sollte man auf der Plugin-seite sehen (relativ egal was man getrickst hat - und man kann da wie wir mittlerweile gelernt haben recht viel tricksen, also auch arrays, hashrefs etc. in den eigentlich nur zweidimensionalen Hash $plugin_info reinverstecken!)

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

            Kommentar


              #7
              Hmm das plugin gibt es ja noch. Ich bin nur auf der suche warum ich die ansagen einfach so bekomme. Wenn ich die plugin_infos auskommentiere, bleibt er auf dem letzten stand hängen. Deswegen muss ich nur bestimmte plugin_infos löschen und nicht alle des plugins...
              Könntest du mir einen tipp geben wo die gespeichert werden? Dann lösch ich das manuell raus.

              Gruß

              Sent from my LG-P920 using Tapatalk

              Kommentar


                #8
                $plugin_info wird am Ende des Tages als tied hash in einer BDB gespeichert, an "manuelles bearbeiten" ist da wirklich nichtmal ansatzweise zu denken
                Aber aus dem Plugins heraus ist es eigentlich einfach;
                wiegesagt, auf der Plugin-Seite sieht man unter der Liste alle vorhandenen als
                einfache String-Darstellung und kann es so auch ggfs. einmalig, händisch mit delete rauslöschen.

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

                Kommentar


                  #9
                  Ok,

                  hatte das in dem Plugin nicht verstenden, da in der cleanup.pl und in der cleanup.conf "Keys" eingegeben werden können. Hatte sie nicht in der conf geändert. Hab jetzt mal alle Plugin_infos die I-Button beinhalten entfernt. Mal sehen ob es was bringt. Dankeschön!

                  Gruß

                  nochwas: kann man nicht alle Plugin_Infos löschen? da die die benötigt werden eh neu geschrieben werden?? Das würde mein durcheinander evtl aufräumen

                  Kommentar


                    #10
                    Zitat von vlamers Beitrag anzeigen
                    nochwas: kann man nicht alle Plugin_Infos löschen? da die die benötigt werden eh neu geschrieben werden?? Das würde mein durcheinander evtl aufräumen
                    Doch, wird aber beim shutdown geschrieben also auf der SSH-Konsole sowas wie

                    Code:
                    killall wiregated.pl
                    sleep 1
                    rm /etc/wiregate/wiregate_plugin.db
                    /etc/init.d/wiregated restart
                    Das wird so NA/defekt neu geschrieben..

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

                    Kommentar


                      #11
                      Wenn wir hier schon beim Werte-Löschen sind:

                      Feature-Wunsch:
                      Auf der Plugin-Seite stehen ja alle Werte unten schön aufgelistet. Hier an jeden Wert noch eine Checkbox mit löschen so wie einen Button für Wert-Ändern wäre genial...
                      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


                        #12
                        Das kann so einfach glatt ohne Diskussion auf die Feature-Request Liste
                        (ist auch einfach)

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

                        Kommentar

                        Lädt...
                        X