如何在 Google Core IoT 中进行配置?

Posted

技术标签:

【中文标题】如何在 Google Core IoT 中进行配置?【英文标题】:How to configure in Google Core IoT? 【发布时间】:2019-10-08 10:05:31 【问题描述】:

我在 Raspberry Pi 3 Model B 中编写了一个 python 程序,它应该使用 MQTT 协议连接到 Google Cloud IoT Core 并获取配置。到目前为止,向 Core 发送数据已经成功了,但我就是不知道配置是如何工作的!这是一个应该获取配置的代码:


    import time
    import datetime
    import jwt
    import ssl
    import json
    import paho.mqtt.client as mqtt


    time_now = datetime.datetime.utcnow()


    #make key
    token  = 'iat' : time_now ,
              'exp' : time_now + datetime.timedelta(minutes=60),
              'aud' : "[PROJECT]"

    r = open("[PRIVATE KEY]", 'r')
    pub_key = r.read()

    jwt_key = jwt.encode(token, pub_key, algorithm='RS256')


    #connect to iot-core
    client = mqtt.Client(client_id='projects/[PROJECT]/locations/[LOCATION]/registries/[REGISTER]/devices/[DEVICE]')
    client.username_pw_set(username='unused', password=jwt_key)

    client.tls_set(ca_certs='/home/pi/.local/lib/python2.7/site-packages/grpc/_cython/_credentials/roots.pem', tls_version=ssl.PROTOCOL_TLSv1_2)
    client.connect("mqtt.googleapis.com", 8883)

    #configure and change state
    state = 0

    print state #naturally shows 0

    print client.subscribe([DEVICE]/config, qos=1) #doesn't print custom config either, just (0,1) 

    print state #still shows 0

Iot Core 设备 ID 中的配置为:

"state": 1

即使在运行程序之后,设备的“状态”变量仍保持为 0,并且内核的配置和状态历史表明 CONFIG 为“设备尚未确认”

如何从 Core 获取设备的“状态”变量从 0 变为 1?

【问题讨论】:

【参考方案1】:

你已经完成了一半的工作。 2 备注。

    这可能是一个细节,但你将你的私钥命名为pub_key。而且你没有关闭文件。

    Based on this tutorial,你只订阅了 MQTT。返回元组(0,1) 表示MQTT_ERR_SUCCESS on QOS = 1。因此您已连接。伟大的!现在,做第二部分:消费频道中的消息,并制定你的逻辑(根据收到的消息,如果是你的用例,在你的应用程序中更改状态)

【讨论】:

谢谢,成功了!但由于某种原因,它会显示两次消息。

以上是关于如何在 Google Core IoT 中进行配置?的主要内容,如果未能解决你的问题,请参考以下文章

Google IoT Core:我如何知道消息来自哪个设备?

如何更改 Google IoT Core 的 MQTT 主机名

在IoT-Core上检索和编辑设备配置时的身份验证错误

如何将传感器数据(例如来自 DHT11 传感器的温度数据)发送到 Google Cloud IoT Core 并存储它

在与 Google Cloud IoT Core 交互时限制用户对 IoT 项目的访问

Google Core IoT 设备离线事件或连接状态