Google IoT 订阅通知问题:无法接收/devices/sm1/events消息
正确订阅Google IoT Core设备消息的方法
先帮你理清楚你遇到的几个核心问题:订阅/devices/sm1/config收空消息、直接订阅发布路径失败、控制台主题显示异常,下面一步步给你解决:
1. 先搞懂Google IoT Core的主题规则
Google IoT Core的设备主题是有固定格式的,千万别搞混用途:
- 设备端发消息:你用的
/devices/sm1/events是对的,这个是设备向云端上报事件的主题 - 设备端收配置:
/devices/sm1/config是设备用来接收云端下发的配置信息的,不是用来收设备自己发的事件的——这就是你订阅它只收到空消息的原因! - 云端订阅设备事件:必须用注册表级别的完整主题路径,格式是:
要是想订阅这个注册表下所有设备的事件,还可以用通配符/projects/{你的项目ID}/locations/{你的区域}/registries/{你的注册表ID}/devices/sm1/events*替换sm1。
2. 解决"订阅发布路径失败"的问题
你直接订阅/devices/sm1/events肯定不行,因为这个是设备端的发布主题,云端得用完整的注册表路径才能订阅。举个实际例子:
如果你的项目ID是my-iot-project,区域是europe-west1,注册表ID是my-device-registry,那你要订阅的完整主题就是:
/projects/my-iot-project/locations/europe-west1/registries/my-device-registry/devices/sm1/events
要是用gcloud命令创建订阅的话,命令是这样的:
gcloud pubsub subscriptions create sm1-event-sub --topic=projects/my-iot-project/locations/europe-west1/registries/my-device-registry/devices/sm1/events
3. 解决控制台主题显示"e..."的问题
控制台里显示的主题名称被截断成e...了,其实它就是我上面说的完整注册表级事件主题。你只要点击主题名称旁边的复制按钮,就能看到完整的路径,和咱们说的格式完全一致。
4. 快速验证订阅的步骤
- 先确认设备确实在往
/devices/sm1/events发消息(可以在设备端加个日志打出来,确保消息发出去了) - 在云端用完整路径创建订阅(控制台或者gcloud命令都可以)
- 拉取订阅的消息试试,比如用gcloud命令:
gcloud pubsub subscriptions pull sm1-event-sub --auto-ack
这样应该就能收到设备发的消息了。
最后再提醒一句:/devices/sm1/config是设备端收配置的通道,只有你在云端给这个设备设置了配置内容,设备订阅它才会收到消息,和事件发布完全是两个不同的通道,别搞混啦!
内容的提问来源于stack exchange,提问作者Dalton Cézane
相关产品推荐
相关产品推荐

