将iot设备消息发送到azure

时间:2018-05-25 14:47:32

标签: python azure mqtt iot azure-iot-hub

我设置了azure,创建了iot集线器,设备,主题和订阅。 现在我想通过mqtt从python脚本发送消息,看看它在某个天蓝色的页面上显示

/* Edited Child component */

 selectedIds: GenericID[];
 @Input('selectedIds')
    set selectedIdss(value: GenericID[]) {
        if (value) {
           this.selectedIds = value;
        }else {
           this.selectedIds = [];
        }
    }
    get selectedIdss() {
        return this.selectedIds;
    }

问题在于我不知道如何指定主题。 我试过这个时

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()

它与代码1断开连接。

2 个答案:

答案 0 :(得分:2)

IoT Hub不是通用的pub-sub消息传递代理,它只支持记录的主题名称和主题过滤器。请参阅此文档(Communicate with your IoT hub using the MQTT protocol)。

因此,当您想直接使用MQTT连接到IoT Hub时,无法发布自定义主题。

答案 1 :(得分:0)

代码1表示您使用的是不同的协议版本。最新版本有时会有不同的标题(例如添加了一个额外的字段)。

代码1的确切含义:"连接拒绝,不可接受的协议版本"