计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机服务器 CPH
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
虚拟专用网络 VPN
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
VPC终端节点 VPCEP
云连接 CC
企业路由器 ER
企业交换机 ESW
全球加速 GA
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
边缘安全 EdgeSec
威胁检测服务 MTD
CDN与智能边缘
内容分发网络 CDN
CloudPond云服务
智能边缘云 IEC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
云搜索服务 CSS
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
数据可视化 DLV
数据湖工厂 DLF
湖仓构建 LakeFormation
企业应用
云桌面 Workspace
应用与数据集成平台 ROMA Connect
云解析服务 DNS
专属云
专属计算集群 DCC
IoT物联网
IoT物联网
设备接入 IoTDA
智能边缘平台 IEF
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
国际站常见问题
ICP备案
我的凭证
支持计划
客户运营能力
合作伙伴支持计划
专业服务
区块链
区块链服务 BCS
Web3节点引擎服务 NES
解决方案
SAP
高性能计算 HPC
视频
视频直播 Live
视频点播 VOD
媒体处理 MPC
实时音视频 SparkRTC
数字内容生产线 MetaStudio
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
存储容灾服务 SDRS
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属分布式存储服务 DSS
容器
云容器引擎 CCE
容器镜像服务 SWR
应用服务网格 ASM
华为云UCS
云容器实例 CCI
管理与监管
云监控服务 CES
统一身份认证服务 IAM
资源编排服务 RFS
云审计服务 CTS
标签管理服务 TMS
云日志服务 LTS
配置审计 Config
资源访问管理 RAM
消息通知服务 SMN
应用运维管理 AOM
应用性能管理 APM
组织 Organizations
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
应用身份管理服务 OneAccess
数据库
云数据库 RDS
文档数据库服务 DDS
数据管理服务 DAS
数据复制服务 DRS
云数据库 GeminiDB
云数据库 GaussDB
分布式数据库中间件 DDM
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
人脸识别服务 FRS
图引擎服务 GES
图像识别 Image
内容审核 Moderation
文字识别 OCR
AI开发平台ModelArts
图像搜索 ImageSearch
对话机器人服务 CBS
华为HiLens
视频智能分析服务 VIAS
语音交互服务 SIS
应用中间件
分布式缓存服务 DCS
API网关 APIG
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
多活高可用服务 MAS
事件网格 EG
企业协同
华为云会议 Meeting
云通信
消息&短信 MSGSMS
云生态
合作伙伴中心
云商店
开发者工具
SDK开发指南
API签名指南
Terraform
华为云命令行工具服务 KooCLI
其他
产品价格详情
系统权限
管理控制台
客户关联华为云合作伙伴须知
消息中心
公共问题
开发与运维
应用管理与运维平台 ServiceStage
软件开发生产线 CodeArts
需求管理 CodeArts Req
部署 CodeArts Deploy
性能测试 CodeArts PerfTest
编译构建 CodeArts Build
流水线 CodeArts Pipeline
制品仓库 CodeArts Artifact
测试计划 CodeArts TestPlan
代码检查 CodeArts Check
代码托管 CodeArts Repo
云应用引擎 CAE
开天aPaaS
云消息服务 KooMessage
云手机服务 KooPhone
云空间服务 KooDrive
文档首页/ 设备接入 IoTDA/ 最佳实践/ 设备接入/ 在线开发MQTT协议的模拟智慧路灯

在线开发MQTT协议的模拟智慧路灯

更新时间:2024-10-22 GMT+08:00

场景说明

本文以“智慧路灯”为示例,通过设备模拟器替代真实的设备,带您快速体验设备上报数据到物联网平台和远程下发控制命令到设备的全过程。您可以选择MQTT.fx工具或MQTT_Simulator两种设备模拟器,推荐使用MQTT.fx工具进行模拟。

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

前提条件

  • 已注册华为云官方账号。未注册可单击注册页面完成注册。
  • 已开通设备接入服务。未开通则访问设备接入服务,单击“立即使用”后开通该服务。

业务流程

基于MQTT.fx体验平台功能是指使用MQTT.fx模拟器工具,进行数据上报、命令下发等业务的体验。

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

创建产品

  1. 登录管理控制台,选择您的实例,单击实例卡片进入。单击左侧导航栏“产品”,单击页面左侧的“创建产品”

    图1 产品-创建产品

  2. 创建一个协议类型为MQTT协议、设备类型为StreetLamp的产品,参考页面提示填写参数后,单击“确定”。

    图2 创建产品-MQTT

开发产品模型

  1. 找到新增的产品,单击产品进入产品界面。
  2. 在产品详情“基本信息”页面,单击“自定义模型”,配置产品的服务。

    图3 自定义模型-MQTT

  3. 新增服务类型“BasicData”

    1. 在“添加服务”页面,根据页面提示填写“服务ID”“服务类型”“服务描述”,单击“确定”。
      图4 添加服务-BasicData
    2. 在“BasicData”服务列表右侧区域,单击“新增属性”,填写相关信息后,单击“确定”。
      图5 新增属性-luminance

  4. 新增服务类型“LightControl”

    1. 在“基本信息”下单击“添加服务”,根据页面提示填写后,单击“确定”。
      • “服务ID”:LightControl
      • “服务类型”:建议和服务ID保持一致
      • “服务描述”:路灯开关控制
    2. 在“LightControl”的下拉菜单下单击“添加命令”,输入命令名称“Switch”。
      图6 新增命令-Switch
    3. 在“新增命令”页面,单击“新增输入参数”,填写相关信息后,单击“确定”。
      图7 新增命令参数-value

注册设备

  1. 在设备接入控制台页面,选择您的实例,选择左侧导航栏“设备 > 所有设备”,单击“注册设备”

    图8 所有设备-注册设备

  2. 根据页面提示信息填写参数,然后单击“确定”

    参数名称

    说明

    所属资源空间

    确保和所属产品归属在同一个资源空间。

    所属产品

    选择对应产品。

    设备标识码

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

    设备名称

    即device_name,可自定义。

    设备认证类型

    选择“密钥”

    密钥

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

    图9 单设备注册-MQTT

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

    图10 设备-注册设备成功

连接鉴权

使用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。

    设备通过MQTT协议的connect消息进行鉴权,对于构造clientId的各个部分信息都必须包括进去,平台收到connect消息时,会判断设备的鉴权类型和密码摘要算法。

    使用生成工具生成的clientId格式,默认不校验时间戳:设备ID_0_0_时间戳。

    • 当采用“HMACSHA256”校验时间戳方式时,会先校验消息时间戳与平台时间是否一致,再判断密码是否正确。
    • 当采用“HMACSHA256”不校验时间戳方式时,鉴权消息也必须带时间戳,但不检验时间是否准确,仅判断密码是否正确。

    connect消息鉴权失败时,平台会返回错误,并自动断开MQTT链路。

  3. 打开MQTT.fx软件,单击设置图标。

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

    参数名称

    说明

    Broker Address

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

    Broker Port

    默认为1883。

    Cliend ID

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

    User Name

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

    Password

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

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

    图11 设备在线

数据上报

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

  1. 填写接口地址,此处以$oc/devices/{device_id}/sys/properties/report为例,如:$oc/devices/5e4e2e92ac-164aefa8fouquan1/sys/properties/report。

  2. 在工具中间的空白处填写上报的数据后,单击“Publish”

    表1 设备服务数据列表

    字段名

    必选/可选

    类型

    参数描述

    services

    必选

    List<ServiceProperty>

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

    表2 ServiceProperty定义表

    字段名

    必选/可选

    类型

    参数描述

    service_id

    必选

    String

    设备服务的ID。

    properties

    必选

    Object

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

    eventTime

    可选

    String

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

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

    请求示例

    {
        "services": [{
                "service_id": "BasicData",
                "properties": {
                    "luminance": 30
            }
          }
       ]
    }

  3. 可以在设备详情页中查看设备是否成功上报数据。

    图12 查看上报数据-MQTT

命令下发

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

  1. 选择设备 > 所有设备,找到新建的设备,单击“详情”进入设备详情页面。
  2. 单击“云端下发”页签,下发同步命令。

    图13 命令下发-MQTT
    说明:

    MQTT协议设备仅支持同步命令下发,NB-IoT设备仅支持异步命令下发。

  3. MQTT.fx模拟器中选择Subscribe,输入命令下发Topic,订阅后则可以查看到下发的命令参数。

    说明:
    • 通过MQTT.fx模拟器查看下发的命令参数,命令下发Topic格式为:$oc/devices/{device_id}/sys/commands/#,其中{device_id}为设备注册成功后返回的deviceId值。
    • 界面提示命令下发失败,是因为下发的同步命令需要设备侧及时回响应,响应内容请参考平台命令下发

使用MQTT_Simulator接入

  1. 下载MQTT_Simulator模拟器(默认是64位操作系统),并启动模拟器,如下图:

  2. 界面展示

    1. 模拟器提供了界面显示,填写Server地址、设备ID、设备密钥。请根据实际创建的设备信息填写。
    2. 不同的Server地址SSL加密接入时要与对应的证书文件匹配使用,证书获取请参考获取资源,需要替换certificate文件夹下的证书,如下图:

    3. 用户可以选择设备侧建链时是否为SSL加密,选择Qos方式是0还是1,当前不支持Qos2,可参考使用限制

  3. 新建连接

    设备或网关在接入物联网平台时首先需要和平台建立连接,从而将设备或网关与平台进行关联。开发者通过传入设备信息,将设备或网关连接到物联网平台。单击新建连接按钮,域名、设备ID和密钥正确的情况下,可以看到日志设备连接成功,可在平台查看设备状态,如下图:

    图14 设备列表-设备在线

  4. 订阅Topic

    订阅某topic的设备才能接收broker发布的关于该topic的消息,关于平台预置topic可参考Topic定义

    建链后,如果成功订阅Topic,主界面日志栏显示如下信息:

  5. 发布Topic

    发布Topic是指设备主动向平台上报自己的属性或消息,详细见设备模拟器快速接入文档。

    在模拟器中实现了上报Topic、属性上报功能。

    输入要上报的JSON message,上报luminance属性为30。发布Topic后,Demo界面显示如下:

    设备上报属性成功后可在“设备详情”页面查看到上报的属性:

    图15 查看上报数据-MQTT

  6. 接收下发命令

    模拟器支持接收平台下发命令的功能,在MQTT建链完成并成功订阅Topic后,可以在控制台设备详情中对该设备进行同步命令下发。下发成功后,在MQTT的回调函数中接收到平台下发给设备的命令。

    例如用户想远程开灯,下发参数名为LightControl: switch,参数值为ON的命令。

    图16 命令下发-同步命令下发

    同步命令下发成功后,Demo界面显示如下:

进阶体验

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

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

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容