"""SigMesh Gateway 常量定义.""" from enum import IntEnum, StrEnum from typing import Final # 集成配置 DOMAIN = "sigmesh_gateway" DEFAULT_NAME = "SigMesh Gateway" DEFAULT_BAUDRATE = 115200 DEFAULT_BYTESIZE = 8 DEFAULT_PARITY = "N" DEFAULT_STOPBITS = 1 DEFAULT_TIMEOUT = 5 # 串口配置常量 CONF_SERIAL_DEVICE = "serial_device" CONF_BAUDRATE = "baudrate" class MeshModelId(IntEnum): """蓝牙 Mesh 模型 ID.""" # 开关模型 ONOFF_SERVER = 0x1000 ONOFF_CLIENT = 0x1001 # 灯模型 LIGHT_LIGHTNESS_SERVER = 0x1300 LIGHT_HSL_SERVER = 0x1307 LIGHT_COLOR_SERVER = 0x130C LIGHT_CTL_SERVER = 0x130D # 传感器模型 SENSOR_SERVER = 0x1100 SENSOR_SETUP_SERVER = 0x1101 # 二进制传感器 SENSOR_ONOFF_SERVER = 0x1104 class MeshOpcode(IntEnum): """蓝牙 Mesh Opcode.""" # 开关相关 ONOFF_GET = 0x8201 ONOFF_SET = 0x8202 ONOFF_SET_UNACK = 0x8203 ONOFF_STATUS = 0x8204 # 灯泡相关 LIGHT_LIGHTNESS_GET = 0x8229 LIGHT_LIGHTNESS_SET = 0x822B LIGHT_LIGHTNESS_STATUS = 0x822C LIGHT_HSL_SET = 0x8231 LIGHT_HSL_STATUS = 0x8232 LIGHT_CTL_SET = 0x825D LIGHT_CTL_STATUS = 0x825E LIGHT_COLOR_SET = 0x8200 LIGHT_COLOR_STATUS = 0x8201 # 传感器相关 SENSOR_GET = 0x8230 SENSOR_STATUS = 0x8231 SENSOR_CADENCE = 0x8237 SENSOR_SETTINGS = 0x8238 SENSOR_SETTING_GET = 0x8239 SENSOR_SETTING_STATUS = 0x823A SENSOR_SERIES_GET = 0x823B SENSOR_SERIES_STATUS = 0x823C # 时间相关 TIME_GET = 0x1200 TIME_STATUS = 0x1201 TIME_SET = 0x1202 # 电池 BATTERY_STATUS = 0x820C class MeshPropertyId(IntEnum): """Mesh 属性 ID - 用于解析传感器数据.""" PRESENCE_DETECTED = 0x0050 # 存在检测 MOTION_DETECTED = 0x0051 # 运动检测 AMBIENT_TEMPERATURE = 0x0059 # 环境温度 AMBIENT_HUMIDITY = 0x005A # 环境湿度 LIGHT_INTENSITY = 0x005D # 光照强度 BATTERY_LEVEL = 0x0075 # 电池电量 CO2_CONCENTRATION = 0x0092 # CO2 浓度 PM2_5_CONCENTRATION = 0x00B4 # PM2.5 浓度 TVOC_CONCENTRATION = 0x00B9 # TVOC 浓度 class SensorUnit(StrEnum): """传感器单位.""" NONE = "" CELSIUS = "°C" PERCENTAGE = "%" LUX = "lx" PPM = "ppm" UG_M3 = "μg/m³" PPB = "ppb" MV = "mV" VOLTAGE = "V" # Mesh 属性 ID 到单位的映射 PROPERTY_UNIT_MAP: Final[dict[int, SensorUnit]] = { MeshPropertyId.AMBIENT_TEMPERATURE: SensorUnit.CELSIUS, MeshPropertyId.AMBIENT_HUMIDITY: SensorUnit.PERCENTAGE, MeshPropertyId.LIGHT_INTENSITY: SensorUnit.LUX, MeshPropertyId.BATTERY_LEVEL: SensorUnit.PERCENTAGE, MeshPropertyId.CO2_CONCENTRATION: SensorUnit.PPM, MeshPropertyId.PM2_5_CONCENTRATION: SensorUnit.UG_M3, MeshPropertyId.TVOC_CONCENTRATION: SensorUnit.PPB, MeshPropertyId.PRESENCE_DETECTED: SensorUnit.NONE, MeshPropertyId.MOTION_DETECTED: SensorUnit.NONE, } # 事件类型 EVENT_SERIAL_DATA: Final = f"{DOMAIN}_serial_data" EVENT_MESH_MESSAGE: Final = f"{DOMAIN}_mesh_message" EVENT_DEVICE_JOINED: Final = f"{DOMAIN}_device_joined" EVENT_DEVICE_LEFT: Final = f"{DOMAIN}_device_left" # 串口通信 SERIAL_EVENT_PREFIX = "+EVENT=" SERIAL_MESH_RECV = "+EVENT=MESH,recv" SERIAL_PROV_DEVICE_JOINED = "+EVENT=PROV,device_joined" SERIAL_PROV_DEVICE_LEFT = "+EVENT=PROV,device_left"