经过博主测试后,博主选择了Home Assistant+API的方案。
一、需求概要
RT。博主百度了一下,发现大概有3种路径:
- 使用Home Assistant集成米家设备,并调用HA的httpapi控制;
- 使用python-miio库来控制,使用micloud或者Xiaomi-cloud-tokens-extractor获取设备的Token。
二、Home Assistant方案
REST API | Home Assistant Developer Docs

2.1 获取状态接口
GET /api/states/<entity_id>
2.2 控制下发接口
POST /api/services/<domain>/<service>
基本格式:
POST http://<HA地址>:8123/api/services/<domain>/<service>
Authorization: Bearer <Long-Lived Access Token>
Content-Type: application/json
{
"entity_id": "<实体ID>",
...其它参数...
}
domain的分类:
在 Home Assistant 中,每一种设备类型或逻辑组件,都属于一个 domain(领域)。domain 就像模块名,每个 domain 内提供若干个可执行的 service(服务)。
例如:
| Domain | 说明 | 常见实体类型 | 常用服务 |
|---|---|---|---|
light | 灯光控制 | light.xxx | turn_on, turn_off, toggle, turn_on |
switch | 开关类设备 | switch.xxx | turn_on, turn_off, toggle |
climate | 空调、地暖、温控器 | climate.xxx | set_temperature, set_hvac_mode, turn_on, turn_off |
fan | 风扇 | fan.xxx | turn_on, turn_off, set_percentage |
cover | 窗帘、卷帘门 | cover.xxx | open_cover, close_cover, stop_cover |
media_player | 音响、电视 | media_player.xxx | play_media, volume_set, turn_on, turn_off |
scene | 场景调用 | scene.xxx | turn_on |
script | 自动化脚本 | script.xxx | turn_on, reload |
automation | 自动化任务 | automation.xxx | trigger, turn_on, turn_off |
notify | 通知服务 | 无固定实体 | notify.notify, notify.mobile_app_xxx |
input_boolean | 自定义开关 | input_boolean.xxx | turn_on, turn_off, toggle |
input_number | 数值输入 | input_number.xxx | set_value |
input_select | 选项选择 | input_select.xxx | select_option |
lock | 智能门锁 | lock.xxx | lock, unlock |
alarm_control_panel | 安防控制面板 | alarm_control_panel.xxx | arm_home, arm_away, disarm |
vacuum | 扫地机器人 | vacuum.xxx | start, stop, return_to_base, set_fan_speed |
tts | 语音合成 | tts.google_translate_say | say |
homeassistant | 系统级操作 | - | restart, stop, update_entity, reload_core_config |
(还有几十个 domain,如 camera、binary_sensor、sensor、input_text、person、zone、group、timer、counter、shell_command 等)