基於工業4.0大背景下的工業物聯網是近幾年內熱門的話題,依靠信息化技術企業能夠實現數字化轉型,生產能夠實現智能化製造,設備能夠實現自動化運做。然而,海量的數據採集是整個建設過程的基礎環節,如何處理與利用這海量的數據是信息化技術中最重要的開發工做。那麼,基於Azure國內雲端的Iot-Hub服務是提供給開發人員另外一個高效的數據處理方案,這裏將經過代碼的方式介紹如何將Iot-Hub服務集成到我們的程序中來。服務器
Azure雲的Iot-Hub服務dom
Internet of things(簡稱Iot)物聯網是新一代信息技術的重要組成部分。Iot-Hub是一個由微軟提供的基於Azure雲上的工業物聯網解決方案,它能夠大規模的管理Iot設備,能夠與數百萬的 IoT 設備創建雙向通訊,且支持各類操做系統和通訊協議,另外它還能利用邊緣計算實現更多的開發須要。以下是跟Iot-Hub相關的網址:async
Iot-Hub官網(國內):https://www.azure.cn/zh-cn/home/features/iot-hub/工具
準備開發工具
這裏將模擬一個iot設備上行到雲端的demo,因此在着手開始實現以前我們需準備一些必要的環境,以下:spa
一、在Azure上建立一個名爲「myHub」的Iot-Hub服務,並將其的「鏈接字符串」獲取,以備後用。操作系統
二、在」myHub」服務控制檯內建立一個名爲「myDevice」的設備,並將其的「鏈接字符串」獲取,以備後用。3d
三、用VS2017開發工具建立兩個基於.NET Core2的控制檯程序,分別爲:「Production」、「Consume」:code
3.一、「Production」用來模擬Iot設備產生數據(運行於設備本地端),並將數據發送到Iot-Hub服務中,需在項目中經過Nuget管理器引用由微軟提供的sdk類庫「Microsoft.Azure.Devices.Client」。orm
3.二、「Consume」用來從Iot-Hub服務實時獲取數據(運行於服務器雲端),需在項目中經過Nuget管理器引用由微軟提供的sdk類庫「Microsoft.Azure.Devices」、「Microsoft.ServiceBus」。
實現
經過上述的準備後,我們就能夠進入具體的發佈與集成工做了,以下:
一、「Production」端(運行在本地設備端)用於模擬設備產生數據的代碼以下:
1 using Microsoft.Azure.Devices.Client; 2 using Newtonsoft.Json; 3 using System; 4 using System.Text; 5 6 namespace Production 7 { 8 class Program 9 { 10 //聲明一個DeviceClient對象 11 private static DeviceClient deviceClient = null; 12 //建立一個定時器 13 private static System.Timers.Timer timer = new System.Timers.Timer(); 14 15 static void Main(string[] args) 16 { 17 //設備鏈接字符串,從設備控制檯中獲取 18 var conn = "HostName=myHub.azure-devices.cn;DeviceId=myDevice;SharedAccessKey=sReB225545Jl4Gw="; 19 //建立DeviceClient對象的實例 20 deviceClient = DeviceClient.CreateFromConnectionString(conn, TransportType.Mqtt); 21 timer.Interval = 5000; 22 timer.Elapsed += Timer_Elapsed; 23 timer.AutoReset = true; 24 timer.Start(); 25 var request = ""; 26 Console.WriteLine("輸入exit則退出,並結束當前程序"); 27 do 28 { 29 request = Console.ReadLine(); 30 if (request.Equals("exit")) 31 { 32 Environment.Exit(0); 33 } 34 } while (true); 35 } 36 37 /// <summary> 38 /// 定時任務,模擬向Iot-Hub發送設備數據 39 /// </summary> 40 /// <param name="sender"></param> 41 /// <param name="e"></param> 42 private static async void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 43 { 44 //建立一條數據 45 var model = new Info(); 46 model.Timestamp = DateTime.Now; 47 model.Val = new Random().Next(0, 2000); 48 49 var dataBuffer = JsonConvert.SerializeObject(model); 50 //將數據封裝到Message對象 51 var eventMessage = new Message(Encoding.UTF8.GetBytes(dataBuffer)); 52 //經過DeviceClient將數據發送到雲端 53 await deviceClient.SendEventAsync(eventMessage).ConfigureAwait(false); 54 } 55 56 } 57 58 /// <summary> 59 /// 實體對象 60 /// </summary> 61 class Info 62 { 63 public int Val { get; set; } 64 65 public DateTime Timestamp { get; set; } 66 } 67 } 68
二、「Consume」端(運行在服務器雲端)用於消費來自Iot-Hub的代碼以下:
1 using Microsoft.Azure.Devices.Common; 2 using Microsoft.ServiceBus.Messaging; 3 using System; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Consume 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 ReceiveCommands().Wait(); 14 } 15 16 static async Task ReceiveCommands() 17 { 18 //iot-hub服務鏈接字符串 19 var conn = "HostName=myHub.azure-devices.cn;SharedAccessKeyName=iothubowner;SharedAccessKey=km7jjceOUr+98865="; 20 //iot-hub服務內的設備名稱 21 var device = "myDevice"; 22 //建立一個EventHubClient對象 23 var eventHubClient = EventHubClient.CreateFromConnectionString(conn, "messages/events"); 24 var eventHubPartitionsCount = eventHubClient.GetRuntimeInformation().PartitionCount; 25 //從指定的設備中獲取數據 26 var partition = EventHubPartitionKeyResolver.ResolveToPartition(device, eventHubPartitionsCount); 27 var eventHubReceiver = eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition, DateTime.Now); 28 29 while (true) 30 { 31 try 32 { 33 //從Iot-Hub雲端獲取數據 34 var receivedMessage = await eventHubReceiver.ReceiveAsync(TimeSpan.FromSeconds(1)); 35 if (receivedMessage != null) 36 { 37 var messageData = Encoding.ASCII.GetString(receivedMessage.GetBytes()); 38 if (!string.IsNullOrEmpty(messageData)) 39 { 40 Console.WriteLine(messageData); 41 } 42 } 43 } 44 catch 45 { 46 } 47 } 48 } 49 50 } 51 } 52
三、分別運行「Production」與「Consume」端後,也可在Azure的Iot-Hub控制檯查看實時報表,以下:
總結
一、經過Azure雲端的Iot-Hub服務能夠很是高效的實現Iot設備的管理與數據採集。
二、在.NetCore2程序中使用由微軟提供的「Microsoft.Azure.Devices.Client」、「Microsoft.Azure.Devices」、「Microsoft.ServiceBus」類庫,能夠很是簡便的在程序中集成Iot-Hub。
聲明
本文爲做者原創,轉載請備註出處與保留原文地址,謝謝。如文章能給您帶來幫助,請點下推薦或關注,感謝您的支持!