华为云IOT平台
在开发智能监测功能之前,必须先熟悉和掌握华为云IoTDA平台的使用及对接
什么是物联网
物联网(英文:Internet of Things,缩写:IoT)起源于传媒领域,是信息科技产业的第三次革命。物联网是指通过信息传感设备,按约定的协议,将任何物体与网络相连接,物体通过信息传播媒介进行信息交换和通信,以实现智能化识别、定位、跟踪、监管等功能
常见的应用场景:
- 共享充电宝
- 充电宝设备接入物联网平台后,可上报充电宝电量和借用状态等信息到物联网平台云端。充电宝用户扫码后,云端低延时向充电宝下发指令,使其弹出。同时,企业运营者能够实时获知充电宝的运行状况
- 智能音箱
- 播报音箱接入物联网平台后,用户扫码完成支付后,将支付金额实时通过音箱,向用户和商家进行语音播报
- 智能家居
- 智能家居技术已经成为当今家庭装潢的一大特色。比如,通过智能灯泡,可以实现远程控制灯光和电视等设备,调节温度和湿度,实现智能化生活
- 智能农耕
- 智能农耕可以通过物联网技术来监测、传输、分析、管理农业生产过程中的信息。比如作物的生长情况、土壤的状况等,以提高农业生产的效率,改善利润率,减少污染,节约农业资源
- 智能医疗
- 在智慧医疗中,可以捕捉人的生理状态信息,例如心跳频率、体力消耗、血压高低等。然后对采集数据进行备份、加工和分析,以便个人或医生快速查询。在物联网平台接入传感器设备,采集人体及周边环境参数的信息,通过数据服务处理数据后,反馈给用户
华为云IoTDA简介
产品文档:成长地图_设备接入 IoTDA-华为云
设备接入服务(IoTDA)是华为云的物联网平台,提供海量设备连接上云、设备和云端双向消息通信、批量设备管理、远程控制和监控、OTA升级、设备联动规则等能力,并可将设备数据灵活流转到华为云其他服务
作为一个开发者,要熟悉基本的设备与后台调度的思路,如下:

开通IoTDA
注册华为云账号:前往华为云官网注册账号。如果已有注册账号,请跳过此步骤
开通物联网平台
登录账号以后,在产品中搜索设备接入IoTDA

打开之后,点击开通免费单元

然后直接创建就可以了

创建成功之后的效果:

可以点击服务查看服务的基本信息:

服务内部:

到此,IoTDA服务就正式开通了
产品
创建产品
产品(https://support.huaweicloud.com/usermanual-iothub/iot_01_0015.html):某一类具有相同能力或特征的设备的集合称为一款产品。帮助开发者快速进行产品模型和插件的开发,同时提供端侧集成、在线调试、自定义Topic等多种能力。比如,手表、大门通道门禁、紧急呼叫报警器、滞留报警器、跌倒报警器等
在平台上创建产品,找到产品–>创建产品

如下图,先创建智能定位报警手表的产品,输入信息如下:

创建成功之后,在产品列表中可以看到刚刚创建的产品

产品模型
产品模型(Product Model),也称物模型,用于描述设备具备的能力和特性。开发者通过定义产品模型,在物联网平台构建一款设备的抽象模型,使平台理解该款设备支持的服务、属性、命令等信息
- 手表本身:耗电量,使用时间
- 指标数据:身体血压、血氧、体温数据
耗电量、血压、血氧这类数据都属于产品的功能,也叫做物模型
在IOT平台中,物模型分为三类:
| 功能类型 |
说明 |
| 服务 |
即Service,产品模型的一部分,描述设备具备的业务能力。将设备业务能力拆分成若干个服务后,再定义每个服务具备的属性、命令以及命令的参数。 |
| 属性 |
即Property,产品模型的一部分,一般用于描述设备运行时的状态,如环境监测设备所读取的当前环境温度等。 |
| 命令 |
设备的功能模型之一,设备能够被外部调用的能力或方法。 |
创建手表产品的物模型
进入产品的详情,选择自定义模型

创建服务信息

然后可以给这个服务添加具体的物模型

目前创建的智能手表产品,可以定义四个物模型,如下:
| 属性名称 |
属性描述 |
数据类型 |
访问权限 |
取值范围 |
| BodyTemp |
体温 |
int |
读写 |
0~50 |
| xueyang |
血氧 |
int |
读写 |
0~150 |
| HeartRate |
心率 |
int |
读写 |
0~200 |
| BatteryPercentage |
用电量 |
int |
读写 |
0~100 |
下面是创建了一个体温的物模型,其他物模型创建类似

创建成功之后的效果:

设备
归属于某个产品下的设备实体,每个设备具有一个唯一的标识码。设备可以是直连物联网平台的设备,也可以是代理子设备连接物联网平台的网关
前提条件:设备是绑定在产品上的,所以必须先创建产品才行
操作步骤:
- 在左侧导航栏,选择设备–>所有设备
- 在设备页面,单击注册设备
- 在添加设备对话框中,输入设备信息,单击确认
如下图:

创建成功之后,会分配一个设备的信息,非常重要,需要保存下来,方便后面调试使用

在所有设备中可以查看创建好的设备

设备详情

设备接入-数据上报
概述
属性数据上报是一种需要平台解析、缓存,通过数据流转功能将数据转发到应用侧或华为云其他云服务的一种方式。需要在平台建立产品模型。对于属性上报的数据,平台会记录属性的最新一次上报值,对符合产品模型定义的属性数据进行存储
官方案例-设备接入:基于NB-IoT小熊派的智慧烟感

在开发阶段可以使用联网的电脑,来模拟设备的数据上报,官方sdk下载
Java SDK使用示例
- 前提:需要提前创建好产品和对应的物模型,以及该产品的设备
- SDK代码获取:SDK下载
- 解压之后,使用idea打开,找到
iot-device-demo模块中的PropertySample类,如下图

- 完整代码,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| package com.huaweicloud.sdk.iot.device.demo.device;
import com.huaweicloud.sdk.iot.device.IoTDevice; import com.huaweicloud.sdk.iot.device.client.requests.ServiceProperty; import com.huaweicloud.sdk.iot.device.transport.ActionListener;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;
import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.security.SecureRandom; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
public class PropertySample {
private static final String IOT_ROOT_CA_RES_PATH = "ca.jks";
private static final String IOT_ROOT_CA_TMP_PATH = "huaweicloud-iotda-tmp-" + IOT_ROOT_CA_RES_PATH;
private static final Logger log = LogManager.getLogger(PropertySample.class);
public static void main(String[] args) throws InterruptedException, IOException {
File tmpCAFile = new File(IOT_ROOT_CA_TMP_PATH); try (InputStream resource = CommandSample.class.getClassLoader().getResourceAsStream(IOT_ROOT_CA_RES_PATH)) { Files.copy(resource, tmpCAFile.toPath(), REPLACE_EXISTING); }
IoTDevice device = new IoTDevice( "ssl://230590aa95.st1.iotda-device.cn-east-3.myhuaweicloud.com:8883", "67ab39f1bab900244b1e64a6_watch01", "5f71b853642b8ccab767890a5b148f02", tmpCAFile); if (device.init() != 0) { return; }
while (true) {
Map<String, Object> json = new HashMap<>(); Random rand = new SecureRandom();
json.put("BodyTemp", 36); json.put("xueyang", rand.nextFloat()*100.0f); json.put("HeartRate", rand.nextFloat()*100.0f); json.put("BatteryPercentage", rand.nextFloat() * 100.0f);
ServiceProperty serviceProperty = new ServiceProperty(); serviceProperty.setProperties(json); serviceProperty.setServiceId("watch_services");
device.getClient().reportProperties(Arrays.asList(serviceProperty), new ActionListener() { @Override public void onSuccess(Object context) { log.info("pubMessage success"); }
@Override public void onFailure(Object context, Throwable var2) { log.error("reportProperties failed" + var2.toString()); } });
Thread.sleep(10000); } } }
|


消息发送成功后,可以在华为云IoTDA平台中查看该设备上报的数据
