@@ -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