华为云计算 云知识 基于华为云IoT在线开发MQTT协议的智慧路灯案例
基于华为云IoT在线开发MQTT协议的智慧路灯案例

场景说明

本文以“智慧路灯”为示例,通过MQTT.fx的设备模拟器替代真实的设备,带您快速体验设备上报数据到华为云 物联网平台 和远程下发控制命令到设备的全过程。

假设:路灯设备上报一条光照强度(luminance)消息;支持远程控制路灯开关状态的命令(switch),上报数据的格式为JSON格式。

前提条件

  • 已注册华为云官方帐号。未注册可单击注册页面完成注册。
  • 已完成实名制认证。未完成可在华为云上单击实名认证完成认证,否则无法使用设备接入功能。
  • 已开通 设备接入服务 。未开通则访问设备接入服务,单击“立即使用”后开通该服务。

业务流程

基于MQTT.fx体验平台功能是指以在MQTT.fx模拟器为例,介绍数据上报、命令下发等业务。

  1. 创建产品。创建一个MQTT协议的产品。
  2. 开发产品模型。通过定义产品模型,在物联网平台构建一款路灯设备,支持上报光照强度、下发路灯开关状态命令。
  3. 注册设备。注册一个MQTT协议的设备,体验数据上报业务。
  4. 连接鉴权。使用MQTT.fx激活在物联网平台上注册的设备。
  5. 数据上报。使用MQTT.fx向物联网平台上报数据。
  6. 命令下发。在管理控制台下发命令,远程控制设备。

 

创建产品

  1. 登录管理控制台,单击左侧导航栏“产品”,单击页面右上角的“创建产品”。
  2. 根据页面提示填写参数,然后单击“确定”。

    基本信息

    所属资源空间

    平台自动将新创建的产品归属在默认资源空间下。如需归属在其他资源空间下,下拉选择所属的资源空间。如无对应的资源空间,请先创建资源空间

    产品名称

    自定义。支持字母、数字、下划线(_)、连字符(-)的字符组合。

    协议类型

    选择MQTT。

    数据格式

    选择JSON。

    厂商名称

    自定义。支持中英文字符、数字、下划线(_)、连字符(-)的字符组合。

    所属行业

    请根据产品模型的所属行业填写。

    设备类型

    使用平台预置的产品模型,会自动关联设备类型,不需要再输入设备类型。

    高级配置

    产品ID

    定制ProductID,用于唯一标识一个产品。如果携带此参数,平台将产品ID设置为该参数值;如果不携带此参数,产品ID在物联网平台创建产品后由平台分配获得。

    产品描述

    产品描述。请根据实际情况填写。

 

开发产品模型

  1. 找到创建产品章节新增的产品,单击产品进入产品界面。
  2. 在产品详情“模型定义”页面,单击“自定义模型”,配置产品的服务。
  3. 新增服务类型“BasicData”
    1. 在“添加服务”页面,填写“服务ID”“服务类型”“服务描述”,单击“确定”。
      • “服务ID”:BasicData
      • “服务类型”:建议和服务ID保持一致
      • “服务描述”:上报路灯数据
    2. 在“BasicData”服务列表右侧区域,单击“添加属性”,填写相关信息后,单击“确定”。
      • “属性名称”:luminance
      • “属性描述”:光照强度
      • “数据类型”:int(整型)
      • “访问权限”:可读、可写
      • “取值范围”:0~65535
      • “步长”:0
      • “单位”:不填写
  4. 新增服务类型“LightControl”
    1. 在“模型定义”下单击“添加服务”,填写“服务ID”“服务类型”“服务描述”,单击“确定”。
      • “服务ID”:LightControl
      • “服务类型”:建议和服务ID保持一致
      • “服务描述”:路灯开关控制
    2. 在“LightControl”的下拉菜单下单击“添加命令”,输入命令名称“Switch”。
    3. 在“新增命令”页面,单击“新增输入参数”,填写相关信息后,单击“确定”。

图1 新增参数

注册设备

  1. 在管理控制台页面,选择左侧导航栏“设备 > 所有设备”,单击页面右上角的“注册设备”。
  2. 根据页面提示信息填写参数,然后单击“确定”。

    参数名称

    说明

    所属资源空间

    确保和步骤1创建的产品归属在同一个资源空间。

    所属产品

    选择步骤2创建的产品。

    设备标识码

    即nodeID,设备唯一物理标识。可自定义,由英文字母和数字组成。

    设备名称

    即device_name,可自定义,如streetlight。

    设备认证类型

    选择“密钥”

    密钥

    此处不填写,物联网平台会自动生成。

  3. 成功注册设备后,平台会自动生成设备ID和密钥,请妥善保管好设备ID(deviceId)和密钥(deviceSecret),用于设备接入。

连接鉴权

使用MQTT.fx工具激活在物联网平台上注册的设备。

  1. 下载MQTT.fx(默认是64位操作系统,如果是32位操作系统,单击此处下载MQTT.fx),安装MQTT.fx工具。
  2. 访问这里,填写注册设备后生成的设备ID(DeviceId)和密钥(DeviceSecret),生成连接信息(ClientId、Username、Password)。

    参数

    必选/可选

    类型

    参数描述

    ClientId

    必选

    String(256)

    一机一密的设备clientId由4个部分组成:设备ID、设备身份标识类型、密码签名类型、时间戳,通过下划线“_”分隔。

    • 设备ID:指设备在平台成功注册后生成的唯一设备标识,通常由设备的产品ID和设备的NodeId通过分隔符“_”拼装而来。
    • 设备身份标识类型:固定值为0,表示设备ID。
    • 密码签名类型:长度1字节,当前支持2种类型:
      • “0”代表HMACSHA256不校验时间戳。
      • “1”代表HMACSHA256校验时间戳。
    • 时间戳:为设备连接平台时的UTC时间,格式为YYYYMMDDHH,如UTC 时间2018/7/24 17:56:20 则应表示为2018072417。

    Username

    必选

    String(256)

    设备ID。

    Password

    必选

    String(256)

    加密后的设备密钥。Password的值为使用“HMACSHA256”算法以时间戳为密钥,对secret进行加密后的值。

    secret为注册设备时平台返回的secret。

    使用生成工具生成的clientId格式,默认不校验时间戳:设备ID_0_0_时间戳。
    • 当采用“HMACSHA256”校验时间戳方式时,会先校验消息时间戳与平台时间是否一致,再判断密码是否正确。
    • 当采用“HMACSHA256”不校验时间戳方式时,鉴权消息也必须带时间戳,但不检验时间是否准确,仅判断密码是否正确。
    connect消息鉴权失败时,平台会返回错误,并自动断开MQTT链路。
  3. 设备通过MQTT协议的connect消息进行鉴权,对于构造clientId的各个部分信息都必须包括进去,平台收到connect消息时,会判断设备的鉴权类型和密码摘要算法。
  4. 打开MQTT.fx软件,单击设置图标。

  1. 参考下表配置鉴权参数,然后单击“Apply”。

    参数名称

    说明

    Broker Address

    填写从设备接入服务控制台获取的设备对接地址,此地址为 域名 信息。不能通过域名接入的设备,通过在cmd命令框中执行“ping 域名”获取IP地址,用IP地址接入平台。由于IP地址不固定,您需要将IP地址做成可配置项。

    Broker Port

    默认为1883。

    Cliend ID

    设备cliendID,请参考2中获取。

    User Name

    即设备ID,请参考2中获取。

    Password

    加密后的设备密钥,请参考2中获取。

  2. 单击“Connect”,设备鉴权成功后,在物联网平台可以看到设备处于在线状态.

上报数据

使用MQTT.fx工具向物联网平台上报数据。

设备若通过MQTT通道上报数据,需要发给指定的topic,上报消息的topic格式为:$oc/devices/{device_id}/sys/properties/report,其中deviceId的值,对一机一密设备,使用deviceId接入时填写为设备注册成功后返回的deviceId值。

  1. 填写接口地址,此处以$oc/devices/{device_id}/sys/properties/report为例,如$oc/devices/5e4e2e92ac-164aefa8fouquan1/sys/properties/report。
  2. 在工具中间的空白处填写上报的数据。请求参数ServiceProperty定义表:请求示例{ "services": [{ "service_id": "BasicData", "properties": { "luminance": 30 } } ] }

    字段名

    必选/可选

    类型

    参数描述

    service_id

    必选

    String

    设备服务的ID。

    properties

    必选

    Object

    设备服务的属性列表,具体字段在设备关联的产品模型中定义。

    eventTime

    可选

    String

    设备采集数据UTC时间(格式:yyyyMMddTHHmmssZ),如:20161219T114920Z。

    设备上报数据不带该参数或参数格式错误时,则数据上报时间以平台时间为准。

    字段名

    必选/可选

    类型

    参数描述

    services

    必选

    List

    设备服务数据列表(具体结构参考下表ServiceProperty定义表)

  3. 单击“Publish”,可以在物联网平台上查看设备是否成功上报数据。

命令下发

在管理控制台下发命令,远程控制设备。

  1. 选择“设备 > 所有设备”,找到注册设备章节新建的设备,单击“查看”进入设备详情页面。
  2. 单击“命令”页签,下发同步命令。说明:MQTT协议设备仅支持同步命令下发,NB-IoT设备仅支持异步命令下发。
  3. 您可以在MQTT.fx模拟器端查看到下发的命令。说明:
    • 由于MQTT.fx模拟器不支持查看下发的命令参数。具体下发内容,请参考平台命令下发
    • 界面提示命令下发失败,是因为下发的同步命令需要设备侧及时回响应,响应内容请参考平台命令下发

进阶体验

按照本页面的指导,使用MQTT.fx模拟MQTT设备接入物联网平台后,您应该已经基本了解MQTT设备调用物联网平台开放的接口与平台交互。

若您想要进一步体验设备接入服务,可参考开发指南开发真实应用和真实设备,并接入物联网平台,体验更多功能。

上一篇:追加写对象AppendObject 下一篇:使用ModelArts实现花卉图像分类

华为云

面向未来的智能世界,数字化是企业发展的必由之路。数字化成功的关键是以云原生的思维践行云原生,全数字化、全云化、AI驱动,一切皆服务。

华为云将持续创新,携手客户、合作伙伴和开发者,致力于让云无处不在,让智能无所不及,共建智能世界云底座。