基于工业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控制台查看实时报表,如下:

总结

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.NET Core2调用Azure云上的PowerBI报表展示

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

  2. 关于将Azure云上磁盘导出-使用VirtualBox转换成vmdk格式的方法记录

    在工作中,经常会遇到虚拟磁盘文件格式的转换需求,尤其是在虚拟化迁移及云环境迁移到DC的虚拟化环境中 或者中转处理,如最近笔者遇到一个需要将Azure Cloud上的磁盘导出到VMware中,但Azur ...

  3. azure 云上MySQL最新版本 MySQL5.7.11 批量自动化一键式安装 (转)

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

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

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

  5. AZURE云上 mkfs.ext4 /dev/sdc 导致宕机问题解决纪实

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

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

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

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

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

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

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

  9. 阿里云上到底能运行SAP哪些产品?

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

随机推荐

  1. Netty私有协议栈 读书笔记

    1.数据结构定义 1)netty消息:NettyMessage package com.cherry.netty.demo.protocolstack.pojo; import com.cherry. ...

  2. USACO 2016 US Open Contest, Gold解题报告

    1.Splitting the Field http://usaco.org/index.php?page=viewproblem2&cpid=645 给二维坐标系中的n个点,求ans=用一个 ...

  3. 【转】java中创建对象的方法

    有4种显式地创建对象的方式: 1.用); System.out.println("call default constructor"); } public Customer(Str ...

  4. 十.jQuery源码分析之.map()

    763行:三个参数. elems:待遍历的数组或对象. callback:回调函数,会在数组的每个元素或对象的每个属性上执行.执行时传入两个参数:数组元素,元素下标;或属性名,属性值. arg:仅限于 ...

  5. 由浅入深了解Thrift(1,2,3)

    由浅入深了解Thrift(一)——Thrift介绍与用法 由浅入深了解Thrift(二)——Thrift工作原理 由浅入深了解Thrift(三)——Thrift server端的几种工作模式分析

  6. django2.0设置默认访问路由

    搭建完毕后,打开域名,直接来个报错,如果没有访问的地址,是不合适的 在urls.py中定义,默认访问的路由 from django.contrib import admin from django.u ...

  7. 跟我一起学习ASP.NET 4.5 MVC4.0 (转)

    跟我一起学习ASP.NET 4.5 MVC4.0(一)   由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最 ...

  8. Cmder的安装

    Cmder把conemu,git-for-windows和clink打包在一起,让你无需配置就能使用一个真正干净的Linux终端!性感的外观,强大的功能!代替了Windows原生的Cmd 1. 安裝 ...

  9. logger 的使用 二logback使用配置详解

    下面是一些最基本的,详细的参考:https://logback.qos.ch/manual/index.html 我的使用:把error日志打印在另一个文件,可以用ELK 统一管理 最近使用: < ...

  10. Mysql 索引优化 - 1

    单表  范围查询 后面的索引会失效 双表  左右连接建立索引互相使用 三表   用小结果集驱动大表结果, 先优化括号里面的SQL, 保证JOIN被驱动的表上ON字段有索引 索引失效(常见原因) 全职匹 ...