华为云用户手册

  • 导入代码样例 下载quickStart(C)样例。 将代码复制到linux运行环境中。可以看到代码文件层级如下图。 代码目录简述: src:源码目录 mqtt_c_demo:demo核心源码; util/string_util.c:工具资源文件; conf:证书目录 rootcert.pem:设备校验平台身份的证书,用于设备侧接入 物联网平台 登录鉴权使用;如果对接的IoTDA版本非基础版,请将该证书文件中c/ap-southeast-1-device-client-rootcert.pem文件内容复制到conf/rootcert.pem文件中。 include: 头文件目录 base目录:存放依赖的paho头文件 openssl目录:存放依赖的openssl头文件 util目录:存放依赖的工具资源头文件 lib:依赖库文件 libcrypto.so*/libssl.so*: openssl库文件 libpaho-mqtt3as.so*: paho库文件 Makefile:Makefile文件
  • 准备工作 编译openssl库 访问openssl官网(https://www.openssl.org/source/)下载最新版本openssl(如openssl-1.1.1d.tar.gz),上传到linux编译机上(以上传到/home/test目录下为例),并使用如下命令解压: tar -zxvf openssl-1.1.1d.tar.gz 配置生成makefile文件。 执行以下命令进入openssl源码目录 cd openssl-1.1.1d 运行如下配置命令: ./config shared --prefix=/home/test/openssl --openssldir=/home/test/openssl/ssl 其中“prefix”是安装目录,“openssldir”是配置文件目录,“shared”作用是生成动态链接库(即.so库) 。 如果编译有问题,配置命令加上no-asm(表示不使用汇编代码) ./config no-asm shared --prefix=/home/test/openssl --openssldir=/home/test/openssl/ssl 编译出库。 在openssl源码目录下,运行make depend命令。 make depend 再运行make命令进行编译。 make 安装openssl。 make install 在配置的openssl安装目录下home/test/openssl找到lib目录,有生成的库文件: “libcrypto.so.1.1”、“libssl.so.1.1”和软链接“libcrypto.so”、“libssl.so”,请将这些文件复制到demo的lib文件夹下(同时将/home/test/openssl/include/openssl里的内容复制到demo的include/openssl下)。 注:有的编译工具是32位的,如果在64位的linux机器上使用,这时只要将Makefile中的-m64都删除,再进行编译即可。 编译paho库文件 访问github下载地址:https://github.com/eclipse/paho.mqtt.c,下载paho.mqtt.c源码。 解压后上传到linux编译机。 修改makefile 通过如下命令进行编辑Makefile vim Makefile 查找字符串 /DOXYGEN_COMMAND = 在/DOXYGEN_COMMAND =doxygen的下一行添加下面两行(自定义的openssl的头文件和库文件) CFLAGS += -I/home/test/openssl/include LDFLAGS += -L/home/test/openssl/lib -lrt 把如下图的CCDLAGS_SO、LDFLAGS_ CS 、LDFLAGS_AS、FLAGS_EXES的openssl地址都改成对应的地址 编译 执行清空命令 make clean 执行编译命令 make 编译完成后,可以在build/output目录下看到编译成功的库。 复制paho库文件。 当前SDK仅用到了libpaho-mqtt3as,请将“libpaho-mqtt3as.so”和“libpaho-mqtt3as.so.1”文件复制到demo的lib文件夹下。(同时回到paho源代码路径,进入src目录,将MQTTAsync.h、MQTTClient.h、MQTTClientPersistence.h、MQTTProperties.h、MQTTReasonCodes.h、MQ TTS ubscribeOpts.h复制到demo的include/base文件夹下)。 有的paho版本会有MQTTExportDeclarations.h头文件,建议可以将MQTT相关的头文件都添加进去。
  • 概述 物联网平台支持使用FunctionGraph编解码的功能,根据您提交的脚本文件,实现设备二进制格式与JSON格式相互转换。常在设备能力比较弱,只能上报简单的二进制数据的场景下使用。FunctionGraph的函数托管计算服务支持Node.js、Python、Java、Go、C#、PHP、Cangjie和定制运行时语言,可以满足多种开发需求;具有实时查看运行日志、查看图形化监控等功能,大大的提高了开发者开发、调试效率。 FunctionGraph是一项基于事件驱动的函数托管计算服务。使用FunctionGraph函数,只需编写业务函数代码并设置运行的条件,无需配置和管理服务器等基础设施,函数以弹性、免运维、高可靠的方式运行。 FunctionGraph的收费标准可见:FunctionGraph 函数工作流 计费概述。此外,FunctionGraph按函数实际执行资源计费,不执行不产生费用。
  • 调测“查询 IAM 用户可以访问的项目列表”接口 在访问物联网平台业务接口前,应用服务器需要调用“查询IAM用户可以访问的项目列表”接口获取用户的项目ID,用于后续访问物联网平台业务接口。 应用服务器需要构造一个HTTP请求,请求示例如下: GET https://iam.cn-north-4.myhuaweicloud.com/v3/auth/projects Content-Type: application/json X-Auth-Token: ******** 参考API文档,调测查询IAM用户可以访问的项目列表接口。 配置“查询IAM用户可以访问的项目列表”接口的HTTP方法、URL和Headers。 单击“Send”,在下方查看返回码和响应消息内容。 返回body中包含一个projects列表,查找其中“name”参数值与“IoTDA”环境中“region”参数值相同的条目,取其“id”参数值更新到“IoTDA”环境中“project_id”参数,以便于在调用其它接口时使用。 这里我们已经在postman中自动更新了“project_id”参数,使用时无需手动操作。
  • 调测“查询产品”接口 应用服务器如果需要查询之前创建的产品详情,可以调用此接口。 应用服务器需要构造一个请求,请求示例如下: GET https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/{project_id}/products/{product_id} Content-Type: application/json X-Auth-Token: ******** 接下来参考API文档,调测物联网平台查询产品接口。 注:在以下步骤中,只呈现样例调测用到的参数。 配置“查询产品”接口的HTTP方法、URL和Headers。 单击“Send”,在下方查看返回码和响应消息内容。
  • 调测“获取IAM用户Token”接口 在访问物联网平台业务接口前,应用服务器需要调用“获取IAM用户Token”接口鉴权,华为云认证通过后向应用服务器返回鉴权令牌X-Subject-Token。 应用服务器需要构造一个HTTP请求,请求示例如下: POST https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "********", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "xxxxxxxx" } } } } 参考API文档,调测获取IAM用户Token接口。 配置“获取IAM用户Token”接口的HTTP方法、URL和Headers。 配置“获取IAM用户Token”接口的Body。 单击“Send”,在下方查看返回码和响应消息内容。 请将返回头域中的的X-Subject-Token更新到“IoTDA”环境的“X-Auth-Token”参数中,以便于在调用其它接口时使用。若超过令牌有效时间,需要重新调用鉴权接口。 这里我们已经在postman中自动更新了“X-Auth-Token”参数,使用时无需手动操作。
  • 调测“创建产品”接口 在设备接入物联网平台前,应用服务器需要调用此接口创建产品,后续注册设备时需要使用这里创建的产品。 应用服务器需要构造一个请求,请求示例如下: POST https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/{project_id}/products Content-Type: application/json X-Auth-Token: ******** { "name" : "Thermometer", "device_type" : "Thermometer", "protocol_type" : "MQTT", "data_format" : "binary", "manufacturer_name" : "ABC", "industry" : "smartCity", "description" : "this is a thermometer produced by Huawei", "service_capabilities" : [ { "service_type" : "temperature", "service_id" : "temperature", "description" : "temperature", "properties" : [ { "unit" : "centigrade", "min" : "1", "method" : "R", "max" : "100", "data_type" : "decimal", "description" : "force", "step" : 0.1, "enum_list" : [ "string" ], "required" : true, "property_name" : "temperature", "max_length" : 100 } ], "commands" : [ { "command_name" : "reboot", "responses" : [ { "response_name" : "ACK", "paras" : [ { "unit" : "km/h", "min" : "1", "max" : "100", "para_name" : "force", "data_type" : "string", "description" : "force", "step" : 0.1, "enum_list" : [ "string" ], "required" : false, "max_length" : 100 } ] } ], "paras" : [ { "unit" : "km/h", "min" : "1", "max" : "100", "para_name" : "force", "data_type" : "string", "description" : "force", "step" : 0.1, "enum_list" : [ "string" ], "required" : false, "max_length" : 100 } ] } ], "option" : "Mandatory" } ], "app_id" : "jeQDJQZltU8iKgFFoW060F5SGZka" } 参考API文档,调测物联网平台创建产品接口。 注:在以下步骤中,只呈现样例调测用到的参数。 配置“创建产品”接口的HTTP方法、URL和Headers。 配置“创建产品”接口的BODY。 单击“Send”,在下方查看返回码和响应消息内容。 将返回的“product_id”更新到“IoTDA”环境中的“product_id”参数中,用于后续其它接口使用。 注:在postman中自动更新了“product_id”参数,使用时无需手动操作。
  • 调测“创建设备”接口 在设备接入物联网平台前,应用服务器需要调用此接口在物联网平台创建设备。在设备接入物联网平台时携带设备唯一标识,完成设备的接入认证。 应用服务器需要构造一个HTTP请求,请求示例如下: POST https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/{project_id}/devices Content-Type: application/json X-Auth-Token: ******** { "node_id" : "ABC123456789", "device_name" : "dianadevice", "product_id" : "b640f4c203b7910fc3cbd446ed437cbd", "auth_info" : { "auth_type" : "SECRET", "secure_access" : true, "fingerprint" : "********", "secret" : "********", "timeout" : 300 }, "description" : "watermeter device" } 参考API文档,调测物联网平台创建设备接口。 注:在以下步骤中,只呈现样例调测用到的参数。 配置“创建设备”接口的HTTP方法、URL和Headers。 配置“创建设备”接口的Body。 单击“Send”,在下方查看返回码和响应消息内容。 请将返回的“device_id”更新到“IoTDA”环境中的“device_id”参数中,用于后续其它接口使用。 注意:在postman中自动更新了“device_id”参数,使用时无需手动操作。
  • 调测“查询设备”接口 应用服务器需要查询在物联网平台创建的设备详情时,可以调用此接口。 应用服务器需要构造一个HTTP请求,请求示例如下: GET https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/{project_id}/devices/{device_id} Content-Type: application/json X-Auth-Token: ******** 参考API文档,调测物联网平台查询设备接口。 注:在以下步骤中,只呈现样例调测用到的参数。 配置“查询设备”接口的HTTP方法、URL和Headers。 单击“Send”,在下方查看返回码和响应消息内容。
  • 安装并配置Postman 安装Postman。 访问Postman官网,下载并安装Windows 64位Postman最新版本。 安装Postman依赖.NET Framework 4.5组件。 如需下载Windows 32位Postman最新版本,访问此处下载。 填写邮箱、用户名和密码注册Postman。 导入Postman环境变量。 单击右上角的图标,打开“MANAGE ENVIRONMENTS”窗口。 单击“Import”,在弹出的页面中,单击“选择文件”,导入IoTDA.postman_environment.json文件(下载Collection解压后获取)。 单击导入的“IoTDA”环境。 参考下表修改以下参数。 参数名 参数说明 IAMEndpoint IAM终端节点,参考IAM地区和终端节点获取。 IoTDAEndpoint 物联网平台终端节点,参考2.e。 IAMUserName IAM用户名,参考我的凭证获取。 IAMPassword 登录华为云的密码。 IAMDoaminId 账号名,参考我的凭证获取。 region 开通 设备接入服务 的区域,参考物联网平台终端节点获取。 IoTDAEndpoint参考。 进入控制台,选择左侧导航栏“总览”,单击“实例基本信息-接入信息”,根据相应的接入类型和协议选择对应的接入地址。 图1 总览-获取接入信息 返回主页,选择环境变量为刚导入的“IoTDA”。 单击左上角的“Import”,单击“Choose Files”导入“应用侧API调用(V5版本).postman_collection.json”。 导入成功后,显示如下。
  • 概述 Postman是网页调试与辅助接口调用的工具,具有界面简洁清晰、操作方便快捷的特性,可以处理用户发送的HTTP请求,例如:GET,PUT、POST,DELETE等,支持用户修改HTTP请求中的参数并返回响应数据。 为充分了解接口,建议提前获取应用侧API参考查阅。我们已经写好了Postman的collection,在Collection中接口的请求结构体已经完成可以直接使用。 本文档以Postman为例,模拟应用服务器以HTTPS协议接入物联网平台,调测以下API接口: “获取IAM用户Token”接口 “查询IAM用户可以访问的项目列表”接口 “创建产品”接口 “查询产品”接口 “创建设备”接口 “查询设备”接口
  • 接收下发命令 在Demo中提供了接收平台下发命令的功能,在MQTT建链完成并成功订阅Topic后,可以在管理控制台设备详情中命令下发或使用应用侧Demo对该设备ID进行命令下发。下发成功后,在Demo中接收到平台下发给设备的命令。 例如下发参数名为smokeDetector: SILENCE,参数值为50的命令。 图4 命令下发-SILENCE 命令下发成功后,Demo收到的消息是50,命令运行主界面显示如下: 由于是同步命令需要端侧回复响应可参考接口。
  • 创建产品 创建MQTT协议产品。如果已有MQTT协议产品,可跳过此步骤。 登录管理控制台,单击左侧导航栏“产品”,单击页面左侧的“创建产品”。 根据页面提示填写参数,然后单击“创建”。 表1 创建产品信息参数 基本信息 所属资源空间 平台自动将新创建的产品归属在默认资源空间下。如需归属在其他资源空间下,下拉选择所属的资源空间。如无对应的资源空间,请先创建资源空间。 产品名称 自定义。支持字母、数字、下划线(_)、连字符(-)的字符组合。 协议类型 选择MQTT。 数据格式 选择JSON。 所属行业 请根据实际情况选择。 设备类型 请根据实际情况选择。 高级配置 产品ID 定制ProductID,用于唯一标识一个产品。如果携带此参数,平台将产品ID设置为该参数值;如果不携带此参数,产品ID在物联网平台创建产品后由平台分配获得。 图2 创建MQTT产品-标准类型
  • 连接鉴权 参考连接鉴权接口文档,使用MQTT.fx工具接入物联网平台。 下载MQTT.fx(默认是64位操作系统,如果是32位操作系统,单击此处下载MQTT.fx),安装MQTT.fx工具。 安装最新版MQTT.fx工具,可单击此处下载。 MQTT.fx 1.7.0及旧版本对带有$的主题(Topic)处理存在问题,请使用最新版本进行测试。 访问这里,填写注册设备后生成的设备ID(DeviceId)和密钥(DeviceSecret),生成连接信息(ClientId、Username、Password)。 设备通过MQTT协议的connect消息进行鉴权,对于构造clientId的各个部分信息都必须包括进去,平台收到connect消息时,会判断设备的鉴权类型和密码摘要算法。 使用生成工具生成的clientId格式,默认不校验时间戳:设备ID_0_0_时间戳。 当采用“HMACSHA256”校验时间戳方式时,会先校验消息时间戳与平台时间是否一致,再判断密码是否正确。 当采用“HMACSHA256”不校验时间戳方式时,clientId也需要携带“YYYYMMDDHH”格式时间戳,用于加解密密码。 connect消息鉴权失败时,平台会返回错误,并自动断开MQTT链路。 打开MQTT.fx软件,单击设置图标。 参考下表配置鉴权参数,然后单击“Apply”。 参数名称 说明 Broker Address 填写从设备接入服务控制台获取的设备对接地址,此地址为 域名 信息。不能通过域名接入的设备,此处填写从2中获取的IP地址。 Broker Port 默认为1883。 Cliend ID 设备cliendID,请参考2中获取。 User Name 即设备ID,请参考2中获取。 Password 加密后的设备密钥,请参考2中获取。 注:如果您选择安全方式接入,Broker Port设置为8883,下载并获取证书,加载Java语言pem格式的证书。 单击“Connect”,设备鉴权成功后,在物联网平台“所有设备”界面可以看到设备处于在线状态。 图3 设备列表-设备在线
  • 物联网平台支持在华为云的哪些区域开通? 设备接入服务(IoTDA)当前支持在“华北-北京四”、“华东-上海一”、“华南-广州”和“华南-广州-友好用户环境”、“中国-香港”、“亚太-新加坡”、“亚太-雅加达”、“亚太-曼谷”、“拉美-圣地亚哥”、“拉美-墨西哥城二”、“中东-利雅得”、“非洲-约翰内斯堡”区域开通服务。企业版当前仅支持在“华北-北京四”、“华东-上海一”、“华南-广州”区域开通服务。 原设备接入服务和设备管理服务只支持在“华北-北京一”区域使用,且不支持新用户开通此服务。 设备发放、 全球SIM联接 、数据分析支持在“华北-北京四”区域开通服务。 父主题: 方案咨询
  • 在产品详情中上传产品模型,无法单击确定按钮? 问题描述 用户在产品详情页面中上传了产品模型,无法单击确定按钮。 图1 产品-上传模型文件 可能原因 上传的产品模型文件命名不符合规范。 上传的产品模型的压缩文件不是zip格式的。 解决方法 检查产品模型文件的名称是否符合deviceType_manufacturerId_model.zip的格式,并检查“deviceType”、“manufacturerId”、“model”三个字段是否和devicetype-capability.json中的定义一致。 检查产品模型文件是否压缩为zip格式。如非zip格式,请解压后重新压缩、上传。
  • 在产品详情上传产品模型,弹窗提示“文件输入格式有误”? 问题描述 客户在产品详情界面里,上传产品模型文件,提示“文件输入格式有误”。 可能原因 模型的json文件格式错误。 servicetype-capability.json中commands/properties的值不是数组格式。 压缩包中存在其他的文件。 解决方法 检查每个json文件的格式是否正确,可以使用第三方格式校验工具进行检查。 检查servicetype-capability.json中commands/properties的值是否为数组格式(值是否包含在中括号之内)。 检查产品模型的压缩包是否存在其他文件或者隐藏文件,如果存在其他文件或者隐藏文件,则删除后重新上传。
  • 在线开发产品模型时,如何选择数据类型? 数据类型的配置可以参考如下原则: int:当上报的数据为整数或布尔值时,可以匹配为此类型。插件开发中可匹配int型或array类型。 decimal:当上报的数据为小数时,可以匹配为此类型。插件开发中可匹配string或者int或者array类型。 string:当上报的数据为字符串、枚举值或布尔值时,可以配置为此类型。如果为枚举值或布尔值,值之间需要用英文逗号(“,”)分隔。插件开发中可匹配string类型或者array类型。 dateTime:当上报的数据为日期时,可以配置为此类型。插件开发中可匹配string类型或者array类型。 jsonObject:当上报的数据为json结构体时,可以配置为此类型。插件开发者可匹配string或者array类型。
  • 在线开发的插件部署失败如何处理? 问题描述 用户在插件开发界面开发好了编解码插件,单击部署按钮部署失败了。 可能原因 如果插件下载成功,但是部署失败,则可能是网络问题导致。 如果插件下载失败,则部署失败的原因如下: 同类消息的(例如:两种数据上报的消息)messageId的值设置重复或在消息中的位置不一致。 messageId的数据类型设置为非int型。 存在字段的默认值设置为非16进制数。 存在字段名字设置为java关键字,比如type、int等。 解决方法 插件如果可以成功下载,但是部署失败,请检查网络状态,并重试。 如果插件下载失败,请排查插件定义是否符合规范。
  • 在线开发插件中地址域(messageId)如何使用? 当有相同类型的消息时(例如:两种数据上报的消息),需要添加地址域字段,用于区分不同的消息,且该字段在字段列表的位置必须一致。场景如下: 有两条及以上的数据上报消息或命令下发消息。 命令响应消息可看作一种数据上报消息,因此如果存在命令响应消息,则需要在数据上报消息中添加地址域。 数据上报响应消息可看作一种命令下发消息,因此如果存在数据上报响应消息,则需要在命令下发消息中添加地址域。
  • 在线开发的插件中如何实现命令下发响应? 设备在接收到命令后,可以上报两类消息:ACK和命令下发响应。ACK用于表示命令已经到达设备,命令下发响应用于表示设备执行命令的结果。如果需要设备在接到命令后,需要返回命令下发响应,则: 需要在数据上报消息和命令响应消息中均定义地址域字段(messageId),并且该字段在两种消息的字段列表中的位置必须相同,使编解码插件可以对数据上报消息和命令响应消息进行区分。 需要在命令下发消息和命令响应消息中定义响应标识字段(mid),并且该字段在两种消息的字段列表中的位置必须相同,使编解码插件可以将命令下发消息和对应的命令响应消息进行关联。
  • IAM用户访问API提示没有权限? 2020/04/23设备接入服务上线了细粒度策略权限控制,如果未对IAM用户授予IoTDA的权限,使用IAM用户访问设备接入资源提示没有权限,返回"Operation not allowed. The user does not have the permission"报错。您可以参考如下步骤为IAM用户所在的用户组授予IoTDA FullAccess预置系统策略权限。 操作步骤: 访问 统一身份认证 服务IAM,单击“立即使用”进入IAM服务控制台。 单击左侧导航栏的“用户组”。在用户组列表单击该IAM用户所在的用户组右侧的“授权”。 过滤云服务IoTDA,并勾选“IoTDA FullAccess”,单击右下角的“下一步”。 选择作用范围。 选择“指定区域项目资源”。 在查询框中输入条件,在下拉框中选择需要授权的区域。 指定所有项目与指定区域(如北京四)的区别:因使用IAM获取token时会指定scope是domain或project级别,若您用的是domain级别的token则应该选择所有项目,反之则选择指定区域。 单击右下角的“确认”,完成用户组授权。 父主题: 方案咨询
  • 常见的软/固件升级错误有哪些? 在软/固件升级时,可以在“执行详情”的任务列表中查看错误描述,常见错误描述如下: 表1 软固件升级错误描述 失败原因 原因解释 处理建议 Device Abnormal is not online 设备未在线 请检查设备侧是否在线。 Task Conflict 任务冲突 请检查当前设备是否有软件升级、固件升级正在进行。 Waiting for the device online timeout 等待设备上线超时 请检查设备侧是否上线。 Waiting for report cellId timeout 等待上报cellId超时 请通过模组日志检查设备侧是否上报的小区ID。 Waiting for report device firmware version timeout 等待上报设备固件版本超时 请通过模组日志检查设备侧是否上报了固件版本号。 Wait for the device to report upgrade result timeout 等待设备上报升级结果超时 请通过模组日志检查设备侧是否上报了升级结果。 Updating timeout and query device version for check timeout 等待升级结果超时,且等待设备版本信息超时 请通过模组日志检查设备侧是否上报升级结果及上报设备版本信息。 Waiting for device downloaded package timeout 等待设备下载固件包超时 请通过模组日志检查设备侧是否下载固件包。 Integrity check failure for new downloaded package 下载的固件包完整性校验失败 请通过模组日志检查设备下载的固件包是否完整。 Unsupported package type 固件包类型不支持 请通过模组日志检查设备状态和厂商提供的固件包是否正确。 Not enough storage for the new firmware package 下载的固件包存储空间不足 请检查设备存储。 Out of memory during downloading process 下载过程中内存不足 请检查设备内存。 Connection lost during downloading process 下载过程中连接断开 请检查设备连接状态。 Invalid URI URI不可用 检查设备侧的固件包下载地址是否正确。 Firmware update failed 固件更新失败 请通过模组日志检查设备侧。
  • 场景说明 MQTT(Message Queuing Telemetry Transport)是一个基于客户端-服务器的消息发布/订阅传输协议,主要应用于计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备,适合长连接的场景,如智能路灯等。固件升级功能是网络设备所必须支持的基础服务。在设备固件出现安全漏洞、软件bug维护、自身功能优化、以及设备性能改良等需更新固件时,在线升级功能就尤为重要。本文档通过MQTT.fx模拟固件设备,使用华为云平台对该固件进行设备升级。 软件升级流程和固件升级流程一样,只是在设备上报版本号时对应参数字段不一样。固件升级上报版本号对应参数字段为fw_version,软件升级上报版本号对应参数字段为sw_version,请参考设备上报版本号
  • 业务实现 使用MQTT.fx模拟设备接入平台,详情请参考连接鉴权。 用MQTT.fx订阅平台下行信息Topic,MQTT.fx会收到平台服务端下发的查询版本命令。 Topic 下行: $oc/devices/{device_id}/sys/events/down 参数说明 请参考平台下发获取版本信息通知 图10 订阅通知 通过MQTT.fx上报软固件版本信息。 Topic 上行: $oc/devices/{device_id}/sys/events/up 参数说明 请参考设备上报软固件版本 示例 Topic: $oc/devices/{device_id}/sys/events/up 数据格式: { "object_device_id": "{object_device_id}", "services": [{ "service_id": "$ota", "event_type": "version_report", "event_time": "20151212T121212Z", "paras": { "sw_version": "v1.0", "fw_version": "v1.0" } }] } 图11 上报版本号 上报完版本号后,模拟器会接收到平台下发的升级通知,通知信息如下: Topic 上行: $oc/devices/{device_id}/sys/events/down 参数说明 请参考平台下发升级通知 图12 获取升级通知 设备收到升级通知后,可通过Http请求下载升级包。 本次演示使用Curl命令代替。 图13 下载升级包 示例 curl -X GET -H "Authorization:Bearer ****************************" "https://**.**.**.**:8943/iodm/dev/v2.0/upgradefile/applications/********/devices/********/packages/********" -v -k 应在http附加请求消息头(header)字段附加Authorization信息,其值为“Bearer {access_token}”,其中{access_token}为收到的升级通知中的access_token。Bearer和{access_token}之间有一个空格。 如果event_type为firmware_upgrade_v2、software_upgrade_v2,则在请求下载软固件包时不需要携带请求头。请求示例如下: GET https://******.obs.cn-north-4.myhuaweicloud.com:443/test.bin?AccessKeyId=DX5G7W********* 设备上报升级状态 Topic 上行: $oc/devices/{device_id}/sys/events/up 参数说明 请参考设备上报升级状态 示例 Topic: $oc/devices/{device_id}/sys/events/up 数据格式: { "object_device_id": "{object_device_id}", "services": [{ "service_id": "$ota", "event_type": "upgrade_progress_report", "event_time": "20151212T121212Z", "paras": { "result_code": 0, "progress": 50, "version": "V1.0", "description": "upgrade processing" } }] } 如下图所示上报升级进度为50%,可以在平台查询到升级进度为50%。 图14 上报升级进度50% 图15 任务详情-Test_upgrade_1-升级进度 完成升级 上报升级进度为100%,且当前版本为升级的目标版本,可以在平台查询到升级完成。 图16 上报升级进度100% 图17 软固件升级-固件升级
  • 使用虚拟设备在线调试 在智慧路灯产品的开发空间,选择“在线调试”,单击“新增测试设备”。 在新增测试设备页面,选择“虚拟设备”,然后单击“确定”,创建一个虚拟设备。虚拟设备名称包含 “DeviceSimulator”字样,每款产品下只能创建一个虚拟设备。 图22 在线调试-创建虚拟设备 单击“调试”,进入调试界面。 图23 在线调试-进入调试 模拟设备数据上报场景,在设备模拟器中,输入十六进制码流:002000(00为地址域meaasgeID,长度为1个字节;20表示光照强度,长度为1个字节;00表示路灯开关状态为关闭状态,长度为1个字节),然后单击“发送”,我们可以在应用模拟器中看到转换为JSON格式的数据为:"Light_Intensity":32, "Light_Status":0。 图24 在线调试-模拟数据上报 模拟远程下发控制命令场景,在应用模拟器中,选择服务:StreetLight,命令:SWITCH_LIGHT,命令取值为:ON,单击“发送”,我们可以在设备模拟器中看到转换为十六进制的码流:0100014F4E(经ASCLL码转为为十六进制)。 图25 在线调试-模拟命令下发
  • 在线开发插件 通常情况下设备为了省电,设备会采用“二进制”格式上报数据,编解码插件的作用就是将设备上报的“二进制”格式数据,按照产品模型文件的定义的属性转换为“JSON”格式数据,便于物联网平台和应用服务器识别。同时,用户远程下发控制命令时,物联网平台会将“JSON”格式的命令转换为“二进制”格式数据下发给设备。 如果设备本身上报的是JSON格式数据,则不需要定义编解码插件。 在智慧路灯产品的开发空间,选择“插件开发”,单击“图形化开发”。 单击“新增消息”,配置数据上报消息,上报路灯的数据消息。 消息名:LightData 消息类型:数据上报 添加响应字段:是。添加响应字段后,物联网平台在收到设备上报的数据后,会下发用户设置的响应数据到设备。 响应数据:AAAA0000(默认) 图7 插件开发-新增消息 单击“添加字段”,添加messageId字段,表示消息种类。 图8 插件开发-添加字段messageId 添加LightIntensity字段,表示光照强度,数据类型:int8u(8位无符号整型),长度:1字节。 图9 插件开发-添加字段LightIntensity 添加LightStatus字段,表示路灯上报的路灯开关状态数据。数据类型:int8u(8位无符号整型),长度:1字节。 图10 插件开发-添加字段LightStatus 再次单击“新增消息”,定义远程控制路灯开关的命令对应的编解码插件消息。 消息名:SwitchStatus 消息类型:命令下发 添加响应字段:是。添加响应字段后,设备在接收命令后,会上报命令执行结果。 图11 插件开发-新增消息SwitchStatus 单击“添加字段”,添加messageId字段,表示消息种类。 图12 插件开发-添加字段messageId 添加mid字段,用于将下发的命令和命令执行结果进行关联。 图13 插件开发-添加命令字段mid 添加SwitchStatus字段,数据类型:string(字符串类型),长度:3字符。 图14 插件开发-添加命令字段SwitchStatus 单击“添加响应字段”,配置命令下发响应消息。 添加messageId,表示消息种类。命令执行结果为上行消息,需要通过messageId和数据上报消息进行区分。 图15 插件开发-添加响应字段messageId 添加mid字段,用于将下发的命令和命令执行结果进行关联。 图16 插件开发-添加响应字段mid 添加errcode字段,用于表示命令执行状态:00表示成功,01表示失败,如果未携带该字段,则默认命令执行成功。 图17 插件开发-添加响应字段errcode 添加result字段,用于表示命令执行结果。 图18 插件开发-添加响应字段result 拖动右侧“产品模型”区域的属性字段和命令字段(产品模型文件定义的字段),与编解码插件定义的数据上报消息和命令下发消息的相应字段建立映射关系。 图19 插件开发-在线开发插件 编解码插件与产品模型文件建立映射完成后,单击右上角“保存”,并单击“部署”,完成编解码插件的部署。
  • 创建产品 基于开发的产品,用户可以在线开发设备的产品模型文件和编解码插件;另外,物联网平台提供了设备和应用模拟器,可以便捷地调测开发的产品模型文件和编解码插件的正确性。 访问设备接入服务,单击“立即使用”进入设备接入控制台。选择您的实例,单击实例卡片进入。 选择左侧导航栏的“产品”。 图1 产品-创建产品 单击左侧的“创建产品”,创建一个基于LwM2M/CoAP协议的产品,填写参数后,单击“确定”。 图2 创建产品-CoAP 基本信息 所属资源空间 选择新建产品所属的资源空间。 产品名称 自定义,如Test_1。 协议类型 选择“LwM2M/CoAP”。 数据格式 选择“二进制码流”。 当“数据格式”配置为“二进制码流”时,该产品下需要进行编解码插件开发;当“数据格式”配置为“JSON”时,该产品下不需要进行编解码插件开发。 所属行业 无 设备类型 streetlamp
  • 定义产品模型 找到步骤3创建的产品,单击产品进入产品界面。 在产品详情基本信息页面,单击“自定义模型”,配置产品的服务,然后单击“确定”。 “服务ID”:StreetLight “服务类型”:建议和服务ID保持一致 “服务描述”:路灯上报的环境光强度和路灯开关状态的属性。 单击步骤2新增的服务ID,在展开的页面单击“添加属性”,定义一条属性为路灯采集的当前环境的光照强度。 “属性名称”:light_intensity “数据类型”:int(整型) “访问权限”:可读、可写 “取值范围”:0~100,光照强度范围。 图3 新增属性-light_intensity 单击“添加属性”,定义一条属性为路灯当前的开关灯状态。 “属性名称”:light_status “数据类型”:int(整型) “访问权限”:可读、可写 “取值范围”:0~1,0代表关闭,1代表打开状态 图4 添加属性-light_status 接下来定义远程控制开关灯状态的命令。 单击“添加命令”,定义命令名称:SWITCH_LIGHT。 单击“新增输入参数”,参数名称:SWITCH_LIGHT,数据类型为:string,长度为:3个字符,枚举值为:ON,OFF。 图5 新增命令参数-SWITCH_LIGHT 单击“新增响应参数”,参数名称:result,数据类型:int。 图6 新增响应参数-result 单击“确定”,完成该路灯的产品模型文件开发。
  • 使用真实设备在线调试 模拟器在线调测具备设备模拟和应用模拟功能,可以对定义的产品模型文件和编解码插件进行调试,用户可以直观的感受设备上报数据到物联网平台,以及使用物联网平台下发远程控制命令。 在智慧路灯产品的开发空间,选择“在线调试”,单击“新增测试设备”。 在新增测试设备页面,完成设备参数的填写后,单击“确定”。 设备类型:真实设备。 设备名称:自定义。 设备标识码:设备的IMEI号,用于设备在接入物联网平台时携带该标识信息完成接入鉴权,可在NB模组上查看。 密钥:如果使用DTLS传输层安全协议接入时,且请妥善保存密钥。 图20 在线调试-新增测试设备 新添加的设备处于未激活状态,此时不能进行在线调试,可参考连接鉴权,待设备接入平台后,进行调试。 单击“调试”,进入调试界面。 图21 在线调试-进入调试 模拟远程下发控制命令场景,在应用模拟器中,选择服务:StreetLight,命令:SWITCH_LIGHT,命令取值为:ON,单击“发送”,我们可以看到路灯被点亮。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全