我正在使用Azure IoT中心创建IoT应用程序。客户端是用python编写的,我正在使用iotc库(https://pypi.org/project/iotc/)发送/接收消息。 我的工作场所中的防火墙可能正在阻止MQTT流量,这就是python iotc解决方案无法正常工作的原因。
我的设置通过热点工作,但不在我工作的公司的有线网络上工作。所以这就是为什么我认为我们的防火墙阻止了端口8883上的MQTT通信。 根据{{3}},我还应该能够通过WebSockets和端口443使用MQTT。我正在尝试找到一种方法来使用来自https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support的示例python应用程序,该应用程序使用Websockets而不是端口8883上的MQTT。
这是来自Microsoft的演示应用程序。我猜应该在“ iotc.connect()”行周围的某个地方尝试从mqtt更改为websockets
# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license.
import iotc
from iotc import IOTConnectType, IOTLogLevel
from random import randint
deviceId = "DEVICE_ID"
scopeId = "SCOPE_ID"
deviceKey = "PRIMARY/SECONDARY device KEY"
iotc = iotc.Device(scopeId, deviceKey, deviceId, IOTConnectType.IOTC_CONNECT_SYMM_KEY)
iotc.setLogLevel(IOTLogLevel.IOTC_LOGGING_API_ONLY)
gCanSend = False
gCounter = 0
def onconnect(info):
global gCanSend
print("- [onconnect] => status:" + str(info.getStatusCode()))
if info.getStatusCode() == 0:
if iotc.isConnected():
gCanSend = True
def onmessagesent(info):
print("\t- [onmessagesent] => " + str(info.getPayload()))
def oncommand(info):
print("- [oncommand] => " + info.getTag() + " => " + str(info.getPayload()))
def onsettingsupdated(info):
print("- [onsettingsupdated] => " + info.getTag() + " => " + info.getPayload())
iotc.on("ConnectionStatus", onconnect)
iotc.on("MessageSent", onmessagesent)
iotc.on("Command", oncommand)
iotc.on("SettingsUpdated", onsettingsupdated)
iotc.connect()
while iotc.isConnected():
iotc.doNext() # do the async work needed to be done for MQTT
if gCanSend == True:
if gCounter % 20 == 0:
gCounter = 0
print("Sending telemetry..")
iotc.sendTelemetry("{ \
\"temp\": " + str(randint(20, 45)) + ", \
\"accelerometerX\": " + str(randint(2, 15)) + ", \
\"accelerometerY\": " + str(randint(3, 9)) + ", \
\"accelerometerZ\": " + str(randint(1, 4)) + "}")
gCounter += 1
我希望可以进行一些配置,在其中可以选择所使用的协议。不幸的是,到目前为止,我找不到一个。
答案 0 :(得分:0)
查看文档,我认为您需要使用setServiceHost(URL)
setServiceHost
设置服务端点URL
device.setServiceHost(url)
- url :服务端点的URL。 (默认值为global.azure-devices-provisioning.net)
在连接之前调用此
由于它采用了网址,因此您应该能够包含端口号,例如
wss://foo.microsoft.com:443/
(尽管443应该是wss://
的默认端口)