class LinakdeskWorker(BaseWorker):

    SCAN_TIMEOUT = 20

    def _setup(self):
        from linak_dpg_bt import LinakDesk

        self.desk = LinakDesk(self.mac)

    def status_update(self):
        return [
            MqttMessage(topic=self.format_topic('height/cm'),
                        payload=self._get_height())
        ]

    def _get_height(self):
        with timeout(
                SCAN_TIMEOUT,
                exception=TimeoutError(
                    'Retrieving the height from {} device {} timed out after {} seconds'
                    .format(repr(self), self.mac, SCAN_TIMEOUT))):
            self.desk.read_dpg_data()
            return self.desk.current_height_with_offset.cm

        return -1
Example #2
0
class LinakdeskWorker(BaseWorker):

    SCAN_TIMEOUT = 20

    def _setup(self):
        from linak_dpg_bt import LinakDesk

        self.desk = LinakDesk(self.mac)

        _LOGGER.info("Created LinakDesk worker")

    def status_update(self):
        return [
            MqttMessage(topic=self.format_topic("height/cm"),
                        payload=self._get_height())
        ]

    def _get_height(self):
        from bluepy import btle

        with timeout(
                self.SCAN_TIMEOUT,
                exception=DeviceTimeoutError(
                    "Retrieving the height from {} device {} timed out after {} seconds"
                    .format(repr(self), self.mac, self.SCAN_TIMEOUT)),
        ):
            try:
                self.desk.read_dpg_data()
                return self.desk.current_height_with_offset.cm + self.desk_offset_cm
            except btle.BTLEException as e:
                logger.log_exception(
                    _LOGGER,
                    "Error during update of linak desk '%s' (%s): %s",
                    repr(self),
                    self.mac,
                    type(e).__name__,
                    suppress=True,
                )
                raise DeviceTimeoutError

    def on_command(self, topic, value):
        target_height = float(value)

        if target_height >= self.min_height_cm and target_height <= self.max_height_cm:
            _LOGGER.info("Start moving desk to the target height: %.1f",
                         target_height)
            self.desk.move_to_cm(target_height - self.desk_offset_cm)
class LinakdeskWorker(BaseWorker):
    def _setup(self):
        from linak_dpg_bt import LinakDesk

        self.desk = LinakDesk(self.mac)

    def status_update(self):
        return [
            MqttMessage(topic=self.format_topic('height/cm'),
                        payload=self._get_height())
        ]

    def _get_height(self):
        with timeout(20):
            self.desk.read_dpg_data()
            return self.desk.current_height_with_offset.cm

        return -1
class LinakdeskWorker(BaseWorker):

    SCAN_TIMEOUT = 20

    def _setup(self):
        from linak_dpg_bt import LinakDesk

        self.desk = LinakDesk(self.mac)

    def status_update(self):
        return [
            MqttMessage(
                topic=self.format_topic("height/cm"), payload=self._get_height()
            )
        ]

    def _get_height(self):
        from bluepy import btle

        with timeout(
            self.SCAN_TIMEOUT,
            exception=DeviceTimeoutError(
                "Retrieving the height from {} device {} timed out after {} seconds".format(
                    repr(self), self.mac, self.SCAN_TIMEOUT
                )
            ),
        ):
            try:
                self.desk.read_dpg_data()
                return self.desk.current_height_with_offset.cm
            except btle.BTLEException as e:
                logger.log_exception(
                    _LOGGER,
                    "Error during update of linak desk '%s' (%s): %s",
                    repr(self),
                    self.mac,
                    type(e).__name__,
                    suppress=True,
                )
                raise DeviceTimeoutError
    def _setup(self):
        from linak_dpg_bt import LinakDesk

        self.desk = LinakDesk(self.mac)
Example #6
0
    def _setup(self):
        from linak_dpg_bt import LinakDesk

        self.desk = LinakDesk(self.mac)

        _LOGGER.info("Created LinakDesk worker")