Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin Aufrufzeit

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

    [wiregate] Plugin Aufrufzeit

    Mal eine kurze Frage zur Risikominimierung:

    Kann man eigentlich
    Code:
    $plugin_info{$plugname.'_cycle'} = 60;
    auch dynamisch vergeben, d.h. abhängig von einer Statusvariable im Plugin?
    lg Robert

    #2
    Falls du meinst in du die Aufrufzeit bei jeden Aufruf neu setzen kannst: ja, das geht.

    Gruß,

    Der Jan


    Sent from my iPhone using Tapatalk
    KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

    Kommentar


      #3
      Klar, kann man, ist auch so gedacht.
      Die wichtigste Unterscheidung, init oder zyklischer Aufruf siehe hier.

      Etwas Hintergrund, manchmal hat Spaghetticode auch Vorteile: es wird völlig wertfrei nachgesehen ob die letzte zyklische Ausführung länger her ist als time()-plugin...cycle.
      Allerdings muss man dazu beachten, das (derzeit) wenn das Plugin davor irgendwie 5sek verbummelt, erfolgt die Ausführung worst-case erst nach 65 statt 60sek.

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

      Kommentar


        #4
        Aufrufzyklus / cycle - gesetzt, aber ignoriert

        Hallo,
        ich bastle an einem Plugin, das zwei Zustände (aktiv und stand-by) hat.
        Im aktiven Zustand (und bei Start) setze ich 60s, im nicht-aktiven 1800s.

        Code:
        my $cycle_wait	= 1800;
        my $cycle_active	= 60;
        my $cycle	= $cycle_active;
        
        ....
        if (...) {
        	$cycle	= $cycle_wait;
        ...
        
        $plugin_info{$plugname.'_cycle'} = $cycle;
        Jetzt steht auch in der Tabelle der Plugins bei Aufrufzyklus 1800 drin, auch bei den Plugin Debug-Infos, aber das Ding wird trotzdem laut log alle 60s aufgerufen!

        Hä?
        Jemand ne Idee warum?
        Jemand ne Idee, was ich falsch mache?

        Danke, Gruß

        Kommentar


          #5
          Hast Du noch GAs aboniert? Evtl. gar welche die minütlich gesendet werden?
          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


            #6
            Eigentlich einfach:
            Wenn if (..) nicht ist, wird ohne else der plugin_cycle auf $cycle_active = 60; gesetzt und dann wirds eben Wunschgemäss alle 60s aufgerufen (?)

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

            Kommentar


              #7
              Zitat von Chris M. Beitrag anzeigen
              Hast Du noch GAs aboniert? Evtl. gar welche die minütlich gesendet werden?
              Hallo, ja eine ist abonniert, aber

              Code:
              if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $ga)
              wird nicht angesprungen.

              Kommentar


                #8
                Zitat von makki Beitrag anzeigen
                Eigentlich einfach:
                Wenn if (..) nicht ist, wird ohne else der plugin_cycle auf $cycle_active = 60; gesetzt und dann wirds eben Wunschgemäss alle 60s aufgerufen (?)
                In dem Fall wird die If(..) durchlaufen.
                Plugin_cycle wird auf 1800 gesetzt.
                Ich sehe das ja eben auch in der Tabelle auf der Plugins-Seite des WG und in der nachfolgenden Liste "Plugin Debug-Infos".
                Da steht überall 1800 drin.

                Aber laut /var/log/wiregate_plugin.log erfolgt der Aufruf alle 1s.

                Komischerweise steht aber in der Tabelle (Plugin-Seite, oben) unter "Zuletzt ausgeführt (s)" gerade "923" - ??????????

                Verstehe ich nicht.

                ????

                Kommentar


                  #9
                  Die "zuletzt ausgeführt" bezieht sich IIRC auf den letzten zyklischen Aufruf. Das würde also heissen, dass dein Plugin zuletzt vor 923s zyklisch aufgerufen wurde. Das würde ja mit 1800s cycle-time ganz gut möglich sein.

                  Die 1s Aufrufe wären dann durch eine GA getriggert. Vielleicht kannst Du mal das ganze Plugin posten? So ist eine Ferndiagnose etwas schwierig.

                  Gruss,

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

                  Kommentar


                    #10
                    Hallo und danke erst mal.
                    Das komplette Plugin würde ich Euch erst mal noch ersparen ... zumal ich so langsam das Problem einkreise und auch einen konkreten Verdacht habe ...

                    Sagt mal ...
                    Angenommen, ich hatte in einem Plugin eine GA (GA1) per $plugin_subscribe{} angemeldet ...
                    ... aber dann irgendwann mal in dem gleichen Plugin die GA (-> GA2) ausgetauscht ...
                    ... kann es dann irgendwie sein, dass das Plugin aber immer noch auf die GA1 hört (weil das Plugin immer noch das gleich ist, ich nie die GA irgendwie abgemeldet habe und das Wiregate seit dem immer durch lief, ....)?

                    Danke, Gruß

                    Kommentar


                      #11
                      AFAIK ist das so.
                      Die Plugin-Subscribes werden in ein Hash geschrieben, und solange du keinen Neustart machst, bzw. den wiregated nicht neu startest bleiben die bestehen.

                      Explizit löschen kannst du es mit

                      delete($plugin_subscribe{$GA}{$plugname});
                      Viele Grüße
                      Christian

                      Kommentar


                        #12
                        Merci!

                        Zitat von christian523 Beitrag anzeigen
                        delete($plugin_subscribe{$GA}{$plugname});
                        Danke Christian!
                        Gefahr erkannt, Gefahr gebannt!!!!
                        Das war es.

                        Nachdem ich nicht so Perl-bewandert bin ... kann man irgendwie auslesen, welche GAs mittels $plugin_subscribe{$GA}{$plugname} gesetzt sind?

                        Kommentar


                          #13
                          Du kannst Dir ein Plugin erstellen und den folgenden (quick&dirty erstellten) Code einfügen:

                          Code:
                          $plugin_info{$plugname.'_cycle'} = 0;
                          my $logstring;
                          my $k;
                          my $hashes;
                          for $hashes ( keys %plugin_subscribe ) {
                              $logstring =  "GA: $hashes: ";
                              for $k ( keys %{ $plugin_subscribe{$hashes} } ) {
                                   $logstring = $logstring."Pluginname: $k=$plugin_subscribe{$hashes}{$k} ";
                               plugin_log("subscribed_info:",$logstring);
                              }
                          }
                          return;
                          Der gibt Dir im Plugin-log alle aktuellen Werte von plugin_subscribe aus.
                          Viele Grüße
                          Christian

                          Kommentar


                            #14
                            Wunderbar gesagt, ich gehe nur etwas weiter: das ist sicher so
                            Ein "cleanup" wäre zwar möglich aber IMHO nicht sinnvoll, fast alle Besipiel-Plugins enthalten die Prüfung ob sie mit dieser GA auch gemeint sind und die Entscheidung auf welche GA's subscribed wird unterliegt bewusst nur dem Plugin..

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

                            Kommentar


                              #15
                              Prinzipiell scheint mir das so auch eigentlich ganz plausibel und okay.
                              Ich würde sagen, dass man die Philosophie etwas verstanden haben muss, um dann drauf zu kommen, dass ein Plugin auch auf eine GA hören kann, die gar nicht mehr im Plugin (-Code) auftaucht. Weiterhin kann jemanden dann überraschen, dass sich ein Plugin schließlich nach einem WG-Neustart anders verhält, als vorher (nämlich dann, wenn vorher eine GA abonniert war (die nicht mehr im Code auftaucht) und nach dem Neustart nicht mehr).

                              Auf jeden Fall bin ich der Phil. des WG etwas näher :-)
                              Und wer den Schritt noch vor sich hat, kann es nun hier nachlesen.

                              Danke alle!
                              mbx

                              Kommentar

                              Lädt...
                              X