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

電子發燒友App

硬聲App

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

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

3天內不再提示
創作
電子發燒友網>電子資料下載>電子資料>The Things Network V2 Azure物聯網中心和物聯網中心網關

The Things Network V2 Azure物聯網中心和物聯網中心網關

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

資料介紹

描述

背景

在客戶放棄概念證明( PoC )項目,在我桌子下面的盒子。

在過去幾年中,我構建了一系列Windows 10 IoT Core現場網關應用程序,用于將LoRa設備連接到Azure IoT 中心、Azure IoT CentralAdafruit.IO 。這些運行良好,但現在我需要一個基于Microsoft Azure 云的解決方案,將連接到物聯網 (TTN)的LoRaWAN設備連接到在Microsoft Azure中運行的應用程序。

我一直在為 .NET nanoFrameworkGHI Electronics TinyCLR設備開發庫的另一個項目,以啟用RAK811 LPWAN 模塊( PoC 的Wisduino外形)的LoRaWAN連接。

在新西蘭有兩個全國性的網絡Spark IoT 、KotahiNet ),但我一直想探索 TTN 和The Things Industries的功能,它們看起來有足夠的診斷功能來滿足我的目的。

我假設如果您正在閱讀這個項目故事,那么您熟悉為 Microsoft Azure 開發應用程序,尤其是 IoT 服務。TTN 應用程序和設備的配置在其他幾個Hackster.IO項目中已經詳細介紹過,這里不再贅述。

這個項目是我博客上一系列帖子的總結,我在其中更詳細地介紹了解決方案的構建。

在一開始的時候

我最初連接了RAK WisGate 開發者網關并配置了 RAK7200 Track Lite 設備。在 TTN 應用程序設備數據選項卡中,我可以看到從設備接收到上行鏈路消息,并且大部分有效負載都被解碼,這是一個好的開始。

建立聯系

配置了我的 Arduino IDE,以便我可以訪問 Seeeduino、LoRaWAN 示例,然后編譯并將它們下載到我的設備。我使用本地網關測試了個性化激活 (ABP) 和空中激活 (OTAA)示例的修改版本,以確認我的設備配置良好。在我記得我需要打開我的Seeeduino Grove I2C 溫度和濕度傳感器連接器電源之后,設備代碼第二次工作了。

反序列化 TTN 消息

我為我的一個 TTN 應用程序配置了TTN HTTP集成,因此它將上行鏈路消息發布到帶有 HTTP 觸發端點的 Azure 函數。

pYYBAGN28CKAL6AnAACHjv5xWA0856.png
TTN 應用程序 HTTP 集成配置
?

我使用JSON2Csharp和從 TTN 網站下載的示例上行鏈路有效負載來生成一些C#的初始版本,以對上行鏈路消息進行反序列化。

由于 JSON2CSharp 無法確定數字字段是整數還是無符號長整數,因此生成的代碼存在一些問題。

TTN 文檔指出,在成功解碼上行鏈路消息時填充了 payload_fields 屬性。TTN 有一個內置的Cayenne 低功耗有效負載 (LPP)消息解碼器,RAK7200 Wisnode 軌道燈部分支持該解碼器(還提供具有增強功能的定制解碼器/編碼器)。

我在我的Seeeduino LoRaWAN 設備上使用了第 3 方庫(來自 Electronic Cats 的 CayenneLPP 庫)來對包含溫度和濕度信息的有效載荷進行編碼。

超越自己

解壓payload_fields 屬性讓我有些痛苦我嘗試了許多不同的方法,但都失敗了。經過大量實驗后,我發現使用C# 對象是最簡單的方法(盡管該字段的后處理更為復雜)。

public class PayloadV4
{
   public string app_id { get; set; }
   public string dev_id { get; set; }
   public string hardware_serial { get; set; }
   public int port { get; set; }
   public int counter { get; set; }
   public bool is_retry { get; set; }
   public string payload_raw { get; set; }
   //public JsonObject payload_fields { get; set; }
   //public JObject payload_fields { get; set; }
   //public JToken payload_fields { get; set; }
   //public JContainer payload_fields { get; set; }
   //public dynamic payload_fields { get; set; }
   public Object payload_fields { get; set; }
   public MetadataV4 metadata { get; set; }
   public string downlink_url { get; set; }
}

我還必須在我的 PoC 應用程序中添加一些代碼來解壓縮具有嵌套字段的 RAK Wisnode 7200 Tracker 加速度計、陀螺儀和位置值。

然后,我使用Microsoft.Azure.Devices.Client庫連接到Azure IoT HubAzure IoT Central 使用 DPS-KeyGen 生成連接字符串)并上傳了我可以在Azure IoT explorer中看到的遙測消息

poYBAGN28CeAYJfzAABmLYgrfWI005.png
Azure IoT Explorer 顯示消息負載
?

使用 Azure 存儲隊列處理消息和失敗

對于我的HTTP 集成,我需要可靠地將上行鏈路消息轉發到Azure IoT 中心Azure IoT Central ,因此我使用Azure 存儲隊列在我的Azure Function HTTPTrigger端點和消息處理器之間提供彈性緩沖區。

我的解決方案需要強大且不會丟失任何消息,即使系統的某些部分由于故障或入站流量突然激增而無法使用。

用于接收物聯網 (TTN) HTTP 集成 JSON 消息的代碼使用了 Azure 函數 HTTPTrigger。(使用APIKey 保護),然后將它們放入Azure 存儲隊列以進行處理。

這段代碼故意保持盡可能小和盡可能簡單,這樣就不會出錯。經過一些實驗,只用了不到兩打 C# 行就創建了一個安全端點來接收上行鏈路消息并將它們放入Azure 存儲隊列。

通過存儲來自 TTN 的原始上行鏈路事件 JSON,應用程序可以在無法反序列化時恢復(消息格式已更改或生成類問題)當隊列處理器無法處理上行鏈路事件消息時(引發異常)重試幾次后,它將最終進入有毒消息隊列(以防故障是暫時的)。

上行鏈路消息隊列處理器使用Azure 函數隊列觸發器從隊列中提取消息,并在需要時預配設備,檢索 Azure IoT 中心/Azure IoT 中央連接字符串或使用緩存的 DeviceClient。

“自動”供應

對于開發和測試而言,能夠預配單個設備確實很有用,盡管對于Azure IoT Central來說這并不容易(尤其是在棄用 DPS-KeyGen 的情況下)。通過Azure IoT Hub設備連接字符串在門戶中可用,這很方便,但可擴展性不是很好。

pYYBAGN28CmAVUDoAABseXZQrdg603.png
Azure IoT 中心設備連接配置
?

Azure IoT 中心與 Azure IoT Central集成,并且Azure IoT Central強制使用設備預配服務 (DPS)。DPS 旨在支持管理 1000 臺設備,這些設備需要一些自定義應用程序來進行壓力和浸泡測試。

我的聯網HTTP 集成(TTN)旨在支持許多設備并與Azure IoT Central集成DPS 支持使用可信平臺模塊 (TPM)進行設備認證,但這種方法不適用于我的應用程序。我的 TTN 應用程序集成使用具有對稱密鑰證明的組注冊

poYBAGN28C-ANrOPAABQU22zAkE344.png
DPS 招生管理
?

Azure IoT 中心集成

盡管可以在Azure IoT 中心預配單個設備,Azure 設備預配服務 (DPS)是首選方法。

poYBAGN28DKADtF5AABo_lIuyu8423.png
DPS 組注冊刀片
?

scopeID 和主要/次要注冊密鑰在Azure Key Vault中配置,Azure QueueTrigger 函數可以安全地訪問它們。

pYYBAGN28DWAQSCdAABo3VQ0g_M511.png
?

對于更復雜的部署,可以使用基于 applicationID(或 applicationID + 端口號)的不同 GroupEnrollment 密鑰來配置物聯網 (TTN)設備。這方面的一個例子是卡車上的跟蹤設備報告位置數據,其中一個端口號和另一個端口號的貨物溫度和濕度,因此可以將遙測事件路由到正確的應用程序。

然后,在處理設備的第一條上行鏈路消息時,它會在 DPS 和 Azure IoT Hub 中“自動”創建。

pYYBAGN28DiAEu1cAAA9srgTDZY795.png
Azure DPS 設備配置
?

Azure IoT 中心集成

物聯網 (TTN) HTTP 集成上行鏈路消息必須進行配置,然后進行后處理,以便 Azure IoT Central 顯示它們。

第一步是從 Administration\Device 連接復制 IDScope 和一個主/輔助密鑰,并將它們存儲在Azure Key Vault中。

poYBAGN28DyAARfhAABZTc-SBHU166.png
Azure IoT 中心設備配置
?

對于更復雜的部署,可以根據啟動配置的第一個上行鏈路消息中的 applicationid(或 applicationID + 端口號)使用不同的GroupEnrollment密鑰來配置物聯網 (TTN)設備。

在處理來自 TTN 設備的第一條上行鏈路消息后不久,它將在“未關聯設備”選項卡中列出。

poYBAGN28D6Ab1yCAAA9sOJDKHw242.png
未關聯的設備刀片
?

然后可以將設備與Azure IoT Central Device Template關聯

pYYBAGN28EGAD_6sAAA9xNW1dYA797.png
顯示最近關聯設備的未關聯設備刀片
?

設備模板提供上行消息有效載荷字段到設備屬性的映射。在此示例中,有效載荷字段已由TTN 應用集成 Cayenne 低功耗協議 (LPP)解碼器生成。許多LoRaWAN設備使用 LPP 來最小化網絡負載的大小。

pYYBAGN28EOAcEajAAB3X_w_CF0721.png
Azure IoT Central 設備模板刀片
?

一旦設備與模板相關聯,就可以配置用戶友好的設備名稱等。

poYBAGN28EqAE135AABWe8NhQ-o332.png
Azure IoT Central 設備屬性刀片
?

Azure IoT Central 具有映射功能,可用于顯示設備的位置。

poYBAGN28E6AUdDQAACFmyrNi_k681.png
Azure 設備信息
?

TTN LPP 解碼器生成的位置有效負載的格式與 Azure IoT Central 所需的格式不同。我添加了臨時代碼(“一種具有成本效益的加速部署修改”又名黑客)來格式化 TelemetryEvent 有效負載,以便顯示它。

if (token.First is JValue)
{
   // Temporary dirty hack for Azure IoT Central compatibility
   if (token.Parent is JObject possibleGpsProperty)
   {
      if (possibleGpsProperty.Path.StartsWith("GPS", StringComparison.OrdinalIgnoreCase))
      {
         if (string.Compare(property.Name, "Latitude", true) == 0)
         {
            jobject.Add("lat", property.Value);
         }
         if (string.Compare(property.Name, "Longitude", true) == 0)
         {
            jobject.Add("lon", property.Value);
         }
         if (string.Compare(property.Name, "Altitude", true) == 0)
         {
            jobject.Add("alt", property.Value);
         }
      }
   }
   jobject.Add(property.Name, property.Value);
}

在配置設備模板、將一些設備與模板關聯并修改每個設備的屬性后,我可以創建一個儀表板來查看我的Seeeduino LoRaWAN 設備返回的溫度和濕度信息。

pYYBAGN28FCAffK7AABRbn48Img646.png
Azure IoT Central 儀表板
?

保守秘密

應用程序集成配置包含敏感信息,例如設備預配服務 (DPS) 組注冊對稱密鑰Azure IoT 中心連接字符串。

Azure Key Vault旨在保護連接字符串等敏感信息因此我在資源組中添加了一個。

pYYBAGN28FKAJaD9AACfrkSFJfo645.png
Azure Key Vault 概述和基本指標
?

我編寫了一個包裝器,它根據上行鏈路消息有效負載中的物聯網 (TTN)應用程序標識符和端口信息解析配置設置。resolve 方法首先查找 applicationId 和 port 的配置(由 – 分隔),然后是 applicationId,最后返回到默認值。

此功能用于 AzureIoTHub 連接字符串、DPS IDScopes、DPS 注冊組對稱密鑰,也用于格式化緩存密鑰。

Azure 函數配置設置(如 Azure 存儲連接字符串)的被替換為對 Azure Key Vault 中機密的引用。

pYYBAGN28FeARrkgAADBtkBnTp4128.png
Azure Function 配置值替換
?

在 Azure Key Vault“訪問策略”中,我配置了“應用程序訪問策略”,因此我的 Azure TTNAzureIoTHubMessageV2Processor 函數標識可以檢索機密。

去大或回家

在我最初的實現中,我使用ConcurrentDictionary來存儲Azure IoT Hub連接,以減少對設備預配服務 (DPS) 的調用次數。經過一些測試后,我將其替換為 a. Net ObjectCache位于System.Runtime.Caching命名空間中。

pYYBAGN28FmAXVrEAACEOxI3fcg748.png
?

我使用緩存來存儲Azure IoT Hub連接以減少對設備預配服務 (DPS)的調用次數,但連接數仍然太高。

poYBAGN28F6AUjPMAABbeDu36KY521.png
沒有池的連接數
?

因此,經過一番研究,我決定啟用高級消息隊列協議(AMQP)連接池。

return DeviceClient.Create(result.AssignedHub,
   authentication,
   new ITransportSettings[]
   {
      new AmqpTransportSettings(TransportType.Amqp_Tcp_Only)
      {
         PrefetchCount = 0,
         AmqpConnectionPoolSettings = new AmqpConnectionPoolSettings()
         {
            Pooling = true,
         }
      }
   }
);

在此之后,連接數顯著減少

poYBAGN28G-ATmCrAABwzpUD_KE323.png
使用池的連接數
?

“市場結構”圖

pYYBAGN28HKAHTp3AAEZCeF_t7g602.png
漂亮的 Visio 圖表中的所需架構
?

哎呀我把自己畫到一個角落里

在對上行鏈路消息的處理進行擴展和浸泡測試后,我意識到我所做的一些設計和實現選擇意味著處理下行鏈路消息并不容易。

如果您的應用程序只需要接收來自 LoRaWAN 設備的消息,此解決方案將是理想的。

為了支持下行消息,我很可能必須轉換到MQTT 數據 API并刪除一些高級配置選項。

這將需要一段時間,所以如果您有興趣,請關注我的博客,我將在其中發布我的進展。


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

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 久久视频在线视频| 最新国产亚洲亚洲精品视频| 不知火舞vs精子| 伊人国产在线视频| 亚洲精品中文字幕在线| 婷婷六月激情综合一区| 乳女教师欲乱动漫无修版动画| 末班车动漫无删减免费| 久热久热精品在线观看| 久久极品视频| 玖玖爱在线播放| 久久婷婷五月综合色丁香| 久久九九久精品国产尤物| 久久黄色网| 可以看的黄页的网站| 麻豆精品传媒卡一卡二传媒短视频 | 俄罗斯14一18处交| www.青青草原| 高h 大尺度纯肉 np快穿| 国产99久久九九免费精品无码| 囯产免费久久久久久国产免费| 国产精品97久久AV麻豆| 国产精品你懂得| 黑人干肥婆| 久久热在线视频精品店| 毛片在线播放网址| 欧美日韩看看2015永久免费| 日本色高清| 性色无码AV久久蜜臀| 亚洲精品视频区| 在线观看黄色小说| bl高h文合集| 亚洲野狼综合网站| 在线播放免费人成毛片视频| 最近中文字幕免费高清MV视频6| 99福利影院| 俄罗斯乌克兰战争原因| 国产亚洲视频在线观看| 久久re6热在线视频精品| 免费无遮挡又黄又爽网站| 日本浴室日产在线系列 |