У меня есть приложение IOT Central, к которому я подключаюсь с Raspberry Pi. Мое приложение написано в python и использует этот клиент . На ровном месте он перестал соединяться. В ходе устранения неполадок я создал новый экземпляр устройства и смог подключиться к нему и без проблем отправлять данные.
Когда я подключаюсь к экземпляру устройства, на котором происходит сбой, я получаю следующий отладочный вывод:
(1583372709.496152, '- iotc :: connect :: ')
(1583372711.196312, u'- iotc :: _loopAssign :: https://global.azure-devices-provisioning.net/[SNIP]/registrations/[SNIP]/operations/[SNIP]?api-version=2018-11-01')
(1583372711.704034, "ERROR : (_mqttConnect) DPS L => {u'status': u'failed', u'registrationState': {u'status': u'failed', u'registrationId': u'[SNIP]', u'lastUpdatedDateTimeUtc': u'2020-03-05T01:45:10.9083208Z', u'errorMessage': u'Custom allocation failed with status code: 404', u'createdDateTimeUtc': u'2020-03-05T01:45:10.7281998Z', u'errorCode': 400207, u'etag': u'IjI4MDAwZWVjLTAwMDAtMDcwMC0wMDAwLTVlNjA1OWE2MDAwMCI='}, u'operationId': u'4.9c72ae77bbf4a798.07be3168-8a06-4a14-9d3b-83be8b4cef17'}")
Вот код:
# Portions Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license.
import iotc
from iotc import IOTConnectType, IOTLogLevel
import sht31
from time import sleep
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
print bcolors.WARNING + "Version: 0.5.2" + bcolors.ENDC
deviceId = "[SNIP]"
scopeId = "[SNIP]"
deviceKey = "[SNIP]"
gardenMonitor = iotc.Device(scopeId, deviceKey, deviceId, IOTConnectType.IOTC_CONNECT_SYMM_KEY)
# gardenMonitor.setLogLevel(IOTLogLevel.IOTC_LOGGING_API_ONLY)
gardenMonitor.setLogLevel(IOTLogLevel.IOTC_LOGGING_ALL)
gCanSend = False
gCounter = 0
def onconnect(info):
global gCanSend
print("- [onconnect] => status:" + str(info.getStatusCode()))
if info.getStatusCode() == 0:
if gardenMonitor.isConnected():
gCanSend = True
elif info.getStatusCode() == 1:
print bcolors.FAIL + "ERROR: Connect status code: 1. Terminating program." + bcolors.ENDC
sys.exit("Unable to connect. Terminating program.")
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())
gardenMonitor.on("ConnectionStatus", onconnect)
gardenMonitor.on("MessageSent", onmessagesent)
gardenMonitor.on("Command", oncommand)
gardenMonitor.on("SettingsUpdated", onsettingsupdated)
gardenMonitor.connect()
sht31 = sht31.SHT31(1) # Raspberry Pi 4 places the sht31 bus on 1; some older units place it on 0
while True:
while gardenMonitor.isConnected():
gardenMonitor.doNext() # do the async work needed to be done for MQTT
if gCanSend == True:
if gCounter % 20 == 0: # Does this seriously just count to 20 for delay??
gCounter = 0
temperature, humidity = sht31.get_temp_and_humidity()
asvp = 610.78 * 2.71828 ** (temperature / (temperature + 238.3) * 17.2694) / 1000 # Calculate SVP of the air
lsvp = 610.78 * 2.71828 ** ((temperature - 2) / (temperature + 236.3) * 17.2694) / 1000 # Calculate SVP of the leaves
vpd = lsvp - (asvp * humidity / 100)
print bcolors.BOLD + "Temperature:" + bcolors.OKGREEN + " %s" % temperature + bcolors.ENDC
print bcolors.BOLD + "Humidity:" + bcolors.OKGREEN + " %s" % humidity + bcolors.ENDC
print bcolors.BOLD + "VPD:" + bcolors.OKGREEN + " %s" %vpd + bcolors.ENDC
#print("Sending telemetry..")
gardenMonitor.sendTelemetry("{ \
\"temperature\": " + str(temperature) + ", \
\"humidity\": " + str(humidity) + ", \
\"VPD\": " + str(vpd) + "}")
gCounter += 1
else:
gardenMonitor.connect()
sleep(5)
Может кто-нибудь предложить способ исправить экземпляр устройства, чтобы мне не пришлось выбрасывать его историю и начинать заново с новым экземпляром? Я попытался заблокировать и разблокировать устройство, перенести его между группами устройств и снова одобрить устройство.