def __init__(self, ipcon, uid, version):
        PluginBase.__init__(self, ipcon, uid, "Temperature IR Bricklet", version)

        self.tem = BrickletTemperatureIR(uid, ipcon)

        self.qtcb_ambient_temperature.connect(self.cb_ambient_temperature)
        self.tem.register_callback(self.tem.CALLBACK_AMBIENT_TEMPERATURE, self.qtcb_ambient_temperature.emit)
        self.qtcb_object_temperature.connect(self.cb_object_temperature)
        self.tem.register_callback(self.tem.CALLBACK_OBJECT_TEMPERATURE, self.qtcb_object_temperature.emit)

        self.ambient_label = AmbientLabel()
        self.object_label = ObjectLabel()

        self.emissivity_label = QLabel("Emissivity: ")
        self.emissivity_edit = QLineEdit()
        self.emissivity_button = QPushButton("Save")
        self.emissivity_layout = QHBoxLayout()
        self.emissivity_layout.addWidget(self.emissivity_label)
        self.emissivity_layout.addWidget(self.emissivity_edit)
        self.emissivity_layout.addWidget(self.emissivity_button)

        self.emissivity_button.pressed.connect(self.emissivity_pressed)

        self.current_ambient = None
        self.current_object = None

        plot_list = [["amb", Qt.blue, self.get_current_ambient], ["obj", Qt.red, self.get_current_object]]

        self.plot_widget = PlotWidget("Temperature [%cC]" % 0xB0, plot_list)

        layout_h1 = QHBoxLayout()
        layout_h1.addStretch()
        layout_h1.addWidget(self.ambient_label)
        layout_h1.addStretch()

        layout_h2 = QHBoxLayout()
        layout_h2.addStretch()
        layout_h2.addWidget(self.object_label)
        layout_h2.addStretch()

        layout = QVBoxLayout(self)
        layout.addLayout(layout_h1)
        layout.addLayout(layout_h2)
        layout.addWidget(self.plot_widget)
        layout.addLayout(self.emissivity_layout)
class TemperatureIR(PluginBase):
    qtcb_ambient_temperature = pyqtSignal(int)
    qtcb_object_temperature = pyqtSignal(int)

    def __init__(self, ipcon, uid, version):
        PluginBase.__init__(self, ipcon, uid, "Temperature IR Bricklet", version)

        self.tem = BrickletTemperatureIR(uid, ipcon)

        self.qtcb_ambient_temperature.connect(self.cb_ambient_temperature)
        self.tem.register_callback(self.tem.CALLBACK_AMBIENT_TEMPERATURE, self.qtcb_ambient_temperature.emit)
        self.qtcb_object_temperature.connect(self.cb_object_temperature)
        self.tem.register_callback(self.tem.CALLBACK_OBJECT_TEMPERATURE, self.qtcb_object_temperature.emit)

        self.ambient_label = AmbientLabel()
        self.object_label = ObjectLabel()

        self.emissivity_label = QLabel("Emissivity: ")
        self.emissivity_edit = QLineEdit()
        self.emissivity_button = QPushButton("Save")
        self.emissivity_layout = QHBoxLayout()
        self.emissivity_layout.addWidget(self.emissivity_label)
        self.emissivity_layout.addWidget(self.emissivity_edit)
        self.emissivity_layout.addWidget(self.emissivity_button)

        self.emissivity_button.pressed.connect(self.emissivity_pressed)

        self.current_ambient = None
        self.current_object = None

        plot_list = [["amb", Qt.blue, self.get_current_ambient], ["obj", Qt.red, self.get_current_object]]

        self.plot_widget = PlotWidget("Temperature [%cC]" % 0xB0, plot_list)

        layout_h1 = QHBoxLayout()
        layout_h1.addStretch()
        layout_h1.addWidget(self.ambient_label)
        layout_h1.addStretch()

        layout_h2 = QHBoxLayout()
        layout_h2.addStretch()
        layout_h2.addWidget(self.object_label)
        layout_h2.addStretch()

        layout = QVBoxLayout(self)
        layout.addLayout(layout_h1)
        layout.addLayout(layout_h2)
        layout.addWidget(self.plot_widget)
        layout.addLayout(self.emissivity_layout)

    def start(self):
        async_call(self.tem.get_ambient_temperature, None, self.cb_ambient_temperature, self.increase_error_count)
        async_call(self.tem.get_object_temperature, None, self.cb_object_temperature, self.increase_error_count)
        async_call(self.tem.get_emissivity, None, self.cb_emissivity, self.increase_error_count)

        async_call(self.tem.set_ambient_temperature_callback_period, 250, None, self.increase_error_count)
        async_call(self.tem.set_object_temperature_callback_period, 250, None, self.increase_error_count)

        self.plot_widget.stop = False

    def stop(self):
        async_call(self.tem.set_ambient_temperature_callback_period, 0, None, self.increase_error_count)
        async_call(self.tem.set_object_temperature_callback_period, 0, None, self.increase_error_count)

        self.plot_widget.stop = True

    def get_url_part(self):
        return "temperature_ir"

    @staticmethod
    def has_device_identifier(device_identifier):
        return device_identifier == BrickletTemperatureIR.DEVICE_IDENTIFIER

    def get_current_ambient(self):
        return self.current_ambient

    def get_current_object(self):
        return self.current_object

    def cb_object_temperature(self, temperature):
        self.current_object = temperature / 10.0
        self.object_label.setText(str(self.current_object))

    def cb_ambient_temperature(self, temperature):
        self.current_ambient = temperature / 10.0
        self.ambient_label.setText(str(self.current_ambient))

    def cb_emissivity(self, emissivity):
        self.emissivity_edit.setText(str(emissivity))

    def emissivity_pressed(self):
        value = int(self.emissivity_edit.text())
        try:
            self.tem.set_emissivity(value)
        except ip_connection.Error:
            return