玩转华为物联网IoTDA服务系列三-自动售货机销售分析场景示例
场景简介
通过收集自动售货机系统的销售数据,EI数据分析售货销量状况。
该场景主要描述的是设备可以通过MQTT协议与物联网平台进行交互,应用侧可以到物联网平台订阅设备侧变化的通知,用户可以在控制台或通过应用侧接口创建数据转发规则,把设备上报的属性转发给其他华为云服务。
核心知识点:产品模型、编辑码插件、订阅推送、属性上报、MQTT协议、数据转发规则。
场景流程
流程解释:
2、上传产品模型:产品模型是定义一种设备的基本属性和命令。产品模型可以通过控制台,也可以导入公共产品库的模型。该场景没有编解码插件,是因为设备是基于安卓操作系统开发的,能够通过MQTT协议与平台进行交互。
3、批量注册自动售货机设备:平台提供了应用侧API接口可以注册设备,也可以通过控制台批量注册。注册设备时获取的设备ID,是设备侧与平台交互的唯一标识。
4、创建自动售货机设备状态变化的订阅:售货管理系统可以在平台创建设备变化的通知订阅,需要把callback url即应用回调地址传给平台,平台后续会推送通知到该url。
5、设备建链:MQTT设备是指通过MQTT协议,不论是集成了华为IoT Device SDK,还是原生MQTT协议接入,只要是json数据格式传输给平台,平台就无需使用编解码插件。如果是二进制上传,则需要先做编解码插件的开发。MQTT是长连接,需要先建链才能进行数据传输,可以通过安全加密方式8883端口接入(推荐),也可以通过非安全加密方式1883端口接入。
6、推送自动售货机设备激活通知:平台会根据之前应用订阅的回调地址,把自动售货机设备上线的通知类型通过HTTP/HTTPS推送回去。
7、创建数据转发规则:售货管理系统可以通过API接口创建规则,也可以通过控制台创建,指定过滤指定的属性,给指定的通道转发数据。
8、开通DIS通道/MRS服务:华为公有云上有丰富的SaaS服务和PaaS服务,供您结合自己的业务需要进行组合使用。DIS服务提供高效采集、传输、分发能力,支持多种IoT协议,可以开通该服务,通过IoTDA规则引擎,把自动售货机设备的数据转发给DIS,然后再利用诸如MRS服务,实现自动售货销量状况数据分析。
9、自动售货机属性上报:设备侧可以通过SDK或MQTT原生协议接入平台,属性上报销售信息。这里值得注意的是,设备侧上报的数据,是通过属性上报,与消息上报最大的区别在于是否经过产品模型。属性上报的内容与格式都要跟产品模型定义保持一致。具体概念介绍可以参阅“物模型”。
10、按规则数据转发:平台收到设备上报的属性后,规则引擎会进行过滤(不论属性还是消息,平台都会做规则过滤),把设定好的属性值转发到指定的DIS通道,然后再通过DIS的接口,由MRS去消费DIS的数据,实现对销量的分析。
最佳实践
场景说明
物联网解决方案中,作为数据主体的“物”可能数量会非常大,产生的数据已经无法通过传统的数据处理服务进行处理。如何分析与利用这庞大的物联网设备数据对物联网企业来说又是一个新的挑战。
华为云物联网平台提供规则引擎能力,支持将数据上报的数据转发至华为云其他云服务,可实现将海量数据通过数据接入服务(DIS)转发至MapReduce服务(MRS),对数据进行处理后再由数据可视化服务(DLV)读取数据呈现为可视化报表,实现数据的一站式采集、处理和分析。
在本示例中,我们实现下述场景:
自动售货机每次销售商品后上报销售商品种类、数量、时间和所属区域到物联网平台,物联网平台将数据通过数据接入服务转发至MapReduce服务,MapReduce服务处理数据并写为统计文件,数据可视化服务从统计文件读取数据展现为四个维度的销售报表。
创建MapReduce集群
创建集群,用于存储和处理DIS转储的数据。
登录华为云官方网站,访问MapReduce服务。
单击“立即购买”,创建集群,以下配置仅为样例。
注:下图以新版自定义购买界面为例,需要在“购买集群”界面点击右上角的“点击体验新版”,然后选择“自定义购买”。
参数名称 |
说明 |
---|---|
软件配置 |
|
当前区域 |
保持默认。 |
集群名称 |
自定义或保持默认。 |
集群版本 |
保持默认。 |
集群类型 |
分析集群。组件勾选Spark,系统会自动勾选Hive和Tez。“Hive使用外部数据源存储元数据”保持关闭。 |
Kerberos认证 |
关闭。 |
用户名 |
固定为“admin”不可修改。 |
密码 |
自定义。 |
确认密码 |
|
硬件配置 |
|
计费模式 |
按实际使用需求选择,本示例中选择“按需计费”。 |
网络配置 |
全部保持默认。 |
实例 |
为节省实验费用,可修改分析Core的实例数量为1,其余保持默认值。密码自定义。 |
高级配置均保持默认。 |
3.集群创建成功后,等待15到30分钟,集群状态变更为“运行中”则表示创建成功。
创建OBS桶
登录华为云官方网站,访问对象存储服务。
单击“管理控制台”进入对象存储服务管理控制台。
单击页面右上角的“创建桶”,根据需求选择桶规格后,单击“立即创建”。
创建数据接入通道和转储任务
创建通道并配置转储任务,实现将设备管理服务传入DIS的数据转发至MRS。
登录华为云官方网站,访问数据接入服务。
单击“立即购买”,购买接入通道,以下配置仅为样例。
参数名称 |
说明 |
---|---|
区域 |
保持默认。 |
通道名称 |
自定义或保持默认。 |
通道类型 |
保持默认值“普通”。 |
分区数量 |
按需填写。 |
生命周期 |
|
源数据类型 |
选择“JSON”。 |
自动扩缩容 |
保持关闭。 |
Schema开关 |
|
高级配置 |
保持默认。 |
3.通道购买成功后,进入DIS控制台“接入管理 > 通道管理”页面。
4.单击需要查看的通道名称,进入所选通道的管理页面,选择“转储管理”页签。
5.单击“添加转储任务”按钮。
6.在弹出的“添加转储任务”页面配置转储相关配置项。
参数名称 |
说明 |
---|---|
源数据类型 |
默认为通道源数据类型 |
转储服务类型 |
选择“MRS”。 |
任务名称 |
自定义,如“iot_to_mrs”。 |
转储文件格式 |
选择“Text”。 |
MRS集群 |
选择已创建成功的MRS集群。 |
HDFS路径 |
选择转储文件要存储的路径,建议选择“/user”。 |
转储文件目录 |
自定义转储文件存放的文件夹名称,本示例中为“temp”。 |
偏移量 |
选择“最新”。 |
数据转储周期 |
本示例中修改为“60”。 |
数据临时桶 |
选择已创建的OBS桶。 |
数据临时目录 |
自定义,本示例中为“temp”。 |
7.单击“立即创建”。
配置设备接入服务
在设备接入服务中创建产品模型、注册设备并设置数据转发规则,实现当设备上报数据时将数据转发至DIS。
登录华为云官方网站,访问设备接入服务。
单击“立即使用”进入设备接入控制台。
单击“规则 > 创建规则 > 数据转发”,首次创建对接到DIS服务的规则时,平台会根据对接的云服务和区域弹出对应的云服务访问授权窗口。
4.单击左侧导航栏的“产品”,单击右上角下拉框,选择新建产品所属的资源空间。
注:本文中使用的产品模型和设备仅为示例,您可以使用自己的产品模型和设备进行操作。
5.单击右上角的“创建产品”,创建一个基于MQTT协议的产品,填写参数后,单击“确认”。
基本信息 |
|
产品名称 |
自定义,如MQTT_Device |
协议类型 |
选择“MQTT” |
数据格式 |
选择“JSON” |
厂商名称 |
自定义 |
功能定义 |
|
选择模型 |
请参考步骤6导入模型即可。 |
所属行业 |
根据实际情况进行填写。 |
设备类型 |
6.在功能定义页面,单击“上传模型文件”,单击Profile.zip,获取产品模型文件样例。
7.进入“设备 > 设备注册”页面,单击“注册设备”,参考下表填写参数。
参数名称 |
说明 |
---|---|
所属产品 |
选择在步骤5中创建的产品。 |
设备标识码 |
设备唯一物理标识,如IMEI、MAC地址等,用于设备在接入物联网平台时携带该标识信息完成接入鉴权。
|
设备名称 |
自定义。 |
设备认证类型 |
选择“密钥”。 |
密钥 |
设备密钥,可自定义,不填写物联网平台会自动生成。 |
填写完成后单击“确定”,请注意保存注册成功返回的“设备ID”和“设备密钥”。
8.单击左侧导航栏的“规则”,单击右上角的“创建规则”,选择“数据转发”。
9.填写规则内容,规则名称自定义,“数据类型”选择“JSON”,转发至“数据接入服务(DIS)”,“区域”选择您开通OBS的区域,“通道”选择您创建的桶,填写完成后单击“创建规则”。
配置数据可视化服务
配置数据可视化服务,新建数据报表视图。
登录华为云官方网站,访问数据可视化服务。
单击“进入控制台”。
注:若您未开通DLV服务,可单击“体验试用”获取30天的基础版免费试用。
访问DLV控制台“我的大屏”页面,新建一个大屏。
4.选择空白模板,输入大屏名称后,单击“创建大屏”。
5.单击“文本 > 标题”新增一个标题。
6.在右侧“数据”面板修改静态数据中“value”的值为“每日销量”。
7.在大屏内拖动标题到左上角,并拉伸成合适的形状。
8.单击“常用图表 > 线状图”新增一个线状图报表。
9.拖动图表到标题下面并拉伸成合适的形状。
10.重复以上步骤再添加一个标题为“时间段销量”柱状图,一个标题为“种类销量”的饼状图,一个标题为“地区销量”的区域排行图,并根据自己的需要设置图表的样式。最终效果类似下图。
11.单击页面右上角的返回按钮退出编辑页面。
验证操作
1.首先控制设备上报10条数据。
您可以使用配置设备接入服务时注册的真实设备接入平台,上报数据。
您也可以使用模拟器模拟设备上报数据,操作方法请参考通过MQTT.fx体验设备接入。
上报数据的样例如下,请自行修改参数的取值模拟真实设备数据:
样例1
{
"msgType": "deviceReq",
"data": [{
"serviceId": "sales",
"serviceData": {
"category": "soda",
"number": "1",
"area": "SZLH",
"timeStamp": "20190425T091157Z"
}
}]
}
上述样例表示UTC时间2019年4月25日9点11分57秒深圳罗湖的自动贩卖机销售了一支苏打饮料。
样例2
{
"msgType": "deviceReq",
"data": [{
"serviceId": "sales",
"serviceData": {
"category": "juice",
"number": "2",
"area": "SZFT"
"timeStamp": "20190426T170005Z"
}
}]
}
上述样例表示UTC时间2019年4月26日17点05秒深圳福田的自动贩卖机销售了两支果汁饮料。
本文以上报下表的数据为例。
category |
number |
area |
timeStamp |
---|---|---|---|
soda |
1 |
SZLH |
20190425T091157Z |
juice |
1 |
SZFT |
20190425T121511Z |
sport |
1 |
SZLH |
20190425T172433Z |
juice |
2 |
SZFT |
20190426T170005Z |
soda |
1 |
SZNS |
20190426T190905Z |
juice |
1 |
SZNS |
20190427T085959Z |
juice |
2 |
SZLH |
20190427T111111Z |
soda |
3 |
SZFT |
20190428T182215Z |
sport |
1 |
SZLH |
20190429T205901Z |
soda |
1 |
SZLG |
20190430T225045Z |
2.登录MRS管理控制台,选择“集群列表 > 现有集群”,单击集群名进入集群管理页面。
3.单击页面上方的“文件管理”,再单击“HDFS文件列表”,进入转储文件目录(例如“temp”)查看是否存在转储的数据文件。
注:DIS会将数据合并转发,所以此处的文件数量和上报的数据条数可能会不一致。
4.单击页面上方的“作业管理”,在“作业”页签中单击“添加”,配置作业信息。本示例中创建一个spark类型的作业,实现分析设备上报数据,分别按日期、时间段、种类、区域统计销量,将分析结果输出为CSV文件并保存至OBS。
参数名称 |
说明 |
---|---|
作业类型 |
选择“SparkSubmit”。 |
作业名称 |
自定义,如“test”。 |
执行程序路径 |
|
运行程序参数 |
左侧选择“--class”,右侧输入“com.huawei.bigdata.spark.examples.SalesStatistics”。 |
执行程序参数 |
输入“AK SK inputpath outputpath”。
|
服务配置参数 |
无需填写。 |
配置完成后单击“确定”启动作业。
5.作业完成后,可在OBS桶内看到output文件夹,里面有四个文件夹,每个文件夹内有一个“_SUCCESS”文件和一个“part”开头的csv文件。
注:本实验的样例程序分析数据时会将UTC时间转换为本地时间,因此数据分析结果中的日期与时间段数值会和上报时的数值不一致。
6.登录华为云官方网站,访问数据可视化服务。
7.单击“进入控制台”。
8.单击“我的数据 > 新建数据连接” ,在“新建数据连接”页面左侧的数据库类型中,选择“CSV文件”,按照下表的数据规划填写配置后单击“确定”。重复本步骤建立4个数据连接。
参数名 |
说明 |
---|---|
名称 |
建立4个数据连接,分别命名为:
|
Access Key |
填写华为云账号的AK、SK,获取方法可参考AK和SK的获取方法。 |
Secret Access Key |
|
文件来源 |
选择“OBS文件”。 |
文件路径 |
4个连接分别选择步骤5的output文件夹内和连接同名的文件夹内的csv文件。 |
9.返回“我的大屏”页签,单击配置数据可视化服务时创建的大屏右下的编辑按钮进入编辑页面。
10.选中“每日销量”表,在右侧数据面板选择数据类型为“CSV文件”,数据连接选择步骤8添加的数据连接“salesByDate”。
11.根据响应数据的属性名称配置字段映射。
配置 “x”为 “saleDate”, “y”为 “saleNumber”。
12.选中“时间段销量”表,在右侧数据面板选择数据类型为“CSV文件”,数据连接选择步骤8添加的数据连接“salesByTime”。
13.根据响应数据的属性名称配置字段映射。
配置 “x”为 “saleTime”, “y”为 “saleNumber”。
14.选中“种类销量”表,在右侧数据面板选择数据类型为“CSV文件”,数据连接选择步骤8添加的数据连接“salesByCategory”。
15.根据响应数据的属性名称配置字段映射。
配置 “s”为 “category”, “y”为 “saleNumber”,并设置各个分类的名称(本示例中为“soda”,“juice”,“sport”)和图例的颜色。
16.选中“地区销量”表,在右侧数据面板选择数据类型为“CSV文件”,数据连接选择步骤8添加的数据连接“salesByArea”。
17.根据响应数据的属性名称配置字段映射。
配置 “num”为 “saleNumber”。
18.全部图表配置完成后,单击页面右上角的可预览报表,示例如下图。
至此,通过该文档的学习,您应该对自动售货机销售分析场景有了一定的了解。接下来,可以在系列后续文章中,可以学习到更多的物联网业务场景。
添加华为IoT小助手(微信号:huawei-iot,回复“博客园”)获取此物联网免费学习课程。
玩转华为物联网IoTDA服务系列三-自动售货机销售分析场景示例的更多相关文章
- 干货分享丨玩转物联网IoTDA服务系列五-智能家居煤气检测联动
摘要:该场景主要描述的是设备可以通过LWM2M协议与物联网平台进行交互,用户可以在控制台或通过应用侧接口创建设备联动规则,把设备上报的属性转发,通过物联网平台规则引擎转变成命令下发给其他指定设备. 场 ...
- 干货分享丨玩转物联网IoTDA服务系列四-智能网关
摘要:该场景主要描述的是设备可以通过MQTT协议与物联网平台进行交互,用户可以在控制台产品详情中自定义Topic,通过应用侧接口或控制台创建数据转发规则,把设备上报的消息转发给其他华为云服务,供应用侧 ...
- 使用NewLife网络库构建可靠的自动售货机Socket服务端(一)
最近有个基于tcp socket 协议和设备交互需求,想到了新生命团队的各种组件,所以决定用NewLife网络库作为服务端来完成一系列的信息交互. 第一,首先说一下我们需要实现的功能需求吧 1,首先客 ...
- 【接入指南】一个Demo带你玩转华为帐号服务
在<接入指南:一文带你了解华为帐号服务>中已经给大家介绍了华为帐号服务有哪些优势,如一键授权登录华为全场景共享.共享华为帐号所有用户资源.帐号安全可靠.接入方便快捷等,以及为什么能帮助开发 ...
- go微服务系列(三) - 服务调用(http)
1. 关于服务调用 2. 基本方式调用服务 3. 服务调用正确姿势(初步) 3.1 服务端代码 3.2 客户端调用(重要) 1. 关于服务调用 这里的服务调用,我们调用的可以是http api也可以是 ...
- 玩转OneNET物联网平台之MQTT服务④ —— 远程控制LED(设备自注册)+ Android App控制
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- 玩转Windows服务系列——使用Boost.Application快速构建Windows服务
玩转Windows服务系列——创建Windows服务一文中,介绍了如何快速使用VS构建一个Windows服务.Debug.Release版本的注册和卸载,及其原理和服务运行.停止流程浅析分别介绍了Wi ...
- 玩转Windows服务系列——Debug、Release版本的注册和卸载,及其原理
Windows服务Debug版本 注册 Services.exe -regserver 卸载 Services.exe -unregserver Windows服务Release版本 注册 Servi ...
- 玩转Windows服务系列——Windows服务小技巧
伴随着研究Windows服务,逐渐掌握了一些小技巧,现在与大家分享一下. 将Windows服务转变为控制台程序 由于默认的Windows服务程序,编译后为Win32的窗口程序.我们在程序启动或运行过程 ...
随机推荐
- vue中mixins的使用方法和注意点(详2)(异步请求的情况)
当混合里面包含异步请求函数,而我们又需要在组件中使用异步请求函数的返回值时,我们会取不到此返回值,如下: mixin中 组件中 控制台 解决方案:不要返回结果而是直接返回异步函数 mixin中 组件中 ...
- 使用Xtrabackup进行MySQL备份 zz
zz from http://www.magedu.com/ 一.安装 1.简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对i ...
- 8.8SQL Server数据类型介绍1
image类型:存储二进制字节数组. (相当于C#中的byte[]字节类型) sql server常用的数据类型 1.image类型,用来存储byte[](字节). 2.字符串类型 char ncha ...
- Git链接http转ssh
git remote set-url origin git@gitserver:USERNAME/PROJECT.git
- spring——bean自动装配
注意:自动装配功能和手动装配要是同时使用,那么自动装配就不起作用. beans.xml <?xml version="1.0" encoding="UTF-8&qu ...
- ngnix随笔三
1.location模块 在server中也可以嵌套location 例 server{ listen 80; server_name www.a.com; root /data/vhosts/; ...
- javascript 循环中调用异步的同步需求
// 关于Promise:可以直接使用promise Promise.resolve(123).then(v => { console.log(v) }) // 循环中调用异步 let arr ...
- [ES6系列-04]再也不乱“哇”了:用 let 与 const 替代 var
[原创]码路工人 Coder-Power 大家好,这里是码路工人有力量,我是码路工人,你们是力量. github-pages 博客园cnblogs 今天的内容是,关于 JavaScript 中定义变量 ...
- [JavaWeb基础] 019.Struts2 MVC架构之ModelDriven
用过struts1的人接触struts2的时候,通常会产生一个疑惑,明明struts1已经把action的form分开了,为什么struts2确把模型放在action中定义.其实这个方式只是想让act ...
- [工具-001]C++更换EXE的ICON图标
我们都知道每个可执行文件EXE都会有自己的图标,它可以在项目生成的时候进行指认,但是有时候我们会遇到两种情况:1.没有源代码,2.我们的项目很多,一个个进行更换很耗时.本人就是因为接到这么一个需求,要 ...