零基础玩转智能家居编程:米家API实战指南
智能家居编程的痛点与解决方案
在智能家居日益普及的今天,许多用户仍受限于厂商提供的官方APP,无法实现真正个性化的自动化控制。传统控制方式存在三大痛点:场景联动功能有限、多品牌设备难以统一管理、无法与其他系统集成。米家API的出现彻底改变了这一局面,让普通用户也能通过Python编程实现智能家居的深度定制。
智能家居编程不仅能实现设备的远程控制,更重要的是可以根据个人生活习惯创建专属自动化场景。无论是清晨自动拉开窗帘、离家时一键关闭所有设备,还是根据室内温湿度自动调节空调,都能通过简单的Python代码实现。
米家API核心功能解析
设备管理基础
米家API提供了简洁的设备管理接口,让你能够轻松获取和控制家中所有智能设备。通过以下步骤,即使是编程新手也能快速上手:
- 初始化API连接
- 完成身份认证
- 获取设备列表
- 执行设备操作
from mijiaAPI import mijiaAPI
# 初始化API客户端
api = mijiaAPI()
# 登录认证(首次使用会显示二维码)
api.login()
# 获取家庭列表
homes = api.get_homes()
print(f"发现{len(homes)}个家庭空间")
# 获取设备列表
devices = api.get_devices()
print(f"已发现{len(devices)}台智能设备")
# 打印设备信息
for device in devices:
print(f"设备名称: {device['name']}, 型号: {device['model']}, 在线状态: {'在线' if device['online'] else '离线'}")
💡 技巧:建议将常用设备的ID保存到配置文件中,避免每次都需要遍历设备列表查找ID。
设备属性控制
米家API最核心的功能是对设备属性的精确控制。每个设备都包含多个服务(siid)和属性(piid),通过指定这些参数可以实现对设备的精准控制。
以下是控制智能灯泡的示例:
# 控制客厅灯光
def control_light(brightness, color_temp):
# 设备ID、服务ID和属性ID需要根据实际设备查询
light_properties = [
{"did": "your_device_id", "siid": 2, "piid": 2, "value": brightness}, # 亮度
{"did": "your_device_id", "siid": 2, "piid": 3, "value": color_temp} # 色温
]
result = api.set_devices_prop(light_properties)
return result
# 设置亮度为80%,色温为4000K
control_light(80, 4000)
⚠️ 注意:不同品牌和型号的设备,其服务ID(siid)和属性ID(piid)可能不同,需要通过设备说明书或API文档查询。
批量操作与效率优化
当需要同时控制多个设备时,批量操作能显著提高效率,减少网络请求次数。
# 批量获取多个设备的状态
def get_multiple_devices_status(device_list):
properties = []
for device in device_list:
# 获取开关状态(假设siid=2, piid=1是开关属性)
properties.append({"did": device["did"], "siid": 2, "piid": 1})
results = api.get_devices_prop(properties)
return results
# 定义需要查询的设备列表
living_room_devices = [
{"name": "客厅主灯", "did": "device_id_1"},
{"name": "客厅空调", "did": "device_id_2"},
{"name": "加湿器", "did": "device_id_3"}
]
# 获取状态
statuses = get_multiple_devices_status(living_room_devices)
for i, status in enumerate(statuses):
print(f"{living_room_devices[i]['name']} 状态: {'开启' if status['value'] else '关闭'}")
实战场景:打造个性化智能家居系统
早晨唤醒场景
适用场景:工作日早晨自动唤醒,模拟日出过程逐渐增加灯光亮度,同时准备好热水。
操作步骤:
- 设置定时任务,工作日7:00触发
- 逐渐增加卧室灯光亮度(从10%到100%,持续15分钟)
- 7:10自动开启电热水器
- 7:15开启窗帘
实现代码:
import time
from mijiaAPI import mijiaAPI
api = mijiaAPI()
api.login()
def sunrise_wake_up():
# 逐渐增加灯光亮度
for brightness in range(10, 101, 10):
api.set_devices_prop([
{"did": "bedroom_light_id", "siid": 2, "piid": 2, "value": brightness}
])
time.sleep(90) # 每1.5分钟增加一次亮度
# 开启热水器
api.set_devices_prop([
{"did": "water_heater_id", "siid": 2, "piid": 1, "value": True}
])
# 开启窗帘
api.set_devices_prop([
{"did": "curtain_id", "siid": 2, "piid": 1, "value": True}
])
# 实际使用时应配合定时任务调度
# sunrise_wake_up()
效果对比:
- 传统方式:手动开灯、开热水器、开窗帘,操作繁琐
- 自动化方式:一键设置后无需人工干预,唤醒过程更自然舒适
离家模式场景
适用场景:出门时一键关闭所有设备,确保安全并节约能源。
操作步骤:
- 创建"离家"按钮或语音指令
- 关闭所有灯光
- 关闭空调、电视等电器
- 开启安防系统
- 锁好智能门锁
实现代码:
def离家模式():
# 关闭所有灯光
light_devices = ["living_room_light", "bedroom_light", "kitchen_light"]
for did in light_devices:
api.set_devices_prop([{"did": did, "siid": 2, "piid": 1, "value": False}])
# 关闭空调
api.set_devices_prop([{"did": "air_conditioner", "siid": 2, "piid": 1, "value": False}])
# 开启安防系统
api.set_devices_prop([{"did": "security_system", "siid": 2, "piid": 1, "value": True}])
# 锁门
api.set_devices_prop([{"did": "smart_lock", "siid": 3, "piid": 1, "value": "lock"}])
# 绑定到某个触发方式,如手机APP按钮或语音助手
# 离家模式()
效果对比:
- 传统方式:逐个检查并关闭设备,容易遗漏
- 自动化方式:一键操作,确保所有设备状态正确
进阶技巧:提升智能家居系统稳定性
错误处理与重试机制
在实际使用中,网络波动或设备离线可能导致操作失败。添加错误处理和重试机制能显著提高系统稳定性。
import time
from requests.exceptions import RequestException
def safe_control_device(did, siid, piid, value, max_retries=3):
retries = 0
while retries < max_retries:
try:
result = api.set_devices_prop([{"did": did, "siid": siid, "piid": piid, "value": value}])
if result.get("code") == 0:
return True
else:
print(f"设备操作失败: {result.get('message')}")
except RequestException as e:
print(f"网络请求错误: {str(e)}")
retries += 1
if retries < max_retries:
time.sleep(2) # 重试前等待2秒
print(f"达到最大重试次数({max_retries}),操作失败")
return False
# 使用安全控制函数
safe_control_device("living_room_light", 2, 1, True)
状态监听与事件响应
通过监听设备状态变化,可以实现更智能的自动化场景。例如,当门窗传感器检测到门被打开时,自动开灯。
def device_status_listener(device_id, callback):
"""监听设备状态变化"""
while True:
try:
status = api.get_devices_prop([{"did": device_id, "siid": 2, "piid": 1}])
callback(status[0]["value"])
except Exception as e:
print(f"监听错误: {str(e)}")
time.sleep(2) # 每2秒检查一次状态
# 当门被打开时开灯
def door_status_changed(status):
if status: # 门被打开
safe_control_device("entrance_light", 2, 1, True)
else: # 门被关闭
safe_control_device("entrance_light", 2, 1, False)
# 启动监听器(实际使用时应在后台线程运行)
# device_status_listener("door_sensor", door_status_changed)
💡 技巧:对于需要实时响应的场景,可以使用WebSocket连接替代轮询,减少延迟和网络流量。
常见误区与解决方案
故障排查速查表
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 登录失败 | 网络连接问题 | 检查网络连接,确保能访问小米服务器 |
| 设备不响应 | 设备离线或网络问题 | 检查设备是否在线,重启路由器尝试 |
| 属性设置无效 | 参数错误或设备不支持 | 核对siid和piid,检查属性值范围 |
| API调用频繁失败 | 接口限流 | 增加请求间隔,实现请求队列 |
| 认证信息丢失 | 配置文件权限问题 | 检查配置文件路径权限,重新登录 |
| 部分设备无法控制 | 设备型号不支持 | 查阅支持设备列表或更新API版本 |
自动化场景模板库
| 场景名称 | 适用场景 | 核心设备 | 实现思路 |
|---|---|---|---|
| 环境自适应 | 室内环境调节 | 温湿度传感器、空调、加湿器 | 根据温湿度自动调节设备运行参数 |
| 智能感应照明 | 夜间活动 | 人体传感器、智能灯 | 检测到人体活动时自动开灯,无人时关闭 |
| 能源管理 | 节约用电 | 智能插座、电表 | 监控用电情况,高峰时段自动关闭非必要设备 |
| 远程监控 | 家庭安全 | 摄像头、门窗传感器 | 异常情况自动拍照并发送通知 |
| 睡眠质量监测 | 健康管理 | 睡眠监测设备、智能灯 | 根据睡眠状态调节灯光和环境 |
扩展阅读
- 设备协议详解:深入了解米家设备通信协议,实现更底层的控制
- 高级自动化:结合机器学习算法,实现设备的自主学习和智能决策
- 第三方集成:将米家设备与Home Assistant、Node-RED等平台集成
- 安全最佳实践:保护智能家居系统安全的关键措施和配置建议
通过本指南,你已经掌握了使用米家API进行智能家居编程的基础知识和实战技巧。从简单的设备控制到复杂的自动化场景,Python编程为智能家居带来了无限可能。开始动手实践,打造属于你的个性化智能生活吧!
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0191- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
awesome-zig一个关于 Zig 优秀库及资源的协作列表。Makefile00