一、实训目的
1、会使用HTTP推送
2、了解如何处理HTTP推送
二、实训步骤
(云平台输入命令控制)
(1)烧写代码
(2)发送写入数据true
(3)发送数据false
(4)平台发送记录
(通过即使命令-写入设备实现LED灯)
(1)添加参数
(2)添加代码
(3)写入命令-开灯
(4)写入命令-关灯
(HTTP数据推送自动开关LED灯)
在 OneNET Studio 平台上接入 NB 设备后,完成从 Studio 向第三方应用(本应用)的数据推送,从而在应用程序中获取 NB 设备的所有数据。同时,在应用程序中监控光照传感器的值,达到预设的最大阈值后,调用 LwM2M IPSO API,自动关闭 LED 灯;达到预设的最小阈值后,调用 API 自动打开 LED 灯,从而实现节能的目的。 本项目基础代码由中移官方数据推送 SDK 克隆而来,使用命令 git clone -b OneNET5.0 https://github.com/cm-heclouds/data-push,然后再简单地封装了一下 Studio 访问 LwM2M IPSO 的 API。
(1)步骤1 安装依赖
①用工具包中提供的 JDK1.8 安装程序,进行默认安装即可。需要注意的是,安装完成后,必须配置三个环境变量,以便应用开发时能够顺利找到 Java 环境。
②使用工具包中提供的 Maven3.3.9,将压缩包解压缩到本机目录,最好是无空格的英文目录,比如 D:\apache-maven-3.3.9,设置环境变量
③使用工具包中提供的 IntelliJ IDEA 2019 安装包,进行默认安装。安装完成后,在启动界面选择 "Configure->Settings"进行全局设置,输入maven进行搜索,然后将 Maven 的实际安装路径填入。
(本项目依赖于:( ①JDK 1.8 ②Maven 3.3.9 ③IntelliJ IDEA 2019 )
(2)步骤2 运行程序
在 IntelliJ IDEA 启动界面选择 "Import Project",定位到本程序的 pom.xml 文件,然后打开项目。 打开 JAVA\src\main\java\com\onenet\datapush\receiver\ReceiverDemo.java 文件,点击绿色三角,则可以运行本程序。
1)修改参数
① api.authorization: 使用 OneNET Studio 提供的Token工具生成。息。
② light.imei: NB-IoT 设备的 IMEI 号。
③ http-push.token: 第三方应用 Token,HTTP 数据推送页面中配置的 Token 需要与之一致。
④ http-push.aesKey: 第三方应用 AesKey,HTTP 数据推送页面中配置的 AesKey 需要与之一致。本实验中这里设置为空,于此同时,下一个步骤中,数据推送配置页面上的“消息加密方式”应该对应选择“明文模式”。
(3)步骤3 OneNET Studio HTTP 数据推送配置
1)配置
实例名称:自己取一个合理的名称。
推送地址:http://www.xxx.net/receive,注意 URL 后面必须包含 /receive,它是在本应用程序中实现的,用于接收处理 Studio 的验证和数据。
Token:自己输入一个合理的字符串。该字符串需要与配置文件中的 http-push.token 保持一致。
消息加密方式:选择“明文模式”,本应用程序不进行消息加密。
配置完成以后,需要手动点击数据推送的“验证”按钮
2)发送一个GET请求,返回msg、nonce、 signature三个参数
(4)步骤4 OneNET Studio 规则引擎配置
①在 Studio 上点击“应用开发->项目管理”,新建一个项目,取一个合理的名称。
②点击”进入项目管理”按钮,就可以进入项目管理页面。在“设备管理→设备列表”中,点击“添加设备”按钮,将前面创建的NB-IoT设备加入到该项目中
③点击“规则引擎”按钮,创建一个规则引擎。勾选所有的消息源,指定前面创建的 NB-IoT 产品,然后关联前面创建的 HTTP 数据推送。
④配置完成后,启动该规则引擎,则当 NB-IoT 设备上下线、上报新数据时,本应用程序就能够获得这些数据,并打印在程序的控制台上
(5)步骤5 根据光照度的阈值自动开关LED灯
当数据上报到本应用程序后,程序会解析其中的光照度数据,并且根据预设的阈值,对LED灯进行控制,逻辑如下:(控制 LED 灯的开关,调用了 OneNET Studio 平台提供的 LwM2M-IPSO类 → 即时命令API → 写设备资源 API)
/* 解析光照度,根据光照度的值调用LED控制API */
try {
JSONObject object = new JSONObject(obj.toString());
JSONObject illumi = getIlluminance(object);
if (illumi != null)
{
float value = illumi.getFloat("value");
logger.info("illuminance value: " + value);
if (value > light.getThresholdMax())
{
// 调用写资源API关闭LED灯
light.turnOff();
} else if (value < light.getThresholdMin())
{
// 调用写资源API打开LED灯
light.turnOn();
}
}
}
catch (Exception ex) {
}
三、实训小结
本次实训任务达到如下几个主要的技能训练目的:
1、会使用HTTP推送
2、了解如何处理HTTP推送
物应2007班 曹尹励