Files
brewpi/brewpi_gui.py
T
jens a80cc2bf01 - TC: prepared for Rate set and get
- improved TC state machine
2020-12-06 12:05:55 +01:00

112 lines
3.8 KiB
Python

from brewpi_win import Ui_MainWindow
from PyQt5 import QtWidgets, QtGui
import sys
from ws.client.ws_client import WsClient
from ws.message import MessageDispatcherSync
from queue import Queue
import asyncio
class Window(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.setWindowIcon(QtGui.QIcon('res/beer.png'))
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
self.msg_dispatch = MessageDispatcherSync(auto_subscribe=True)
self.ws_client = WsClient(listener=self.msg_dispatch, loop=loop)
self.msg_pot = self.msg_dispatch.msgio_get('Pot')
self.msg_sensor = self.msg_dispatch.msgio_get('Sensor')
self.msg_heater = self.msg_dispatch.msgio_get('Heater')
self.msg_tempctrl = self.msg_dispatch.msgio_get('TempCtrl')
self.msg_pot.set_recv_handler(self.on_pot_changed)
self.msg_sensor.set_recv_handler(self.on_sensor_changed)
self.msg_heater.set_recv_handler(self.on_heater_changed)
self.msg_tempctrl.set_recv_handler(self.on_tempctrl_changed)
self.setupUi(self)
self.actionStart.triggered.connect(self.connect)
self.actionStop.triggered.connect(self.disconnect)
self.Slider_pwr_soll.valueChanged.connect(self.on_slider_pwr_soll_changed)
self.Slider_temp_soll.valueChanged.connect(self.on_slider_temp_soll_changed)
self.checkbox_heater_activate.stateChanged.connect(self.on_checkbox_changed)
self.send_data = Queue()
self.slider_pwr_initial_update = True
self.slider_temp_soll_initial_update = True
self.checkbox_heater_activate_initial_update = True
def connect(self):
self.slider_pwr_initial_update = True
self.slider_temp_soll_initial_update = True
self.checkbox_heater_activate_initial_update = True
self.ws_client.connect(uri="ws://localhost:8765")
def disconnect(self):
self.ws_client.disconnect()
def on_slider_pwr_soll_changed(self, value):
print("on_slider_pwr_soll_changed {}".format(value))
self.msg_heater.send({'Power': value})
def on_slider_temp_soll_changed(self, value):
print("on_slider_temp_soll_changed {}".format(value))
self.msg_tempctrl.send({'Soll': value})
def on_checkbox_changed(self, value):
print("on_checkbox_changed {}".format(value))
self.msg_heater.send({'Activate': int(value == 2)})
def on_pot_changed(self, msg):
print("on_pot_changed {}".format(msg))
for key in msg:
if "Power" in key:
self.lcdNumber_2.display(msg['Power'])
def on_sensor_changed(self, msg):
print("on_sensor_changed {}".format(msg))
if "Temp" in msg:
self.lcdNumber_3.display(str(msg['Temp']))
def on_tempctrl_changed(self, msg):
print("on_tempctrl_changed {}".format(msg))
for key in msg:
if "Soll" in key:
submsg = msg['Soll']
self.lcdNumber.display(str(submsg['Temp']))
if self.slider_temp_soll_initial_update:
self.Slider_temp_soll.setValue(submsg['Temp'])
self.slider_temp_soll_initial_update = False
def on_heater_changed(self, msg):
print("on_heater_changed {}".format(msg))
for key in msg:
if "Activate" in key:
if self.checkbox_heater_activate_initial_update:
self.checkbox_heater_activate.setCheckState(2 if msg['Activate'] == 1 else 0)
self.checkbox_heater_activate_initial_update = False
elif "Power" in key:
if self.slider_pwr_initial_update:
self.Slider_pwr_soll.setValue(msg['Power'])
self.slider_pwr_initial_update = False
elif "Capabilities" in key:
submsg = msg['Capabilities']
if "Power" in submsg:
submsg = submsg['Power']
self.Slider_pwr_soll.setLowerBound(submsg['Min'])
self.Slider_pwr_soll.setUpperBound(submsg['Max'])
def closeEvent(self, event):
print("Exitting gracefully!")
self.ws_client.disconnect()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec_())
print ("End of program.")