Was meinst Du mit "beim Hochlauf" genau?
Ankündigung
Einklappen
Keine Ankündigung bisher.
Unterstützung bei Plugin-Entwicklung mit asyncio Loop
Einklappen
X
-
Immer nach einem restart von smarthomeNG über z.B. das admin Interface habe ich folgende Logs:Zitat von Msinn Beitrag anzeigenWas meinst Du mit "beim Hochlauf" genau?
Scheinbar triggert das knx Plugin die Itemwerte aus dem cache oder so?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
Das Item sieht wie folgt aus:
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.Code:lang: type: bool enforce_updates: 'yes' visu_acl: rw knx_dpt: 1 knx_cache: 3/0/10 velux_cmd: fahren
Angehängte Dateien
Kommentar
-
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: angebenZitat von android Beitrag anzeigen2021-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
Wo ist das Problem?
Viele Grüße
Martin
There is no cloud. It's only someone else's computer.
Kommentar
-
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.Zitat von Msinn Beitrag anzeigen
Wo ist das Problem?
Danke.
Kommentar
-
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
-
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.
- Likes 1
Kommentar


Kommentar