.NET Core2使用Azure云上的Iot-Hub服务
基于工业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服务的更多相关文章
- ASP.NET Core2调用Azure云上的PowerBI报表展示
在开发企业应用中,报表功能是当之无愧的重头戏,如何将数据通过合适的报表呈现出来成为每个项目人员必需面临的问题.而找到一款合适的报表往往都需要考率价格.开发.风格.支撑等因素.那么,我在这里给大家介绍一 ...
- 关于将Azure云上磁盘导出-使用VirtualBox转换成vmdk格式的方法记录
在工作中,经常会遇到虚拟磁盘文件格式的转换需求,尤其是在虚拟化迁移及云环境迁移到DC的虚拟化环境中 或者中转处理,如最近笔者遇到一个需要将Azure Cloud上的磁盘导出到VMware中,但Azur ...
- azure 云上MySQL最新版本 MySQL5.7.11 批量自动化一键式安装 (转)
--背景云端 以前都喜欢了源码安装mysql,总觉得源码是高大上的事情,不过源码也需要时间,特别是make的时候,如果磁盘和cpu差的话,时间很长很长,在虚拟机上安装mysql尤其甚慢了. 现在业务发 ...
- 在Azure云上实现postgres主备切换
以下是工作上实现postgres主备切换功能所用到的代码和步骤,中间走了不少弯路,在此记录下.所用到的操作系统为centos 7.5,安装了两台服务器,hostname为VM7的为Master,VM8 ...
- AZURE云上 mkfs.ext4 /dev/sdc 导致宕机问题解决纪实
)开机启动挂载配置 [root@pldb2 ~]# vim /etc/fstab You have new mail in /var/spool/mail/root [root@pldb2 ~]# m ...
- 国内物联网平台(1):百度物接入IoT Hub
国内物联网平台(1) ——百度物接入IoT Hub 马智 物接入IoT Hub - 架构 全托管的云服务,帮助建立设备与云端之间安全可靠的双向连接 支撑海量设备的数据收集.监控.故障预测等各种物联网场 ...
- 国内物联网平台初探(一) ——百度物接入IoT Hub
物接入IoT Hub - 架构 全托管的云服务,帮助建立设备与云端之间安全可靠的双向连接 支撑海量设备的数据收集.监控.故障预测等各种物联网场景 物接入IoT Hub - 功能 通信协议:支持MQTT ...
- 来杭州云栖大会,全面了解企业如何实现云上IT治理
企业上云的现状与趋势 云计算,如今已经成为了像水和电一般关系到国计民生的国家基础设施.云计算为企业带了前所未有的资源交付效率和运维效率的提升,同时也用全新的技术帮助企业在新的价值网络中创造新的商业赛道 ...
- 阿里云上到底能运行SAP哪些产品?
本文主要内容大部分来源于SAP已经发布的note: 2552731 - SAP Applications on Alibaba Cloud: Supported Products and IaaS ...
随机推荐
- 蓝桥杯 生命之树【树状dp】
生命之树 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上, 都标了一个整数,代表这个点的和谐值. 上帝要在这棵树内选出一个非空节点集S, 使得对于S中的任意两个点a,b ...
- Boost C++ 库 中文教程(全)
Boost C++ 库 目录 第 1 章 简介 第 2 章 智能指针 第 3 章 函数对象 第 4 章 事件处理 第 5 章 字符串处理 第 6 章 多线程 第 7 章 异步输入输出 第 8 章 进程 ...
- bzoj1215 24点游戏
Description 为了培养小孩的计算能力,大人们经常给小孩玩这样的游戏:从1付扑克牌中任意抽出4张扑克,要小孩用“+”.“-”.“×”.“÷”和括号组成一个合法的表达式,并使表达式的值为24点. ...
- generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...
- 学习blus老师js(5)--DOM操作应用高级
一.表格应用 - 1 获取 tBodies.tHead.tFoot.rows.cells 一个表格可以有很多tbody,所以tBodies是数组: 一个表格只能有一个thead和tfoot,所以tHe ...
- Java 简单TCP文件传输
服务端 package TCP; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputSt ...
- HDU 2143 Can you find it?(基础二分)
Can you find it? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others ...
- 【ZZ】大型数据库应用解决方案总结 | 菜鸟教程
大型数据库应用解决方案总结 http://www.runoob.com/w3cnote/db-solutions.html
- Serv-u只开放21端口连接不上解决方案
在Serv-U的Local Server -> Settings -> Advanced -> PASV port range里, 填入给PASV模式使用的本地端口范围,如60000 ...
- java中路径中参数值是中文,打印到页面是乱码的解决方案
jsp代码: <% String name=request.getParameter("name"); String age=request.getParameter(&qu ...