色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
創作
電子發燒友網>電子資料下載>電子資料>重訪The Things Industries (TTI) V3 Azure IoT連接器

重訪The Things Industries (TTI) V3 Azure IoT連接器

2023-06-14 | zip | 0.00 MB | 次下載 | 免費

資料介紹

描述

早在 2020 年 11 月,我就發布了我的 The Things Network V2 Azure IoT Hubs & IoT Central Gateway。該項目是關于構建物聯網 (TTN)HTTP 應用程序集成,它啟用Azure IoT 中心Azure IoT CentralAzure IoT 中心設備供應服務 (DPS)供應支持的連接。

該項目使用了“符合流行語”的Microsoft Azure服務選擇,但它不支持云到設備 (C2D) 消息,存在消息排序問題,并且部署和設置復雜。還有其他問題,但不值得在這里重新討論

然后在 2021 年 3 月,我再次嘗試使用我的 The Things Industries(TTI) V3 Azure IoT 連接器,它是一個TTI(消息隊列遙測傳輸)MQTT 集成,也使用了 TTI應用程序終端設備 API

此版本使用MQTTNet (這是一個很棒的庫)和在應用程序啟動時連接到Azure IoT HubAzure IoT Central的 TTI 設備。即使我使用多個線程并對 Application 和 EndDevice 請求進行分頁,這個過程也很慢

該應用程序更容易調試,因為我可以在桌面上運行它,并且更容易配置,因為我將配置轉移回appsettings.json文件(我可能會重新考慮放棄Azure Key Vault支持的決定)。

此版本具有基本的Azure 數字孿生定義語言 (DTDL)支持,因此可以在Azure IoT Central中“自動”預配設備

我還添加了對Azure IoT HubsAzure IoT Central的C2D 支持,并基于下行鏈路消息有效負載確認標志跟蹤消息傳遞我發現TTI 交付進度更新的順序可能有問題

在生產環境中使用基于MQTT的集成后,我發現它過于“有狀態”并且無法從意外事件中很好地恢復。還有其他問題,但不值得在這里重新討論

然后在 2021 年 10 月,我決定我的“學習之旅”還沒有結束,我將構建另一個TTI 連接器,該連接器將 Azure 存儲隊列用于 C2D 和 D2C 消息

試用該應用程序后,我意識到消息排序和部署復雜性可能是一個問題(我忘記了我的 TTN V2 網關學習),所以我暫停了項目(雖然我確實認為這個項目可能對一些集成項目有用

此時,我回顧了從多個 TTI 集成項目中學到的知識,并決定再次嘗試使用The Things Stack(TTS) 網絡掛鉤集成

我的“The Things Industries(TTI) V3 connector revisited”項目是一個身份轉換云網關,它將LoRaWAN EndDevices映射Azure IoT Hub Devices

連接器為每個LoRaWAN設備創建一個DeviceClient ,并且可以使用Azure 設備連接字符串或Azure 設備預配服務 (DPS)

poYBAGNYzOGAcTfrAAECnxtH-Cg828.png
The Things Industries Azure IoT 集成架構
?

在我所有的集成中,TTI 一直是設備配置的單一事實來源 (SSOT) ,因為LoRaWAN配置設置的數量和復雜性會使從其他應用程序管理它成為一個難題。(我還考慮過使用TTSEndDevice 模板來創建我可能會回來的設備)

當前版本的一個限制是,EndDevice 將連接到Azure IoT Hub (提供應用程序配置連接字符串或Azure IoT Hub DPS ),并且只有在收到 TTI 上行鏈路或Azure IoT Hub D2C 消息后才會處理 C2D 消息。一體化。

poYBAGNYzOOAE3kXAACiA5yQL2s896.png
Azure IoT Hub 設備在第一個 TTI 上行鏈路上連接
?

這可能是一個問題(尤其是在重新啟動集成后)或配置了新設備。我考慮過添加幾個Azure HTTP 觸發器函數,應用程序調用這些函數可以檢查設備的連接狀態并可選擇啟動連接。(短期內從 TTI EndDevice 用戶界面或 API 模擬上行鏈路應該可以工作)

我從D2C 消息傳遞開始,然后添加了C2D 消息傳遞,然后添加了支持DTDLV2 的 Device Provisioning(DPS) ,然后擴展了C2D 消息傳遞,最后實現了Azure IoT Central D2CC2D (使用少參數、單值和JavaScript 對象表示法(JSON )有效載荷命令

poYBAGNYzOeAGhl3AAFd9pLQHAk861.jpg
Azure IoT Central 儀表板,用于我的測試環境中的 Seeeduino LoRaWAN 傳感器
?

該應用程序的核心是五個Azure HTTP 觸發函數(已發送函數當前未使用)和一個為 C2D 調用的方法(與SetReceiveMessageHandlerAsync方法連接)消息。

pYYBAGNYzOqAFz3XAAEZr8FBBVM795.png
Azure 門戶功能列表
?

Azure IoT 中心可以調用方法(同步)消息(異步)發送到設備進行處理。Azure IoT 中心 DeviceClient兩個方法SetMethodDefaultHandlerAsyncSetReceiveMessageHandlerAsync ,它們可以處理直接方法和消息。

在對以前的 TTI 連接器進行了一些實驗之后,我發現DirectMethods的同步特性不適用于LoRAWAN通常“不規則”的上行鏈路,因此目前不支持它們。

該集成廣泛使用了Microsoft.Extensions.Logging功能和Azure Application Insights ,因此調試、監控和故障查找更省時。

poYBAGNYzOyAauTpAAH12E5TmNo741.png
Azure Application Insights(說明搜索功能)
?

我已將有用的“元數據”添加到各個日志項中,因此更容易跟蹤為處理事件而執行的所有步驟,例如 ReceiveMessageCallback AbandonAsync CompleteAsyncRejectAsync C2D 消息處理中使用的 LockToken。

應用程序配置概述

可以使用appsettings.json文件配置應用程序(對桌面開發和調試很有用)

{
   "Values": {
      "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=...",
      "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
      "APPINSIGHTS_INSTRUMENTATIONKEY": "..."
      },
      "TheThingsIndustries": {
      "WebhookBaseURL": "https://....eu1.cloud.thethings.industries/api/v3/as/applicat      ions",
      "Applications": {
         "seeeduinolorawan": {
         "webhookId": "azure-iot-hub-connector",
         "APIKey": "..."
         },
         "Wisnode Devices": {
         "webhookId": "azure-iot-hub-connector",
         "APIKey": "..."
         },
         "dragino-lht65": {
         "webhookId": "azure-iot-hub-connector",
         "APIKey": "..."
         },
         "SeeeduinoLoRaWAN100": {
         "webhookId": "azure-iot-hub-connector",
         "APIKey": "..."
         },
         "rak3172": {
            "webhookId": "azure-iot-hub-connector",
            "APIKey": "..."
         },
       "application1": {
          "webhookId": "azure-iot-hub-connector",
          "APIKey": "..."
        }
      }
   },
   "AzureIoT": {
      "DeviceClientCacheSlidingExpiration": "P2H30M",
      "IoTHub": {
         "IoTHubConnectionString": "HostName=...",
         "Applications": {
            "SeeeduinoLoRaWAN": {
            "DtdlModelId": "dtmi:ttnv3connectorclient:SeeeduinoLoRaWAN4cz;1"
            },
            "Wisnode Devices": {
            },
            "Dragino LHT65": {
            }
         }
      },
      "DeviceProvisioningService": {
         "IdScope": "0ne..",
         "Applications": {
         "seeeduinolorawan": {
            "DtdlModelId": "dtmi:ttnv3connectorclient:SeeeduinoLoRaWAN4cz;1",
            "GroupEnrollmentKey": "...",
         },
         "Wisnode Devices": {
            "GroupEnrollmentKey": "..."
         },
         "dragino-lht65": {
            "GroupEnrollmentKey": "..."
         },
         "rak3172": {
            "GroupEnrollmentKey": "..."
         },
      "application1": {
         "DtdlModelId": "dtmi:ttnv3connectorclient:FezduinoWisnodeV14x8;4",
         "GroupEnrollmentKey": "..."
      }
   }
},
"IoTCentral": {
   "methods": {
      "LightsGoOn": {
         "Port": 10,
         "Payload": "{"value_1": 1}"
      },
      "LightsGoOff": {
         "Port": 10,
         "Payload": "{"value_1": 0}"
      },
      "value_0": {
         "Port": 20
      },
      "value_1": {
         "Port": 21
      },
      "value_2": {
         "Port": 22
      },
      "TemperatureOOBAlertMinimumAndMaximum": {
         "Port": 23
      },
   }
}

暫存和生產部署的首選方法)是使用Azure 門戶Azure 功能配置刀片

pYYBAGNYzO-Aa-SEAAKdZ3Fh_tg207.png
Azure 門戶 Azure Function 配置
?

Things Industries Webhook 集成配置

要發送下行鏈路和接收上行鏈路消息,必須配置 TTI 應用程序和TTI 連接器并配置 API 密鑰。

注意 – TTN URL 和 Azure IoT 中心設備標識符區分大小寫

poYBAGNYzPWAREuHAALngodwyP0595.png
Azure Function 配置 TTI webhook 配置設置
?

TTI 連接器需要webhookbaseURL ,然后是每個 TTI 應用程序和一個API 密鑰,以及 WebhookId

pYYBAGNYzPiAZ8lbAAEjSkcSAOg368.png
Azure 功能配置應用程序密鑰
?

調用 Azure Functions 時,Azure Function Host Key會在名為“x-functions-key”的HTTP 標頭中傳遞

poYBAGNYzPqAH0iUAADHLPcEWyc812.png
Azure Function API Key TTI Webhook 消息處理進度配置
?

使用TTI App Key保護下行鏈路消息處理

poYBAGNYzP2ADiANAACBjeNeImQ098.png
顯示所需權限的 TTI 應用程序密鑰創建
?

調用TTI webhook 下行鏈路端點時, TTI 應用程序密鑰在標準HTTP 授權標頭中傳遞

poYBAGNYzQOAIj9rAACIlpf8IHU855.png
使用 Azure Function 端點作為基本 URL 創建 TTI Webhook 集成
?

Azure IoT 中心連接配置

TTI 連接器需要共享訪問簽名 (SAS) 設備策略連接字符串才能連接到Azure IoT 中心。

pYYBAGNYzQaAbmJZAAJFJikKiLk343.png
突出顯示 Azure IoT 中心配置的 Azure 函數配置
?
poYBAGNYzQmAHUyeAAGInG4Qun4095.png
Azure IoT 中心設備策略連接字符串配置刀片
?

Azure IoT Hub設備必須手動或通過Azure IoT Hub REST API進行預配我已經試用了一個Azure 邏輯應用程序,它管理設備配置并且可以在操作失敗時穩健地處理所需的補償事務。

poYBAGNYzQuAcK8UAAEth8zEceU341.png
Azure IoT 中心設備
?

如果同時配置了Azure IoT 中心/Azure IoT 中心設備預配 (DPS) 支持,則 TTI 連接器應用程序將不會啟動。

請注意:Azure IoT 中心設備 ID 是一個區分大小寫的字符串(最長 128 個字符),由 ASCII 7 位字母數字字符加上某些特殊字符組成:-。+ % _ # * ? ( ), : = @$ '

Azure IoT 中心設備預配服務 (DPS) 配置

TTI 連接器支持用于獨立Azure IoT 中心應用程序的Azure IoT 中心設備預配服務 (DPS) 。TTI 連接器實現還支持用于設備配置的Azure IoT Central 數字孿生定義語言( DTDL V2 )。

Azure IoT 中心設備預配服務支持使用X.509證書、可信平臺模塊 (TPM)使用共享訪問簽名(SAS) 安全令牌的對稱密鑰進行設備證明

Things Industries(TTI) V3 Azure IoT 連接器僅支持對稱密鑰設備證明。

如果Azure IoT 中心/ Azure IoT 中心設備預配 (DPS)支持兩者/兩者均未配置,則 TTI 連接器應用程序將不會啟動。

pYYBAGNYzQ-AZBoNAAIeq-DXUuA965.png
Azure 功能配置與 Azure IoT 中心設備預配服務配置
?

Azure IoT 中心設備預配服務 (DPS)具有確定設備分配方式的服務級別設置有四種支持的分配策略:

  • 均勻加權分布:鏈接的物聯網中心同樣可能有設備配置給它們。默認設置。如果您僅將設備預配到一個 IoT 中心,則可以保留此設置。
  • 最低延遲:將設備預配到設備延遲最低的 IoT 中心。如果多個鏈接的 IoT 集線器將提供相同的最低延遲,則供應服務會在這些集線器之間散列設備
  • 通過注冊列表進行靜態配置:注冊列表中所需 IoT 中心的規范優先于服務級別分配策略。
  • 自定義(使用 Azure 函數)自定義分配策略使您可以更好地控制如何將設備分配給 IoT 中心。這是通過使用 Azure 函數中的自定義代碼將設備分配給 IoT 中心來實現的。設備預配服務調用您的 Azure 函數代碼,提供有關設備和代碼注冊的所有相關信息您的函數代碼將執行并返回用于預配設備的 IoT 中心信息。

在我的測試環境中,我使用均勻加權分布,當我預置 1000 臺設備時,它們分布在我的五個Azure IoT 中心

pYYBAGNYzRKAX1gwAAEhJo3m_5c814.png
Azure IoT 中心設備預配服務 Azure IoT 中心配置
?
pYYBAGNYzRWAHe27AAGk_px_ISU214.png
Azure IoT Hub DPS 設備分發
?

Azure IoT Central DPS 配置

TTI 連接器支持Azure IoT Central應用程序所需的Azure IoT 中心設備預配服務 (DPS) (有一種預配單個設備的方法) 。TTI 連接器實現還支持用于“自動”設備預配的Azure IoT Central 數字孿生定義語言( DTDL V2 )。

如果同時配置了Azure IoT 中心/Azure IoT 中心設備預配 (DPS) 支持,則 TTI 連接器應用程序將不會啟動。

pYYBAGNYzQ-AZBoNAAIeq-DXUuA965.png
Azure 功能配置與 Azure IoT 中心設備預配服務配置
?

第一步是配置Azure IoT Central 注冊組(確保“自動連接該組中的設備”為“零接觸”配置)并將IDScope組注冊密鑰復制到 TTI 連接器配置

poYBAGNYzR6AGi-eAADsoRNAUkE603.png
RAK3172 設備連接配置
?

然后,我為我的RAK3172 分線板基于 .Net Core 供電的測試設備創建了一個 Azure IoT Central 模板

pYYBAGNYzSCAE2kLAAD3d8M7ht8562.png
RAK3172 設備模板
?
poYBAGNYzSOAFwe9AAEJdHLmI6g896.png
RAK3172 設備注冊組
?
pYYBAGNYzSWAdJ9TAADgw9ydDE4677.png
將設備組與組注冊配置關聯
?
poYBAGNYzSmAcFdyAAD2g049uFo336.png
復制 RAK3172 DTDL V2 模板 ID
?

還可以使用在 TTI 連接器配置中指定的可選 dtdlmodelid 為 TTI 應用程序設置設備模板 @Id。

Azure IoT Hub 設備到云 (D2C)

LoRaWAN設備使用共享訪問簽名 (SAS) 設備策略連接字符串連接到Azure IoT 中心我正在使用Device Twin Explorer顯示遙測數據并向我的傳感器節點發送消息。

poYBAGNYzSyAXyr1AAEXMpbrU2w884.jpg
顯示來自我的 Seeeduinolorawan2 設備的遙測數據的設備資源管理器
?

如果有效負載已被有效負載格式化程序解碼,則將對其進行后處理,然后包含在消息有效負載中。

try
{
	JObject telemetryEvent = new JObject
	{
		{ "ApplicationID", applicationId },
		{ "DeviceEUI" , payload.EndDeviceIds.DeviceEui},
		{ "DeviceID", deviceId },
		{ "Port", port },
		{ "Simulated", payload.Simulated },
		{ "ReceivedAtUtc", payload.UplinkMessage.ReceivedAtUtc.ToString("s", CultureInfo.InvariantCulture) },
		{ "PayloadRaw", payload.UplinkMessage.PayloadRaw }
	};

	// If the payload has been decoded by payload formatter, put it in the message body.
	if (payload.UplinkMessage.PayloadDecoded != null)
	{
		EnumerateChildren(telemetryEvent, payload.UplinkMessage.PayloadDecoded);
	}

	// Send the message to Azure IoT Hub
	using (Message ioTHubmessage = new Message(Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(telemetryEvent))))
	{
		// Ensure the displayed time is the acquired time rather than the uploaded time. 
		ioTHubmessage.Properties.Add("iothub-creation-time-utc", payload.UplinkMessage.ReceivedAtUtc.ToString("s", CultureInfo.InvariantCulture));
		ioTHubmessage.Properties.Add("ApplicationId", applicationId);
		ioTHubmessage.Properties.Add("DeviceEUI", payload.EndDeviceIds.DeviceEui);
		ioTHubmessage.Properties.Add("DeviceId", deviceId);
		ioTHubmessage.Properties.Add("port", port.ToString());
		ioTHubmessage.Properties.Add("Simulated", payload.Simulated.ToString());

		await deviceClient.SendEventAsync(ioTHubmessage);

		logger.LogInformation("Uplink-DeviceID:{deviceId} SendEventAsync success", deviceId);
	}
}
catch( Exception ex)
{
	logger.LogError(ex, "Uplink-DeviceID:{deviceId} SendEventAsync failure", deviceId);

	// If retries etc fail remove from the cache and it will get tried again on the next message
	_DeviceClients.Remove(deviceId);
}

Azure IoT Hub 云到設備 (C2D)

基本 Azure IoT 中心 C2D 消息傳遞僅需要端口號、TTI 確認、隊列和優先級(如果未提供)使用默認值。

  • 確認 - 真/
  • 隊列 - 推送/替換
  • 優先級 - 最低/低/低于正常/正常/高于正常/高/最高

這些選項在消息屬性中指定為了測試此功能,我使用了Azure Device Explorer Twin應用程序,該應用程序還顯示消息傳遞進度。

如果負載無效,則假定JSONBase64編碼的(需要額外驗證)并復制到下行鏈路消息的 payload_raw 字段中。

pYYBAGNYzS6AL6-tAADFC8wNbCA676.jpg
Azure 設備資源管理器 RAW 有效負載
?
poYBAGNYzTGASEbNAADbST3YReU601.jpg
Arduino 串行監視器 RAW Payload
?

如果有效載荷是有效的JSON ,它被“嫁接”(想不出更好的詞)到TTI 下行鏈路消息 decoded_pa??yload 字段中

poYBAGNYzTSALNYjAADqGCT16N8236.jpg
Arduino 串行監視器 JSON 有效負載
?

Azure IoT Central 設備到云 (D2C)

連接器“轉換”了The Things Industries(TTI) MyDevices Cayenne 低功耗協議 (LPP) 有效負載格式化程序的輸出(它還支持自定義編碼器/解碼器,但尚未經過廣泛測試),以便它可以被Azure IoT Central攝取.

用于處理TTI 上行鏈路消息Azure 函數首先反序列化JSON負載,丟棄任何LoRaWAN 控制消息和具有空負載的消息。

poYBAGNYzTeAG07PAAFpehk3pkk470.png
Azure IoT Central Device Raw Data 選項卡,其中包含成功解碼的 GPS 位置有效負載
?
pYYBAGNYzTqAV4vWAADDpUwi9wM730.png
使用基本數據類型的簡單 Seeeduino LoRaWAN 模板
?
poYBAGNYzT2AAeBPAAE_z9uFLiI949.png
Dragino LHT65 模板使用一系列基本數據類型
?

為了測試更復雜的場景,我創建了一個Azure IoT Central 設備模板,該模板具有“功能類型”的位置。

poYBAGNYzT-AVS2BAADgvu0et3I503.png
帶有溫度、濕度和位置數據類型的 Seeeduino LoRaWAN/GPS 模板
?

如果消息已由有效負載格式化程序成功解碼,則 PayloadDecoded 內容將被“嫁接”到Azure IoT Central 遙測消息中。

pYYBAGNYzUKATIRkAADNm0nMt3I672.png
?

Azure IoT Central 位置遙測消息的格式與 TTI Cayenne LPP Payload格式化程序的輸出格式略有不同,因此必須對有效負載進行“后處理”(使用新的Azure IoT Central 地圖遙測入口功能,這可能不是必需的) .

poYBAGNYzUaAKkppAADj0rmQKAg249.png
適用于 Azure IoT Central 的“后處理”TTI JSON GPS 位置數據
?
poYBAGNYzUmAH61MAAH7C6JZOSk094.png
突出顯示設備位置的 Azure IoT Central 地圖
?

我可能必須擴展后處理以支持其他Cayenne LPP 或第三方有效負載格式化程序

Azure IoT Central 云到設備 (C2D)

要發送下行鏈路消息,TTI 需要一個無法通過 Azure IoT Central 命令設置提供的LoRaWAN 端口號(加上可選隊列、確認和優先級值),因此這些值在集成配置中進行配置。

我的集成僅使用離線排隊命令,因為消息通常不會立即傳遞到傳感器節點,特別是如果傳感器節點僅每半小時/小時/天發送一條消息。

pYYBAGNYzUyAOm77AAJJGbGzZ10765.png
Azure IoT Function 連接器配置顯示命令設置選項
?

每個 TTI 應用程序都有零個或多個Azure IoT Central 命令配置,這些配置指定 LoRaWAN 端口號,以及可選的有效負載、已確認的 TTI 下行鏈路消息、優先級和隊列設置。

poYBAGNYzU6AQE2lAAEkhVC1Sf8619.png
Azure IoT Central 設備模板,包含支持的命令類型示例
?

無參數命令

即使該命令沒有參數,也必須配置下行鏈路消息負載(當前只有JSON編碼的負載,考慮到原始Base64負載支持)

此示例說明如何使用內置的Cayenne LPP 有效負載格式化程序配置打開和關閉燈的命令

poYBAGNYzVGAca-6AAHf6HmAFOw123.png
Azure IoT Central 命令 LoRaWAN 端口分配
?
poYBAGNYzVaAOqnIAAHrCZQngcQ596.png
Azure IoT Central 無參數命令 JSON 有效負載配置
?
pYYBAGNYzViAA4W-AAEgUvdADkU891.png
Azure IoT Central 無參數命令模板配置
?
pYYBAGNYzVuAeG_rAADfSCq_FFg765.png
Azure IoT Central 無參數命令啟動
?

枚舉參數

此示例顯示如何通過從選項列表中選擇所需狀態來配置打開和關閉風扇的命令。

poYBAGNYzV6AfV97AAFVeOpPRCg292.png
Azure IoT Central 枚舉命令模板配置
?
poYBAGNYzWaATaciAABGdXU4gms769.png
Azure IoT Central Enumeration 命令枚舉值配置
?
pYYBAGNYzWiAbr60AAD_WtAy6zc232.png
Azure IoT Central 枚舉命令啟動
?
pYYBAGNYzWyAJsZ4AAGoU_bimTE677.png
Azure IoT Central 枚舉命令交付
?

單值參數

此示例顯示如何配置用于設置警報的最低溫度的命令。

poYBAGNYzXGAWtMqAAE1EvoSrfY040.png
Azure IoT Central 單參數命令模板配置
?
pYYBAGNYzXSAK48IAADmwlSMS-I789.png
Azure IoT Central 單參數命令啟動
?
poYBAGNYzXeAHMF5AAHyekH5NNk048.png
Azure IoT Central 單參數命令傳輸
?
poYBAGNYzXmAAAqFAADKRJ4uDbE545.png
Azure IoT Central 單參數命令交付
?

JSON 參數

此示例說明如何配置命令以設置警報的最低和最高溫度。

poYBAGNYzX6ASWkVAAErBj8j3K4234.png
Azure IoT Central JSON 參數命令模板配置
?
pYYBAGNYzYGAU9d2AABo8tF3JyI211.png
Azure IoT Central JSON 參數命令有效負載格式配置
?
poYBAGNYzYSAAF1pAAD3g5sIhtI854.png
Azure IoT Central JSON 參數命令啟動
?

交貨確認

為了處理消息傳遞確認,將包含消息LockToken 的相關標識符添加到下行鏈路有效負載中的相關 ID

唯一需要的消息屬性是 LoRaWAN 端口號,確認、隊列、優先級和有效負載字段是可選的。

如果端口號屬性或任何其他屬性不正確,則調用DeviceClient.RejectAsync ,這會從設備隊列中刪除消息并向服務器指示無法處理該消息。

使用存儲在 TTI CorrelationID 中的 Azure 令牌跟蹤消息傳遞確認過程。

poYBAGNYzYqAB7aoAAGKv_1lXT4884.jpg
下行鏈路消息中的 Azure CorrelationID
?

未確認的消息

TTI 連接器調用CompleteAsync方法(使用 TTI CorrelationIDs 列表中的 LockToken),該方法在調用“排隊”Azure 函數時從Azure IoT 中心設備隊列中刪除消息。

pYYBAGNYzY2AaoBaAAEdwWzyzks123.png
Azure IoT Explorer 云到設備消息,未確認傳遞
?
pYYBAGNYzZCADiOJAAIJADSaxSg885.png
Azure 應用程序洞察未確認的下行鏈路消息事件
?
poYBAGNYzZSAfEl9AAJw7Sbdq8g862.png
Azure 應用洞察未確認的下行消息事件序列
?
pYYBAGNYzZqAHrpRAAGZVxPMYzc267.png
未確認的下行消息傳遞
?

確認消息

pYYBAGNYzZyAOVy0AADsk8NCb8o393.png
Azure IoT Explorer Cloud 到設備的消息并確認交付
?
pYYBAGNYzZ-AE2YEAAGZR6h0tRg845.png
未確認的下行消息傳遞
?
poYBAGNYzaOAOOdkAAGstxc21LY531.png
Azure 應用程序洞察未確認的下行鏈路消息事件
?

如果消息傳遞成功(調用 Ack 函數),則會調用CompleteAsync方法(使用 TTI CorrelationIDs 列表中的 LockToken)從 Azure IoT 中心設備隊列中刪除消息。

poYBAGNYzaeAfnW2AAEVcxoSN3o859.png
已確認的下行鏈路消息傳遞
?
pYYBAGNYzaqAB3A3AAHqlE3PxbA750.png
Azure 應用洞察未確認的下行消息 Ack 事件
?

如果消息傳遞失敗(調用失敗的函數),則調用AbandonAsync方法(使用 TTI CorrelationIDs 列表中的 LockToken)將下行鏈路消息放回 Azure IoT 中心設備隊列。

pYYBAGNYza2AJgZgAAH7SNS55Jo876.png
Azure 應用洞察確認下行消息事件序列 Nack 成功
?

如果消息傳遞不成功(調用 Nack 函數),則會調用RejectAsync方法(使用 CorrelationIDs 列表中的 LockToken),該方法從設備隊列中刪除消息并向服務器指示無法處理該消息。

poYBAGNYzbCADQ5nAAH9Rh0ucGA513.png
Azure 應用洞察確認下行消息事件序列 Nack 超時
?

消息 Failed( AbandonAsync )、Ack( CompleteAsync ) 和 Nack( RejectAsync ) 的處理方式需要進行更多測試,以確認我對 TTI 確認消息傳遞順序的理解。

謹防

當Azure IoT 中心下行鏈路消息超時并重新發送時,將確認消息與不定期發送上行鏈路消息的設備一起使用可能會導致奇怪的問題。

執行摘要

這個項目已經付出了一年多的努力。我學到了很多關于LoRaWAN以及The Things Industries如何運作的知識

有時是一些愚蠢的事情,比如拖慢進度的錯字

pYYBAGNYzbOAQzYoAAA1Z5TFv_s523.png
我生命中失去了 1 小時 DevEUI Typo
?

在我確信它已準備好投入生產之前,我對該軟件進行了一個月的浸泡測試,但有幾次我達到了我的Azure 支出限制,這禁用了我的所有服務,因此我不得不重新運行浸泡測試。

如果您有任何問題或反饋給我留言,我在Twitter上,我的博客上有更多關于我的“學習之旅”的詳細信息


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1ADI高性能電源管理解決方案
  2. 2.43 MB   |  449次下載  |  免費
  3. 2免費開源CC3D飛控資料(電路圖&PCB源文件、BOM、
  4. 5.67 MB   |  136次下載  |  1 積分
  5. 3基于STM32單片機智能手環心率計步器體溫顯示設計
  6. 0.10 MB   |  123次下載  |  免費
  7. 4550W充電機原理圖
  8. 0.13 MB   |  2次下載  |  6 積分
  9. 5USB的PD快充協議電壓誘騙控制器FS312A中文手冊
  10. 1.51 MB   |  2次下載  |  免費
  11. 6USB的PD和OC快充協議電壓誘騙控制器FS312B中文手冊
  12. 1.35 MB   |  2次下載  |  免費
  13. 7USB Type_C PD快充協議智能觸發芯片FS8025B應用手冊
  14. 1.48 MB   |  1次下載  |  免費
  15. 8ADI公司串行端口開發和故障排除指南
  16. 343.09KB   |  1次下載  |  免費

本月

  1. 1ADI高性能電源管理解決方案
  2. 2.43 MB   |  449次下載  |  免費
  3. 2免費開源CC3D飛控資料(電路圖&PCB源文件、BOM、
  4. 5.67 MB   |  136次下載  |  1 積分
  5. 3基于STM32單片機智能手環心率計步器體溫顯示設計
  6. 0.10 MB   |  123次下載  |  免費
  7. 4使用單片機實現七人表決器的程序和仿真資料免費下載
  8. 2.96 MB   |  44次下載  |  免費
  9. 53314A函數發生器維修手冊
  10. 16.30 MB   |  31次下載  |  免費
  11. 6美的電磁爐維修手冊大全
  12. 1.56 MB   |  22次下載  |  5 積分
  13. 7使用TL431設計電源
  14. 0.67 MB   |  10次下載  |  免費
  15. 8感應筆電路圖
  16. 0.06 MB   |  10次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935119次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420062次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233084次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191367次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183335次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73807次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65987次下載  |  10 積分
主站蜘蛛池模板: 丰满的美女射精动态图| 娇小老少配xxxxx| 暖暖 视频 免费 高清 在线观看| 在线视频久久只有精品第一日韩| 久久亚洲精品中文字幕| 99精品视频在线观看| 青柠在线观看视频在线高清完整| 成年人视频在线免费观看| 亚洲 在线 日韩 欧美| 久久视频精品38线视频在线观看| java农村野外妇女hd| 亚洲AV美女成人网站P站| 久久综合丁香激情久久| 大伊人青草狠狠久久| 一本道中文无码亚洲| 全免费午夜一级毛片| 国产在线观看www鲁啊鲁免费| 799是什么意思网络用语| 神马伦理不卡午夜电影| 久久精品黄色| 丰满少妇67194视频| 永久免费观看视频| 日韩一区二区在线免费观看| 精品无码一区二区三区中文字幕| x69老师x日本| 一本到道免费线观看| 日本无码免费久久久精品| 精品国产乱码久久久久久下载| AV亚洲精品少妇毛片无码| 亚洲国产精品无码中文字幕| 欧美14videosex性欧美成人| 国产在线精品亚洲| 北原多香子qvod| 越南女 黑人 痛苦 大叫| 四虎免费影院| 男女疯狂一边摸一边做羞羞视频| 国产人妻人伦精品久久无码| silk118中文字幕无删减| 又黄又肉到湿的爽文| 我不卡影院手机在线观看| 青柠在线观看免费全集|