python - 将 iot 设备消息发送到 azure
问题描述
我设置了 azure,创建了 iot hub、设备、主题和订阅。现在我想通过 mqtt 从 python 脚本发送一条消息,并看到它以某种方式出现在 azure 页面上
def on_connect(client, userdata, flags, rc):
print ("Device connected with result code: " + str(rc))
def on_disconnect(client, userdata, rc):
print ("Device disconnected with result code: " + str(rc))
def on_publish(client, userdata, mid):
print ("Device sent message")
client = mqtt.Client(client_id=device_id, protocol=mqtt.MQTTv311)
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_publish = on_publish
client.username_pw_set(username=iot_hub_name+".azure-devices.net/" + device_id, password=sas_token)
client.tls_set(certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLSv1, ciphers=None)
client.tls_insecure_set(False)
client.connect(iot_hub_name+".azure-devices.net", port=8883)
client.publish("devices/" + device_id + "/messages/events/", "{id=123}", qos=1)
client.loop_forever()
问题是我不知道如何指定主题。当我尝试这个
client.publish("devices/" + device_id + "/mytopicname/messages", "{id=123}", qos=1)
它与代码 1 断开连接。
解决方案
IoT Hub 不是通用的发布-订阅消息代理,它仅支持记录的主题名称和主题过滤器。请参阅本文档(使用 MQTT 协议与您的 IoT 中心通信)。
因此,当您想使用 MQTT 直接连接到 IoT Hub 时,您无法发布自定义主题。
推荐阅读
- testing - Trouble clicking page that has query string
- javascript - JavaScript keyup event is fired even though the user has not yet released the key on Android WebView
- for-loop - Porting C-style for-loops with non-trivial iteration and continue to Rust
- python - Flask - show flash messages in same place, not at top of page
- c# - Connecting to ODBC driver from azure function
- java - Parsing XML with multiple namespaces with xPath in Java
- php - 将 Moodle 传输到本地主机时出现连接错误是什么?
- php - 相同的 PHP 会话适用于所有 PC,除了少数
- python - Pandas函数比较浮点数和整数时出错
- r - 在循环中分配 a <- b 但 a 不会随着 b 的变化而变化