def __init__(self, ipcon, uid, version): PluginBase.__init__(self, ipcon, uid, 'PTC Bricklet', version) self.str_connected = 'Sensor is currently <font color="green">connected</font>' self.str_not_connected = 'Sensor is currently <font color="red">not connected</font>' self.ptc = BrickletPTC(uid, ipcon) self.qtcb_temperature.connect(self.cb_temperature) self.ptc.register_callback(self.ptc.CALLBACK_TEMPERATURE, self.qtcb_temperature.emit) # self.qtcb_resistance.connect(self.cb_resistance) # self.ptc.register_callback(self.ptc.CALLBACK_RESISTANCE, # self.qtcb_resistance.emit) self.temperature_label = TemperatureLabel() # self.resistance_label = ResistanceLabel() self.wire_label = QLabel('Wire Type:') self.wire_combo = QComboBox() self.wire_combo.addItem('2-Wire') self.wire_combo.addItem('3-Wire') self.wire_combo.addItem('4-Wire') self.noise_label = QLabel('Noise Rejection Filter:') self.noise_combo = QComboBox() self.noise_combo.addItem('50Hz') self.noise_combo.addItem('60Hz') self.connected_label = QLabel(self.str_connected) self.current_value = None self.wire_combo.currentIndexChanged.connect(self.wire_combo_index_changed) self.noise_combo.currentIndexChanged.connect(self.noise_combo_index_changed) plot_list = [['', Qt.red, self.get_current_value]] self.plot_widget = PlotWidget('Temperature [%cC]' % 0xB0, plot_list) layout_h = QHBoxLayout() layout_h.addStretch() layout_h.addWidget(self.temperature_label) layout_h.addStretch() layout_h.addWidget(self.connected_label) layout_h.addStretch() layout_h2 = QHBoxLayout() layout_h2.addWidget(self.wire_label) layout_h2.addWidget(self.wire_combo) layout_h2.addStretch() layout_h2.addWidget(self.noise_label) layout_h2.addWidget(self.noise_combo) layout = QVBoxLayout(self) layout.addLayout(layout_h) layout.addWidget(self.plot_widget) layout.addLayout(layout_h2) self.connected_timer = QTimer() self.connected_timer.timeout.connect(self.update_connected) self.connected_timer.setInterval(1000)
class PTC(PluginBase): qtcb_temperature = pyqtSignal(int) # qtcb_resistance = pyqtSignal(int) def __init__(self, ipcon, uid, version): PluginBase.__init__(self, ipcon, uid, 'PTC Bricklet', version) self.str_connected = 'Sensor is currently <font color="green">connected</font>' self.str_not_connected = 'Sensor is currently <font color="red">not connected</font>' self.ptc = BrickletPTC(uid, ipcon) self.qtcb_temperature.connect(self.cb_temperature) self.ptc.register_callback(self.ptc.CALLBACK_TEMPERATURE, self.qtcb_temperature.emit) # self.qtcb_resistance.connect(self.cb_resistance) # self.ptc.register_callback(self.ptc.CALLBACK_RESISTANCE, # self.qtcb_resistance.emit) self.temperature_label = TemperatureLabel() # self.resistance_label = ResistanceLabel() self.wire_label = QLabel('Wire Type:') self.wire_combo = QComboBox() self.wire_combo.addItem('2-Wire') self.wire_combo.addItem('3-Wire') self.wire_combo.addItem('4-Wire') self.noise_label = QLabel('Noise Rejection Filter:') self.noise_combo = QComboBox() self.noise_combo.addItem('50Hz') self.noise_combo.addItem('60Hz') self.connected_label = QLabel(self.str_connected) self.current_value = None self.wire_combo.currentIndexChanged.connect(self.wire_combo_index_changed) self.noise_combo.currentIndexChanged.connect(self.noise_combo_index_changed) plot_list = [['', Qt.red, self.get_current_value]] self.plot_widget = PlotWidget('Temperature [%cC]' % 0xB0, plot_list) layout_h = QHBoxLayout() layout_h.addStretch() layout_h.addWidget(self.temperature_label) layout_h.addStretch() layout_h.addWidget(self.connected_label) layout_h.addStretch() layout_h2 = QHBoxLayout() layout_h2.addWidget(self.wire_label) layout_h2.addWidget(self.wire_combo) layout_h2.addStretch() layout_h2.addWidget(self.noise_label) layout_h2.addWidget(self.noise_combo) layout = QVBoxLayout(self) layout.addLayout(layout_h) layout.addWidget(self.plot_widget) layout.addLayout(layout_h2) self.connected_timer = QTimer() self.connected_timer.timeout.connect(self.update_connected) self.connected_timer.setInterval(1000) def start(self): async_call(self.ptc.get_temperature, None, self.cb_temperature, self.increase_error_count) # async_call(self.ptc.get_resistance, None, self.cb_resistance, self.increase_error_count) async_call(self.ptc.set_temperature_callback_period, 100, None, self.increase_error_count) # async_call(self.ptc.set_resistance_callback_period, 100, None, self.increase_error_count) async_call(self.ptc.is_sensor_connected, None, self.is_sensor_connected_async, self.increase_error_count) async_call(self.ptc.get_noise_rejection_filter, None, self.get_noise_rejection_filter_async, self.increase_error_count) async_call(self.ptc.get_wire_mode, None, self.get_wire_mode_async, self.increase_error_count) self.connected_timer.start() self.plot_widget.stop = False def stop(self): async_call(self.ptc.set_temperature_callback_period, 0, None, self.increase_error_count) # async_call(self.ptc.set_resistance_callback_period, 0, None, self.increase_error_count) self.connected_timer.stop() self.plot_widget.stop = True def get_url_part(self): return 'ptc' @staticmethod def has_device_identifier(device_identifier): return device_identifier == BrickletPTC.DEVICE_IDENTIFIER def get_current_value(self): return self.current_value def update_connected(self): async_call(self.ptc.is_sensor_connected, None, self.is_sensor_connected_async, self.increase_error_count) def wire_combo_index_changed(self, index): async_call(self.ptc.set_wire_mode, index+2, None, self.increase_error_count) def noise_combo_index_changed(self, index): async_call(self.ptc.set_noise_rejection_filter, index, None, self.increase_error_count) def is_sensor_connected_async(self, connected): if connected: self.connected_label.setText(self.str_connected) else: self.connected_label.setText(self.str_not_connected) def get_noise_rejection_filter_async(self, filter_option): self.noise_combo.setCurrentIndex(filter_option) def get_wire_mode_async(self, mode): self.wire_combo.setCurrentIndex(mode-2) def cb_temperature(self, temperature): self.current_value = temperature/100.0 self.temperature_label.setText('%8.02f' % (temperature/100.0)) def cb_resistance(self, resistance): resistance_str = str(round(resistance*3900.0/(1 << 15), 1)) self.resistance_label.setText(resistance_str)