更新时间:2024-09-23 GMT+08:00

智慧路灯设备SDK与平台通信(Java)

概述

本文基于Java代码演示设备通过MQTTS/MQTT协议接入华为云物联网平台,通过平台接口实现南向“数据上报”“命令下发”的功能,通过应用侧的示例代码接收北向服务端订阅的消息示例。以智慧路灯为例,设备将光照强度等信息上报到IoT平台,应用服务器再接收从平台推送来的设备数据。

视频指导

前提条件

  • 确保开发环境为JDK 1.8及以上版本。
  • 已安装IntelliJ IDEA开发工具。如未安装请访问IntelliJ IDEA官网下载并安装。

上传产品模型

产品模型是用来描述设备能力的文件,通过JSON的格式定义了设备的基本属性、上报数据和下发命令的消息格式。定义产品模型,即在物联网平台构建一款设备的抽象模型,使平台理解该款设备的功能。

操作步骤

  1. 访问设备接入服务,单击“控制台”进入设备接入控制台。
  2. 选择左侧导航栏的“产品”,单击左侧“创建产品”

    图1 产品-创建产品

  3. 在弹出的窗口中,根据实际情况自定义填写。

    图2 创建产品-MQTT

  4. 下载模型文件,该模型文件已开发完毕。详细开发过程指导请参考在线开发产品模型
  5. 创建成功后,单击刚创建的产品,然后单击上传模型文件(无需解压,并且压缩包的名称不能有括号),上传刚下载的模型文件

    图3 上传产品模型-MQTT

创建设备

  1. 选择设备接入服务左侧导航栏的设备 > 所有设备,单击“注册设备”。

    图4 所有设备-注册设备

  2. 在弹出的窗口中,可以参考图中的内容填写(所属产品需要选择上述步骤创建的产品,密钥不填写,则由平台自动生成,这里是由平台自动生成)然后单击“确定”。

    图5 注册设备-test123

  3. 设备创建成功后,需要保存设备ID和密钥(后续设备连接的时候需要用到)。

    图6 设备-注册设备成功

导入代码样例

  1. 下载JAVA样例
  2. 打开IDEA开发者工具,单击“ Import Project”

  3. 选择步骤1中下载的样例,然后根据界面提示,单击“next”

  4. 完成代码导入。

建立连接

设备或网关在接入物联网平台时首先需要和平台建立连接,从而将设备或网关与平台进行关联。开发者通过传入设备信息,将设备或网关连接到物联网平台。
  1. 在建立连接之前,先修改以下参数:
    1
    2
    3
    4
    5
    //IoT平台mqtt对接地址
    static String serverIp = "iot-mqtts.cn-north-4.myhuaweicloud.com";
    //注册设备时获得的deviceId,密钥(要替换为自己注册的设备ID与密钥)
    static String deviceId = "yourDeviceID"; //device_id, 在创建设备时获得
    static String secret = "yourSecret";     //secret,在创建设备时获得
    
    • serverIp为物联网平台设备接入MQTT协议的地址,详细获取方式请参考资源获取
    • device_id和secret为设备ID和密钥,在成功创建设备后获取。
  2. 完成上述信息的修改后,运行程序,在平台可以看到设备显示在线。
    图7 设备列表-设备在线

属性上报

属性上报是指设备主动向平台上报自己的属性(该示例代码已实现自动定时上报功能,可参考下一节在iot平台查看设备上报的数据内容)。

1
2
//上报json数据,注意serviceId要与产品模型中的定义对应
String jsonMsg = "{\"services\":[{\"service_id\":\"BasicData\",\"properties\":{\"luminance\":32},\"eventTime\":null}]}";
  • 消息体jsonMsg组装格式为JSON,其中service_id要与产品模型中的定义对应,properties是设备的属性;
  • luminance表示路灯亮度;
  • event_time为可选项,为设备采集数据UTC时间,不填写默认使用系统时间。

设备或网关成功连接到物联网平台后,即可调用MqttAsyncClient的publish(String topic,MqttMessage message)方法向平台上报设备属性值。

查看上报数据

运行main方法成功启动后,即可在设备详情页面查看上报的设备属性数据。详细接口信息请参考设备属性上报

图8 查看上报数据-luminance

如果在“设备详情”页面没有最新上报数据,请修改产品模型中服务和属性的内容,确保设备上报的服务/属性和产品模型中的服务/属性一致(如果不一致,则历史数据中看不到设备上报的数据),或者进入产品 > 基本信息页面,删除所有服务。

命令下发

  1. 在控制台界面单击左侧菜单栏的“API检索和调试”。

    图9 导航-API检索和调试

  2. 找到“设备命令”一栏,下发的参数请参考图片内容(跟产品模型中保持一致),然后单击“调试”按钮即可发送命令。

    • service_id表示服务ID,例如:BasicData。
    • command_name表示命令名称,例如:lightControl。
    • paras表示下发参数,例如:{"switch":"ON"}。

    设备侧可查看已收到命令(示例代码已实现接收命令topic的订阅)。

通过云端获取设备上报的数据

本文以AMQP为例,获取设备上报到云端的数据。

  1. 单击这里获取Java AMQP接入示例。
  2. 登录管理控制台,选择规则 > 数据转发,创建数据转发规则。

    图10 数据转发-创建规则

  3. 设置转发数据, 填入参数,创建规则。

    图11 数据转发-新建属性上报流转规则

    参数名

    参数说明

    规则名称

    创建的规则名称,可自定义。

    规则描述

    对该规则的描述。

    数据来源

    选择“设备属性”

    触发事件

    设备属性上报

    资源空间

    选择所有资源空间

  4. 设置转发目标(注意:需要单击“预置服务接入凭证”按钮,获取下载文件)。

    图12 新建转发目标-转发至AMQP推送消息队列

    参数名

    参数说明

    转发目标

    AMQP推送消息队列

    接入凭证

    单击“预置服务接入凭证”,保存下载的文件(包含access_key和access_code

    消息队列

    DefaultQueue

  5. 单击启动规则。

    图13 启动规则-转发至AMQP

  6. 修改步骤1获取的AMQP代码样例中的参数。

    • yourAccessKey:连接凭证接入键值,参考步骤4获取。
    • yourAccessCode:连接凭证接入码,参考步骤4获取
    • yourAMQPUrl:amqp域名,请前往控制台-总览页面-平台接入地址获取,如下图:
      图14 接入信息-AMQP接入地址
    • yourQueue:队列名,使用默认队列DefaultQueue。

  7. AMQP数据成功接收。

更多

更详细开发指导请参考设备侧SDK接入或更多其他语言的demo接入