Skip to content

Commit e09b386

Browse files
committed
review event loop for compatibility with last python version
1 parent b2353a5 commit e09b386

1 file changed

Lines changed: 31 additions & 11 deletions

File tree

src/interfacers/EmonHubKNXInterfacer.py

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,16 @@ def __init__(self, name, gateway_ip="127.0.0.1", local_ip="127.0.0.1", port=3671
6969
self._last_read_time = 0
7070

7171
try:
72-
self.loop = asyncio.get_event_loop()
72+
#self.loop = asyncio.get_event_loop()
73+
self.loop = asyncio.new_event_loop()
74+
self._loop_thread = threading.Thread(target=self._run_loop, name=f"{name}-asyncio", daemon=True)
75+
self._loop_thread.start()
76+
77+
fut = asyncio.run_coroutine_threadsafe(self.initKnx(gateway_ip, local_ip), self.loop)
78+
fut.result() # raise si erreur
7379

74-
task = self.loop.create_task(self.initKnx(gateway_ip, local_ip))
75-
self.loop.run_until_complete(task)
80+
#task = self.loop.create_task(self.initKnx(gateway_ip, local_ip))
81+
#self.loop.run_until_complete(task)
7682

7783
self.cargoList = {}
7884

@@ -81,6 +87,10 @@ def __init__(self, name, gateway_ip="127.0.0.1", local_ip="127.0.0.1", port=3671
8187
self.ser = False
8288

8389

90+
def _run_loop(self):
91+
asyncio.set_event_loop(self.loop)
92+
self.loop.run_forever()
93+
8494
def action(self):
8595
super().action()
8696

@@ -112,7 +122,7 @@ def device_updated_cb(self, device):
112122
name = device.name
113123
unit = device.unit_of_measurement()
114124

115-
self._log.info("Device:" + name + ' <> ' + str(value))
125+
#self._log.info("Device:" + name + ' <> ' + str(value))
116126

117127
pos = name.index("_")
118128
meter = name[0:pos]
@@ -173,7 +183,8 @@ async def setupSensor(self):
173183

174184

175185
def add(self, cargo):
176-
self.buffer.storeItem(f)
186+
#self.buffer.storeItem(f)
187+
self.buffer.storeItem(cargo)
177188

178189

179190
async def waitSensor(self):
@@ -203,18 +214,27 @@ def read(self):
203214
def start(self):
204215
self._log.info("Start KNX interface")
205216

206-
task = self.loop.create_task(self.setupSensor())
207-
self.loop.run_until_complete(task)
217+
# Setup sensors + start KNX dans la loop
218+
asyncio.run_coroutine_threadsafe(self.setupSensor(), self.loop).result()
219+
asyncio.run_coroutine_threadsafe(self.startKnx(), self.loop).result()
220+
221+
#task = self.loop.create_task(self.setupSensor())
222+
#self.loop.run_until_complete(task)
208223

209-
task = self.loop.create_task(self.startKnx())
210-
self.loop.run_until_complete(task)
224+
#task = self.loop.create_task(self.startKnx())
225+
#self.loop.run_until_complete(task)
211226

212227

213-
self.updater = self.Updater(self)
214-
self.updater.start()
228+
#self.updater = self.Updater(self)
229+
#self.updater.start()
215230

216231
super().start()
217232

233+
def close(self):
234+
# si EmonHub appelle close/stop, tu peux stopper proprement
235+
self._stop_evt.set()
236+
if self.loop.is_running():
237+
self.loop.call_soon_threadsafe(self.loop.stop)
218238

219239
def set(self, **kwargs):
220240
for key, setting in self._KNX_settings.items():

0 commit comments

Comments
 (0)