本系列是一个入门级别的动手实验,也是抽取了我们在做物联网开发中的最典型的应用场景,包含:

  1. 设备发送数据到云;
  2. 从云端控制设备;
  3. 在云端对上传的数据进行实时分析,提取有用的数据写入数据库;
  4. 在云端对上传的数据进行实时分析,满足某些条件时发出邮件报警;

本系列内容共分三篇文章介绍:

 

1.《Azure IoT Hub 动手训练营 (1)- 前置条件(准备工作)

2.《Azure IoT Hub 动手训练营 (2)- 实验1,发送设备到云的消息和从云端控制设备(Node.js Device SDK /Service SDK)

3.《Azure IoT Hub 动手训练营 (3)- 实验2,使用流分析(Stream Analytics)对遥测数据进行实时在线分析并将结果写入Azure SQL Server数据库和Logic app发邮件报警

 

本文是本系列内容第三篇,以下是本文正文:


 

本实验使用动手实验(1)中的代码。

 

 

 

流分析实战(1):将Azure IoT Hub的遥测数据全部写入到 Azure SQL 数据库中;观看本节视频演示
 
本小节准备工作:
  1. 创建流分析服务,阅读图文步骤
  2.  创建Azure SQL Server逻辑数据库及表,阅读图文步骤
本小节实战:
  1. 创建输入和输出,阅读图文步骤
  2. 编写查询,阅读图文步骤
  3. 启动流分析查询并在Azure SQL Server中查询结果,阅读图文步骤

 

流分析实战(2):统计过去30S内的遥测数据,当平均温度大于30°C时发送消息到Event Hub, 经由Logic app发送报警电子邮件;观看本节视频演示
  1. 创建Event Hub并设定为流分析的输出,阅读图文步骤
  2. 修改查询,阅读图文步骤
  3. 启动查询并在Event Hub Portal 查询结果,阅读图文步骤
  4. 创建Logic App并配置从Event Hub触发执行通过SMTP发送报警电子邮件,阅读图文步骤

 

 

 

 

 

 


 

准备工作(a)创建流分析服务

 

 

流单元设置为1:

 

进入流分析控制台,常用的三个功能为 输入,输出,查询:

 

 

输出设置为Azure SQL DB, 需要先创建一个Azure SQL DB。

 


 
准备工作(b)创建Azure SQL数据库

 

 

 

输入服务器名称,设置管理员账号和密码后,即可创建数据库逻辑服务器,然后需要,在逻辑服务器上创建数据库:

 

 

 

在本例中,我们修改了数据库的 计算和存储层级:

 

在查询编辑其中创建表:

 

登录的时候,会出现如下错误:

 

需要将错误提示中的IP地址添加到数据库防火墙中:

添加防火墙后,重新执行登录到查询编辑器:

 

也可以在防火墙规则中做如下设置,则不用每次手动添加Azure相关服务 对数据库的访问:

 

接下来在查询编辑其中创建表:

本例中创建表的sql语句如下(注:本语句仅作为流程演示,不处理索引等优化):

CREATE TABLE [dbo].[TelemetryFromIoTHub](
	[DeviceName] [nvarchar](50) NULL,
	[Temperature] [nvarchar](50) NULL,
	[OutPutTime] [datetime] NULL
) ON [PRIMARY]
GO

 

点击查询编辑器中的运行按钮,将创建数据库表:

 

点击下图刷新按钮,即可看到新创建的数据库表:

 

 


 
流分析实战(1)- a.设置流分析的输入和输出

 

添加输入,选择”IoT 中心“:

 

在下拉列表中选择我们的IoTHub, 其余保持不变:

 

添加输出,选择“SQL 数据库”,填写输出的别名等信息,选择刚创建的数据库作为输出目标:

 

 

 

 


 

流分析实战(1)- b.设置流分析的查询

 

 

流分析查询,支持嵌套,如下图所示的数据结构中,可以通过 IoTHub.ConnectionDeviceId的形式取出嵌套对象的内容:

[
  {
    "temperature": 24.21303541882745,
    "humidity": 74.61976840888555,
    "EventProcessedUtcTime": "2020-04-16T07:52:14.5159152Z",
    "PartitionId": 2,
    "EventEnqueuedUtcTime": "2020-04-16T06:52:59.4290000Z",
    "IoTHub": {
      "MessageId": null,
      "CorrelationId": null,
      "ConnectionDeviceId": "seanyu",
      "ConnectionDeviceGenerationId": "637225529989135485",
      "EnqueuedTime": "2020-04-16T06:52:59.0000000",
      "StreamId": null
    }
  },
  {
    "temperature": 32.67715489220832,
    "humidity": 73.98847667040462,
    "EventProcessedUtcTime": "2020-04-16T07:52:14.5159152Z",
    "PartitionId": 2,
    "EventEnqueuedUtcTime": "2020-04-16T06:52:58.4130000Z",
    "IoTHub": {
      "MessageId": null,
      "CorrelationId": null,
      "ConnectionDeviceId": "seanyu",
      "ConnectionDeviceGenerationId": "637225529989135485",
      "EnqueuedTime": "2020-04-16T06:52:58.0000000",
      "StreamId": null
    }
  },
  {
    "temperature": 22.95865720961004,
    "humidity": 64.28459895101837,
    "EventProcessedUtcTime": "2020-04-16T07:52:14.5159152Z",
    "PartitionId": 2,
    "EventEnqueuedUtcTime": "2020-04-16T06:52:57.4130000Z",
    "IoTHub": {
      "MessageId": null,
      "CorrelationId": null,
      "ConnectionDeviceId": "seanyu",
      "ConnectionDeviceGenerationId": "637225529989135485",
      "EnqueuedTime": "2020-04-16T06:52:57.0000000",
      "StreamId": null
    }
  }
]

 

将以下查询语句拷贝到查询对话框中:

SELECT
System.Timestamp AS OutPutTime, 
IoTHub.ConnectionDeviceId AS DeviceName,
temperature AS Temperature 
INTO
    tosqldb
FROM
    fromiothub

如下图所示:

 


 

流分析实战(1)- c.运行流分析并检查结果

 

在流分析概述页面,点击启动按钮,稍等片刻即可看到下方有数据流入和流出:

在SQL server查询分析器中也能查询到相应的数据:

 

本小节结束!

 


 

 

流分析实战(2):a.创建Event Hub并设定为流分析的输出
 

 

在市场中选择 Event Hubs:

选择标准层(20使用者组),其余保持默认值:

新建事件中心:

 

输入一个名称,其余值保持默认:

 

 

 

为流分析添加输出到事件中心:

输入一个输出别名,选择现有的event hub信息:

 


 

流分析实战(2):b.修改查询,将报警信息输出到事件中心
 

修改流分析查询:

select System.Timestamp AS OutPutTime,IoTHub.ConnectionDeviceId AS DeviceName,
Avg(temperature) AS avgtemperature into toeventhub
from fromiothub
TIMESTAMP BY EventProcessedUtcTime
GROUP BY SlidingWindow(second,30), IoTHub.ConnectionDeviceId
HAVING Avg(temperature)>30;

点击保存:

 


 
流分析实战(2):c.启动查询并在Event Hub Portal 查询结果
 

 

启动流分析:

等待一段时间后,可以看到流分析输入输出已经正常:

 

同时,在Event Hub概述页面中,也能看到数据流入:

至此,我们的设备遥测信息经过流分析将报警数据输出到了Event Hub事件中心中。

 


 

流分析实战(2):d.创建Logic App并配置从Event Hub触发执行通过SMTP发送报警电子邮件

 

创建逻辑应用:

填写逻辑应用的名称,选择区域即可创建:

 

创建空白的逻辑应用:

 

选择 EventHubs:

 

点击如下图所示位置:

 

输入名称,选择事件中心:

 

选择默认的策略:

从下拉列表中选择自己的Event Hub, 然后点击新步骤:

 

在全部中,选择SMTP:

填写SMTP的信息,请使用自己QQ邮箱等的SMTP信息,或者使用我们提供的测试用的SMTP:

注意,我们提供的测试SMTP用的人比较多,收到垃圾邮件策略的影响,可能出现邮件无法正常发送的情况。

选择必备的参数:

收件人填写自己的邮箱, 主题可以自定义,内容选择 content:

点击保存按钮保存逻辑应用:

 

接下来稍等片刻即可收到新邮件:

 

 


 

将Azure IoT Hub的遥测数据全部写入到 Azure SQL 数据库中

 

 

统计过去30S内的遥测数据,当平均温度大于30°C时发送消息到Event Hub, 经由Logic app发送报警电子邮件