Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin Entwicklung -> run() vor parse_item() ?!

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

    Plugin Entwicklung -> run() vor parse_item() ?!

    Hi,

    ich stehe gerade vor einer unschönen Angelegenheit:

    Mein Plugin startet Brav über die run() Methode und definiert dort einen Callback. Dieser wird getriggert und schaut ob das Item getriggert werden soll, aber das Item wurde noch nicht durch parse_item() zugeordnet und so wird der ausgelesene Zustand nicht auf das Item gesetzt.

    Ist das so Absicht und wie sollte man das am besten handeln?

    #2
    Die run Methoden der Plugins werden erst aufgerufen, nachdem alle Items eingelesen und die parse_items abgearbeitet sind. Die Ursache für das Verhalten bei Dir muss woanders liegen.

    Hier der Ablauf des Starts von SmartHomeNG:

    Code:
            #############################################################
            # Start Scheduler
            #############################################################
    
    
            #############################################################
            # Init Connections
            #############################################################
            self.connections = lib.connection.Connections()
    
            #############################################################
            # Init and start loadable Modules
            #############################################################
    
    
            #############################################################
            # Init Plugins
            #############################################################
    
            Plugins laden und worker Thread je Plugin erzeugen
    
    
            #############################################################
            # Init Items
            #############################################################
    
            Items parsen
              Je Item
              - In allen Plugins 'parse_items' aufrufen
            für alle Items: init_prerun (eval Aufbereitung)
            für alle Items: init_run (eval_trigger hinzufügen)
    
    
            #############################################################
            # Init Logics
            #############################################################
    
            Logiken initialisieren
              Je Logik:
              - In allen Plugins 'parse_logic' aufrufen
              - Logik Trigger für 'watch_items' setzen
    
    
            #############################################################
            # Init Scenes
            #############################################################
    
            Szenen initialisieren
    
    
            #############################################################
            # Start Connections
            #############################################################
            self.scheduler.add('Connections', self.connections.check, cycle=10, offset=0)
    
            #############################################################
            # Start Plugins
            #############################################################
            self._plugins.start()
    
            #############################################################
            # Execute Maintenance Method
            #############################################################
            self.scheduler.add('sh.gc', self._maintenance, prio=8, cron=['init', '4 2 * *'], offset=0)
    
            #############################################################
            # Main Loop
            #############################################################
    Bei Init Items erfolgt das parsen. Die run Methoden werden erst in Start Plugins (vorletzter Init Schrit) aufgerufen.
    Viele Grüße
    Martin

    There is no cloud. It's only someone else's computer.

    Kommentar


      #3
      Ok, stimmt - es ist einfach schon spät

      Es muss wohl irgendwie mit dem Callback zu tun haben. Im Callback der in der Plugin-Klasse definiert ist will ich auf die aktuelle Instanz der Plugin-Klasse zugreifen.

      Scheinbar bekommt er das nicht hin oder ich habe noch einen Fehler im Code. Werde das mal genauer debuggen müssen.

      EDIT: ok, es lag an einem Fehler im Code. shng list aus der Items-YAML Datei den Zahlenwert als String ein und nicht als Int.
      Das konnte er dann nicht finden und hat das Item-Update deswegen nicht ausgeführt.
      Zuletzt geändert von TCr82; 06.12.2017, 00:33.

      Kommentar

      Lädt...
      X