项目结构: - custom_components/sigmesh_gateway/ - Home Assistant 集成 - serial_reader.py - 串口读取器 - protocol_parser.py - 协议解析器 - coordinator.py - 数据协调器 - platforms/ - 传感器/开关/灯光/设备追踪实体 文档: - PRD.md - 产品需求文档 - README.md - 用户使用指南 - 可行性分析.md - 技术可行性分析 - 参数配置表.md - 配置参数记录 - 调试检查清单.md - 问题排查指南 功能特性: - 串口通信 (115200 波特率) - Bluetooth Mesh 协议解析 - 支持 200+ 设备接入 - UI 配置界面 - 多平台实体支持 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
132 lines
3.3 KiB
Python
132 lines
3.3 KiB
Python
"""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"
|