本文介绍:

世纪互联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的一种设备下线通知方案相关推荐

  1. Azure IoT Hub 十分钟入门系列 (2)- 使用模拟设备发送设备到云(d2c)的消息

    本文主要分享一个案例: 10分钟- 使用Python 示例代码和SDK向IoT Hub 发送遥测消息 本文主要有如下内容: 了解C2D/D2C消息: 了解IoT Hub中Device的概念 了解并下载 ...

  2. Microsoft正式发布Azure IoT Hub与Event Grid的集成

    在经历为期六个月的公开预览后,微软宣布正式发布IoT Hub与Azure Event Grid的集成.组合使用两者可以提高对客户设备事件的支持,实现数据库更新.工单(ticket)创建和定价管理等操作 ...

  3. 【物联网云端对接-1】 通过HTTP协议与微软Azure IoT hub进行云端通信

    在2015年曾写过一篇文章<从微软build 2015.展望微软未来发展>,提到了微软的Azure和Windows 10 IoT,那算是初次接触微软物联网技术.比較幸运的是在兴许的时间里. ...

  4. Azure IoT Hub和Event Hub相关的技术系列-索引篇

    Azure IoT Hub和Event Hub相关的技术系列,最近已经整理了不少了,统一做一个索引链接,置顶. Azure IoT 技术研究系列1-入门篇 Azure IoT 技术研究系列2-设备注册 ...

  5. Azure IoT Hub入门 - 接口介绍

    Azure IoT Hub作为多租户服务,对不同的用户暴露了不同的接口(如下图所示). 下面对各类接口进行详细解释: 设备接口: Send device-to-cloud messages: 通过该接 ...

  6. 1人民币试用世纪互联azure虚拟机,跑CNN训练

    1人民币注册世纪互联的azure账号,可以有1500的免费额度,但是有效期只有一个月. 世纪互联azure和国际版azure是分开的,账号不能通用,但是国际版貌似只接visa或者mastercard信 ...

  7. Microsoft Azure IoT Hub应用 – 第一部分:向云端发送数据

    By Toradex Leonardo Graboski Veiga 1). 简介 物联网(Internet of Things)概念的本质其实就是关于发送数据到网络,所以称为云服务.随着时代发展和技 ...

  8. Azure IoT Hub 十分钟入门系列 (1)- 10分钟带你了解Azure IoT Hub 并创建IoT Hub

    建议您先对<Azure 上 IoT 整体解决方案概览 >进行了解. 本文主要分享一个案例: 10分钟-了解Azure IoT Hub并创建Azure IoT Hub 本文主要有如下内容: ...

  9. 用世纪互联Azure账号登录VS2015

    云计算的发展很迅猛,最近参加了微软组织的Microsoft Azure 70-532培训,主要是Blob.queue.File Blob和Service Bus等内容.考虑到信息安全的因素,中国区的A ...

最新文章

  1. 再见 VBA!神器工具统一 Excel 和 Python
  2. 【Extjs】 checkboxmodel 中事件处理
  3. CTEX - 在线文档 - TeX/LaTeX 常用宏包
  4. [css] 说说visibility属性的collapse属性值有什么作用?在不同浏览器下有什么区别?
  5. bbpress 论坛 wordpress汉化插件
  6. 专家:未来三年为转云时间窗口
  7. 【英语学习】【Level 07】U02 Live Work L2 A place to call my home
  8. C语言单链表定义及各类操作
  9. python-docx页眉横线
  10. 苹果进入多事之秋,电池门禁售门病魔缠身
  11. Amlogic Linux系列(四) 视频解码分析2
  12. 利用全加器实现7段数码管_LED数码管结构原理_LED数码管驱动方式
  13. jenkins更换清华(国内)插件源不生效的问题
  14. 《SteamVR2.2.0开发指南》(Yanlz+Unity+XR+SteamVR+OpenXR+OpenVR+Valve+VIVE+Oculus+Interaction+VR+立钻哥哥++ok++)
  15. Android M的App Links实现详解
  16. 美团token解决思路
  17. 程序员自学编程,推荐一些高质量自学网站?
  18. 看 Sugar 讲矩阵键盘的使用
  19. 爬虫期末考试笔记(填空题)
  20. 定类,定序,定距,定比

热门文章

  1. 微软特邀讲师 老徐FrankXuLei 受邀为中国东方航空上海研发中心讲授微软.NET企业开发课程...
  2. sof和pof配置文件
  3. access内置函数:(适用access2000)
  4. OPENWRT交叉编译之神州数码校园客户端实践
  5. 老司机谈DevOps 2.0:引子
  6. python助教酱酱有用吗_研究生生活总结(1):当助教的那些人和事
  7. 借助OA系统实现企业人事管理的精细化落地
  8. 百度云BCC密钥对使用
  9. python实现画板_一起看看python+pygame简单画板实现代码实例
  10. 分数除法计算机应用题练习,分数除法应用题 六年级的,分数除法应用题练习...