Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 要订阅主题(云IoT核心主题,而不是发布/订阅主题,因为只有前者与设备相关),您可以订阅MQTT主题,其中(作为示例),设备订阅配置主题,其中发布配置更新: # This is the topic that the device will receive configuration updates on. mqtt_config_topic = '/devices/{}/config'.format(device_id) # Subscribe to the config topic. client.subscribe(mqtt_config_topic, qos=1)_Python_Google Cloud Platform_Publish Subscribe_Iot_Google Cloud Iot - Fatal编程技术网

Python 要订阅主题(云IoT核心主题,而不是发布/订阅主题,因为只有前者与设备相关),您可以订阅MQTT主题,其中(作为示例),设备订阅配置主题,其中发布配置更新: # This is the topic that the device will receive configuration updates on. mqtt_config_topic = '/devices/{}/config'.format(device_id) # Subscribe to the config topic. client.subscribe(mqtt_config_topic, qos=1)

Python 要订阅主题(云IoT核心主题,而不是发布/订阅主题,因为只有前者与设备相关),您可以订阅MQTT主题,其中(作为示例),设备订阅配置主题,其中发布配置更新: # This is the topic that the device will receive configuration updates on. mqtt_config_topic = '/devices/{}/config'.format(device_id) # Subscribe to the config topic. client.subscribe(mqtt_config_topic, qos=1),python,google-cloud-platform,publish-subscribe,iot,google-cloud-iot,Python,Google Cloud Platform,Publish Subscribe,Iot,Google Cloud Iot,然后,使用,您可以处理在您实际订阅的主题上发布的消息。请注意,负载必须解析为字符串(str(message.payload)) 然后,在您的问题中,您表示您首先订阅了/devices/{device id}/config,但这可能不是您想要的,因为这是发布配置更新时的主题(即不是发布遥测事件的位置)。然后,我知道您应该订阅/devices/{device id}/events,这是发布遥测度量的实际MQTT主题。如果这不起作用,则可能存在另一个相关问题,因此请确保正确解析消息变量,或者尝试使用注

然后,使用,您可以处理在您实际订阅的主题上发布的消息。请注意,负载必须解析为字符串(
str(message.payload)


然后,在您的问题中,您表示您首先订阅了
/devices/{device id}/config
,但这可能不是您想要的,因为这是发布配置更新时的主题(即不是发布遥测事件的位置)。然后,我知道您应该订阅
/devices/{device id}/events
,这是发布遥测度量的实际MQTT主题。如果这不起作用,则可能存在另一个相关问题,因此请确保正确解析
消息
变量,或者尝试使用注册表创建,以检查遥测指标是否正确发布。

阅读@Gabewiss回答中评论部分的讨论后,我认为您想要实现什么以及如何(或为什么)尝试使用发布/订阅有点混淆

鉴于我认为这里的问题更具概念性,让我首先向您介绍一个关于的通用文档页面,在该页面中,您将实际找到一些关于云物联网核心与发布/订阅之间关系的信息。总之,设备遥测数据发布到云物联网核心主题中,稍后通过数据代理,发布到云发布/子主题中,您可以在外部将其用于其他目的:触发云函数、使用数据流分析数据流等

现在,如果您遵循,您将看到如何在给定的点上发布设备遥测事件。如果不想写入默认的发布/子主题,而是希望写入多个主题,则可以按照下面的说明进行操作

最后,说到订阅主题(云IoT核心主题,而不是发布/订阅主题,因为只有前者与设备相关),您可以订阅MQTT主题,其中(作为示例),设备订阅配置主题,其中发布配置更新:

# This is the topic that the device will receive configuration updates on.
mqtt_config_topic = '/devices/{}/config'.format(device_id)

# Subscribe to the config topic.
client.subscribe(mqtt_config_topic, qos=1)
然后,使用,您可以处理在您实际订阅的主题上发布的消息。请注意,负载必须解析为字符串(
str(message.payload)


然后,在您的问题中,您表示您首先订阅了
/devices/{device id}/config
,但这可能不是您想要的,因为这是发布配置更新时的主题(即不是发布遥测事件的位置)。然后,我知道您应该订阅
/devices/{device id}/events
,这是发布遥测度量的实际MQTT主题。如果这不起作用,则可能存在另一个相关问题,因此请确保正确解析
消息
变量,并且可能尝试使用注册表创建,以检查遥测指标是否正确发布。

为了接收与我指定主题相关的通知,我不得不向谷歌发布/订阅库投降

我的发布代码(仅重要部分):

在谷歌云平台门户中,我必须在Pub/Sub部分创建一个订阅,将其分配给我创建的主题,这已经是我的默认主题(可能链接到/events-topic)。创建的订阅具有以下格式:

projects/project_name/subscriptions/subscription_name
我的订阅代码,使用Google发布/订阅库,因为不可能使用MQTT协议:

from google.cloud import pubsub

def callback(message):
    print(message.data)
    message.ack()

project_id = "project_name"
subscription_name = "sm1"

subscriber = pubsub.SubscriberClient()
subscription_name = 'projects/{}/subscriptions/{}'.format(project_id, subscription_name)

subscription = subscriber.subscribe(subscription_name)
future = subscription.open(callback)

try:
    future.result()
except Exception as ex:
    subscription.close()
    raise

我希望这能帮助任何人。更多详细信息。

为了接收与我指定主题相关的通知,我不得不向谷歌发布/订阅库投降

我的发布代码(仅重要部分):

在谷歌云平台门户中,我必须在Pub/Sub部分创建一个订阅,将其分配给我创建的主题,这已经是我的默认主题(可能链接到/events-topic)。创建的订阅具有以下格式:

projects/project_name/subscriptions/subscription_name
我的订阅代码,使用Google发布/订阅库,因为不可能使用MQTT协议:

from google.cloud import pubsub

def callback(message):
    print(message.data)
    message.ack()

project_id = "project_name"
subscription_name = "sm1"

subscriber = pubsub.SubscriberClient()
subscription_name = 'projects/{}/subscriptions/{}'.format(project_id, subscription_name)

subscription = subscriber.subscribe(subscription_name)
future = subscription.open(callback)

try:
    future.result()
except Exception as ex:
    subscription.close()
    raise

我希望这能帮助任何人。更多细节。

仍不清楚。文件中没有对此做任何处理。如问题中所述,我在IoT Core
projects/myprojectname/topics/sm1
上创建了以下主题。但是我的客户必须在一个名为
events
的主题中发布,我仍然不知道应该订阅哪个主题来接收所需主题
sm1
的感兴趣消息……啊,好吧,我想我明白了,将编辑我的答案…secI将我的主题更改为
projects/myprojectname/topics/sm1
,而不是
/devices/sm1/config
,但我仍然无法看到发布的值:“连接到Google IoT Broker…连接状态:0”。它是否应该与某种权限相关?还有其他遗漏吗?您仍在尝试连接到物联网核心。发布/订阅不是MQTT。有一个单独的API订阅发布/订阅主题。从这里开始:所以,我认为应该在与物联网核心相关的教程中进行描述。。。更重要的是,本文介绍了如何创建主题。。。如果我们学习如何创建,我们还必须学习如何订阅,而这些信息并不存在。我会读的。谢谢,还不清楚。文件中没有对此做任何处理。如问题中所述,我在IoT Core
projects/myprojectname/topics/sm1
上创建了以下主题。但是我的客户必须在一个名为
events
的主题中发布,我仍然不知道应该订阅哪个主题来接收I