forked from M-Labs/thermostat
Put send_command in CtrlPanel
This commit is contained in:
parent
8a4a963f9b
commit
6699458939
@ -5,6 +5,7 @@ from pyqtgraph.parametertree import (
|
|||||||
Parameter,
|
Parameter,
|
||||||
registerParameterType,
|
registerParameterType,
|
||||||
)
|
)
|
||||||
|
from qasync import asyncSlot
|
||||||
|
|
||||||
|
|
||||||
class MutexParameter(pTypes.ListParameter):
|
class MutexParameter(pTypes.ListParameter):
|
||||||
@ -48,14 +49,17 @@ class CtrlPanel(QObject):
|
|||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
thermostat,
|
||||||
|
autotuners,
|
||||||
trees_ui,
|
trees_ui,
|
||||||
param_tree,
|
param_tree,
|
||||||
sigTreeStateChanged_handle,
|
|
||||||
sigActivated_handles,
|
sigActivated_handles,
|
||||||
parent=None,
|
parent=None,
|
||||||
):
|
):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
|
|
||||||
|
self.thermostat = thermostat
|
||||||
|
self.autotuners = autotuners
|
||||||
self.trees_ui = trees_ui
|
self.trees_ui = trees_ui
|
||||||
self.NUM_CHANNELS = len(trees_ui)
|
self.NUM_CHANNELS = len(trees_ui)
|
||||||
|
|
||||||
@ -78,7 +82,7 @@ class CtrlPanel(QObject):
|
|||||||
tree.setHeaderHidden(True)
|
tree.setHeaderHidden(True)
|
||||||
tree.setParameters(self.params[i], showTop=False)
|
tree.setParameters(self.params[i], showTop=False)
|
||||||
self.params[i].setValue = self._setValue
|
self.params[i].setValue = self._setValue
|
||||||
self.params[i].sigTreeStateChanged.connect(sigTreeStateChanged_handle)
|
self.params[i].sigTreeStateChanged.connect(self.send_command)
|
||||||
|
|
||||||
for handle in sigActivated_handles[i]:
|
for handle in sigActivated_handles[i]:
|
||||||
self.params[i].child(*handle[0]).sigActivated.connect(handle[1])
|
self.params[i].child(*handle[0]).sigActivated.connect(handle[1])
|
||||||
@ -112,6 +116,44 @@ class CtrlPanel(QObject):
|
|||||||
def change_params_title(self, channel, path, title):
|
def change_params_title(self, channel, path, title):
|
||||||
self.params[channel].child(*path).setOpts(title=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.channel
|
||||||
|
|
||||||
|
for inner_param, change, data in changes:
|
||||||
|
if change == "value":
|
||||||
|
if inner_param.opts.get("param", None) is not None:
|
||||||
|
if inner_param.opts.get("suffix", None) == "mA":
|
||||||
|
data /= 1000 # Given in mA
|
||||||
|
|
||||||
|
thermostat_param = inner_param.opts["param"]
|
||||||
|
if thermostat_param[1] == "ch":
|
||||||
|
thermostat_param[1] = ch
|
||||||
|
|
||||||
|
if inner_param.name() == "Postfilter Rate" and data is None:
|
||||||
|
set_param_args = (*thermostat_param[:2], "off")
|
||||||
|
else:
|
||||||
|
set_param_args = (*thermostat_param, data)
|
||||||
|
param.child(*param.childPath(inner_param)).setOpts(lock=True)
|
||||||
|
await self.thermostat.set_param(*set_param_args)
|
||||||
|
param.child(*param.childPath(inner_param)).setOpts(lock=False)
|
||||||
|
|
||||||
|
if inner_param.opts.get("pid_autotune", None) is not None:
|
||||||
|
auto_tuner_param = inner_param.opts["pid_autotune"][0]
|
||||||
|
if inner_param.opts["pid_autotune"][1] != "ch":
|
||||||
|
ch = inner_param.opts["pid_autotune"][1]
|
||||||
|
self.autotuners.set_params(auto_tuner_param, ch, data)
|
||||||
|
|
||||||
|
if inner_param.opts.get("activaters", None) is not None:
|
||||||
|
activater = inner_param.opts["activaters"][
|
||||||
|
inner_param.opts["limits"].index(data)
|
||||||
|
]
|
||||||
|
if activater is not None:
|
||||||
|
if activater[1] == "ch":
|
||||||
|
activater[1] = ch
|
||||||
|
await self.thermostat.set_param(*activater)
|
||||||
|
|
||||||
@pyqtSlot("QVariantList")
|
@pyqtSlot("QVariantList")
|
||||||
def update_pid(self, pid_settings):
|
def update_pid(self, pid_settings):
|
||||||
for settings in 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.thermostat.info_box_trigger.connect(self.info_box.display_info_box)
|
||||||
|
|
||||||
self.ctrl_panel_view = CtrlPanel(
|
self.ctrl_panel_view = CtrlPanel(
|
||||||
|
self.thermostat,
|
||||||
|
self.autotuners,
|
||||||
[self.ch0_tree, self.ch1_tree],
|
[self.ch0_tree, self.ch1_tree],
|
||||||
get_ctrl_panel_config(args),
|
get_ctrl_panel_config(args),
|
||||||
self.send_command,
|
|
||||||
param_tree_sigActivated_handles,
|
param_tree_sigActivated_handles,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -270,44 +271,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|||||||
await self._on_connection_changed(ThermostatConnectionState.DISCONNECTED)
|
await self._on_connection_changed(ThermostatConnectionState.DISCONNECTED)
|
||||||
await self.thermostat.end_session()
|
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.channel
|
|
||||||
|
|
||||||
for inner_param, change, data in changes:
|
|
||||||
if change == "value":
|
|
||||||
if inner_param.opts.get("param", None) is not None:
|
|
||||||
if inner_param.opts.get("suffix", None) == "mA":
|
|
||||||
data /= 1000 # Given in mA
|
|
||||||
|
|
||||||
thermostat_param = inner_param.opts["param"]
|
|
||||||
if thermostat_param[1] == "ch":
|
|
||||||
thermostat_param[1] = ch
|
|
||||||
|
|
||||||
if inner_param.name() == "Postfilter Rate" and data is None:
|
|
||||||
set_param_args = (*thermostat_param[:2], "off")
|
|
||||||
else:
|
|
||||||
set_param_args = (*thermostat_param, data)
|
|
||||||
param.child(*param.childPath(inner_param)).setOpts(lock=True)
|
|
||||||
await self.thermostat.set_param(*set_param_args)
|
|
||||||
param.child(*param.childPath(inner_param)).setOpts(lock=False)
|
|
||||||
|
|
||||||
if inner_param.opts.get("pid_autotune", None) is not None:
|
|
||||||
auto_tuner_param = inner_param.opts["pid_autotune"][0]
|
|
||||||
if inner_param.opts["pid_autotune"][1] != "ch":
|
|
||||||
ch = inner_param.opts["pid_autotune"][1]
|
|
||||||
self.autotuners.set_params(auto_tuner_param, ch, data)
|
|
||||||
|
|
||||||
if inner_param.opts.get("activaters", None) is not None:
|
|
||||||
activater = inner_param.opts["activaters"][
|
|
||||||
inner_param.opts["limits"].index(data)
|
|
||||||
]
|
|
||||||
if activater is not None:
|
|
||||||
if activater[1] == "ch":
|
|
||||||
activater[1] = ch
|
|
||||||
await self.thermostat.set_param(*activater)
|
|
||||||
|
|
||||||
@asyncSlot()
|
@asyncSlot()
|
||||||
async def pid_auto_tune_request(self, ch=0):
|
async def pid_auto_tune_request(self, ch=0):
|
||||||
match self.autotuners.get_state(ch):
|
match self.autotuners.get_state(ch):
|
||||||
|
Loading…
Reference in New Issue
Block a user