forked from M-Labs/thermostat
Put send_command in CtrlPanel
This commit is contained in:
parent
9f0064a61c
commit
7ec7ae7329
@ -5,6 +5,7 @@ from pyqtgraph.parametertree import (
|
||||
Parameter,
|
||||
registerParameterType,
|
||||
)
|
||||
from qasync import asyncSlot
|
||||
import pytec.gui.view.lockable_unit
|
||||
|
||||
|
||||
@ -20,14 +21,17 @@ class CtrlPanel(QObject):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
thermostat,
|
||||
autotuners,
|
||||
trees_ui,
|
||||
param_tree,
|
||||
sigTreeStateChanged_handle,
|
||||
sigActivated_handles,
|
||||
parent=None,
|
||||
):
|
||||
super().__init__(parent)
|
||||
|
||||
self.thermostat = thermostat
|
||||
self.autotuners = autotuners
|
||||
self.trees_ui = trees_ui
|
||||
self.NUM_CHANNELS = len(trees_ui)
|
||||
|
||||
@ -53,7 +57,7 @@ class CtrlPanel(QObject):
|
||||
set_tree_label_tips(tree)
|
||||
|
||||
for ch, param in enumerate(self.params):
|
||||
param.sigTreeStateChanged.connect(sigTreeStateChanged_handle)
|
||||
param.sigTreeStateChanged.connect(self.send_command)
|
||||
|
||||
for handle in sigActivated_handles[ch]:
|
||||
param.child(*handle[0]).sigActivated.connect(handle[1])
|
||||
@ -85,6 +89,40 @@ class CtrlPanel(QObject):
|
||||
def change_params_title(self, channel, path, title):
|
||||
self.params[channel].child(*path).setOpts(title=title)
|
||||
|
||||
@asyncSlot(object, object)
|
||||
async def send_command(self, param, changes):
|
||||
"""Translates parameter tree changes into thermostat set_param calls"""
|
||||
ch = param.value()
|
||||
|
||||
for inner_param, change, data in changes:
|
||||
if change == "value":
|
||||
new_value = data
|
||||
if "thermostat:set_param" in inner_param.opts:
|
||||
thermostat_param = inner_param.opts["thermostat:set_param"]
|
||||
|
||||
# Handle thermostat command irregularities
|
||||
match inner_param.name(), new_value:
|
||||
case "rate", None:
|
||||
thermostat_param = thermostat_param.copy()
|
||||
thermostat_param["field"] = "off"
|
||||
new_value = ""
|
||||
case "control_method", "constant_current":
|
||||
thermostat_param = thermostat_param.copy()
|
||||
thermostat_param["field"] = "i_set"
|
||||
new_value = inner_param.child("i_set").value()
|
||||
case "control_method", "temperature_pid":
|
||||
new_value = ""
|
||||
|
||||
inner_param.setOpts(lock=True)
|
||||
await self.thermostat.set_param(
|
||||
channel=ch, value=new_value, **thermostat_param
|
||||
)
|
||||
inner_param.setOpts(lock=False)
|
||||
|
||||
if "pid_autotune" in inner_param.opts:
|
||||
auto_tuner_param = inner_param.opts["pid_autotune"]
|
||||
self.autotuners.set_params(auto_tuner_param, ch, new_value)
|
||||
|
||||
@pyqtSlot("QVariantList")
|
||||
def update_pid(self, pid_settings):
|
||||
for settings in pid_settings:
|
||||
|
@ -95,9 +95,10 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.thermostat.info_box_trigger.connect(self.info_box.display_info_box)
|
||||
|
||||
self.ctrl_panel_view = CtrlPanel(
|
||||
self.thermostat,
|
||||
self.autotuners,
|
||||
[self.ch0_tree, self.ch1_tree],
|
||||
get_ctrl_panel_config(args),
|
||||
self.send_command,
|
||||
param_tree_sigActivated_handles,
|
||||
)
|
||||
|
||||
@ -270,40 +271,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
await self._on_connection_changed(ThermostatConnectionState.DISCONNECTED)
|
||||
await self.thermostat.end_session()
|
||||
|
||||
@asyncSlot(object, object)
|
||||
async def send_command(self, param, changes):
|
||||
"""Translates parameter tree changes into thermostat set_param calls"""
|
||||
ch = param.value()
|
||||
|
||||
for inner_param, change, data in changes:
|
||||
if change == "value":
|
||||
new_value = data
|
||||
if "thermostat:set_param" in inner_param.opts:
|
||||
thermostat_param = inner_param.opts["thermostat:set_param"]
|
||||
|
||||
# Handle thermostat command irregularities
|
||||
match inner_param.name(), new_value:
|
||||
case "rate", None:
|
||||
thermostat_param = thermostat_param.copy()
|
||||
thermostat_param["field"] = "off"
|
||||
new_value = ""
|
||||
case "control_method", "constant_current":
|
||||
thermostat_param = thermostat_param.copy()
|
||||
thermostat_param["field"] = "i_set"
|
||||
new_value = inner_param.child("i_set").value()
|
||||
case "control_method", "temperature_pid":
|
||||
new_value = ""
|
||||
|
||||
inner_param.setOpts(lock=True)
|
||||
await self.thermostat.set_param(
|
||||
channel=ch, value=new_value, **thermostat_param
|
||||
)
|
||||
inner_param.setOpts(lock=False)
|
||||
|
||||
if "pid_autotune" in inner_param.opts:
|
||||
auto_tuner_param = inner_param.opts["pid_autotune"]
|
||||
self.autotuners.set_params(auto_tuner_param, ch, new_value)
|
||||
|
||||
@asyncSlot()
|
||||
async def pid_autotune_request(self, ch=0):
|
||||
match self.autotuners.get_state(ch):
|
||||
|
Loading…
Reference in New Issue
Block a user