01-IOT产品设备管理

  1. 目标

从今天开始,我们开始一个新的模块开发,叫做智能监测,我们可以先来看一张图

我们可以通过选择的配置来配备智能硬件设备,它有两类场景:安全场景和健康场景

  • 安全场景:防跌倒意外、防走失、睡眠中意外、区域滞留、环境安全

  • 健康场景:健康监测、健康小屋;

通过硬件设备来监控老人以及老人活动场所的情况。后台时刻做监控,一旦有意外发生就可以迅速处理解决。

其中关于智能设备的数据传输和上报,采用的华为云提供的设备接入服务(IoTDA),我们也会重点讲解设备如何上报数据到IOT以及如何从IOT平台拉取数据

本文章的目标:

  • 能够熟悉华为云IoTDA平台的特点

  • 能够掌握华为云IoTDA平台的一些概念,如:产品、设备、物模型等

  • 能够掌握使用华为云IoTDA平台提供的接口创建设备,并绑定业务数据(老人、位置)

  • 能够熟悉智能设备对接华为云IoTDA平台上报数据的方式

  1. 华为云IOT平台

在开发智能监测之前,我们必须要先熟悉和掌握华为云IoTDA平台的使用及对接,才能开发我们的项目

  1. 什么是物联网

把所有物品通过信息传感设备与互联网连接起来,进行信息交换,即物物相息,以实现智能化识别和管理。

物联网(英文:Internet of Things,缩写:IoT)起源于传媒领域,是信息科技产业的第三次革命。物联网是指通过信息传感设备,按约定的协议,将任何物体与网络相连接,物体通过信息传播媒介进行信息交换和通信,以实现智能化识别、定位、跟踪、监管等功能。

常见的应用场景:

  • 共享充电宝

  • 充电宝设备接入物联网平台后,可上报充电宝电量和借用状态等信息到物联网平台云端。充电宝用户扫码后,云端低延时向充电宝下发指令,使其弹出。同时,企业运营者能够实时获知充电宝的运行状况。

  • 智能音箱

  • 播报音箱接入物联网平台后,用户扫码完成支付后,将支付金额实时通过音箱,向用户和商家进行语音播报。

  • 智能家居

  • 智能家居技术已经成为当今家庭装潢的一大特色。比如,通过智能灯泡,可以实现远程控制灯光和电视等设备,调节温度和湿度,实现智能化生活。

  • 智能农耕

  • 智能农耕可以通过物联网技术来监测、传输、分析、管理农业生产过程中的信息。比如作物的生长情况、土壤的状况等,以提高农业生产的效率,改善利润率,减少污染,节约农业资源。

  • 智能医疗

  • 在智慧医疗中,可以捕捉人的生理状态信息,例如心跳频率、体力消耗、血压高低等。然后对采集数据进行备份、加工和分析,以便个人或医生快速查询。在物联网平台接入传感器设备,采集人体及周边环境参数的信息,通过数据服务处理数据后,反馈给用户。

  • 华为云IoTDA简介

  • 产品文档:https://support.huaweicloud.com/iothub/index.html

    设备接入服务(IoTDA)是华为云的物联网平台,提供海量设备连接上云、设备和云端双向消息通信、批量设备管理、远程控制和监控、OTA升级、设备联动规则等能力,并可将设备数据灵活流转到华为云其他服务。

    我们作为一个开发者,基本的设备与后台调度思路,如下:

更多的介绍可以阅读官方产品文档

  1. 开通IoTDA

  1. 注册华为云账号

前往华为云官网注册账号。如果已有注册账号,请跳过此步骤。

进入华为云首页后,如果没有华为云的账户需要先进行注册,才可以进行登录。由于注册较为简单,课程和讲义不在进行体现。

  1. 开通物联网平台

登录账号以后,我们可以在产品中搜索设备接入IoTDA

可以先试用,创建成功后如下

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

到此,IoTDA服务就正式开通了。

  1. 产品

  1. 创建产品

产品:某一类具有相同能力或特征的设备的集合称为一款产品。帮助开发者快速进行产品模型和插件的开发,同时提供端侧集成、在线调试、自定义Topic等多种能力。比如,手表、大门通道门禁、紧急呼叫报警器、滞留报警器、跌倒报警器

现在我们可以创建产品,找到产品-->创建产品

  1. 产品模型

产品模型(Product Model),也称物模型,用于描述设备具备的能力和特性。开发者通过定义产品模型,在物联网平台构建一款设备的抽象模型,使平台理解该款设备支持的服务、属性、命令等信息。

  • 手表本身:耗电量,使用时间

  • 指标数据:身体血压、血氧、体温数据

像这些耗电量、血压、血氧数据都属于产品的功能,也叫做物模型

在IOT平台的物模型中,分为了三类:

创建手表产品的物模型

进入产品的详情,我们选择自定义模型

然后可以给这个服务添加具体的属性

我目前创建的智能手表产品的物模型,目前可以定义四个,如下:

属性名称

属性描述

数据类型

访问权限

取值范围

BodyTemp

体温

int

读写

0~50

xueyang

血氧

int

读写

0~150

HeartRate

心率

int

读写

0~150

BatteryPercentage

用电量

int

读写

0~100

  1. 设备

归属于某个产品下的设备实体,每个设备具有一个唯一的标识码。设备可以是直连物联网平台的设备,也可以是代理子设备连接物联网平台的网关。

前提条件:设备是绑定在产品上的,所以必须先创建产品才行

操作步骤:

  1. 在左侧导航栏,选择设备-->所有设备

  2. 设备页面,单击注册设备

  3. 添加设备对话框中,输入设备信息,单击确认

如下图:

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

设备中可以查看创建好的设备详情

  1. 设备接入-数据上报

  1. 概述

属性上报是一种需要平台解析、缓存,通过数据流转功能将数据转发到应用侧或华为云其他云服务的一种方式。需要在平台建立产品模型。对于属性上报的数据,平台会记录属性的最新一次上报值,对符合产品模型定义的属性数据进行存储。

官方案例-设备接入:基于NB-IoT小熊派的智慧烟感

我们在开发阶段可以使用联网的电脑,来模拟设备的数据上报,官方sdk下载

  1. Java SDK使用示例
  1. 前提,需要提前创建好产品和对应的物模型,以及该产品的设备

  2. SDK代码获取:SDK下载

解压之后,使用idea打开,找到iot-device-demo模块中的PropertySample类,如下图

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;

/**
 * 演示如何直接使用DeviceClient进行设备属性的上报和读写
 */
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 {

        // 加载iot平台的ca证书,进行服务端校验
        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);
        }

        // 创建设备并初始化. 用户请替换为自己的接入地址。-->watch01
        IoTDevice device = new IoTDevice(
            //接入地址获取方式:登录华为云IoTDA控制台左侧导航栏“总览”页签,在选择的实例基本信息中,单击“接入信息”-->设备接入-->MQTT。选择8883端
            "ssl://230590aa95.st1.iotda-device.cn-east-3.myhuaweicloud.com:8883",
            //设备id
            "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_service"); // serviceId要和物模型一致

            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);
        }
    }
}

要改的地方:

        IoTDevice device = new IoTDevice(
            //接入地址获取方式:登录华为云IoTDA控制台左侧导航栏“总览”页签,在选择的实例基本信息中,单击“接入信息”-->设备接入-->MQTT。选择8883端
            "ssl://230590aa95.st1.iotda-device.cn-east-3.myhuaweicloud.com:8883",
            //设备id
            "67ab39f1bab900244b1e64a6_watch01", 
            //设备秘钥  设备创建成功后会自动生成
            "5f71b853642b8ccab767890a5b148f02", tmpCAFile);
            // 按照物模型设置属性,根据实际情况设置,下面是智能报警手表的物模型
            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_service"); // serviceId要和物模型一致

右键启动之后的效果:

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

  1. 产品设备数据准备

下面两款产品也是常用的,大家根据需要抽时间自行创建

1)产品名称:烟雾报警器

属性名称

属性描述

数据类型

访问权限

取值范围

CurrentHumidity

湿度

int

读写

0~100

IndoorTemperature

温度

int

读写

-40~80

SmokeSensorState

烟雾监测状态

bool(布尔)

读写

布尔值:

0:正常

1:检测到烟雾

2)产品名称:睡眠监测带

属性名称

属性描述

数据类型

访问权限

取值范围

BedTime

离床时间

dateTime(日期时间)

读写

300

BedExitCount

离床次数

int

读写

0~10

SleepPhaseState

睡眠状态

int

读写

0~2

HeartRate

心率

int

读写

1~180

RespiratoryRate

呼吸率

int

读写

1~150

end

本文章内容到此结束,后续请看智能监测系统-02(使用华为云开发模块)

更多推荐