Ankündigung

Einklappen
Keine Ankündigung bisher.

Logic im Plugin

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Logic im Plugin

    Hallo in die Runde


    Ich möchte in einem neuen PLUGIN die bestehenden Logiken übernehmen.
    Jede Logik habe ich bereits nach der Doku mit den Daten der template.py ergänzt und mit den entsprechenden
    Hinweisen und Erklärungen eingepflegt.

    Nur folgende Erklärung in der Doku verstehe ich nicht.
    Was ist 'xxx"?

    Hier der Text aus der Beschreung

    def parse_logic(self, logic):
    """
    Default plugin parse_logic method
    """
    if 'xxx' in logic.conf:
    # self.function(logic['name'])
    pass​

    Das Plugin ist erstellt und läuft in den wesentlichen Funktionen.

    Jetzt würde ich gerne einige Logic-Funktionen aktivieren.

    A1_Backup:
    visu_acl: 'true'
    enabled: 'true'
    filename: A1_Backup_restore.py
    watch_item: lager.backup

    A11_sqlsic:
    enabled: 'true'
    visu_acl: 'true'
    filename: A11_mysqlsic.py
    crontab: 00 13 * *
    watch_item: lager.sic

    A01_test:
    visu_acl: 'true'
    enabled: 'true'
    filename: a01_exeltest.py
    watch_item: lager.exel

    A22_test:
    visu_acl: 'true'
    filename: A22_test.py
    crontab: 00 14 * *
    ​ watch_item: lager.test

    Sorrry, die Einrückungen sind nach der Eingabe als Text verschwunden, sind aber in dem logic-file enthalten!!

    Wer kann mir bitte am Beipiel eines Aufrufes das '###' entschlüssen
    und vielleicht die richtige Syntax in (logic['name']) aufzeigen.

    Leider bin ich hier nach vielen Versuchen erfolglos geblieben!

    Danke für jeden Hinweis!!

    Wolfgang
    Zuletzt geändert von schloessl; 11.10.2023, 09:32.

    #2
    Hallo, ich verstehe ich nicht was du machen willst. Kannst du mal ein konkretes Beispiel nennen? Was deine Logik macht und warum du das jetzt als Plugin gemacht werden soll.

    Mit parse_logic method kann man in einem plugin auf einen logic-Aufruf reagieren. Du willst aber glaube was anderes.
    Zuletzt geändert von android; 11.10.2023, 12:04.

    Kommentar


      #3
      Hallo android,
      danke für die Antwort.

      Ich habe ein Plugin aus alten Zeiten in die neue Form übertragen. Nach einigen Problemen mit dem Wechsel der Datenbank läuft das Plugin wieder!

      In der VISU mache ich die Daten sichtbar und verwaltbar. Über Buttons in der Maske konnte ich vorwärts/ rückwärts durch die Daten scrollen, neue Sätze anlegen oder löschen und Auswertungen anstoßen.

      Das hatte ich über Logiken gelöst. Siehe oben in den leider ohne Einrückungen angezeigten Logiken.

      Jetzt im neuen Plugin sollen die "logics" in das Plugin eingebettet werden. Laut DOKU in der Syntax
      def parse_logic(self, logic):
      """
      Default plugin parse_logic method
      """
      if 'xxx' in logic.conf:
      # self.function(logic['name'])
      pass​

      Hier scheitere ich!
      Was soll "xxx" sein ?
      Na und vielleicht der (logic['name']), mit Pfad oder nur z.B. 'A1_Backup'

      Gibt es irgendein Plugin das mir helfen könnte?

      Getestet habe ich einige Varianten, leider ohne Erfolg!

      Die Frage ist nur, wie bringe ich die Logic im Plugin eingebunden,

      Ich hoffe auf Hilfe!

      LG
      Wolfgang



      Kommentar


        #4
        Warum postest du nicht mal deinen gesamten Code? Ich verstehe es immer noch nicht so ganz. Es gibt eine Anleitung wie man Code postet, damit Einrückungen passen.

        xxx ist ein beliebiges Keyword, welches in der logic.conf (und dann in deinem Plugin) verwendet werden kann, um die Logik mit einem Plugin zu verknüpfen.

        Auf die schnelle habe ich knx, memlog, mailrcv und asterisk Plugin gefunden, die das nutzen.

        Kommentar


          #5
          Hallo schloessl,

          so wie ich das verstehe wird die "parse_logic" für jede angelegte Logik beim Start von shNG in jedem Plugin aufgerufen.
          Über den Name der Logik der in logic['name'] übergeben wird kannst du in Deinem Plugin entscheiden was Du mit dieser Information machen möchtest.
          In Deinem Fall müsstet Du dann auf die Namen "A1_Backup_restore.py" bzw. "A1_Backup_restore" prüfen und dann entsprechend reagieren.

          Den tatsächlichen Use-Case habe ich aber nicht verstanden. Die Logiken werden durch watch-Items getriggert. Was soll das Plugin dann noch machen ?
          Wenn Du die Funktionen der Logiken in einem Plugin abbilden möchtest wäre der Ansatz aus meiner Sicht ein anderer.
          Du möchtest dann wahrscheinlich auf Zustandsänderungen der Items eine Funktion ausführen.

          Du müsstest für das Plugin Item-Attribute definieren (z.B. my_Plugin_Function : "Backup_Restore"). Diese bei Deinen Item hinterlegen.

          Item-Definition :
          Code:
          A1_Backup:
              visu_acl: 'true'
              type : bool
              my_Plugin_Function : 'Backup_Restore'
          Dann kannst Du in der parse_item-Methode des Plugins auf das Attribut "my_Plugin_Function" prüfen
          Code:
          if self.has_iattr(item.conf, 'my_Plugin_Function '):
              self.logger.debug(f"Oooh ein Item für mein Plugin: {item}")
              return self.update_item
          und mit "return self.update_item​" das Item bei Änderungen für
          dein Plugin abonnieren.

          In der update_item-Funktion des Plugins kannst Du dann auf Werte / Zustände prüfen und entsprechende Funktionen ausführen. Diese Funktionen wären dann
          Deine bisherigen Logiken.

          Vielleicht hilft Dir das - oder ich bin am Thema komplett vorbei

          Viele Grüße
          Andre

          P.S.: Zum Thema Einrückungen im Forum hilft Dir dieser Thread

          Kommentar


            #6
            Danke für die schnellen Antworten.

            Ich denke Andrek du hast das Problem erkannt und deine Ausführungen klingen logisch. Ich werde jetzt die Anregungen in neue Tests einfließen lassen und berichten.
            Das if 'xxx' in logic.conf:
            # self.function(logic['name'])​

            ist in Deiner Ausführung / Beispiel einleuchtend!!

            Ich hoffe jetzt auf dem richtigen Weg zu sein.

            Warum nicht den Code übermitten, es sind doch einige Items-Dateien mit einen Unzahl an Feldern, Logiken und das eigentliche Plugin. Das Problem lag aber nur in den dargestellten 3 Zeilen, die mir Rätsel aufgeben.

            Ich hoffe es bleibt dabei!

            Noch ein paar Tests, dann wandert das Plugin ins "Develope"

            Danke für die Hinweise, den Pluginnamen mit ähnlicher Lösung!

            LG
            Wolfgang

            Kommentar

            Lädt...
            X