Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Prüfung ob Plugin durch Codeänderung ausgeführt

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

    [wiregate] - √ - Prüfung ob Plugin durch Codeänderung ausgeführt

    Hallo zusammen,

    kann man irgendwie im Code abfangen ob das Plugin durch eine Änderungen im Code sofort gestartet wurde?

    Ich bin bisher nur darauf gekommen:
    (time() ne $plugin_info{$plugname.'_last'} + $plugin_info{$plugname.'_cycle'})
    und natürlich $msg ist leer

    Ich glaube, das funktioniert nicht ganz, da ich im Log immer einen kleinen Zeitversatz sehe.

    Danke
    Sascha

    #2
    Grundsätzlich:
    Sind alles Unix-Timestamps, also Sekunden seit 1.1.1970
    Plugins können (aktuell) aus drei Gründen aufgerufen werden:

    a) Speichern
    Kann man im Plugin auch selbst prüfen:
    (stat('/etc/wiregate/plugin/generic/' . $plugname)[9])

    b) Zyklus ($plugin_info{$plugname.'_cycle'})
    -> Abzufragen per $plugin_info{$plugname.'_last'} -> das wird bei zyklischem Aufruf oder nach einer Änderung aktualisiert, jedoch nicht bei einem Aufruf durch plugin_subscribe*

    c) plugin_subscribe* für eine GA oder Daten auf einem Filehandle (socket)

    -> Das einfachste zum debuggen dürfte hier sein, im Plugin selbst ein return "ich wurde aufgerufen"; bzw im plugin ein plugin_log($plugname, "hier bin ich");

    Eigentlich sind alle Plugins so aufgebaut, das sie bei einem zyklischen Aufruf (egal ob durch Zyklus, Neustart oder speichern) eben das tun, was sie müssen (Gruppenadressen subscriben, Sockets öffnen, ..) - nicht mehr.
    So wärs auch empfohlen weil für den Betrieb spielt es ja keine Rolle ob der Aufruf wegen restart, Zyklus oder Speichern erfolgte..

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

    Kommentar


      #3
      Zitat von makki Beitrag anzeigen
      Plugins können (aktuell) aus drei Gründen aufgerufen werden:

      a) Speichern
      Kann man im Plugin auch selbst prüfen:
      (stat('/etc/wiregate/plugin/generic/' . $plugname)[9])
      Wie wär denn dann die Abfrage?

      Doch nicht etwa:
      if (stat('/etc/wiregate/plugin/generic/' . $plugname)[9]) ???

      Ziel des ganzen ist die Ausführung eines bestimmten Codes wenn sich Parameter in den Definitionen geändert haben.

      2. Idee ist die Parameter in $plugin_info{$plugname.'_schlagmichtot'} zu speichern und zu vergleichen.
      Kann man in $plugin_info{$plugname.'_schlagmichtot'} auch Hash Values bzw. Arrays speichern?

      Danke
      Sascha

      Kommentar


        #4
        So was ähnliches hatte ich mir auch schon mal gewünscht.

        Im Grunde könnte ich mir eine ganz simple Lösung vorstellen: Einfach eine "globale" Variable definieren (z.B. $plugin_call_source), die einen Wert hat von (z.B.):
        1. Aufruf nach Restart WireGate
        2. Aufruf nach Speichern des Plugins
        3. Aufruf nach Zyklus
        4. Aufruf durch abonnierte GA
        5. Aufruf durch abonnierten Socket
        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


          #5
          Also so in etwa:

          Code:
          if (!$plugin_initflag) {
              return "Aufruf nach restart des daemons/WG";
          } elsif ((stat('/etc/wiregate/plugin/generic/' . $plugname))[9] > time()-10) {
              # bisschen unscharf ab PL30 wird $plugin_info{$plugname.'_last'} ert NACH dem Aufruf gesetzt 
              # damit ist eine bessere Auswertung möglich
              return "Aufruf durch speichern in den letzten 10sek";
          } elsif (%msg) {
              return "Aufruf durch Telegramm";
          } elsif ($fh) {
              return "Aufruf durch Daten am Socket";
          } else {
              return "Aufruf durch Zyklus";
          }
          Ab PL30 (soeben commited):
          Code:
          if (!$plugin_initflag) {
              return "Aufruf nach restart des daemons/WG";
          } elsif ($plugin_info{$plugname.'_lastsaved'} > $plugin_info{$plugname.'_last'}) {
              return "Aufruf durch speichern";
          } elsif (%msg) {
              return "Aufruf durch Telegramm";
          } elsif ($fh) {
              return "Aufruf durch Daten am Socket";
          } else {
              return "Aufruf durch Zyklus";
          }
          Makki
          EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
          -> Bitte KEINE PNs!

          Kommentar


            #6
            Zitat von makki Beitrag anzeigen
            Ab PL30 (soeben commited):
            Makki
            Wann steht den PL30 zur Verfügung?

            Kommentar


              #7
              Wie immer: wenns fertig ist Steht dann im Sticky-Thread Updates..

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

              Kommentar

              Lädt...
              X