You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google智能家居烟雾传感器无推送通知问题咨询及示例求助

烟雾传感器主动推送通知失效问题排查

核心问题原因

你遇到的HomeGraph状态更新正常、接口返回200但收不到推送的问题,由3个配置错误共同导致:

  • SYNC响应缺失通知权限声明
    设备同步阶段的SYNC返回结果中,烟雾传感器对应的SensorState trait必须显式声明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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:48:22