设备统一管理模块:支持Wi-Fi、蓝牙、Zigbee等多种协议设备的发现、配网、分组与重命名。
智能场景中心:用户可自定义“回家模式”、“影院模式”、“睡眠模式”等,一键触发多设备联动(如:开启“回家模式”,自动开灯、开空调、播放音乐)。
实时控制面板:提供图形化拖拽界面,直观控制所有设备状态;集成语音助手接口,支持语音控制。
能源管理模块:可视化统计各设备历史耗电量,提供节能建议与定时开关策略。
家庭安防看板:集中显示安防摄像头画面、门窗传感器状态,异常情况及时APP推送告警。
1、整体架构和设计思路,不同模块使用的技术栈。
项目采用前后端分离的微服务架构,确保高可用与可扩展性。
前端(Vue 3 + TypeScript + Pinia):采用组件化开发,使用Vite构建,确保优秀的开发体验与运行时性能。移动端使用Vant组件库,管理后台使用Element Plus。
后端(Node.js + Koa):
用户与设备管理服务:处理用户认证、设备元数据存储(MySQL)。
消息转发服务:核心服务,使用MQTT协议与设备端通信,并利用Redis的Pub/Sub功能实现控制指令的实时推送与设备状态同步。Redis同时缓存高频访问的设备状态,降低数据库压力。
场景引擎服务:解析和执行用户设定的自动化规则,采用规则引擎处理复杂的“如果-就”逻辑。
通信:设备与云端通过MQTT保持长连接,实现低延迟控制;前端通过WebSocket与后端通信,获取实时状态更新。
2、“我”的负责模块和结果(尽可能量化)。
我作为后端核心开发,主要负责:
消息转发服务的设计与实现:独立设计了基于MQTT Topic和设备ID的路由方案,实现了设备指令毫秒级(平均<200ms)下发。该服务成功接入了超5万个在线设备,日均处理消息300万条。
设备实时状态同步机制:利用Redis存储设备最新状态,并通过WebSocket向所有在线用户推送状态变更。实现首页设备状态加载时间从原始的2-3秒降低至500毫秒以内。
场景引擎核心逻辑开发:负责开发了场景触发条件的解析器与动作执行器。上线后,用户创建的自动化场景数累计超2万个,场景执行成功率达到99.5%。
3、“我”遇到的难点、坑,和解决方案。
难点一:海量设备连接下的状态一致性。当多个用户同时操作同一设备时,可能出现状态不同步。
解决方案:引入基于Redis的分布式锁,在发送控制指令前对设备ID加锁,确保同一时间只有一个控制请求被处理。同时,所有状态变更以设备端最终上报的状态为准,通过版本号进行乐观锁控制。
难点二:MQTT消息积压与服务质量(QoS)选择。初期对所有消息使用QoS 2(确保送达),在高并发下导致服务端消息积压。
解决方案:区分消息类型。对控制指令采用QoS 1(至少送达一次),保证可靠性;对设备频繁上报的状态数据采用QoS 0(最多一次),保证吞吐量。并对服务端进行水平扩容,按设备类型拆分MQTT Broker集群。
难点三:场景联动的执行顺序与错误处理。一个场景包含多个动作,部分失败会影响用户体验。
解决方案:设计了一个可回滚的动作执行队列。为每个动作定义反向操作(如“开灯”的反向是“关灯”)。当序列中某个动作执行失败时,自动中断并尝试回滚已执行的动作,同时向用户发送明确的失败报告,提示用户检查具体设备。