我正在使用 Azure IoT Central 创建一个 IoT 应用程序。客户端是用 python 编写的,我正在使用 iotc 库 ( https://pypi.org/project/iotc/ ) 来发送/接收消息。我工作场所的防火墙可能阻止了 MQTT 流量,这就是 python iotc 解决方案不起作用的原因。
我的设置在热点上工作,但不是在我工作的公司的有线网络上工作。所以这就是为什么我认为我们的防火墙阻止了端口 8883 上的 MQTT 流量。根据https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support我也应该能够在 WebSockets 和端口 443 上使用 MQTT。我正在尝试找到一种方法来使用来自 https://github.com/Azure/iot-central-firmware/blob/master/RaspberryPi/app.py 的示例 python应用程序端口 8883 上的 Websockets 而不是 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
我希望有一些配置可以选择使用的协议。不幸的是,到目前为止我还没有找到。