.NET Core2使用Azure云上的Iot-Hub服务

时间:2022-12-25 12:18:39

基于工业4.0大背景下的工业物联网是近几年内热门的话题,依靠信息化技术企业可以实现数字化转型,生产可以实现智能化制造,设备可以实现自动化运作。然而,海量的数据采集是整个建设过程的基础环节,如何处理与利用这海量的数据是信息化技术中最重要的开发工作。那么,基于Azure国内云端的Iot-Hub服务是提供给开发人员另一个高效的数据处理方案,这里将通过代码的方式介绍如何将Iot-Hub服务集成到咱们的程序中来。

Azure云的Iot-Hub服务

Internet of things(简称Iot)物联网是新一代信息技术的重要组成部分。Iot-Hub是一个由微软提供的基于Azure云上的工业物联网解决方案,它可以大规模的管理Iot设备,可以与数百万的 IoT 设备建立双向通信,且支持各种操作系统和通信协议,另外它还能利用边缘计算实现更多的开发需要。如下是跟Iot-Hub相关的网址:

Iot-Hub官网(国内):https://www.azure.cn/zh-cn/home/features/iot-hub/

准备

这里将模拟一个iot设备上行到云端的demo,所以在着手开始实现之前咱们需准备一些必要的环境,如下:

1、在Azure上创建一个名为“myHub”的Iot-Hub服务,并将其的“连接字符串”获取,以备后用。

2、在”myHub”服务控制台内创建一个名为“myDevice”的设备,并将其的“连接字符串”获取,以备后用。

3、用VS2017开发工具创建两个基于.NET Core2的控制台程序,分别为:“Production”、“Consume”:

3.1、“Production”用来模拟Iot设备产生数据(运行于设备本地端),并将数据发送到Iot-Hub服务中,需在项目中通过Nuget管理器引用由微软提供的sdk类库“Microsoft.Azure.Devices.Client”。

3.2、“Consume”用来从Iot-Hub服务实时获取数据(运行于服务器云端),需在项目中通过Nuget管理器引用由微软提供的sdk类库“Microsoft.Azure.Devices”、“Microsoft.ServiceBus”。

实现

通过上述的准备后,咱们就可以进入具体的发布与集成工作了,如下:

1、“Production”端(运行在本地设备端)用于模拟设备产生数据的代码如下:

 using Microsoft.Azure.Devices.Client;
 using Newtonsoft.Json;
 using System;
 using System.Text;

 namespace Production
 {
     class Program
     {
         //声明一个DeviceClient对象
         private static DeviceClient deviceClient = null;
         //创建一个定时器
         private static System.Timers.Timer timer = new System.Timers.Timer();

         static void Main(string[] args)
         {
             //设备连接字符串,从设备控制台中获取
             var conn = "HostName=myHub.azure-devices.cn;DeviceId=myDevice;SharedAccessKey=sReB225545Jl4Gw=";
             //创建DeviceClient对象的实例
             deviceClient = DeviceClient.CreateFromConnectionString(conn, TransportType.Mqtt);
             timer.Interval = 5000;
             timer.Elapsed += Timer_Elapsed;
             timer.AutoReset = true;
             timer.Start();
             var request = "";
             Console.WriteLine("输入exit则退出,并结束当前程序");
             do
             {
                 request = Console.ReadLine();
                 if (request.Equals("exit"))
                 {
                     Environment.Exit(0);
                 }
             } while (true);
         }

         /// <summary>
         /// 定时任务,模拟向Iot-Hub发送设备数据
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
         private static async void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
         {
             //创建一条数据
             var model = new Info();
             model.Timestamp = DateTime.Now;
             model.Val = new Random().Next(0, 2000);

             var dataBuffer = JsonConvert.SerializeObject(model);
             //将数据封装到Message对象
             var eventMessage = new Message(Encoding.UTF8.GetBytes(dataBuffer));
             //通过DeviceClient将数据发送到云端
             await deviceClient.SendEventAsync(eventMessage).ConfigureAwait(false);
         }

     }

     /// <summary>
     /// 实体对象
     /// </summary>
     class Info
     {
         public int Val { get; set; }

         public DateTime Timestamp { get; set; }
     }
 }
 

2、“Consume”端(运行在服务器云端)用于消费来自Iot-Hub的代码如下:

 using Microsoft.Azure.Devices.Common;
 using Microsoft.ServiceBus.Messaging;
 using System;
 using System.Text;
 using System.Threading.Tasks;

 namespace Consume
 {
     class Program
     {
         static void Main(string[] args)
         {
             ReceiveCommands().Wait();
         }

         static async Task ReceiveCommands()
         {
             //iot-hub服务连接字符串
             var conn = "HostName=myHub.azure-devices.cn;SharedAccessKeyName=iothubowner;SharedAccessKey=km7jjceOUr+98865=";
             //iot-hub服务内的设备名称
             var device = "myDevice";
             //创建一个EventHubClient对象
             var eventHubClient = EventHubClient.CreateFromConnectionString(conn, "messages/events");
             var eventHubPartitionsCount = eventHubClient.GetRuntimeInformation().PartitionCount;
             //从指定的设备中获取数据
             var partition = EventHubPartitionKeyResolver.ResolveToPartition(device, eventHubPartitionsCount);
             var eventHubReceiver = eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition, DateTime.Now);

             while (true)
             {
                 try
                 {
                     //从Iot-Hub云端获取数据
                     var receivedMessage = await eventHubReceiver.ReceiveAsync(TimeSpan.FromSeconds(1));
                     if (receivedMessage != null)
                     {
                         var messageData = Encoding.ASCII.GetString(receivedMessage.GetBytes());
                         if (!string.IsNullOrEmpty(messageData))
                         {
                             Console.WriteLine(messageData);
                         }
                     }
                 }
                 catch
                 {
                 }
             }
         }

     }
 }
 

3、分别运行“Production”与“Consume”端后,也可在Azure的Iot-Hub控制台查看实时报表,如下:

.NET Core2使用Azure云上的Iot-Hub服务

.NET Core2使用Azure云上的Iot-Hub服务

总结

1、通过Azure云端的Iot-Hub服务可以非常高效的实现Iot设备的管理与数据采集。

2、在.NetCore2程序中使用由微软提供的“Microsoft.Azure.Devices.Client”、“Microsoft.Azure.Devices”、“Microsoft.ServiceBus”类库,可以非常简便的在程序中集成Iot-Hub。

声明

本文为作者原创,转载请备注出处与保留原文地址,谢谢。如文章能给您带来帮助,请点下推荐或关注,感谢您的支持!

.NET Core2使用Azure云上的Iot-Hub服务的更多相关文章

  1. ASP&period;NET Core2调用Azure云上的PowerBI报表展示

    在开发企业应用中,报表功能是当之无愧的重头戏,如何将数据通过合适的报表呈现出来成为每个项目人员必需面临的问题.而找到一款合适的报表往往都需要考率价格.开发.风格.支撑等因素.那么,我在这里给大家介绍一 ...

  2. azure 云上MySQL最新版本 MySQL5&period;7&period;11 批量自动化一键式安装 &lpar;转&rpar;

    --背景云端 以前都喜欢了源码安装mysql,总觉得源码是高大上的事情,不过源码也需要时间,特别是make的时候,如果磁盘和cpu差的话,时间很长很长,在虚拟机上安装mysql尤其甚慢了. 现在业务发 ...

  3. 在Azure云上实现postgres主备切换

    以下是工作上实现postgres主备切换功能所用到的代码和步骤,中间走了不少弯路,在此记录下.所用到的操作系统为centos 7.5,安装了两台服务器,hostname为VM7的为Master,VM8 ...

  4. AZURE云上 mkfs&period;ext4 &sol;dev&sol;sdc 导致宕机问题解决纪实

    )开机启动挂载配置 [root@pldb2 ~]# vim /etc/fstab You have new mail in /var/spool/mail/root [root@pldb2 ~]# m ...

  5. 国内物联网平台(1):百度物接入IoT Hub

    国内物联网平台(1) ——百度物接入IoT Hub 马智 物接入IoT Hub - 架构 全托管的云服务,帮助建立设备与云端之间安全可靠的双向连接 支撑海量设备的数据收集.监控.故障预测等各种物联网场 ...

  6. 国内物联网平台初探(一) ——百度物接入IoT Hub

    物接入IoT Hub - 架构 全托管的云服务,帮助建立设备与云端之间安全可靠的双向连接 支撑海量设备的数据收集.监控.故障预测等各种物联网场景 物接入IoT Hub - 功能 通信协议:支持MQTT ...

  7. 来杭州云栖大会,全面了解企业如何实现云上IT治理

    企业上云的现状与趋势 云计算,如今已经成为了像水和电一般关系到国计民生的国家基础设施.云计算为企业带了前所未有的资源交付效率和运维效率的提升,同时也用全新的技术帮助企业在新的价值网络中创造新的商业赛道 ...

  8. 阿里云上到底能运行SAP哪些产品&quest;

    本文主要内容大部分来源于SAP已经发布的note:  2552731 - SAP Applications on Alibaba Cloud: Supported Products and IaaS ...

  9. 阿里云OSS同城冗余存储正式商业化,提供云上同城容灾能力

    近日,阿里云正式发布OSS同城冗余存储产品.这是国内目前提供同城多AZ冗余部署能力覆盖最广的云上对象存储产品,可以实现云存储的同城双活,满足企业级客户对于“发生机房级灾难事件时数据不丢失,业务不中断” ...

随机推荐

  1. 【iScroll源码学习03】iScroll事件机制与滚动条的实现

    前言 想不到又到周末了,周末的时间要抓紧学习才行,前几天我们学习了iScroll几点基础知识: 1. [iScroll源码学习02]分解iScroll三个核心事件点 2. [iScroll源码学习01 ...

  2. Windows MDL原理总结

    http://blog.csdn.net/tbwood/article/details/5400419 http://www.cnblogs.com/jack204/archive/2011/12/2 ...

  3. wp8&period;1 Study8:页面过渡和主题动画(Page transition and Theme animations)

    一.在WP8.1中是有动画(Animation)的: 页面导航(默认为旋转式Turnstile).PointerDown/up(默认是倾斜).页面旋转.MenuFlyout出现等等 二.页面过渡(Pa ...

  4. Tomcat虚拟主机配置

    3.1.配置虚拟主机 配置虚似主机就是配置一个网站. 在Tomcat服务器配置一个虚拟主机(网站),需要修改conf文件夹下的server.xml这个配置文件,使用Host元素进行配置,打开serve ...

  5. 16、手把手教你Extjs5(十六)Grid金额字段单位MVVM方式的选择

    这一节来完成Grid中的金额字段的金额单位的转换.转换旰使用MVVM特性,总体上和控制菜单的几种模式类似.首先在目录app/view/main/menu下建立文件Monetary.js,用于放金额单位 ...

  6. Reliability diagrams

    Reliability diagrams (Hartmann et al. 2002) are simply graphs of the Observed frequency of an event ...

  7. 视图和URL配置

    视图和URL配置 实验简介 上一章里我们介绍了如何创建一个Django项目并启动Django的开发服务器.本章你将学到用Django创建动态网页的基本知识. 同时,也教会大家怎么在本地机器上建立一个独 ...

  8. C&num; 进程间通讯

    扩展阅读:http://www.cnblogs.com/joye-shen/archive/2012/06/16/2551864.html 一.进程间通讯的方式 1)共享内存 包括:内存映射文件,共享 ...

  9. Service的使用

    一.Service的适用范围 1.本地服务(Local Service): 应用程序的内部(单个APP) startServcie  stopService  stopSelf  stopSelfRe ...

  10. Spring boot with Apache Hive

      5.29.1. Maven <dependency> <groupId>org.springframework.boot</groupId> <artif ...