Google智能家居烟雾传感器无推送通知问题咨询及示例求助
烟雾传感器主动推送通知失效问题排查
核心问题原因
你遇到的HomeGraph状态更新正常、接口返回200但收不到推送的问题,由3个配置错误共同导致:
- SYNC响应缺失通知权限声明
设备同步阶段的SYNC返回结果中,烟雾传感器对应的SensorStatetrait必须显式声明supportsNotifications: true,该字段是通知功能的服务端开关,缺失时所有上报的通知都会被直接拦截,不会进入下发流程。 - 通知优先级配置错误
烟雾检测属于安全类高优先级告警,priority字段需要设置为1,你当前设置的0为低优先级,低优先级通知仅会静默更新HomeGraph设备状态,不会触发手机弹窗、语音播报,这也是你能在HomeGraph查看器中看到状态变更但收不到推送的直接原因。 - 上报payload缺失必填states节点
调用reportStateAndNotification接口时,不能仅传递notifications节点,必须在payload.devices下同步传递states节点,上报设备当前的最新状态值,否则服务端会判定通知与设备实际状态不匹配,拒绝下发推送。
其他需要排查的配置项
- 除了手机系统级的语音通知权限,还需要在Google Home应用的「设置-通知-安全与安保」分类下,开启烟雾/一氧化碳告警的通知权限,部分机型默认关闭该类通知的弹窗权限。
- 每次上报通知使用的
eventId必须全局唯一,重复ID会被判定为重复通知直接丢弃,你当前使用的随机数计算逻辑存在哈希碰撞风险,建议改用UUID v4生成唯一ID。 - 上报时传入的
deviceId必须和SYNC阶段上报的设备ID完全一致,大小写、特殊字符不能存在差异。
修正后的核心实现代码
// 引入uuid生成唯一ID,避免随机数碰撞 const { v4: uuidv4 } = require('uuid'); const requestId = uuidv4(); const eventId = uuidv4(); const res = await homegraphClient.devices.reportStateAndNotification({ requestBody: { agentUserId: kullanici, eventId: eventId, requestId: requestId, payload: { devices: { // 必传:同步上报设备最新状态 states: { [deviceId]: { SensorState: { name: "SmokeLevel", currentSensorState: "smoke detected" } } }, notifications: { [deviceId]: { SensorState: { priority: 1, // 安全告警设置为高优先级 name: "SmokeLevel", currentSensorState: "smoke detected" } } } } } } });
参考示例
官方Node.js智能家居示例仓库中包含传感器类设备主动通知的完整实现,覆盖SYNC声明、状态上报、通知推送全流程逻辑,可直接参考对应模块写法。
内容的提问来源于stack exchange,提问作者Non Or Away
相关产品推荐
相关产品推荐

