针对世纪互联Azure IoT Hub的一种设备下线通知方案
本文介绍:
世纪互联Azure IoT Hub的一种获取设备下线通知方案
视频介绍:
您可在B站观看视频介绍:https://www.bilibili.com/video/BV1RK4y1b7Zp/
或在作者博客观看:https://www.51azure.cloud/post/2020/5/3/azure-iot-hub-disconnect-device
图文介绍:
对于Global Azure IoT Hub, 通过集成的和Event Grid的绑定即可获得物联网设备的上线下线事件,再通过配合逻辑应用或者Azure Function等其他paas服务可以实时的通知到自己的业务系统。
但是事件订阅的的功能截止到2020年4月,由世纪互联运营的Azure 尚不支持此功能,本文演示了一种在世纪互联运营的Azure IoT Hub中获取设备下线的方案,方案是开放的,其中的组件也是可以替换的,可根据实际业务架构进行调整。
本方案并不是一种值得推荐的方案,只是在当前的状况下(世纪互联暂不支持原生的设备下线通知)的一种能满足需求的方法。
主要原理是:
定时从“设备孪生”中查询掉线的设备;
将查询逻辑封装到Azure Functions 中(可选);
同时在这类场景中,对于可预知的设备关机,比如设备是一台电视机顶盒,通常会通过遥控器关机,则可以在关机前发送一条特定的消息,通知云端某台设备要关机了,以达到较为实时的下线通知。
对于可能存在突然断电等情况的设备下线,则可以使用本文的方式。
重点步骤:
在Azure Portal的IoT Hub控制台体验查询语句:
SELECT * FROM C WHERE connectionState='Disconnected'
查询结果会自动展示出来:
创建Azure Function 来托管查询代码:
使用VS Code 创建Function:
在VS Code中键入 CTRL+SHIFT+P 三个按键,输入 Azure Functions: Create new project
本例中使用C#:
选择TimerTirgger 定时触发的方式执行Functions:
输入Function的名称,这里可以自定义:
设置命名空间,C#项目的通用设置,这里可以自定义:
设置定时触发的规则:
本例中,将下图的5 改成1,表示每隔1分钟执行1次 ,
参考的NCRONTAB表达式如下:
可在Azure 官网文档查阅:
https://docs.azure.cn/zh-cn/azure-functions/functions-bindings-timer?tabs=csharp#ncrontab-expressions
Function 执行需要使用一个Storage Account,可以选择已经创建好的或者新建或者使用本地模拟器,本例中,选择一个已经创建好的:
选择一个现有的Storage Account:
选择Open in current Window, 至此,使用VS Code 创建Function 项目的步骤就结束了:
使用Nuget Package Manager安装IoT Hub Service SDK:
本例子中,需要使用Azure IoT Hub的 Service SDK, 接下来的步骤也是使用VS Code开发 Functions时添加应用程序集的一种通用的方式:
ctrl+shift+p 三个按键一起,输入 Nuget Package Manager: Add Package ,回车
输入Microsoft.Azure.Devices:
如果右下角出现 获取失败,则需要重试,根据网络情况,可能需要科学上网:
本例中,使用了正式版本:1.20.1
编写查询代码:
查询代码如下:
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using Microsoft.Azure.Devices;namespace SeanIoTTest.Function
{public static class CheckDeviceDisconnect{[FunctionName("CheckDeviceDisconnect")]public static void Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log){log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");//query from device twinusing RegistryManager registryManager = RegistryManager.CreateFromConnectionString("your iot hub string");var query = registryManager.CreateQuery("SELECT * FROM devices where connectionState='Disconnected'", 100);while (query.HasMoreResults){var page = query.GetNextAsTwinAsync().Result;foreach (var twin in page){// do work on twin objectlog.LogInformation($"Device ID { twin.DeviceId } disconnected");//save result to servicebus/event hub/db/webhook }}}}
}
本地调试;
稍等1分钟,即可看到,掉线的设备已经列出来,如下图:
使用VS Code部署Functions:
CTRL+SHIFT+P,输入 Azure Functions: Deploy to Function APP
本例中,我们新创建一个Function App:
本例中,可以自定义 Function App的名称:
选择.Net Core 3.1:
截至到2020年04月, 世纪互联的Function的操作系统只有Windows,所以此处只能选择 Windows:
托管类型选择 App Service Plan,应用程序计划相当于服务器,Function 相当于服务器上部署的网站,
创建新的应用服务计划:
本例中,保持应用程序计划名称为默认值:
本例中,选择S1:这里实际上决定了”服务器“的规格,具体可参见:https://www.azure.cn/pricing/details/app-service/
我们能在官网文档中查看到,S1的配置如下:
选择应用程序计划要部署的目标资源组:
选择Storage Account:
本例中,跳过创建Application Insights:
右下角正在创建资源:
部署完成后,可以点击 Stream logs, 查看云端的Function运行LOG:
稍等1分钟,即可查看到 离线的设备:
在Portal中可以看到通过VS Code创建的 相应资源(App Service Plan 和 Functions):
查看Azure Function 的相关信息:
针对世纪互联Azure IoT Hub的一种设备下线通知方案相关推荐
- Azure IoT Hub 十分钟入门系列 (2)- 使用模拟设备发送设备到云(d2c)的消息
本文主要分享一个案例: 10分钟- 使用Python 示例代码和SDK向IoT Hub 发送遥测消息 本文主要有如下内容: 了解C2D/D2C消息: 了解IoT Hub中Device的概念 了解并下载 ...
- Microsoft正式发布Azure IoT Hub与Event Grid的集成
在经历为期六个月的公开预览后,微软宣布正式发布IoT Hub与Azure Event Grid的集成.组合使用两者可以提高对客户设备事件的支持,实现数据库更新.工单(ticket)创建和定价管理等操作 ...
- 【物联网云端对接-1】 通过HTTP协议与微软Azure IoT hub进行云端通信
在2015年曾写过一篇文章<从微软build 2015.展望微软未来发展>,提到了微软的Azure和Windows 10 IoT,那算是初次接触微软物联网技术.比較幸运的是在兴许的时间里. ...
- Azure IoT Hub和Event Hub相关的技术系列-索引篇
Azure IoT Hub和Event Hub相关的技术系列,最近已经整理了不少了,统一做一个索引链接,置顶. Azure IoT 技术研究系列1-入门篇 Azure IoT 技术研究系列2-设备注册 ...
- Azure IoT Hub入门 - 接口介绍
Azure IoT Hub作为多租户服务,对不同的用户暴露了不同的接口(如下图所示). 下面对各类接口进行详细解释: 设备接口: Send device-to-cloud messages: 通过该接 ...
- 1人民币试用世纪互联azure虚拟机,跑CNN训练
1人民币注册世纪互联的azure账号,可以有1500的免费额度,但是有效期只有一个月. 世纪互联azure和国际版azure是分开的,账号不能通用,但是国际版貌似只接visa或者mastercard信 ...
- Microsoft Azure IoT Hub应用 – 第一部分:向云端发送数据
By Toradex Leonardo Graboski Veiga 1). 简介 物联网(Internet of Things)概念的本质其实就是关于发送数据到网络,所以称为云服务.随着时代发展和技 ...
- Azure IoT Hub 十分钟入门系列 (1)- 10分钟带你了解Azure IoT Hub 并创建IoT Hub
建议您先对<Azure 上 IoT 整体解决方案概览 >进行了解. 本文主要分享一个案例: 10分钟-了解Azure IoT Hub并创建Azure IoT Hub 本文主要有如下内容: ...
- 用世纪互联Azure账号登录VS2015
云计算的发展很迅猛,最近参加了微软组织的Microsoft Azure 70-532培训,主要是Blob.queue.File Blob和Service Bus等内容.考虑到信息安全的因素,中国区的A ...
最新文章
- 再见 VBA!神器工具统一 Excel 和 Python
- 【Extjs】 checkboxmodel 中事件处理
- CTEX - 在线文档 - TeX/LaTeX 常用宏包
- [css] 说说visibility属性的collapse属性值有什么作用?在不同浏览器下有什么区别?
- bbpress 论坛 wordpress汉化插件
- 专家:未来三年为转云时间窗口
- 【英语学习】【Level 07】U02 Live Work L2 A place to call my home
- C语言单链表定义及各类操作
- python-docx页眉横线
- 苹果进入多事之秋,电池门禁售门病魔缠身
- Amlogic Linux系列(四) 视频解码分析2
- 利用全加器实现7段数码管_LED数码管结构原理_LED数码管驱动方式
- jenkins更换清华(国内)插件源不生效的问题
- 《SteamVR2.2.0开发指南》(Yanlz+Unity+XR+SteamVR+OpenXR+OpenVR+Valve+VIVE+Oculus+Interaction+VR+立钻哥哥++ok++)
- Android M的App Links实现详解
- 美团token解决思路
- 程序员自学编程,推荐一些高质量自学网站?
- 看 Sugar 讲矩阵键盘的使用
- 爬虫期末考试笔记(填空题)
- 定类,定序,定距,定比
热门文章
- 微软特邀讲师 老徐FrankXuLei 受邀为中国东方航空上海研发中心讲授微软.NET企业开发课程...
- sof和pof配置文件
- access内置函数:(适用access2000)
- OPENWRT交叉编译之神州数码校园客户端实践
- 老司机谈DevOps 2.0:引子
- python助教酱酱有用吗_研究生生活总结(1):当助教的那些人和事
- 借助OA系统实现企业人事管理的精细化落地
- 百度云BCC密钥对使用
- python实现画板_一起看看python+pygame简单画板实现代码实例
- 分数除法计算机应用题练习,分数除法应用题 六年级的,分数除法应用题练习...