Source code for bluetooth_clocks.devices.thermopro

"""Bluetooth clock support for ThermoPro sensors with clock."""
from __future__ import annotations

from datetime import datetime
from struct import pack
from uuid import UUID

from bluetooth_clocks import BluetoothClock


[docs]class TPXXX(BluetoothClock): """Bluetooth clock support for ThermoPro sensors with clock. This class isn't meant to be instantiated. Subclasses implement support for specific ThermoPro device types by giving values to the class variables `DEVICE_TYPE`, `LOCAL_NAME`, and `LOCAL_NAME_STARTS_WITH`. """ SERVICE_UUID = UUID("00010203-0405-0607-0809-0a0b0c0d1910") """The UUID of the service used to write the time.""" CHAR_UUID = UUID("00010203-0405-0607-0809-0a0b0c0d2b11") """The UUID of the characteristic used to write the time.""" TIME_GET_FORMAT = None """ThermoPro devices don`t support reading the time.""" TIME_SET_FORMAT = "BBBBBBBBBB" """The format string to convert a time to bytes written to the device. These are ten bytes. """ WRITE_WITH_RESPONSE = False """Writing the time to ThermoPro devices needs write without response."""
[docs] def get_bytes_from_time(self, timestamp: float, ampm: bool = False) -> bytes: """Generate the bytes to set the time on ThermoPro devices. Args: timestamp (float): The time encoded as a Unix timestamp. ampm (bool): ``True`` if the device should show the time with AM/PM, ``False`` if it should use 24-hour format. Returns: bytes: The bytes needed to set the time of the device to `timestamp`. """ date_time = datetime.fromtimestamp(timestamp) return pack( self.TIME_SET_FORMAT, 0xA5, date_time.year % 2000, date_time.month, date_time.day, date_time.hour, date_time.minute, date_time.second, date_time.weekday() + 1, # Monday-Sunday -> 0-6 int(not ampm), 0x5A, )
[docs]class TP358(TPXXX): """Bluetooth clock support for the ThermoPro TP358.""" DEVICE_TYPE = "ThermoPro TP358" LOCAL_NAME = "TP358" """The local name used to recognize this type of device.""" LOCAL_NAME_STARTS_WITH = True """The local name should start with `LOCAL_NAME`."""
[docs]class TP393(TPXXX): """Bluetooth clock support for the ThermoPro TP393.""" DEVICE_TYPE = "ThermoPro TP393" LOCAL_NAME = "TP393" """The local name used to recognize this type of device.""" LOCAL_NAME_STARTS_WITH = True """The local name should start with `LOCAL_NAME`."""