在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>The Things Network V2 Azure物聯(lián)網(wǎng)中心和物聯(lián)網(wǎng)中心網(wǎng)關(guān)

The Things Network V2 Azure物聯(lián)網(wǎng)中心和物聯(lián)網(wǎng)中心網(wǎng)關(guān)

2023-06-16 | zip | 0.00 MB | 次下載 | 免費(fèi)

資料介紹

描述

背景

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

在過去幾年中,我構(gòu)建了一系列Windows 10 IoT Core現(xiàn)場(chǎng)網(wǎng)關(guān)應(yīng)用程序,用于將LoRa設(shè)備連接到Azure IoT 中心、Azure IoT CentralAdafruit.IO 這些運(yùn)行良好,但現(xiàn)在我需要一個(gè)基于Microsoft Azure 云的解決方案,將連接到物聯(lián)網(wǎng) (TTN)的LoRaWAN設(shè)備連接到在Microsoft Azure中運(yùn)行的應(yīng)用程序

我一直在為 .NET nanoFrameworkGHI Electronics TinyCLR設(shè)備開發(fā)庫(kù)的另一個(gè)項(xiàng)目,以啟用RAK811 LPWAN 模塊( PoC 的Wisduino外形)的LoRaWAN連接

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

我假設(shè)如果您正在閱讀這個(gè)項(xiàng)目故事,那么您熟悉為 Microsoft Azure 開發(fā)應(yīng)用程序,尤其是 IoT 服務(wù)。TTN 應(yīng)用程序和設(shè)備的配置在其他幾個(gè)Hackster.IO項(xiàng)目中已經(jīng)詳細(xì)介紹過,這里不再贅述。

這個(gè)項(xiàng)目是我博客上一系列帖子的總結(jié),我在其中更詳細(xì)地介紹了解決方案的構(gòu)建。

在一開始的時(shí)候

我最初連接了RAK WisGate 開發(fā)者網(wǎng)關(guān)并配置了 RAK7200 Track Lite 設(shè)備。在 TTN 應(yīng)用程序設(shè)備數(shù)據(jù)選項(xiàng)卡中,我可以看到從設(shè)備接收到上行鏈路消息,并且大部分有效負(fù)載都被解碼,這是一個(gè)好的開始。

建立聯(lián)系

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

反序列化 TTN 消息

我為我的一個(gè) TTN 應(yīng)用程序配置了TTN HTTP集成,因此它將上行鏈路消息發(fā)布到帶有 HTTP 觸發(fā)端點(diǎn)的 Azure 函數(shù)。

pYYBAGN28CKAL6AnAACHjv5xWA0856.png
TTN 應(yīng)用程序 HTTP 集成配置
?

我使用JSON2Csharp和從 TTN 網(wǎng)站下載的示例上行鏈路有效負(fù)載來生成一些C#的初始版本,以對(duì)上行鏈路消息進(jìn)行反序列化。

由于 JSON2CSharp 無法確定數(shù)字字段是整數(shù)還是無符號(hào)長(zhǎng)整數(shù),因此生成的代碼存在一些問題。

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

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

超越自己

解壓payload_fields 屬性讓我有些痛苦我嘗試了許多不同的方法,但都失敗了。經(jīng)過大量實(shí)驗(yàn)后,我發(fā)現(xiàn)使用C# 對(duì)象是最簡(jiǎn)單的方法(盡管該字段的后處理更為復(fù)雜)。

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 應(yīng)用程序中添加一些代碼來解壓縮具有嵌套字段的 RAK Wisnode 7200 Tracker 加速度計(jì)、陀螺儀和位置值。

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

poYBAGN28CeAYJfzAABmLYgrfWI005.png
Azure IoT Explorer 顯示消息負(fù)載
?

使用 Azure 存儲(chǔ)隊(duì)列處理消息和失敗

對(duì)于我的HTTP 集成,我需要可靠地將上行鏈路消息轉(zhuǎn)發(fā)到Azure IoT 中心Azure IoT Central ,因此我使用Azure 存儲(chǔ)隊(duì)列在我的Azure Function HTTPTrigger端點(diǎn)和消息處理器之間提供彈性緩沖區(qū)。

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

用于接收物聯(lián)網(wǎng) (TTN) HTTP 集成 JSON 消息的代碼使用了 Azure 函數(shù) HTTPTrigger。(使用APIKey 保護(hù)),然后將它們放入Azure 存儲(chǔ)隊(duì)列以進(jìn)行處理。

這段代碼故意保持盡可能小和盡可能簡(jiǎn)單,這樣就不會(huì)出錯(cuò)。經(jīng)過一些實(shí)驗(yàn),只用了不到兩打 C# 行就創(chuàng)建了一個(gè)安全端點(diǎn)來接收上行鏈路消息并將它們放入Azure 存儲(chǔ)隊(duì)列。

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

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

“自動(dòng)”供應(yīng)

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

pYYBAGN28CmAVUDoAABseXZQrdg603.png
Azure IoT 中心設(shè)備連接配置
?

Azure IoT 中心與 Azure IoT Central集成,并且Azure IoT Central強(qiáng)制使用設(shè)備預(yù)配服務(wù) (DPS)。DPS 旨在支持管理 1000 臺(tái)設(shè)備,這些設(shè)備需要一些自定義應(yīng)用程序來進(jìn)行壓力和浸泡測(cè)試。

我的聯(lián)網(wǎng)HTTP 集成(TTN)旨在支持許多設(shè)備并與Azure IoT Central集成DPS 支持使用可信平臺(tái)模塊 (TPM)進(jìn)行設(shè)備認(rèn)證但這種方法不適用于我的應(yīng)用程序。我的 TTN 應(yīng)用程序集成使用具有對(duì)稱密鑰證明的組注冊(cè)

poYBAGN28C-ANrOPAABQU22zAkE344.png
DPS 招生管理
?

Azure IoT 中心集成

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

poYBAGN28DKADtF5AABo_lIuyu8423.png
DPS 組注冊(cè)刀片
?

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

pYYBAGN28DWAQSCdAABo3VQ0g_M511.png
?

對(duì)于更復(fù)雜的部署,可以使用基于 applicationID(或 applicationID + 端口號(hào))的不同 GroupEnrollment 密鑰來配置物聯(lián)網(wǎng) (TTN)設(shè)備。這方面的一個(gè)例子是卡車上的跟蹤設(shè)備報(bào)告位置數(shù)據(jù),其中一個(gè)端口號(hào)和另一個(gè)端口號(hào)的貨物溫度和濕度,因此可以將遙測(cè)事件路由到正確的應(yīng)用程序。

然后,在處理設(shè)備的第一條上行鏈路消息時(shí),它會(huì)在 DPS 和 Azure IoT Hub 中“自動(dòng)”創(chuàng)建。

pYYBAGN28DiAEu1cAAA9srgTDZY795.png
Azure DPS 設(shè)備配置
?

Azure IoT 中心集成

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

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

poYBAGN28DyAARfhAABZTc-SBHU166.png
Azure IoT 中心設(shè)備配置
?

對(duì)于更復(fù)雜的部署,可以根據(jù)啟動(dòng)配置的第一個(gè)上行鏈路消息中的 applicationid(或 applicationID + 端口號(hào))使用不同的GroupEnrollment密鑰來配置物聯(lián)網(wǎng) (TTN)設(shè)備。

在處理來自 TTN 設(shè)備的第一條上行鏈路消息后不久,它將在“未關(guān)聯(lián)設(shè)備”選項(xiàng)卡中列出。

poYBAGN28D6Ab1yCAAA9sOJDKHw242.png
未關(guān)聯(lián)的設(shè)備刀片
?

然后可以將設(shè)備與Azure IoT Central Device Template關(guān)聯(lián)

pYYBAGN28EGAD_6sAAA9xNW1dYA797.png
顯示最近關(guān)聯(lián)設(shè)備的未關(guān)聯(lián)設(shè)備刀片
?

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

pYYBAGN28EOAcEajAAB3X_w_CF0721.png
Azure IoT Central 設(shè)備模板刀片
?

一旦設(shè)備與模板相關(guān)聯(lián),就可以配置用戶友好的設(shè)備名稱等。

poYBAGN28EqAE135AABWe8NhQ-o332.png
Azure IoT Central 設(shè)備屬性刀片
?

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

poYBAGN28E6AUdDQAACFmyrNi_k681.png
Azure 設(shè)備信息
?

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

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);
}

在配置設(shè)備模板、將一些設(shè)備與模板關(guān)聯(lián)并修改每個(gè)設(shè)備的屬性后,我可以創(chuàng)建一個(gè)儀表板來查看我的Seeeduino LoRaWAN 設(shè)備返回的溫度和濕度信息。

pYYBAGN28FCAffK7AABRbn48Img646.png
Azure IoT Central 儀表板
?

保守秘密

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

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

pYYBAGN28FKAJaD9AACfrkSFJfo645.png
Azure Key Vault 概述和基本指標(biāo)
?

我編寫了一個(gè)包裝器,它根據(jù)上行鏈路消息有效負(fù)載中的物聯(lián)網(wǎng) (TTN)應(yīng)用程序標(biāo)識(shí)符和端口信息解析配置設(shè)置。resolve 方法首先查找 applicationId 和 port 的配置(由 – 分隔),然后是 applicationId,最后返回到默認(rèn)值。

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

Azure 函數(shù)配置設(shè)置(如 Azure 存儲(chǔ)連接字符串)的被替換為對(duì) Azure Key Vault 中機(jī)密的引用。

pYYBAGN28FeARrkgAADBtkBnTp4128.png
Azure Function 配置值替換
?

在 Azure Key Vault“訪問策略”中,我配置了“應(yīng)用程序訪問策略”,因此我的 Azure TTNAzureIoTHubMessageV2Processor 函數(shù)標(biāo)識(shí)可以檢索機(jī)密。

去大或回家

在我最初的實(shí)現(xiàn)中,我使用ConcurrentDictionary來存儲(chǔ)Azure IoT Hub連接,以減少對(duì)設(shè)備預(yù)配服務(wù) (DPS) 的調(diào)用次數(shù)。經(jīng)過一些測(cè)試后,我將其替換為 a. Net ObjectCache位于System.Runtime.Caching命名空間中。

pYYBAGN28FmAXVrEAACEOxI3fcg748.png
?

我使用緩存來存儲(chǔ)Azure IoT Hub連接以減少對(duì)設(shè)備預(yù)配服務(wù) (DPS)的調(diào)用次數(shù),但連接數(shù)仍然太高。

poYBAGN28F6AUjPMAABbeDu36KY521.png
沒有池的連接數(shù)
?

因此,經(jīng)過一番研究,我決定啟用高級(jí)消息隊(duì)列協(xié)議(AMQP)連接池。

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

在此之后,連接數(shù)顯著減少

poYBAGN28G-ATmCrAABwzpUD_KE323.png
使用池的連接數(shù)
?

“市場(chǎng)結(jié)構(gòu)”圖

pYYBAGN28HKAHTp3AAEZCeF_t7g602.png
漂亮的 Visio 圖表中的所需架構(gòu)
?

哎呀我把自己畫到一個(gè)角落里

在對(duì)上行鏈路消息的處理進(jìn)行擴(kuò)展和浸泡測(cè)試后,我意識(shí)到我所做的一些設(shè)計(jì)和實(shí)現(xiàn)選擇意味著處理下行鏈路消息并不容易。

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

為了支持下行消息,我很可能必須轉(zhuǎn)換到MQTT 數(shù)據(jù) API并刪除一些高級(jí)配置選項(xiàng)。

這將需要一段時(shí)間,所以如果您有興趣,請(qǐng)關(guān)注我的博客,我將在其中發(fā)布我的進(jìn)展。


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

評(píng)論

查看更多

下載排行

本周

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

本月

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

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)
主站蜘蛛池模板: 在线国产播放| 亚洲最大色网| 欧美无限看| 欧美黄色成人| 久久夜夜视频| 国产精品vv在线| 亚洲精品日韩专区silk| 黑人xxxx精品| 亚洲 欧洲 日产 韩国在线| 欧美 亚洲 国产 丝袜 在线| 国产三级观看久久| 性欧美高清| 日本黄色免费在线观看| 快色视频免费| 国产handjob手交在线播放| 97影院理论午夜论不卡| 天天毛片| 国产特黄特色的大片观看免费视频| 1024你懂的国产在线播放| 天天夜干| 久久天天躁夜夜躁狠狠| 欧美性区| 久久99国产精品久久99| 婷婷综合七月激情啪啪| 欧美第一网站| www你懂的| 奇米网狠狠干| 国产h视频在线| 伊人久久亚洲综合天堂| 日本午夜片| 国产农村女人一级毛片了| 午夜久久影院| 在线观看黄色网| 美女扒开内裤让男人桶| 色资源在线观看| 国产色网站| 日韩特黄| 亚洲婷婷综合中文字幕第一页| 亚洲五月激情综合图片区| 你懂的网站在线播放| 亚洲午夜精品在线|