From f18dd11e9a52b73552d20c338c076cbe5d734ac0 Mon Sep 17 00:00:00 2001 From: jens Date: Thu, 17 Dec 2020 19:30:59 +0100 Subject: [PATCH] - integrated Stirrer into GUI --- brewpi.ui | 160 ++++++++++++++++++++++++++++++++++++++------------ brewpi_gui.py | 39 ++++++++++-- brewpi_win.py | 72 ++++++++++++++++------- 3 files changed, 207 insertions(+), 64 deletions(-) diff --git a/brewpi.ui b/brewpi.ui index eb35464..90641b6 100644 --- a/brewpi.ui +++ b/brewpi.ui @@ -9,8 +9,8 @@ 0 0 - 1091 - 629 + 1130 + 623 @@ -488,7 +488,7 @@ 10 0 - 341 + 461 471 @@ -515,15 +515,15 @@ - Temperatur + Controller - 50 - 40 + 20 + 70 63 - 311 + 281 @@ -552,7 +552,7 @@ - Heizrate + Heat rate Qt::AlignCenter @@ -561,7 +561,7 @@ - 90 + 80 370 51 31 @@ -577,20 +577,36 @@ 0.100000000000000 + + + + 0 + 30 + 141 + 31 + + + + Temperature [°C] + + + Qt::AlignCenter + + - Power + Heater - 30 - 40 + 10 + 70 81 - 311 + 281 @@ -610,6 +626,42 @@ + + + 30 + 370 + 81 + 31 + + + + Activate + + + + + + 0 + 30 + 141 + 31 + + + + Power [W] + + + Qt::AlignCenter + + + + + + + + Stirrer + + 40 @@ -622,6 +674,47 @@ Activate + + + + 40 + 70 + 63 + 281 + + + + 0.000000000000000 + + + 100.000000000000000 + + + 7 + + + 3 + + + 0.000000000000000 + + + + + + 0 + 30 + 141 + 31 + + + + Speed [%] + + + Qt::AlignCenter + + @@ -640,8 +733,8 @@ - 550 - 60 + 480 + 70 481 374 @@ -3454,8 +3547,8 @@ - 590 - 30 + 570 + 40 67 17 @@ -3470,8 +3563,8 @@ - 870 - 30 + 800 + 40 67 17 @@ -3486,49 +3579,40 @@ - 410 - 110 + 980 + 130 121 20 - Temperatur [°C] - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + Temperature [°C] - 410 - 240 + 980 + 250 121 20 - Heizrate [°C/min] - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + Heat rate [°C/min] - 430 - 360 + 980 + 380 101 20 - Leistung [W] - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + Power [W] @@ -3601,7 +3685,7 @@ 0 0 - 1091 + 1130 22 diff --git a/brewpi_gui.py b/brewpi_gui.py index f660e7a..336b3da 100644 --- a/brewpi_gui.py +++ b/brewpi_gui.py @@ -33,25 +33,37 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow): 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.Slider_speed_soll.valueChanged.connect(self.on_slider_stirrer_speed_soll_changed) + self.doubleSpinBox_heatrate_soll.valueChanged.connect(self.on_heatrate_soll_changed) self.checkbox_heater_activate.stateChanged.connect(self.on_checkbox_changed) + self.checkbox_stirrer_activate.stateChanged.connect(self.on_checkbox_stirrer_activate_changed) + self.send_data = Queue() self.slider_pwr_initial_update = True self.slider_temp_soll_initial_update = True + self.slider_speed_initial_update = True self.checkbox_heater_activate_initial_update = True + self.checkbox_stirrer_activate_initial_update = True self.heatrate_soll_initial_update = True def connect(self): self.slider_pwr_initial_update = True self.slider_temp_soll_initial_update = True + self.slider_speed_initial_update = True self.checkbox_heater_activate_initial_update = True + self.checkbox_stirrer_activate_initial_update = True self.heatrate_soll_initial_update = True self.ws_client.connect(uri=self.plainTextUri.toPlainText()) def disconnect(self): self.ws_client.disconnect() + def on_slider_temp_soll_changed(self, value): + print("on_slider_temp_soll_changed {}".format(value)) + self.msg_tempctrl.send({'Soll': {'Temp': value}}) + def on_heatrate_soll_changed(self, value): value = round(value, 1) print("on_textbox_heatrate_soll_changed {}".format(value)) @@ -61,12 +73,16 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow): 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': {'Temp': value}}) - def on_checkbox_changed(self, value): print("on_checkbox_changed {}".format(value)) + self.msg_heater.send({'Activate': int(value == 2)}) + + def on_slider_stirrer_speed_soll_changed(self, value): + print("on_slider_stirrer_speed_soll_changed {}".format(value)) + self.msg_stirrer.send({'Speed': value}) + + def on_checkbox_stirrer_activate_changed(self, value): + print("on_checkbox_stirrer_activate_changed {}".format(value)) self.msg_stirrer.send({'Activate': int(value == 2)}) def on_pot_changed(self, msg): @@ -127,6 +143,21 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow): def on_stirrer_changed(self, msg): print("on_stirrer_changed {}".format(msg)) + for key in msg: + if "Activate" in key: + if self.checkbox_stirrer_activate_initial_update: + self.checkbox_stirrer_activate.setCheckState(2 if msg['Activate'] == 1 else 0) + self.checkbox_stirrer_activate_initial_update = False + elif "Speed" in key: + if self.slider_speed_initial_update: + self.Slider_speed_soll.setValue(msg['Speed']) + self.slider_speed_initial_update = False + elif "Capabilities" in key: + submsg = msg['Capabilities'] + if "Power" in submsg: + submsg = submsg['Power'] + self.Slider_speed_soll.setLowerBound(submsg['Min']) + self.Slider_speed_soll.setUpperBound(submsg['Max']) def closeEvent(self, event): print("Exitting gracefully!") diff --git a/brewpi_win.py b/brewpi_win.py index 07fba87..962c81b 100644 --- a/brewpi_win.py +++ b/brewpi_win.py @@ -14,7 +14,7 @@ class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.setEnabled(True) - MainWindow.resize(1091, 629) + MainWindow.resize(1130, 623) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) @@ -175,7 +175,7 @@ class Ui_MainWindow(object): self.centralwidget.setObjectName("centralwidget") self.horizontalTabWidget = QtWidgets.QTabWidget(self.centralwidget) self.horizontalTabWidget.setEnabled(True) - self.horizontalTabWidget.setGeometry(QtCore.QRect(10, 0, 341, 471)) + self.horizontalTabWidget.setGeometry(QtCore.QRect(10, 0, 461, 471)) self.horizontalTabWidget.setObjectName("horizontalTabWidget") self.horizontalTabWidgetPage1 = QtWidgets.QWidget() self.horizontalTabWidgetPage1.setObjectName("horizontalTabWidgetPage1") @@ -190,7 +190,7 @@ class Ui_MainWindow(object): self.groupBox_2.setMinimumSize(QtCore.QSize(0, 0)) self.groupBox_2.setObjectName("groupBox_2") self.Slider_temp_soll = QwtSlider(self.groupBox_2) - self.Slider_temp_soll.setGeometry(QtCore.QRect(50, 40, 63, 311)) + self.Slider_temp_soll.setGeometry(QtCore.QRect(20, 70, 63, 281)) self.Slider_temp_soll.setLowerBound(0.0) self.Slider_temp_soll.setUpperBound(100.0) self.Slider_temp_soll.setScaleMaxMajor(7) @@ -202,16 +202,20 @@ class Ui_MainWindow(object): self.label_6.setAlignment(QtCore.Qt.AlignCenter) self.label_6.setObjectName("label_6") self.doubleSpinBox_heatrate_soll = QtWidgets.QDoubleSpinBox(self.groupBox_2) - self.doubleSpinBox_heatrate_soll.setGeometry(QtCore.QRect(90, 370, 51, 31)) + self.doubleSpinBox_heatrate_soll.setGeometry(QtCore.QRect(80, 370, 51, 31)) self.doubleSpinBox_heatrate_soll.setDecimals(1) self.doubleSpinBox_heatrate_soll.setMaximum(3.0) self.doubleSpinBox_heatrate_soll.setSingleStep(0.1) self.doubleSpinBox_heatrate_soll.setObjectName("doubleSpinBox_heatrate_soll") + self.label_9 = QtWidgets.QLabel(self.groupBox_2) + self.label_9.setGeometry(QtCore.QRect(0, 30, 141, 31)) + self.label_9.setAlignment(QtCore.Qt.AlignCenter) + self.label_9.setObjectName("label_9") self.horizontalLayout.addWidget(self.groupBox_2) self.groupBox = QtWidgets.QGroupBox(self.horizontalTabWidgetPage1) self.groupBox.setObjectName("groupBox") self.Slider_pwr_soll = QwtSlider(self.groupBox) - self.Slider_pwr_soll.setGeometry(QtCore.QRect(30, 40, 81, 311)) + self.Slider_pwr_soll.setGeometry(QtCore.QRect(10, 70, 81, 281)) self.Slider_pwr_soll.setLowerBound(0.0) self.Slider_pwr_soll.setUpperBound(100.0) self.Slider_pwr_soll.setScaleMaxMajor(7) @@ -219,9 +223,31 @@ class Ui_MainWindow(object): self.Slider_pwr_soll.setScaleStepSize(0.0) self.Slider_pwr_soll.setObjectName("Slider_pwr_soll") self.checkbox_heater_activate = QtWidgets.QCheckBox(self.groupBox) - self.checkbox_heater_activate.setGeometry(QtCore.QRect(40, 370, 81, 23)) + self.checkbox_heater_activate.setGeometry(QtCore.QRect(30, 370, 81, 31)) self.checkbox_heater_activate.setObjectName("checkbox_heater_activate") + self.label_10 = QtWidgets.QLabel(self.groupBox) + self.label_10.setGeometry(QtCore.QRect(0, 30, 141, 31)) + self.label_10.setAlignment(QtCore.Qt.AlignCenter) + self.label_10.setObjectName("label_10") self.horizontalLayout.addWidget(self.groupBox) + self.groupBox_3 = QtWidgets.QGroupBox(self.horizontalTabWidgetPage1) + self.groupBox_3.setObjectName("groupBox_3") + self.checkbox_stirrer_activate = QtWidgets.QCheckBox(self.groupBox_3) + self.checkbox_stirrer_activate.setGeometry(QtCore.QRect(40, 370, 81, 23)) + self.checkbox_stirrer_activate.setObjectName("checkbox_stirrer_activate") + self.Slider_speed_soll = QwtSlider(self.groupBox_3) + self.Slider_speed_soll.setGeometry(QtCore.QRect(40, 70, 63, 281)) + self.Slider_speed_soll.setLowerBound(0.0) + self.Slider_speed_soll.setUpperBound(100.0) + self.Slider_speed_soll.setScaleMaxMajor(7) + self.Slider_speed_soll.setScaleMaxMinor(3) + self.Slider_speed_soll.setScaleStepSize(0.0) + self.Slider_speed_soll.setObjectName("Slider_speed_soll") + self.label_11 = QtWidgets.QLabel(self.groupBox_3) + self.label_11.setGeometry(QtCore.QRect(0, 30, 141, 31)) + self.label_11.setAlignment(QtCore.Qt.AlignCenter) + self.label_11.setObjectName("label_11") + self.horizontalLayout.addWidget(self.groupBox_3) self.horizontalTabWidget.addTab(self.horizontalTabWidgetPage1, "") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") @@ -230,7 +256,7 @@ class Ui_MainWindow(object): self.tab_2.setObjectName("tab_2") self.horizontalTabWidget.addTab(self.tab_2, "") self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget) - self.gridLayoutWidget.setGeometry(QtCore.QRect(550, 60, 481, 374)) + self.gridLayoutWidget.setGeometry(QtCore.QRect(480, 70, 481, 374)) self.gridLayoutWidget.setObjectName("gridLayoutWidget") self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget) self.gridLayout_2.setContentsMargins(0, 0, 0, 0) @@ -1166,24 +1192,21 @@ class Ui_MainWindow(object): self.lcdNumber_power_heater.setObjectName("lcdNumber_power_heater") self.gridLayout_2.addWidget(self.lcdNumber_power_heater, 2, 1, 1, 1) self.label = QtWidgets.QLabel(self.centralwidget) - self.label.setGeometry(QtCore.QRect(590, 30, 67, 17)) + self.label.setGeometry(QtCore.QRect(570, 40, 67, 17)) self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(self.centralwidget) - self.label_2.setGeometry(QtCore.QRect(870, 30, 67, 17)) + self.label_2.setGeometry(QtCore.QRect(800, 40, 67, 17)) self.label_2.setAlignment(QtCore.Qt.AlignCenter) self.label_2.setObjectName("label_2") self.label_3 = QtWidgets.QLabel(self.centralwidget) - self.label_3.setGeometry(QtCore.QRect(410, 110, 121, 20)) - self.label_3.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label_3.setGeometry(QtCore.QRect(980, 130, 121, 20)) self.label_3.setObjectName("label_3") self.label_4 = QtWidgets.QLabel(self.centralwidget) - self.label_4.setGeometry(QtCore.QRect(410, 240, 121, 20)) - self.label_4.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label_4.setGeometry(QtCore.QRect(980, 250, 121, 20)) self.label_4.setObjectName("label_4") self.label_5 = QtWidgets.QLabel(self.centralwidget) - self.label_5.setGeometry(QtCore.QRect(430, 360, 101, 20)) - self.label_5.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.label_5.setGeometry(QtCore.QRect(980, 380, 101, 20)) self.label_5.setObjectName("label_5") self.label_7 = QtWidgets.QLabel(self.centralwidget) self.label_7.setGeometry(QtCore.QRect(0, 500, 67, 31)) @@ -1203,7 +1226,7 @@ class Ui_MainWindow(object): self.label_8.setObjectName("label_8") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1091, 22)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1130, 22)) self.menubar.setObjectName("menubar") self.menu_File = QtWidgets.QMenu(self.menubar) self.menu_File.setObjectName("menu_File") @@ -1235,18 +1258,23 @@ class Ui_MainWindow(object): def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "BrewPi")) - self.groupBox_2.setTitle(_translate("MainWindow", "Temperatur")) - self.label_6.setText(_translate("MainWindow", "Heizrate")) - self.groupBox.setTitle(_translate("MainWindow", "Power")) + self.groupBox_2.setTitle(_translate("MainWindow", "Controller")) + self.label_6.setText(_translate("MainWindow", "Heat rate")) + self.label_9.setText(_translate("MainWindow", "Temperature [°C]")) + self.groupBox.setTitle(_translate("MainWindow", "Heater")) self.checkbox_heater_activate.setText(_translate("MainWindow", "Activate")) + self.label_10.setText(_translate("MainWindow", "Power [W]")) + self.groupBox_3.setTitle(_translate("MainWindow", "Stirrer")) + self.checkbox_stirrer_activate.setText(_translate("MainWindow", "Activate")) + self.label_11.setText(_translate("MainWindow", "Speed [%]")) self.horizontalTabWidget.setTabText(self.horizontalTabWidget.indexOf(self.horizontalTabWidgetPage1), _translate("MainWindow", "Manual")) self.horizontalTabWidget.setTabText(self.horizontalTabWidget.indexOf(self.tab), _translate("MainWindow", "Automatic")) self.horizontalTabWidget.setTabText(self.horizontalTabWidget.indexOf(self.tab_2), _translate("MainWindow", "Seite")) self.label.setText(_translate("MainWindow", "Ist")) self.label_2.setText(_translate("MainWindow", "Soll")) - self.label_3.setText(_translate("MainWindow", "Temperatur [°C]")) - self.label_4.setText(_translate("MainWindow", "Heizrate [°C/min]")) - self.label_5.setText(_translate("MainWindow", "Leistung [W]")) + self.label_3.setText(_translate("MainWindow", "Temperature [°C]")) + self.label_4.setText(_translate("MainWindow", "Heat rate [°C/min]")) + self.label_5.setText(_translate("MainWindow", "Power [W]")) self.label_7.setText(_translate("MainWindow", "State")) self.label_state.setText(_translate("MainWindow", "State")) self.plainTextUri.setPlainText(_translate("MainWindow", "ws://brewpi:8765"))