from __future__ import annotations from enum import Enum GATT_MTU = 20 DEFAULT_ATTEMPTS = 0xFFFF CHARACTERISTIC_NOTIFY = "00002b10-0000-1000-8000-00805f9b34fb" CHARACTERISTIC_WRITE = "00002b11-0000-1000-8000-00805f9b34fb" # Newer TuyaOS firmware (e.g. jtmspro hc7n0urm fw 6.0) drops the legacy # 0xA201 service and exposes the data channel via these characteristics # of the 0xFD50 service instead. CHARACTERISTIC_NOTIFY_FD50 = "00000002-0000-1001-8001-00805f9b07d0" CHARACTERISTIC_WRITE_FD50 = "00000001-0000-1001-8001-00805f9b07d0" SERVICE_UUID = "0000a201-0000-1000-8000-00805f9b34fb" MANUFACTURER_DATA_ID = 0x07D0 RESPONSE_WAIT_TIMEOUT = 60 class TuyaBLECode(Enum): FUN_SENDER_DEVICE_INFO = 0x0000 FUN_SENDER_PAIR = 0x0001 FUN_SENDER_DPS = 0x0002 FUN_SENDER_DEVICE_STATUS = 0x0003 FUN_SENDER_UNBIND = 0x0005 FUN_SENDER_DEVICE_RESET = 0x0006 FUN_SENDER_OTA_START = 0x000C FUN_SENDER_OTA_FILE = 0x000D FUN_SENDER_OTA_OFFSET = 0x000E FUN_SENDER_OTA_UPGRADE = 0x000F FUN_SENDER_OTA_OVER = 0x0010 FUN_SENDER_DPS_V4 = 0x0027 FUN_RECEIVE_DP = 0x8001 FUN_RECEIVE_TIME_DP = 0x8003 FUN_RECEIVE_SIGN_DP = 0x8004 FUN_RECEIVE_SIGN_TIME_DP = 0x8005 FUN_RECEIVE_DP_V4 = 0x8006 FUN_RECEIVE_TIME_DP_V4 = 0x8007 FUN_RECEIVE_TIME1_REQ = 0x8011 FUN_RECEIVE_TIME2_REQ = 0x8012 class TuyaBLEDataPointType(Enum): DT_RAW = 0 DT_BOOL = 1 DT_VALUE = 2 DT_STRING = 3 DT_ENUM = 4 DT_BITMAP = 5