Hallo,
ich habe Kasa-Hubs (KH100) und möchte sie als Türklingel einsetzen. Dazu habe ich eine Logik geschrieben, die die asynchrone python-kasa Lib nutzt. Die Logik hat das knx-Telegramm als Watch-Item, das beim Klingeln gesetzt wird.
Im Prinzip sieht die Logik so aus:
Weil ich drei Hubs im Haus verteilt habe, habe ich diese Logik dreimal mit verschiedenen Namen geschrieben. Jede Logik spricht eine andere IP-Adresse an. Das funktioniert auch soweit, ist allerdings nicht schön wegen der Code-Redundanz.
Ich hätte lieber nur eine Logik, die die Funktion do_it(ip_adresse) dreimal aufruft. asyncio.run() wartet aber auf das Ende der Koroutine, so dass nicht gleichzeitig geklingelt wird, wenn ich drei asyncio.run() Aufrufe hintereinander codiere. asyncio.create_task() wartet nicht, liefert aber die Fehlermeldung "create_task(), Exception: no running event loop".
Wie erzeuge ich in der Logik einen Event Loop, ohne smarthomeng zu stören?
Gibt es in smarthomeng nicht bereits einen Event Loop?
Wie beende ich einen neu erzeugten Event Loop sicher, wenn sehr schnell hintereinander geklingelt wird und die Logik erneut aufgerufen wird, obwohl der erste Aufruf noch nicht beendet war?
Danke im Voraus für eure Tipps!
ich habe Kasa-Hubs (KH100) und möchte sie als Türklingel einsetzen. Dazu habe ich eine Logik geschrieben, die die asynchrone python-kasa Lib nutzt. Die Logik hat das knx-Telegramm als Watch-Item, das beim Klingeln gesetzt wird.
Im Prinzip sieht die Logik so aus:
Code:
async def do_it(ip_adresse): dev = await Discover.discover_single(ip_adresse, ...) await dev.update() # Gerätedaten laden # kasa-Funktionen zum Klingeln nutzen await dev.protocol.close() asyncio.run(do_it(ip_adresse))
Ich hätte lieber nur eine Logik, die die Funktion do_it(ip_adresse) dreimal aufruft. asyncio.run() wartet aber auf das Ende der Koroutine, so dass nicht gleichzeitig geklingelt wird, wenn ich drei asyncio.run() Aufrufe hintereinander codiere. asyncio.create_task() wartet nicht, liefert aber die Fehlermeldung "create_task(), Exception: no running event loop".
Wie erzeuge ich in der Logik einen Event Loop, ohne smarthomeng zu stören?
Gibt es in smarthomeng nicht bereits einen Event Loop?
Wie beende ich einen neu erzeugten Event Loop sicher, wenn sehr schnell hintereinander geklingelt wird und die Logik erneut aufgerufen wird, obwohl der erste Aufruf noch nicht beendet war?
Danke im Voraus für eure Tipps!

