内容正文:
目录
规则引擎-数据流转 5
阿里云 IoT 规则引擎 SQL 参考 6
两张图秒懂 IoT 设备数据云端流转 8
IoT 设备数据转存到 DB 表格存储 10
实时监听设备在线/离线事件 16
IoT 设备运行状态缓存到 Redis 20
IoT 设备之间 M2M 场景联动实战 28
App 和 IoT 设备数据实时同步和控制 38
监控运维 44
IoT 物联网平台 3 种计费方式 45
IoT 平台消息轨迹全景图 49
IoT 平台性能压测工具 JMeter 53
IoT 设备 OTA 固件升级实践 60
用 Wireshark 抓包分析 IoT 设备网络行为 69
IoT 平台日志服务详解 76
IoT 设备日志采集利器服务 80
全链路开发实战 84
IoT 平台端到端开发实践 85
7 分钟视频讲解全链路开发 102
自建 MQTT 迁移阿里云 loT 103
TCP 协议 IoT 设备迁移上云 122
场景开发实践 131
AI 人脸识别,监控老板行踪! 132
IoT+DB + DataV 搭建实时环境监控大屏 147
IoT+TSDB+Quick BI 环境监控 156
20 元自制 Arduino 环境监测仪 165
IoT 二维码收款播报音箱 177
IoT 智能手持测温枪开发 179
规则引擎-数据流转
阿里云 IoT规则引擎SQL参考 < 6
阿里云 IoT规则引擎SQL参考
作者 | 苏堤嘉木
一、阿里云 IoT SQL语法
在使用规则引擎时,处理数据逻辑通过一种类似 SQL 的语法来定义。
SQL语句结构如下:
SELECT
必需。可以使用上报消息的 payload,也可以使用阿里云 IoT 平台内置的函数
FROM
必需。用于匹配需要处理的消息 Topic
WHERE
可选。规则触发条件,条件表达式
二、.SQL处理示例
1. SQL 语句的示例如下:
SELECT
deviceName() as deviceName,
attribute('site') as site,
pm25,
temperature FROM
'/pk/dn/data'
WHERE
pm25 > 60
2. 设备在 IoT 平台注册的信息
productKey: pk
7 > 阿里云 IoT规则引擎SQL参考
deviceName: dn
标签:
imei = XIXI2018034532
site = 西溪湿地-洪园
3. 设备mqtt 消息的示例:
topic:'/pk/dn/data'
payload:{
"pm25":63,
"temperature":31
}
4. 处理结果
当设备消息在 '/pk/dn/data' 主题上发布,则触发规则引擎数据处理 SQL 语句。如
果 "pm25" 属性大于 60,SQL 语句将提取 select 字段的值。
处理结果如下所示:
{
"deviceName":"dn",
"site":"西溪湿地-洪园",
"pm25":63,
"temperature":31
}
三、参考文档
1. 阿里云 IoT SQL函数列表
https://help.aliyun.com/document_detail/30555.html
2. 物模型数据格式
https://help.aliyun.com/document_detail/73736.html
两张图秒懂 IoT设备数据云端流转 < 8
两张图秒懂 IoT设备数据云端流转
作者 | 苏堤嘉木
当设备接入阿里云 IoT 物联网平台,基于Topic 进行通信时,我们可以使用规则引擎,
编写SQL对 Topic 中的数据进行处理,并配置转发规则将处理后的数据转发到阿里云其他
服务。
可以转发到RDS、表格存储、HiTSDB 中进行存储。
可以转发到DataHub 中,使用 Streamcompute 进行流计算,使用Maxcompute
进行大规模离线计算。
可以转发到函数计算进行事件计算。
可以转发到另一个 Topic 实现M2M通信。
可以转发到队列MQ实现可靠消费数据。
可以转发到消息服务MNS实现消费数据。
使用规则引擎时,我们需要基于 Topic 编写 SQL 处理数据。
基础版自定义 Topic 和高级版自定义的 Topic,数据格式是自定义的,物联网平台不
做处理,直接流转到规则引擎处理。
高级版系统默认的物模型Topic,设备 payload 会在云端转换成物模型 payload 后,
再流转到规则引擎处理。
9 > 两张图秒懂 IoT设备数据云端流转
基础版产品数据流转过程:
高级版产品数据流转过程:
IoT设备数据转存到DB表格存储 < 10
IoT 设备数据转存到DB表格存储
作者 | 苏堤嘉木
一、IoT云端开发
开通物联网套件:https://www.aliyun.com/product/iot
1. 创建产品
创建基础版产品,添加消息通信Topic:
11 > IoT 设备数据转存到DB表格存储
设备上报数据结构:
2. 添加设备
添加设备获取三元组,添加标签信息:
二、表格存储
开通表格存储服务:https://www.aliyun.com/product/ots
1. 创建用于存储设备数据的表
IoT设备数据转存到DB表格存储 < 12
三、IoT物联网平台-规则引擎
1. 处理数据 SQL
13 > IoT 设备数据转存到DB表格存储
控制台操作:
2. 转发数据
IoT设备数据转存到DB表格存储 < 14
3. 完整规则引擎
4. 启动规则引擎
四、设备端开发
模拟设备的 nodejs 脚本 :device-2-iot-2-ots.js
15 > IoT设备数据转存到DB表格存储
五、启动运行
启动虚拟设备脚本:$ node device-2-iot-2-ots.js
表格存储数据查看:
实时监听设备在线/离线事件 < 16
实时监听设备在线/离线事件
作者 | 苏堤嘉木
一、设备上下线状态消息
当设备连接到 IoT 物联网平台,设备离线,在线状态变更会生成特定 topic 的消息,我
们服务端可以通过订阅这个 topic 获得设备状态变更信息。
设备的上下线状态流转的 Topic 格式:
/as/mqtt/status/{productKey}/{deviceName}
payload 数据格式:
{
"status":"online|offline",
"productKey":"pk13543",
17 > 实时监听设备在线/离线事件
"deviceName":"deviceName1234",
"time":"2018-08-31 15:32:28.205",
"utcTime":"2018-08-31T07:32:28.205Z",
"lastTime":"2018-08-31 15:32:28.195",
"utcLastTime":"2018-08-31T07:32:28.195Z",
"clientIp":"123.123.123.123"
}
参数说明:
二、通过规则引擎流转设备状态
1. 配置 SQL
SELECT
productKey,deviceName,
timestamp() as timestamp ,
status,clientIp,
time as currentTime ,lastTime
FROM
"/as/mqtt/status/a*****t/+"
实时监听设备在线/离线事件 < 18
这样我们就可以从消息体获取到设备的 status,currentTime 和 lastTime 了。
数据处理 SQL配置界面:
2. 配置数据流转目的地
数据流转配置界面:
19 > 实时监听设备在线/离线事件
三、运行结果
当有设备上线,业务交互,下线,我们就可以在DB看到如下记录。
status 是设备状态,lastTime 是最后一次通信时间,currentTime 是这条消息生成时
间,可以理解为 设备上线时间,下线时间。
IoT设备运行状态缓存到Redis < 20
IoT 设备运行状态缓存到Redis
作者 | 苏堤嘉木
今天,我们给大家带来基于云产品组合的方案,无需编写应用程序代码,实时缓存 IoT
设备上报的当前运行状态,供业务系统查询的技术方案。
一、技术原理
借助物联网平台提供的规则引擎模块,我们可以轻松的把设备上报的最新状态存储到
Key-Value 的数据库--表格存储OTS/Redis/MongoDB 中,技术方案如下:
二、IoT物联网开发
首先我们在 IoT 物联网控制台创建产品水泵,并注册 2个设备:
21 > IoT 设备运行状态缓存到Redis
然后,给每个设备添加 city 标签,如下:
水泵监控场景中,每 10 分钟会定时上报运行状态到 IoT 平台,具体通信 Topic 和
payload 如下:
IoT 设备运行状态缓存到Redis < 22
// 定时上报运行状态的Topic
/${productKey}/${deviceName}/user/bizHeart/post
// 对应 payload 结构体
{
status: 'RUNNING', //运行状态 RUNNING,STOP,SHUTDOWN
speed: 3000, //当前转速
waterOutput: 125,//当前出水量
workingTime: 72//工作时长 xx分钟
}
三、表格存储数据库
我们在表格存储OTS控制台创建一个数据表,以设备 deviceName 为主键,扩展信
息为设备当前状态属性,无需预先定义。
创建完成后,数据表基本信息,如下:
23 > IoT设备运行状态缓存到Redis
四、规则引擎配置
当设备上报状态数据后,需要通过预先配置规则引擎实时流转到表格存储中,规则引擎
配置如下:
数据处理的SQL参考:
IoT设备运行状态缓存到Redis < 24
SELECT
deviceName() as deviceName,
attribute('coordinate') as coordinate,
attribute('city') as city,
timestamp('yyyy-MM-dd HH:mm:ss') as currentTime,
status,speed,waterOutput,workingTime
FROM
"/a1vYwzHjT6p/+/user/bizHeart/post"
数据转发配置如下:
五、联机运行
当设备启动,上报状态数据后,我们在 IoT 控制台的日志服务里可以查看到如下消息
报文记录:
25 > IoT设备运行状态缓存到Redis
以及规则引擎流转日志:
同时在表格存储数据库中,我们也可以查看到设备当前状态数据:
IoT设备运行状态缓存到Redis < 26
六、查询设备状态
Node.js 方式从表格存储OTS中读取指定 key 的数据参考据代码如下:
var TableStore = require('tablestore');
var client = new TableStore.Client({
accessKeyId: '账号 accessKey',
secretAccessKey: '账号 secretAccessKey',
endpoint: '表格存储接入点',
instancename: '表格存储实例 ID',
maxRetries: 3
});
var params = { t
ableName: '表名',
primaryKey: [{ 'deviceName': '设备 Id' }],
maxVersions: 1
};
client.getRow(params, function(err, data) {
if (err) {
console.log('error:', err);
return;
}
if (data.row.primaryKey) {
data.row.primaryKey.forEach(function(item) {
console.log('======> getRow: ', item.name + '=' + item.value);
})
27 > IoT 设备运行状态缓存到Redis
data.row.attributes.forEach(function(item) {
console.log('\t\t' + item.columnName + '=' + item.columnValue);
})
}
});
设备最新状态数据查看:
$ node queryOTS.js
======> getRow: deviceName=xxxxxx
city=xxxxxx
coordinate=xxxxxx
currentTime=xxxxxx
status=xxxxxx
speed=xxxxxx
waterOutput=xxxxxx
workingTime=xxxxxx
IoT 设备之间M2M场景联动实战 < 28
IoT 设备之间M2M场景联动实战
作者 | 苏堤嘉木
M2M(即Machine-to-Machine)是一种端对端通信技术。IoT 物联网平台支持使
用规则引擎的 Topic 转发功能,实现M2M通信,您不用担心高并发场景下的稳定通信、
低延时等技术难点,也不需要购买大量服务器去承载这些请求,您只需要根据自己的业务配
置好转发规则即可。
本次实战,我们讲解在厨房场景中如何实现不同消费者购买的燃气灶和抽油烟机的联
动,同样适用于智能家居场景中温湿度传感器和空调联动,空气质量传感器和空气净化器联
动等。
一、技术方案
基于 IoT 物联网平台中规则引擎的M2M 能力和设备标签功能,我们可以组合出设备
之间联动的技术方案,如下:
消费者 A购买我们的燃气灶 z001 和油烟机 s001 后,业务系统会在 IoT 物联网平台给
燃气灶 z001 打上设备标签 targetId:s001 。
29 > IoT设备之间M2M场景联动实战
当燃气灶 z001 发送特定 Topic: /a***h/z001/user/change/rangehood 后,会在云
端规则引擎处理后,转发给油烟机 s001 订阅的 Topic: /a***i/s001/user/control/param
s,并携带业务信息,以便抽油烟机判断是否开机和转速等级。
二、创建产品
1. 抽油烟机
在控制台创建抽油烟机产品。
添加自定义Topic,用来监听运行指令。
IoT设备之间M2M场景联动实战 < 30
2. 燃气灶
在控制台创建燃气灶产品。
添加自定义Topic,用来发送控制油烟机运行的参数。
31 > IoT 设备之间M2M场景联动实战
三、注册设备
1. 油烟机设备
在控制台注册油烟机设备 s001。
IoT 设备之间M2M场景联动实战 < 32
2. 燃气灶设备
在控制台注册燃气灶设备 z001,并添加标签信息: targetId:s001,来绑定抽油烟机设
备 s001。
四、配置M2M规则
通过规则引擎,配置云产品流转规则,如下:
33 > IoT设备之间M2M场景联动实战
1. 处理数据
通过 SQL规则,我们抽取出 rangehoodId,status,windPower 共 3 个业务参数。
SELECT
attribute('targetId') as rangehoodId,
status,
windPower
FROM
"/a****h/+/user/change/rangehood"
2. 转发数据
转发数据过程中,我们用 ${rangehoodId} 来动态替换目标设备。