diff --git a/brewpi.py b/brewpi.py index b4348ed..8a0fdbd 100644 --- a/brewpi.py +++ b/brewpi.py @@ -157,6 +157,9 @@ class TaskManager: return asyncio.gather(*funcs) +async def asleep(time): + await asyncio.sleep(time) + if __name__ == '__main__': if 0: taskmgr = PeriodicUpdaterThreaded() diff --git a/brewpi_gui.py b/brewpi_gui.py index 9f45d32..36d5532 100644 --- a/brewpi_gui.py +++ b/brewpi_gui.py @@ -12,6 +12,7 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self): QtWidgets.QMainWindow.__init__(self) loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) self.msg_dispatch = MessageDispatcher(auto_subscribe=True, loop=loop) self.ws_client = WsClient(listener=self.msg_dispatch, loop=loop) self.msg_pot = self.msg_dispatch.msgio_get('Pot') @@ -25,6 +26,7 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow): self.setupUi(self) self.actionStart.triggered.connect(self.connect) self.actionStop.triggered.connect(self.disconnect) + self.Slider.valueChanged.connect(self.on_slider_changed) self.send_data = Queue() def connect(self): @@ -33,21 +35,18 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow): def disconnect(self): self.ws_client.disconnect() + def on_slider_changed(self, value): + print("on_slider_changed {}".format(value)) + self.msg_heater.send_from_thread({'Activate': 1, 'Power': 10*value}) + def on_pot_changed(self, msg): - print("on_pot_changed") + print("on_pot_changed {}".format(msg)) def on_sensor_changed(self, msg): - print("on_sensor_changed") + print("on_sensor_changed {}".format(msg)) def on_heater_changed(self, msg): - print("on_heater_changed") - - async def on_send(self): - try: - data = await asyncio.get_event_loop().run_in_executor(None, self.send_data.get, True, 1) - return data - except: - return None + print("on_heater_changed {}".format(msg)) def closeEvent(self, event): print("Exitting gracefully!") diff --git a/ws/message.py b/ws/message.py index 60ca013..72506b4 100644 --- a/ws/message.py +++ b/ws/message.py @@ -4,9 +4,10 @@ import json class MsgIo: - def __init__(self, key, send): + def __init__(self, key, send, send_from_thread): self.key = key self.sender = send + self.send_from_thread_cb = send_from_thread self.receiver = None def set_recv_handler(self, handler): @@ -20,6 +21,9 @@ class MsgIo: async def send(self, data): return await self.sender({self.key: data}) + def send_from_thread(self, data): + return self.send_from_thread_cb({self.key: data}) + def can_key(self, key): return self.key == key @@ -50,9 +54,10 @@ class MessageDispatcher(IConnection): self.state = None self.state = asyncio.Queue(loop=loop) self.auto_subscribe = auto_subscribe + self.loop = loop def msgio_get(self, key): - obj = MsgIo(key, self.send) + obj = MsgIo(key, self.send, self.send_from_thread) if key not in self.msg_handlers: self.msg_handlers.append(obj) return obj @@ -81,3 +86,5 @@ class MessageDispatcher(IConnection): async def send(self, data): await self.state.put(data) + def send_from_thread(self, data): + asyncio.ensure_future(self.send(data), loop=self.loop)