设备接入 IoTDA设备接入 IoTDA

计算
弹性云服务器 ECS
云耀云服务器 HECS
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机 CPH
VR云渲游平台 CVR
特惠算力专区
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
内容分发网络 CDN
存储容灾服务 SDRS
弹性文件服务 SFS
云服务器备份 CSBS
云硬盘备份 VBS
数据快递服务 DES
专属企业存储服务
智能边缘
智能边缘云 IEC
EI 企业智能
EI安视服务
AI开发平台ModelArts
数据湖治理中心 DGC
数据仓库服务 GaussDB(DWS)
企业级AI应用开发专业套件 ModelArts Pro
数据湖探索 DLI
华为HiLens
云搜索服务 CSS
数据接入服务 DIS
表格存储服务 CloudTable
数据湖工厂 DLF
图引擎服务 GES
推荐系统 RES
文字识别 OCR
内容审核 Moderation
图像识别 Image
图像搜索 ImageSearch
人脸识别服务 FRS
对话机器人服务 CBS
视频分析服务 VAS
数据可视化 DLV
视频接入服务 VIS
自然语言处理 NLP
语音交互服务 SIS
知识图谱 KG
医疗智能体 EIHealth
可信智能计算服务 TICS
园区智能体 CampusGo
实时流计算服务 CS
人证核身服务 IVS
IoT物联网
设备接入 IoTDA
IoT物联网
全球SIM联接 GSL
设备发放 IoTDP
IoT开发者服务
IoT边缘 IoTEdge
IoT数据分析
路网数字化服务 DRIS
开发与运维
项目管理 ProjectMan
代码托管 CodeHub
流水线 CloudPipeline
代码检查 CodeCheck
编译构建 CloudBuild
部署 CloudDeploy
云测 CloudTest
发布 CloudRelease
移动应用测试 MobileAPPTest
CloudIDE
Classroom
软件开发平台 DevCloud
开源镜像站 Mirrors
视频
媒体处理 MPC
视频点播 VOD
视频直播 Live
实时音视频 SparkRTC
管理与部署
统一身份认证服务 IAM
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云审计服务 CTS
云日志服务 LTS
标签管理服务 TMS
资源管理服务 RMS
应用身份管理服务 OneAccess
专属云
专属计算集群 DCC
专属分布式存储服务 DSS
域名与网站
域名注册服务 Domains
云速建站 CloudSite
企业协同
华为云WeLink
会议
ISDP
解决方案
全栈专属服务
高性能计算 HPC
SAP
游戏云
混合云灾备
快视频
华为工业云平台 IMC
价格
价格原则
成本优化最佳实践
昇腾
昇腾MindX SDK (20.3)
其他
管理控制台
消息中心
产品价格详情
系统权限
我的凭证
客户关联华为云合作伙伴须知
公共问题
宽限期保留期
奖励推广计划
活动
容器
云容器引擎 CCE
云容器实例 CCI
容器镜像服务 SWR
应用编排服务 AOS
容器交付流水线 ContainerOps
应用服务网格 ASM
多云容器平台 MCP
基因容器 GCS
容器洞察引擎 CIE
容器批量计算 BCE
云原生服务中心 OSC
网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
数据库
云数据库 RDS
文档数据库服务 DDS
分布式数据库中间件 DDM
数据复制服务 DRS
数据管理服务 DAS
云数据库 GaussDB(for MySQL)
云数据库 GaussDB NoSQL
云数据库 GaussDB (for openGauss)
数据库和应用迁移 UGO
大数据
MapReduce服务 MRS
应用中间件
应用管理与运维平台 ServiceStage
分布式缓存服务 DCS
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
消息通知服务 SMN
微服务引擎 CSE
云性能测试服务 CPTS
区块链服务 BCS
API网关 APIG
应用魔方 AppCube
分布式消息服务RocketMQ版
多云高可用服务 MAS
可信跨链数据链接服务 TCDAS
企业应用
云桌面 Workspace
云解析服务 DNS
应用与数据集成平台 ROMA Connect
ROMA资产中心 ROMAExchange
ROMA API
鸿源云道
华为乾坤
安全与合规
Web应用防火墙 WAF
漏洞扫描服务 VSS
企业主机安全 HSS
容器安全服务 CGS
数据加密服务 DEW
数据库安全服务 DBSS
态势感知 SA
云堡垒机 CBH
SSL证书管理 SCM
云证书管理服务 CCM
管理检测与响应 MDR
数据安全中心 DSC
威胁检测服务 MTD
DDoS防护 ADS
云防火墙 CFW
应用信任中心 ATC
安全技术与应用
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
智能协作
IdeaHub
企业网络
云管理网络
SD-WAN 云服务
边缘数据中心管理 EDCM
废弃-华为乾坤安全云服务
云通信
语音通话 VoiceCall
消息&短信 MSGSMS
隐私保护通话 PrivateNumber
开发者工具
SDK开发指南
API签名指南
DevStar
HCloud CLI
Terraform
Ansible
云生态
云市场
鲲鹏
昇腾
合作伙伴中心
华为云培训中心
用户服务
帐号中心
费用中心
成本中心
资源中心
企业管理
工单管理
客户运营能力
国际站常见问题
网站备案
支持计划
专业服务
合作伙伴支持计划
文档首页> 设备接入 IoTDA> 最佳实践> 设备接入> 在线开发MQTT协议的智慧路灯
更新时间:2021/10/12 GMT+08:00
分享

在线开发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。

    设备认证类型

    选择“密钥”

    密钥

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

    成功注册设备后,平台会自动生成设备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。

    设备通过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”,设备鉴权成功后,在物联网平台可以看到设备处于在线状态。

上报数据

使用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. 在工具中间的空白处填写上报的数据。

    请求参数

    字段名

    必选/可选

    类型

    参数描述

    services

    必选

    List<ServiceProperty>

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

    ServiceProperty定义表:

    字段名

    必选/可选

    类型

    参数描述

    service_id

    必选

    String

    设备服务的ID。

    properties

    必选

    Object

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

    eventTime

    可选

    String

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

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

    请求示例

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

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

命令下发

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

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

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

  3. 您可以在MQTT.fx模拟器端查看到下发的命令。

    • 由于MQTT.fx模拟器不支持查看下发的命令参数。具体下发内容,请参考平台命令下发
    • 界面提示命令下发失败,是因为下发的同步命令需要设备侧及时回响应,响应内容请参考平台命令下发

进阶体验

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

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

分享:

    相关文档

    相关产品