Ankündigung

Einklappen
Keine Ankündigung bisher.

Unterstützung bei Plugin-Entwicklung mit asyncio Loop

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

    #16
    Was meinst Du mit "beim Hochlauf" genau?
    Viele Grüße
    Martin

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

    Kommentar


      #17
      Zitat von Msinn Beitrag anzeigen
      Was meinst Du mit "beim Hochlauf" genau?
      Immer nach einem restart von smarthomeNG über z.B. das admin Interface habe ich folgende Logs:

      Code:
      2021-12-30  16:12:28 INFO     plugins.velux       Update item: 'dg.bad.lang', item has been changed by
      2021-12-30  16:12:28 INFO     plugins.velux       Update item: 'dg.bad.lang', item has been changed outside this plugin
      2021-12-30  16:12:28 DEBUG    plugins.velux       update_item was called with item 'dg.bad.lang' from caller 'knx', source '1.1.98:ga=3/0/10' and dest '3/0/10'
      2021-12-30  16:12:28 DEBUG    plugins.velux       Zu Fahren
      Scheinbar triggert das knx Plugin die Itemwerte aus dem cache oder so?

      Das Item sieht wie folgt aus:

      Code:
              lang:
                  type: bool
                  enforce_updates: 'yes'
                  visu_acl: rw
                  knx_dpt: 1
                  knx_cache: 3/0/10
                  velux_cmd: fahren
      Im Anhang die Dateien für das Plugin. Ist aber noch ein rudimentärer develop-stand und muss ich noch schön machen. Aktuell funktioniert es nur mit einem node (Dachfenstermotor) am Gateway und die Ip und das Passwort muss noch in der setup.py hinterlegt werden. Es werden noch nicht alle Status-Nachrichten die das Gateway schickt korrekt abgebildet aber Fahrbefehle senden funktioniert stabil.

      Angehängte Dateien

      Kommentar


        #18
        Zitat von android Beitrag anzeigen
        2021-12-30 16:12:28 INFO plugins.velux Update item: 'dg.bad.lang', item has been changed by
        2021-12-30 16:12:28 INFO plugins.velux Update item: 'dg.bad.lang', item has been changed outside this plugin
        2021-12-30 16:12:28 DEBUG plugins.velux update_item was called with item 'dg.bad.lang' from caller 'knx', source '1.1.98:ga=3/0/10' and dest '3/0/10'
        2021-12-30 16:12:28 DEBUG plugins.velux Zu Fahren
        Die Einträge sehen erstmal ganz normal aus. SmartHomeNG hat vom KNX eine Wertänderung über Gruppenadresse 3/0/10 erhalten und den Wert des Items verändert. Über diese Änderung wurde Dein Plugin durch Aufruf der Methode update_item() informiert. Ob die Daten aus dem KNXD Cache sind oder frisch eingelesen, kann SmartHomeNG nicht sehen. Falls Du keine Daten aus dem Cache haben möchtest, darfst Du halt kein knx_cache: angeben

        Wo ist das Problem?

        Viele Grüße
        Martin

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

        Kommentar


          #19
          Zitat von Msinn Beitrag anzeigen

          Wo ist das Problem?
          Ja ein wirkliches Problem des Plugins gibt es nicht. Ich hatte nicht an knx_cache gedacht, weil das mein quasi-Standard ist. So kommt es halt zu einer Diskrepanz beim Neustart und das Fenster könnte fahren, wenn im fahren-Objekt "auf fahren" steht und im Positions-Objekt vorher ein 0% gekommen ist und beide knx_cache beinhalten. Aber dann ist die Lösung ja einfach ich setz einfach beide auf knx_listen.

          Danke.

          Kommentar


            #20
            Ich klinke mich hier mal ein: ich versuche gerade die Lib "goodwe" zu nutzen, die mit asyncio geschrieben ist.

            Ich baue auf Basis des aktuellsten sample_plugin templates und mache in plugin_coro eine Verbindung zu WR auf und rufe die Daten ab + packe sie in Items.
            Das Problem ist, dass dieser Aufruf nur einmalig erfolgt. Ich hätte dies gerne via Cycle wiederkehrend. Ich rufe nur ab und werde nie Daten rausschreiben.

            Rein technisch klappt es, einen Scheduler zu erzeugen, der lediglich self.start_asyncio(self.plugin_coro()) aufruft. Aber so ganz sauber fühlt sich das nicht an.

            Ideen? Ansonsten muss ich mich wohl auch einarbeiten oder den Teil wieder rauskicken und nur die MQTT Schnittstelle zum WR im Plugin lassen.

            Kommentar


              #21
              Du musst dafür sorgen, dass die plugin_coro nicht endet. Schau mal in das hue_apiv2 Plugin. Das nutzt die neue asyncio Unterstützung.
              Dort ist eine While Schlefe (die keinen Code enthält) als Blocker. Die plugin_coro startet „nur“ die notwendigen asyncio Tasks um mit aiohue zu arbeiten. Einen Scheduler musst Du nicht erzeugen (wäre auch nicht wirklich zielführend). Du musst nur dafür sorgen, dass die plugin_coro nicht endet. Solange die läuft, gibt es eine asyncio Eventloop. Die arbeitet die Tasks ab, die Du in der plugin_coro gestartet hast und die Tasks, die Du (von der Thread Seite kommend) mit self.run_asyncio_coro() startest.

              Die Doku zur Verwendung der asyncio Unterstützung werde ich erst in den kommenden Wochen erstellen.
              Zuletzt geändert von Msinn; 03.04.2024, 15:44.
              Viele Grüße
              Martin

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

              Kommentar

              Lädt...
              X