Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin-Entwicklung: Verständnisfrage

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

    Plugin-Entwicklung: Verständnisfrage

    Hallo,

    ich versuche mich gerade an einem Plugin und hätte da ein paar Fragen:

    1a. parse_item wird einmal nach dem laden der items/*.conf aufgerufen?
    1b. parse_item muss update_item aufrufen, oder optional?
    2. update_item wird später nur bei Änderung des Items aufgerufen, auf dem eine Änderung stattfindet? Kann ich im Code einen Eventlistener auf ein anderes Item definieren, ohne gleich wie bei dem visu Plugin über add_event_listener alle Events abzufangen? Oder wird generell bei jedem Item-Update (egal ob das Plugin zugeordnet ist oder nicht) die Funktion update_item jedes Plugins aufgerufen?

    Gruß,
    Thomas

    #2
    Hi Thomas,

    parse_item wird von jedem Item aufgerufen.
    Wenn es eine Methode zurück liefert, in der Regel update_item, dann wird diese Methode bei Item-Änderungen aufgerufen. Wenn None zurück gegeben wird, dann wird das Plugin nicht von dem Item aufgerufen.

    Klar?

    Bis bald

    Marcus

    Kommentar


      #3
      ok, jetzt verstehe ich es denke ich mal:

      Beim Initialisieren über parse_item wird entschieden, ob dem Item eine Update Funktion für das Plugin angehängt wird - richtig?

      Damit kommt ich dann erstmal weiter - danke

      Kommentar


        #4
        kann ich auch manuell einem Item eine Update funktion anhängen?

        In meinem Plugin werden die Items welche Involviert sind über die Attribute mitgegeben...

        nun da evtl. die Reihenfolge nicht immer nacheinander ist, weiß ich ja nicht wirklich ob das andere Item dazu gehört und ich kann so kein Update-Event darauf anlegen...

        Aber es ist ja sicher möglich, da ich den Namen kenne, dass ich ein Update Event manuell darauf lege? Hast du da eine Idee?

        Also folgendes Beispiel:

        Code:
        [eg]
              [test]
                 myplugin = on
                 myplugin_send = eg.test.a
                 myplugin_read = eg.test.b
                 [a]
                 [b]
        in der funktion parse_item für eg.test möchte ich dann gleich den beiden anderen Item die funktion update_item anhängen.

        Soweit ich item.py überflogen habe geht das mit add_trigger_method(updateFunction)

        also dann so: eg.test.a.add_trigger_method(return self.update_item) oder wie?

        Kommentar


          #5
          Hi Thomas,

          doch das passt so. Die Kinder existieren, wenn die Plugin.parse_item aufgerufen werden.

          Bis bald

          Marcus

          Kommentar


            #6
            wenn es aber mal keine Kinder sind, sondern wo anders definiert sind? das meinte ich ja vorhin mit "da evtl. die Reihenfolge nicht immer nacheinander ist"

            Zitat von TCr82 Beitrag anzeigen
            Soweit ich item.py überflogen habe geht das mit add_trigger_method(updateFunction)

            also dann so: eg.test.a.add_trigger_method(return self.update_item) oder wie?
            Evtl. so: self._sh.item[eg.test.a].add_trigger_method(return self.update_item) ?

            oder so: self._sh.eg.test.a.add_trigger_method(return self.update_item)

            Oder kann es auch hier vorkommen, dass das Item noch nicht existiert?

            Kommentar


              #7
              irgendwelche Antworten?

              Ausserdem: Die Kinder Existieren zwar, aber kann ich dann auch dort einen Update-Trigger dran hängen? Weil wenn ich mit return auf dem Eltern-Item eine Funktion zurück liefere, dann wird dort ja immer nur bei einem Update des Eltern Objekts die Update-Funktion getriggert... nicht bei den Kinder Objekten...?!

              Und noch etwas wäre mir wichtig:

              Wenn ich jetzt in der Variable die ID des Items habe, wie komme ich dann vom Code her wieder an das Item dran?

              Also z.B.:
              a=eg.test.a
              dann so?
              self._sh.item[a]

              Sorry das ich da etwas dran rum bohre, komme mometan nicht so ganz mit python zurecht...

              Kommentar


                #8
                Hallo Thomas,

                kein Problem, Du kannst bei mir auch gerne eine garantierte Reaktionszeit einkaufen.

                Wenn das Plugin bzw. parse_item aufgerufen wird, existiert noch nicht der komplette Item-Baum.

                Vllt. solltest Du die Items einfach beim Start des Plugins selber parsen?
                Ein paar grundlegende Methoden sind übrigens in der Doku beschrieben: SmartHome.py - Logic Configuration

                Was willst Du eigentlich genau machen? Was für ein Plugin? Und wieso liegt die Plugin-Config über den ganzen Baum verstreut?

                Bis bald

                Marcus

                Kommentar


                  #9
                  ich will ein RTR Plugin bauen. Als erstes versuche ich einen PI-Controller zu Integrieren. Dazu muss ich nunmal das Plugin mit den verschiedenen Objekten bestücken, mit denen gearbeitet werden soll.

                  Die Idee, dass ich in dem Plugin die Items selbst durchlaufe ist gar nicht mal so schlecht, wird halt wohl nur etwas mehr Code geben, aber dafür sauber.

                  Werden die Plugins oder erst die Items Inizialisiert? Wenn erst die Plugins, wo soll ich das dann am besten unterbringen, denn die Items sind ja beim Aufruf der Klasse noch nicht vorhanden.

                  EDIT: ok, ein blick in die sh.py verrät, erst werden die plugins inizialisiert, dann werden die items inizialisiert, was in den plugins die parse_item funktion aufruft und wenn das alles fertig ist werden die plugins mit der start funktion gestartet: also wäre dort der ideale Punkt dafür...

                  Problem nur die Funktion ist nicht angelegt? Es gibt nur überall run()? Da rein also? Ist die Funktion start() vererbt von der threading Klasse?

                  Zitat von TCr82 Beitrag anzeigen
                  Wenn ich jetzt in der Variable die ID des Items habe, wie komme ich dann vom Code her wieder an das Item dran?

                  Also z.B.:
                  a=eg.test.a
                  dann so?
                  self._sh.item[a]
                  Dazu noch ne Idee? Steht leider nichts dazu in der genannten Doku

                  EDIT: ok, sehe gerade das hatten wir schonmal: sh.return_item()

                  Kommentar


                    #10
                    Ich habe es mittlerweile anders gelöst... Mal sehen wenn es zur ersten öffentlichen Version herangereift ist

                    Gesendet von meinem GT-I9100 mit Tapatalk

                    Kommentar

                    Lädt...
                    X