华为云用户手册

  • 数据上报和命令下发 场景说明 有一款烟感设备,具有如下特征: 具有烟雾报警功能(火灾等级)和温度上报功能。 支持远程控制命令,可远程打开报警功能。比如火灾现场温度,远程打开烟雾报警,提醒住户疏散。 Profile定义 在烟感产品的开发空间,完成Profile定义。 level:火灾级别,用于表示火灾的严重程度。 temperature:温度,用于表示火灾现场温度。 SET_ALARM:打开或关闭告警命令,value=0表示关闭,value=1表示打开。 编解码插件开发 在烟感产品的开发空间,选择“编解码插件开发”。 配置数据上报消息。 添加level字段,表示火灾级别。 “字段名”只能输入包含字母、数字、_和$,且不能以数字开头的字符。 “数据类型”根据设备上报数据的实际情况进行配置,需要和Profile相应字段的定义相匹配。 “长度”和“偏移值”根据“数据类型”的配置自动填充。 添加temperature字段,表示温度。在Profile中,temperature属性最大值1000,因此在插件中定义temperature字段的“数据类型”为“int16u”,以满足temperature属性的取值范围。 配置命令下发消息。 添加value字段,表示下发命令的参数值。 拖动右侧“设备模型”区域的属性字段和命令字段,数据上报消息和命令下发消息的相应字段建立映射关系。 点击“保存”,并在插件保存成功后点击“部署”,将编解码插件部署到 物联网平台 。 调测编解码插件 在烟感产品的开发空间,选择“在线调测”,使用虚拟设备调试编解码插件。 勾选“没有真实的物理设备”,点击“创建”。 使用设备模拟器进行数据上报。十六进制码流示例:02013A。02表示火灾级别,长度为1个字节;013A表示温度,长度为2个字节。 在“应用模拟器”区域查看数据上报的结果:{level=2, temperature=314}。2为十六进制数02转换为十进制的数值;314为十六进制数013A转换为十进制的数值。 使用应用模拟器进行命令下发:{ "serviceId": "Smoke", "method": "SET_ALARM", "paras": "{\"value\":1}" }。 在“设备模拟器”区域查看命令接收的结果:01。01为十进制数1转换为十六进制的数值。
  • 我是模组厂商(联通用户专用) 非联通用户请查看 设备接入服务 。 芯片是一种把集成电路小型化的方式,并时常制造在半导体晶圆表面上。模组是由若干个显示模块、驱动电路、控制电路、芯片以及相应的结构件构成的一个独立的显示单元。模组与芯片关系就像是U盘和Flash芯片的关系,用户99%的情况是直接使用模组,没有人直接用芯片。当前模组厂商主要提供Wifi、NB-IoT、2/3/4/5G等通信模组。 在物联网解决方案中,作为模组厂商的您需要让模组实现MQ TTS 、LWM2M、CoAP等物联网协议栈及连接平台的能力,您只需要将Agent Tiny SDK集成在现有的模组固件包中,这样模组就具备了接入华为物联网平台的能力。 我们将提供华为IoT技术认证支持,帮助您快速完成SDK集成,通过华为认证的模组可以申请入驻华为云市场,我们将会推荐给物联网平台用户。查询华为已认证的模组。 Agent Tiny SDK具有普适性,可以广泛移植于WiFi模组、2/3/4/5G模组、NB-IoT模组,无需考虑模组类型(了解Agent Tiny SDK详情)。如何在模组中集成Agent Tiny SDK,请参考华为IoT技术认证流程,获取相关技术支持。 父主题: 从这里开始
  • 迁移设备 迁移设备是指将对接了开发中心(测试环境)的设备迁移到设备管理服务(商用环境)中去。迁移对接的过程中,开发中心数据不割接,由应用服务器负责保存设备在开发中心的历史数据。 您需要将设备根据通信协议修改对接的平台地址为“设备管理服务”的设备对接地址,设备对接地址获取请参考平台对接信息。 您需要在“设备管理服务”中注册设备,可以使用应用服务器调用平台注册设备接口,也可以在界面上注册设备。 平台为每一个注册到平台上的设备生成了一个deviceId,这是设备在平台上的唯一ID,您需要将设备和ID映射关系刷新为新的ID。
  • 开始使用 物联网平台设备提供海量设备的接入和管理能力,配合华为云其他产品同时使用,帮助快速构筑物联网应用,简化海量设备管理复杂性,节省人工操作,提升管理效率。 功能 简介 应用管理 应用可以理解为在物联网平台中为用户的业务划分一个项目空间,当用户在开发中心、线下环境里完成应用服务器侧的开发、物联网平台侧的开发以及设备侧的开发后,就需要在控制台上创建应用,将开发完的应用服务器与真实设备接入到这个项目空间中,实现设备的数据采集和设备管理。 产品模型 又称Profile,用于定义一款接入设备所具备的属性(如颜色、大小、采集的数据、可识别的指令或者设备上报的事件等信息),然后通过厂家、设备类型和设备型号,唯一标识一款设备,便于平台识别。产品模型可通过开发中心进行无码化开发。 设备注册鉴权 物联网平台对接入平台的设备进行鉴权认证。待真实设备上电后,设备可以上报数据到物联网平台,物联网平台根据应用服务器的订阅消息类型,把消息推送给应用服务器。 订阅推送 订阅:是指应用服务器通过调用物联网平台的API接口,向平台获取发生变更的设备业务信息(如设备注册、设备数据上报、设备状态等)和管理信息(软固件升级状态和升级结果)。 推送:是指订阅成功后,物联网平台根据应用服务器订阅的数据类型,将对应的变更信息推送给指定的URL地址。 数据上报 当设备完成和物联网平台对接后,一旦设备上电,设备基于在设备定义上的业务逻辑进行数据采集和上报,可以是基于周期或者事件触发。 命令下发 为能有效地对设备进行管理,设备的产品模型中定义了物联网平台可向设备下发的命令,应用服务器可以调用物联网平台开放的API接口向单个设备或批量设备下发命令,或者用户通过物联网平台直接向单个设备下发命令,配置或修改设备的服务属性值,以实现对设备的远程控制。 设备配置更新 物联网平台提供设备配置更新功能,即用户可通过控制台对单个设备或批量设备的设备属性值进行修改,满足用户频繁、快捷、方便的管理设备的诉求。 设备影子 设备影子是一个JSON文件,用于存储设备的在线状态、设备最近一次上报的设备属性、应用服务器期望下发的配置。每个设备有且只有一个设备影子,设备可以获取和设置设备影子以此来同步状态,这个同步可以是影子同步给设备,也可以是设备同步给影子。 规则引擎 指用户可以在物联网平台上可以对接入平台的设备设定相应的规则,在条件满足所设定的规则后,平台会触发相应的动作来满足用户需求。包含设备联动和数据转发两种类型。 群组与标签 群组是一系列设备的集合,用户可以对应用下所有设备,根据区域、类型等不同规则进行分类建立群组,以便处理对海量设备的批量管理和操作。 物联网平台支持定义不同的标签,并对设备打标签,通过标签,可以快速筛选设备。 设备监控 提供查看设备详情、设备状态管理、查看报表、查看操作记录、查看审计日志、告警管理、设备消息跟踪等设备监控与运维能力,提升设备的可维护性。 远程诊断 支持用户对接入的设备进行远程维护操作,快速定位问题及恢复业务,减少近端维护引入的高成本。当前支持的远程维护操作包括设备的运行日志收集、重启模组。 固件升级 用户可以通过OTA的方式对支持LWM2M协议的设备进行固件升级,升级协议为LWM2M协议。 软件升级 用户可以通过OTA的方式支持对LWM2M协议的设备进行软件升级,升级协议为PCP协议。 网关与子设备 物联网平台支持设备直连,也支持设备挂载在网关上,作为网关的子设备,由网关直连,通过网关进行数据转发。
  • 迁移应用 迁移应用是指将对接了开发中心(测试环境)的应用服务器迁移到设备管理服务(商用环境)中去,您需要完成以下步骤: 为了使应用服务器能对接这个业务使用空间,您需要将对接的平台地址修改为“设备管理服务”的应用对接地址,应用对接地址获取请参考平台对接信息。 在“设备管理服务”中,应用对应的是开发中心的项目。为了使应用服务器能调用平台的接口,您需要将应用服务器中设定的应用ID和应用密钥修改为新的值。 如果应用服务器调用“鉴权”接口成功,表明应用服务器已对接到商用环境。
  • 我是应用开发者(联通用户专用) 非联通用户请查看设备接入服务。 华为物联网平台面向全球各行各业提供物联网服务,并通过Restful API的形式对外开放物联网平台丰富的设备管理能力。应用开发人员基于API接口开发所需的行业应用,如智慧城市、智慧园区、智慧工业、车联网等行业应用,满足不同行业的需求。开发包括如下几个关键阶段。 应用服务器开发阶段 操作指引 调用API接口或者集成SDK 应用开发者通过调用API接口或者集成SDK调用物联网平台的能力进行应用服务器的开发。可参考表1选择合适的开发方式。 开发接收设备数据的接口 应用服务器需开发接收数据对应的接口(对应订阅管理接口中的callbackUrl地址),用于应用服务器向物联网平台发起订阅后,接收物联网平台推送的设备相关数据。 制作调测证书与加载 应用服务器通过HTTPS协议调用物联网平台提供的API接口,需要在应用服务器上预置CA证书,用于应用服务器校验物联网平台的合法性,该证书可通过下载证书文件获取。 物联网平台通过HTTPS或HTTP协议向应用服务器推送数据,当使用HTTPS协议时需要在物联网平台上加载CA证书,同时在应用服务器上加载设备证书,用于物联网平台校验应用服务器合法性。在调测时,您可以通过制作自签名证书进行调测。在商用时,建议您向证书知名机构申请和购买商用证书,以确保证书的安全性。 接入设备管理服务 物联网平台提供了开发中心(调测平台)和商用管理平台,您在进行应用开发和调试时,可以先接入开发调测平台,待功能开发完善,具备商用使用条件时,再接入商用管理平台。 应用接入地址获取请参考平台对接信息,应用ID和应用密钥为在商用管理平台上“创建应用”时分配。 表1 开发方式对比说明 开发方式 优点 缺点 适用场景 调用API接口 开发灵活,随需调用API接口。 对于应用开发语言无限制,支持所有的开发语言 开发工作量、开发难度相比集成SDK大。 应用上线周期相对较长。 企业开发能力强,需灵活使用物联网平台的能力。 企业已有应用服务器,需要对接物联网平台。 集成SDK 代码开发工作量较小,开发能力的门槛相比直接调用API接口较低。 开发周期短,可以快速构建应用服务器。 与直接调用API接口相比,开发的灵活性稍差。 开发语言支持Java、PHP和Python,暂还不支持所有的开发语言。 适用于企业对应用的个性化的定制要求不高,能够快速构建和上线应用。 父主题: 从这里开始
  • 从这里开始 联通用户专用,非联通用户请查看设备接入服务。 使用设备管理服务的完整流程如下图所示,主要分为产品开发、上线和日常管理三个部分。用户可以根据自己角色的不同,执行对应的操作即可。 产品开发:在开发中心(测试环境)操作,开发者在接入设备前,需要进行相应的开发工作,包括平台侧开发(开发中心)、设备侧开发、应用侧开发,是真实设备接入到设备管理服务的前提条件。 其中设备侧开发和应用侧开发不分先后顺序,可同步进行。 上线(转商用):基于设备管理服务提供的控制台,将真实设备接入到设备管理服务中,并对接用户开发的应用服务器,实现设备的远程监控和控制。 日常管理:真实设备接入后,基于控制台或者API接口,进行日常的应用管理和设备管理,详情请参考使用指南。 我是模组厂商(联通用户专用) 我是设备厂商(联通用户专用) 我是设备用户(联通用户专用) 我是应用开发者(联通用户专用)
  • 开发Modbus设备产品模型 产品模型(也称Profile)是用于描述Modbus设备具备的能力,通过定义产品模型,在物联网平台构建一款设备的抽象在线开发Profile型,使平台理解该款Modbus设备支持的服务、属性、命令等信息,如温度、电量等。Modbus设备的产品模型定义分为两部分:包含Modbus设备的能力(图中红色框内容)和定义Modbus点位表(图中蓝色框内容),如图所示。属性和命令的定义请根据在线开发Profile,在定义属性和命令的基础上,再定义Modbus点位表,下面将详细介绍点位表的定义方法。 登录物联网平台控制台,点击右上角进入“开发中心”。 定义Modbus设备的属性和Modbus点位表,属性的定义请参考在线开发Profile文件,然后定义定位表(上图中的新增扩展描述)字段,原则如下表所示。 参数名称 参数说明 Modbus读功能码 读功能码分为“比特访问(Bit Access)”和“16比特访问(16 Bit Access)”,功能码均为十进制。 比特访问功能码: 01:读线圈(Read Coils) 02:读输入离散量(Read Discrete Inputs) 16比特访问功能码: 03:读多个寄存器(Read Holding Registers) 04:读单个寄存器(Read Input Register) Modbus写功能码 写功能码分为“比特访问(Bit Access)”和“16比特访问(16 Bit Access)”,功能码均为十进制。 说明: 定义属性时,无需填写该字段。定义命令时,需要填写。 比特访问功能码: 05:写单个线圈(Write Single Coil) 15:写多个线圈(Write Multiple Coils) 16比特访问功能码: 06:写单个寄存器(Write Single Register) 16:写多个寄存器(Write Multiple Registers) 寄存器起始地址 寄存器起始地址,占16比特,例如:00 01 寄存器数量 属性对应的数据所在的寄存器个数,占16比特,例如:00 02 交换寄存器内高低字节 是否对寄存器内的数据进行高低位交换,默认:True。例如寄存器中存储的属性数据为:10011011,则IoT边缘节点获取的数据经过高低位交互后为:01100111。 交互寄存器顺序 是否对寄存器的位置进行交换,默认:True。例如寄存器的起始地址为0001,寄存器数量为0002,则将0002地址寄存器与0001地址寄存器进行交换。 缩放因子 对寄存器内的数据进行乘以缩放因子,得到所需的数据,例如获取的温度数据为365,缩放因子为0.1,则得到实际的温度数据为365*0.1=36.5 定义Modbus设备的属性和Modbus点位表,命令的定义请参考在线开发Profile文件,然后定义定位表(上图中的新增扩展描述)字段,点位表的填写原则如2中的表格所示。 定义完属性和命令后,请将Profile文件进行导入,然后根据添加Modbus设备操作,在设备管理服务中导入开发的Modbus设备产品模型。
  • 为Modbus设备绑定通道 根据概述中的Modbus接入组网方案可以知道,Modbus设备在接入IoT边缘节点时,需要将Modbus设备绑定到具体的通道中。如果Modbus设备与IoT边缘节点直连,则该通道只能绑定该设备;如果Modbus设备与IoT边缘节点通过网关连接,则需要创建IoT边缘节点与网关之间的传输通道,并将Modbus设备绑定到指定的通道中。 在边缘节点设备的详情界面中,选择“配置”页签。 单击右上角的“通道”按钮,在弹出的对话框中单击“添加”按钮,填写通道信息后单击“确定”,完成TCP传输通道的添加。 参数名称 参数说明 通道名称 定义IoT边缘节点与Modbus设备或网关之间的传输通道。如:Channel_TCP01 传输模式 固定选择“TCP”。 IP地址 IoT边缘节点与Modbus设备或网关建立TCP传输通道时,IoT边缘节点作为客户端,Modbus设备或网关作为服务端,因此该地址需要填写为Modbus设备(直连)或网关(Modbus设备非直连接入IoT边缘节点)的IP地址。如:192.168.10.11 端口 TCP服务端(Modbus设备或网关)的端口号。如:8000 Modbus设备通过网关接入到IoT边缘节点时,如果添加设备前,已经创建了相应的通道,可以不用再执行该步骤,直接按照步骤3绑定Modbus设备即可。 在“配置”页签中,单击“绑定子设备”按钮,然后单击“添加”按钮。 在弹出的添加子设备配置页面中,选择需要绑定的Modbus设备,然后点击“下一步”。 在弹出的对话框中,填写相关信息后,单击“提交”,完成Modbus设备的通道绑定。配置完成后,设备管理服务会将配置信息下发给IoT边缘节点。 参数名称 参数说明 关联通道 选择需要将Modbus设备绑定的通道,如:Channel_TCP01 从站号 用于标识同一个通道下的不同Modbus设备。填写原则:需要与Modbus设备规划的从站号保持一致。 数据采集间隔 IoT边缘节点采集Modbus设备数据的时间间隔,单位为:秒,最小采集间隔可设置为1秒。请根据Modbus设备数据采集的实际周期进行灵活设置。 执行完以上操作后,Modbus设备上电接入到IoT边缘节点后,经过一个数据采集周期即可在设备管理服务的设备列表中查看采集的设备数据。
  • 概述 Modbus协议目前已经成为工业领域通信协议的业界标准,是工业电子设备之间最常用的连接方式。使用Modbus协议的方式包括直连和非直连两种方式,组网方案如下图所示。 接入方式 方案说明 适用场景 直连接入 Modbus设备直接与边缘节点进行连接,通过TCP协议通信。边缘节点作为客户端,Modbus设备作为服务端进行连接。该方式中,在传输通道绑定设备时,边缘节点与Modbus设备之间的通道只能绑定一个设备。 Modbus设备具备TCP通信能力。 说明: Modbus设备具备TCP能力,但如果IP资源比较受限,无法为每一个Modbus设备分配一个IP地址,也可采用非直连方式进行连接组网。 非直连接入 Modbus设备通过RTU串口与网关进行连接,然后边缘节点通过TCP协议与网关进行通信。网关作为Master节点,Modbus设备作为Slave节点进行连接。该方式中,在传输通道(边缘节点与网关之间的TCP传输通道)绑定设备时,需要将该网关下的Modbus设备绑定到指定的通道,并且,在同一个传输通道中,通过“从站号”区分不同的Modbus设备。 Modbus设备不具备TCP通信能力,只能通过RTU(串口)方式进行通信。 在数据采集时,边缘节点可根据指定的数据采集间隔时间,主动向Modbus设备或通过网关向Modbus设备进行数据的采集,数据格式为二进制格式。数据采集完成后,IoT边缘服务将采集的数据规整(Json格式)后,通过MQTT的方式将数据上报到设备管理。
  • 接入流程 业务场景 操作步骤 说明 设备准备 准备Modbus网关 购买支持Modbus协议的网关(Modbus设备与网关支持通过RTU通信,网关与边缘节点采用TCP通信) 准备Modbus设备 购买支持Modbus协议的传感器设备 物联网平台侧操作 开发Modbus设备产品模型 在产品中心开发Modbus设备的产品模型 添加Modbus设备 在边缘节点下,添加Modbus设备 创建Modbus通道和绑定设备 将Modbus设备绑定到指定的TCP传输通道
  • 在线开发Profile(联通用户专用) 非联通用户请查看设备接入服务。 在线创建Profile前需要先创建项目并定义产品。创建产品需要输入manufactureId、manufactureName、deviceType、Model等信息,Profile会使用这些信息作为设备能力字段取值。在产品创建时,如果选择使用系统模板,则系统将会自动使用相应的Profile模板,您可以直接使用或在此基础上进行修改;如果选择自定义产品模板,则需要完整定义Profile。 本节定义包含一个服务的Profile为示例,该Profile包含设备上报数据、下发命令、下发命令响应、软固件升级等场景的服务和字段。 在“产品开发”界面选择产品,选择具体产品,进入该产品的开发空间。 在产品开发空间,点击“Profile定义”,然后点击“新建服务”。 在“新建服务”区域,对服务名称、属性和命令进行定义。每个服务下,可以包含属性和命令,也可以只包含其中之一,请根据此类设备的实际情况进行配置。 填写“服务名称”,“服务名称”采用首字母大写的命名方式,比如:WaterMeter、Battery。 点击“添加属性”,在弹出窗口中配置属性的各项参数,点击“确定”。 名称:首位必须为字母,建议采用驼峰形式,如batteryLevel、internalTemperature。 数据类型:配置可参考如下原则: int:当上报的数据为整数或布尔值时,可以配置为此类型。 decimal:当上报的数据为小数时,可以配置为此类型。配置“经纬度”属性时,数据类型建议使用“decimal”。 string:当上报的数据为字符串、枚举值或布尔值时,可以配置为此类型。如果为枚举值或布尔值,值之间需要用英文逗号(“,”)分隔。 DateTime:当上报的数据为日期时,可以配置为此类型。 jsonObject:当上报的数据为json结构体时,可以配置为此类型。 访问模式:设置应用服务器通过接口访问数据的模式: R:通过接口可以查询该属性。 W:通过接口可以修改该属性值。 E:应用服务器订阅了数据变化通知后,设备上报了属性,应用服务器会收到推送通知。 是否必选:设备上报的这个属性是不是必选。 点击“添加命令”,在弹出窗口中配置“命令名称”,点击“确定”。“命令名称”首位必须为字母,建议采用全大写形式,单词间用下划线连接的命名方式,如DISCOVERY,CHANGE_STATUS。 点击“添加下发命令字段”,在弹出窗口中配置下发命令字段的各项参数,点击“确定”。“下发命令字段名称”首位必须为字母,建议采用第一个单词首字母小写,其余单词的首字母大写的命名方式,比如valueChange;其余参数,请根据此类设备的实际情况进行配置。 如果要添加命令响应,点击“添加响应命令字段”,在弹出窗口中配置响应命令字段的各项参数,点击“确定”。“响应命令字段名称”首位必须为字母,建议采用第一个单词首字母小写,其余单词的首字母大写的命名方式,比如valueResult;其余参数,请根据此类设备的实际情况进行配置。 如果要添加软件/固件升级能力,在“维护能力配置 ”下,开启“软件升级”/“固件升级”。 提交后,Profile中会自动多出一个“DM服务”应用于升级。 父主题: 开发Profile
  • AT指令集 AT指令用于控制设备。如下AT命令仅供参考,具体命令集请向相应的模组厂商获取。 AT命令 作用 备注 AT+CMEE=1 报错查询。 标准AT指令 AT+CFUN=0 关机。设置IMEI和平台IP端口前要先关机。 标准AT指令 AT+CGSN=1 查询IMEI。IMEI为设备标识,应用服务器调用API接口注册设备时,nodeId/verifyCode都需要设置为IMEI。 标准AT指令 AT+NTSETID=1,xxxx xxxx为IMEI。如果查询不到可自行设置IMEI,IMEI必须是唯一的,不能与其他设备重复,且只能设置一次。 IMEI为设备标识,应用服务器调用API接口注册设备时,如果设备使用海思芯片,则nodeId/verifyCode都需要设置成IMEI;如果设备使用高通芯片,则nodeId/verifyCode都需要设置成urn:imei:IMEI。 海思芯片私有AT指令,在flash中保存IMEI。应用服务器在向平台进行设备注册时,使用此参数,其他芯片或模组厂商可参考实现。 AT+NCDP="IP","port" 设置设备对接的物联网平台的IP地址和端口号,5683为非加密端口,5684为DTLS加密端口。 海思芯片私有AT指令,在flash中保存IP和端口。应用服务器在向平台进行设备注册时,使用此参数,其他芯片或模组厂商可参考实现。 AT+CFUN=1 开机。 标准AT指令 AT+NBAND=频段 设置频段。 海思芯片私有AT指令,在flash中保存频段。设备在入网时,使用此参数,其他芯片或模组厂商可参考实现。 AT+CGDCONT=1,"IP","CTNB" 设置核心网APN。APN与设备的休眠、保活等模式有关,需要与运营商确认。 标准AT指令 AT+CGATT=1 入网。 标准AT指令 AT+CGPADDR 获取终端IP地址。 标准AT指令 AT+NMGS=x,xxxx 发送上行数据。第1个参数为字节数,第2个参数为上报的16进制业务码流。 海思芯片私有AT指令,初次发送数据时,完成设备注册;后续发送数据时,仅发送数据。其他芯片或模组厂商可参考实现。 AT+NQMGR 接收下行数据。 海思芯片私有AT指令,查询接收buffer中可以接收的数据量,以及当前总共接收的消息数和丢弃的消息数。其他芯片或模组厂商可参考实现。 AT+NMGR 读取数据。 海思芯片私有AT指令,读取从物联网平台(LWM2M SERVER)接收到的数据。其他芯片或模组厂商可参考实现。
  • 接入流程 测试场景:平台提供LoRaWAN协议的测试环境,多个用户共用一个Network Server,您可以通过提工单的方式获取测试账号,目前账号使用期限为7天,到期回收。 商用场景:LoRa服务商在华为云为每个客户部署一个Network Server。 前置条件: 在LoRaWAN设备接入物联网平台前,您需要完成以下前置条件: 选择LoRa服务商:选择一个LoRa服务商并与其达成合作关系,您可以通过提交工单咨询华为云物联网平台当前支持的LoRa服务商。 完成LoRa网络的对接调试:在选择LoRa服务商后,您需要根据LoRa服务商的要求和指导,完成LoRaWAN设备、LoRa网关和LoRa Server的对接调试。 接入流程: 步骤 说明 对接LoRa Server LoRa Server作为一个MQTT设备在物联网平台上注册并上线。 创建LoRa网关 LoRa网关作为LoRa Server下的一个子设备,在物联网平台上注册。 创建LoRaWAN设备 LoRaWAN设备作为LoRa Server下的一个子设备,在物联网平台上注册。 业务调试 对接入物联网平台的LoRaWAN设备进行数据上报和命令下发测试,具体操作可参考数据上报和命令下发。
  • 概述 LoRa(Long Range Radio)是当前应用较广的一种物联网无线接入技术,它最大的特点就是在同样功耗条件下比其他无线接入方式传播的距离更远,实现了低功耗和远距离的统一,它在同样的功耗下比传统的无线射频通信距离扩大3-5倍。而LoRaWAN是为LoRa远距离通信网络设计的一套通讯协议和系统架构。 物联网平台支持设备通过LoRa网络接入,但LoRaWAN设备不能直连物联网平台,需要经过LoRa服务商提供的LoRa Server接入物联网平台,如下图所示。 LoRa Server:由LoRa服务商提供的LoRa接入服务器,LoRa Server与物联网平台之间通过MQTT协议对接,与LoRa网关之间通过标准IP网络对接。 LoRa网关:LoRa网关向设备提供LoRa网络接入,设备通过LoRa网关对接到LoRa Server。LoRa网关通常也由LoRa服务商提供。 LoRaWAN设备:LoRaWAN设备即LoRa节点,其通过LoRa网络接入LoRa网关,然后通过LoRa Server最终接入到物联网平台。LoRaWAN设备可以通过以下几种方式获取: 直接购买合适的LoRaWAN设备。 购买LoRa模组,并集成到设备中。 LoRaWAN设备和LoRa网关并无一一对应关系,LoRaWAN设备可通过LoRa网络向任一个LoRa网关发送数据。若多个LoRa网关同时接收到一个LoRaWAN设备的数据并上报到LoRa Server,LoRa Server会进行数据去重。
  • 非直连设备状态更新 注册观察者对非直连设备状态更新结果进行相应处理。 123456 //注册观察者AgentLiteHub agentLiteHub = AgentLiteHub.getInstance();HubService hubService = HubService.getInstance();hubService.registerObserver(agentLiteHub);//sensor状态更新agentLiteHub.updataDeviceStatus(); 非直连设备添加上时,一般情况下是“离线”状态。所以在非直连设备添加成功后,或者在非直连设备上报数据前,要调用HubService.updateDeviceStatus(int cookie, String deviceId, String status, String statusDetail)进行设备状态更新。 1 2 3 4 5 6 7 8 91011 public void updataDeviceStatus() {System.out.println(" ============= updataDeviceStatus ============== "); int cookie; Random random = new Random(); cookie = random.nextInt(65535); String sensorId = GatewayInfo.getSensorId(); System.out.println("cookie = " + cookie); System.out.println("sensorId = " + sensorId); HubService.updateDeviceStatus(cookie, sensorId, "ONLINE", "NONE");}
  • 命令接收 当开发者希望设备或网关只接收topic为“/gws/deviceid/signaltrans/v2/categories/”的消息,且对消息中的header进行解析时,可以调用“设备命令接收”接口。 应用服务器可以调用物联网平台的应用侧API接口给设备或网关下发命令,所以网关得随时监听命令下发的广播,以便接收到命令时进行相应业务处理。 注册观察者对命令接收进行相应处理。 123456 //注册观察者AgentLiteDataTrans agentLiteDataTrans = AgentLiteDataTrans.getInstance();DataTransService dataTransService = DataTransService.getInstance();dataTransService.registerObserver(agentLiteDataTrans);//命令接收agentLiteDataTrans.getCmdReceive(); 被动接收命令的方法getCmdReceive: 1 2 3 4 5 6 7 8 91011121314151617 private void getCmdReceive(IotaMessage iotaMsg) { System.out.println("=========receive iotCMD ============"); String deviceId = iotaMsg.getString(DataTransService.DATATRANS_IE_DEVICEID); String requestId = iotaMsg.getString(DataTransService.DATATRANS_IE_REQUSTID); String serviceId = iotaMsg.getString(DataTransService.DATATRANS_IE_SERVICEID); String method = iotaMsg.getString(DataTransService.DATATRANS_IE_METHOD); String cmd = iotaMsg.getString(DataTransService.DATATRANS_IE_CMDCONTENT); if (method.equals("REMOVE_GATEWAY")) { //rmvGateway(context); } System.out.println ("Receive cmd :" + "ndeviceId = " + deviceId + "nrequestId = " + requestId + "nserviceId = " + serviceId + "nmethod = " + method + "ncmd = " + cmd);}
  • 数据上报和数据发布 设备或网关向物联网平台上报数据可以通过调用SDK的“设备服务数据上报”接口或“数据发布”接口: “设备服务数据上报”接口:deviceId,requstId和serviceId由SDK组装为消息的header;serviceProperties由SDK组装为消息的body。消息组装格式为JSON。 注册观察者对网关数据上报结果进行相应处理。 123456 //注册观察者AgentLiteDataTrans agentLiteDataTrans = AgentLiteDataTrans.getInstance();DataTransService dataTransService = DataTransService.getInstance();dataTransService.registerObserver(agentLiteDataTrans);//数据上报agentLiteDataTrans.gwDataReport(); 设备或网关登录成功后可以调用DataTransService.dataReport(int cookie, String requstId, String deviceId, String serviceId, String serviceProperties)接口上报数据。 1 2 3 4 5 6 7 8 910111213 public void gwDataReport() { System.out.println(" ============= gwDataReport! ============== "); int cookie; Random random = new Random(); cookie = random.nextInt(65535); String deviceId = GatewayInfo.getDeviceID(); JsonObject data = new JsonObject(); data.addProperty("storage", "10240"); data.addProperty("usedPercent", "20"); DataTransService.dataReport(cookie, null, deviceId, "Storage", data.toString());} 数据上报成功后可以在设备的“历史数据” 中看到上报的数据了。 “数据发布”接口:topic固定为“/cloud/signaltrans/v2/categories/data”;“serviceData”参数作为消息体(包括header和body),SDK只进行透传,不进行格式调整和组装。 注册观察者对网关数据上报结果进行相应处理。 123456 //注册观察者AgentLiteDataTrans agentLiteDataTrans = AgentLiteDataTrans.getInstance();DataTransService dataTransService = DataTransService.getInstance();dataTransService.registerObserver(agentLiteDataTrans);//数据发布agentLiteDataTrans.gwDataReportByMqttDataPub(); 设备或网关登录成功后可以调用DataTransService. mqttDataPub(int cookie, String topic, int qos, byte[] serviceData)接口发布数据。 “topic”是要发布数据的topic。 “qos”是mqtt协议的一个参数。 “serviceData”实际上是一个json字符串,内容是健值对(可以有多组健值对)。每个健是profile中定义的属性名(propertyName),值就是具体要上报的内容了。 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233 public void gwDataReportByMqttDataPub() { System.out.println(" ============= gwDataReportByMqttDataPub! ============== "); int cookie; Random random = new Random(); cookie = random.nextInt(65535); String deviceId = GatewayInfo.getDeviceID(); JsonObject headerData = new JsonObject(); headerData.addProperty("method", "PUT"); String fromStr = "/device/"+deviceId+"/services/Storage"; String toStr = "/data/v1.1.0/devices/"+deviceId+"/services/Storage"; headerData.addProperty("from", fromStr); headerData.addProperty("to", toStr); headerData.addProperty("access_token", GatewayInfo.getAccessToken()); SimpleDateFormat df = new SimpleDateFormat(MSG_TIMESTAMP_FORMAT); df.setTimeZone(TimeZone.getTimeZone("UTC")); String curTime = df.format(new Date(System.currentTimeMillis())); headerData.addProperty("timestamp", curTime); headerData.addProperty("eventTime", curTime); JsonObject bodyData = new JsonObject(); bodyData.addProperty("storage", "10240"); bodyData.addProperty("usedPercent", "18"); JsonObject mqttMsg = new JsonObject(); mqttMsg.add("header", headerData); mqttMsg.add("body", bodyData); DataTransService.mqttDataPub(cookie, "/cloud/signaltrans/v2/categories/data", 1, mqttMsg.toString().getBytes());}
  • 添加非直连设备 在添加非直连设备前,确认非直连设备的profile已经上传了,详见上传Profile并注册设备步骤。 修改非直连设备信息,包括“nodeId”(设备标识码)、“manufactureId”(厂商Id)、“deviceType”(设备类型)、“model”(设备模型)和“protocolType”(协议类型)。这里非直连设备的设备固有信息是测试数据,真实情况下,网关往往需要跟具体的非直连设备交互,才能得到具体的设备固有信息。 1 2 3 4 5 6 7 8 91011121314 public void addSensor() { System.out.println(" ============= addSensor! ============== "); int cookie; Random random = new Random(); cookie = random.nextInt(65535); String nodeId = "5432154321"; String manufatrueId = "Huawei"; String deviceType = "Motion"; String model = "test01"; String protocolType = "MQTT"; deviceInfo = new IotaDeviceInfo(nodeId, manufatrueId, deviceType, model, protocolType); ...} 注册观察者对添加设备结果进行相应处理。 123456 //注册观察者AgentLiteHub agentLiteHub = AgentLiteHub.getInstance();HubService hubService = HubService.getInstance();hubService.registerObserver(agentLiteHub);//sensor添加agentLiteHub.addSensor(); 在设备或网关登录成功后就可以调用HubService.addDevice(int cookie, IotaDeviceInfo deviceInfo)接口添加非直连设备。添加非直连设备成功后就能从广播中得到非直连设备的“deviceId”。 12345678 public void addSensor() { System.out.println(" ============= addSensor! ============== "); int cookie; Random random = new Random(); cookie = random.nextInt(65535); ... HubService.addDevice(cookie, deviceInfo);} 非直连设备添加成功后在“设备列表”中看到新增一条记录。
  • 绑定和登录 设备或网关第一次接入物联网平台时需要进行绑定操作,从而将设备或网关与平台进行关联。开发者通过传入设备验证码以及设备信息,将设备或网关绑定到物联网平台。 修改绑定参数。 绑定时使用的设备固有信息(如设备型号等)是从“AgentLiteBind.java”文件中读取的,所以需要修改./src/main目录下“AgentLiteBind.java”文件中的如下信息: 物联网平台的设备对接地址(MQTTS)和端口,可参考平台对接信息获取。 123 //设置配置参数private static final String PLATFORM_IP = "100.100.100.100";private static final String HTTPS_PORT = "8943"; “verifyCode”(设备验证码)和必要的设备信息,包括“nodeId”(设备标识码)、“manufactureId”(厂商Id)、“deviceType”(设备类型)、“model”(设备模型)和“protocolType”(协议类型)。“verifyCode”的值与“nodeId”保持一致,“manufactureId”(厂商Id)、“deviceType”(设备类型)、“model”(设备模型)和“protocolType”(协议类型)与Profile文件中的定义保持一致。 如果开发者通过“设备管理服务控制台”注册设备,则“verifyCode”填写为设备注册时的“preSecret”(预置密钥)。 如果通过开发中心注册设备,则“verifyCode”填写为设备注册时设置的“nodeId”(设备标识)。 1 2 3 4 5 6 7 8 91011 public void bindAction() {System.out.println(" ============= start bind ============== ");String nodeId = "1234568";String verifyCode = "1234568";String manufactrueId = "Huawei";String deviceType = "Gateway";String model = "AgentLite01";String protocolType = "LWM2M";deviceInfo = new IotaDeviceInfo(nodeId, manufactrueId, deviceType, model, protocolType); ...} 绑定设备。 注册观察者对设备绑定结果进行相应处理。 123456 //注册观察者AgentLiteBind agentLiteBind = AgentLiteBind.getInstance();BindService bindService = BindService.getInstance();bindService.registerObserver(agentLiteBind);//网关绑定agentLiteBind.bindAction(); 调用API接口BindConfig.setConfig()设置绑定配置,接着调用API接口BindService .bind(String verifyCode, IotaDeviceInfo deviceInfo)绑定设备。 12345678 public void bindAction() { System.out.println(" ============= start bind ============== "); ... //绑定配置 configBindPara(); //发起绑定请求 BindService.bind(verifyCode, deviceInfo);} 1234567 //绑定配置private static void configBindPara() {boolean res = false;res = BindConfig.setConfig(BindConfig.BIND_CONFIG_ADDR, PLATFORM_IP);res = BindConfig.setConfig(BindConfig.BIND_CONFIG_PORT, HTTPS_PORT);...} 设备或网关绑定成功,后续就不需要再绑定了,除非设备或网关被删除,才需要重新绑定。 设备绑定成功会收到BindService发出的通知,通知内容请参考Agent Lite API接口文档中设备绑定接口的返回结果说明和demo中update函数的处理。 修改登录参数。 在demo的./src/main/AgentLiteLogin.java设置物联网平台的接入IP与端口。 123 private static final String PLATFORM_IP = "100.100.100.100";private static final String MQTTS_PORT = "8883";private static final String HTTPS_PORT = "8943"; 设备登录。 注册观察者对设备登录结果进行相应处理。 123456 //注册观察者AgentLiteLogin agentLiteLogin = AgentLiteLogin.getInstance();LoginService loginService = LoginService.getInstance();loginService.registerObserver(agentLiteLogin);//网关登录agentLiteLogin.loginAction(); 调用API接口LoginConfig.setConfig()传入所需的登录信息,接着调用API接口LoginService.login()进行直连设备登录,具体API的参数使用参考Agent Lite接口文档中的设备登录接口说明。 “设备Id”(即网关Id, “ LOG IN_CONFIG_DEVICEID”),“appId”(“LOGIN_CONFIG_APPID”)和“密码”(“LOGIN_CONFIG_SECRET”),这些信息是都是从网关绑定成功的通知中得到的。 “平台HTTP地址”(“LOGIN_CONFIG_IOCM_ADDR”)和“MQTT地址”(“LOGIN_CONFIG_MQTT_ADDR”)一般是同一个地址。 12345 public void loginAction() { System.out.println(" ============= start login ============== "); configLoginPara(); LoginService.login();} 1 2 3 4 5 6 7 8 9101112131415161718 private static void configLoginPara() { if(AgentLiteUtil.isStringEmpty(GatewayInfo.getDeviceID()) || AgentLiteUtil.isStringEmpty(GatewayInfo.getAppID()) || AgentLiteUtil.isStringEmpty(GatewayInfo.getSecret())){ String jsonStr = AgentLiteUtil.readToString("./workdir/gwbindinfo.json"); JsonObject json = new Gson().fromJson(jsonStr, JsonObject.class); GatewayInfo.setDeviceID(json.get("deviceId").getAsString()); GatewayInfo.setAppID(json.get("appId").getAsString()); GatewayInfo.setSecret(json.get("deviceSecret").getAsString()); } LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_DEVICEID, GatewayInfo.getDeviceID()); LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_APPID, GatewayInfo.getAppID()); LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_SECRET, GatewayInfo.getSecret()); LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_IOCM_ADDR, PLATFORM_IP); LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_IOCM_PORT, HTTPS_PORT); LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_MQTT_ADDR, PLATFORM_IP); LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_MQTT_PORT, MQTTS_PORT);}
  • 使用必读 开发环境要求: 使用的SDK版本为jdk1.8.0_45,适用的操作系统为Windows系统。 工程目录结构及文件说明: 目录结构 目录 说明 AgentLiteDemo │ ├─src │ └─com │ └─huawei │ └─agentlitedemo ├─libs │ └─agentlite-0.0.1-SNAPSHOT │ └─usp_agentlite.jar │ └─.dll └─workdir │ └─conf src 存放Agentlite Demo代码。 libs 存放Agentlite提供的jar包和第三方jar包,以及.dll动态库(工程必须的三个文件,“agentlite-0.0.1-SNAPSHOT”,“usp_agentlite.jar”,“.dll”文件)。 workdir 存放工程日志文件,由agentlite初始化资源设置。 conf 存放TLS证书文件。 如果开发者没有设备,可以直接在X86 Linux系统进行开发。
  • 初始化 在发起业务前,需要先初始化Agent Lite相关资源,调用API接口BaseService.init(),初始化Agent Lite资源,具体API的参数使用参考Agent Lite API接口文档。 调用BaseService.init(String workPath, String logPath)初始化AgentLite资源。 1 res = BaseService.init("./workdir", null);
  • 制作软件升级版本包 设备升级的软件包文件由各设备厂商提供,在物联网平台上传设备的软件升级包前,需要制作软件升级的版本包,用于修改软件包的描述文件,如软件版本、厂商名称、设备类型、产品模型等信息。下面将详细介绍版本包的制作方法。 新建文件夹命名为“DM”,在DM文件夹下新建文件夹,命名为“linux”。 使用Notepad++文本工具新建一个文本文件,拷贝如下内容到文本中,在Notepad++工具的“编码”菜单中选择“使用UTF-8编码”,然后将文本进行存储,存储路径选择步骤1中的“linux”文件夹,文件名称命名为“UpgradeDesc”,保存类型选择“.json”。 { "specVersion": "", "fileName": "", "packageType": "", "version": "", "deviceType": "", "manufacturerName": "", "model": "", "protocolType":"", "description":"", "versionCheckCode":"", "deviceShard":"", "platform":"", "supportSourceVersionList":[], "date":""} 打开创建的“UpgradeDesc.json”文件,修改软件升级描述文件,相关字段如下表所示。 字段名 字段描述 是否必填 specVersion 描述文件版本号,固定值:“1.0”。 是 fileName 软件包文件名,例如:“ExamplePackage_V1.0.10.xx”。 是 packageType 软件包类型,必须设置为:“softwarePackage”。 是 version 软件包版本号长度不超过16个字节,例如:“V1.0.10” 是 deviceType 设备类型,需要与产品模型保持一致。例如:“WaterMeter”。 是 manufacturerName 制造商名称,需要与产品模型保持一致。例如:“TestUtf8ManuName”。 是 model 产品型号,需要与产品模型保持一致。例如:“TestUtf8ModelM2M”。 是 protocolType 设备接入协议类型,需要与产品模型保持一致。例如:“CoAP”。 说明: 设备接入的协议类型有三种:“CoAP”、“LWM2M”、“MQTT”。 是 description 对软件包的自定义描述。 是 versionCheckCode 软件升级包校验码,长度为4个字符。软件包下载时支持断点续传,根据该字段标识前后两次下载的软件包分片是否为同一个软件包。 否 deviceShard 终端下载软件包的每个分片的大小,单位为byte,如果不设置默认为500byte。大小为32~500之间。 否 platform 标识设备的操作系统,如linux。 否 supportSourceVersionList 支持用于升级此版本包的设备源版本列表。 支持通配符配置,*代表匹配任意0~n个字符,?代表匹配单个任意字符,如果存在多个版本,请使用英文“;”隔开。 否 date 出包时间,格式为:“yyyy-MM-dd”。 否 在与“DM”同级目录下创建文件夹,命名为“linux”,该文件夹名称必须同步骤1中的文件夹命令保持一致,将厂商软件包(软件包格式无限制)置于该文件中。 选中“DM”和“linux”文件夹,使用压缩工具打包成ZIP格式的压缩包,建议命令为“xx_package.zip”。 文件“DM”和“linux”的命名是固定的。 “xx_package.zip”下不能包含package这层目录。 仅支持ZIP格式的压缩包,不能压缩成其他格式后,例如rar,再手动修改文件类型为zip。
  • 业务概览 当用户在开通设备管理服务时,系统默认一起开通设备接入服务,即用户在使用设备管理服务时,包含设备接入服务的能力。使用设备管理服务的完整流程如下图所示,主要分为在开发中心(测试环境)进行产品开发、在控制台(商用环境)进行上线和日常管理。 产品开发:开发者在进行设备接入前,基于开发中心进行相应的开发工作,包括平台侧开发、设备侧开发、应用侧开发,是真实设备接入到设备管理服务的前提条件。 上线(转商用):基于设备管理服务提供的控制台,将真实设备接入到设备管理服务中,并对接用户开发的应用服务器,实现设备的远程监控和控制。 日常管理:真实设备接入后,基于控制台或者API接口,进行日常的应用管理和设备管理。 远端开发 转商用 设备侧开发 云端日常管理 创建项目 创建产品 开发Profile 开发编解码插件 设备侧开发 应用侧开发 API使用指导 使用SDK对接 调测产品 自助测试 产品发布 创建应用 导入产品 注册设备 接入设备 应用接入 对接验证 使用MQTTS协议接入(联通用户专用) 使用Modbus协议接入(联通用户专用) 使用Agent SDK接入 使用模组接入 软固件升级调测 应用管理 订阅推送 授权访问 设备管理 设备注册鉴权 数据上报 命令下发 设备配置更新 设备影子 规则引擎 群组与标签 设备监控 远程诊断 固件升级 软件升级 网关与子设备
  • 开发中心与设备管理服务的差异 了解开发中心 开发中心是基于设备管理服务提供的物联网一站式开发工具,帮助开发者快速进行Profile(产品模型)和编解码插件的开发,同时提供在线自助测试、产品发布等多种能力,端到端指引物联网开发,帮助开发者提升集成开发效率、缩短物联网解决方案建设周期。 产品开发:提供产品开发向导,端到端引导开发者完成Profile开发、插件开发以及产品调测,助力物联网产品快速上线。 应用开发:支持对接信息、订阅调试、应用调试等能力,帮助开发者进行应用侧开发和调试,助力物联网应用便捷开发。 自助测试:支持对设备、应用进行自动化测试,并生成测试报告,检验产品是否达到发布标准。 产品发布:产品在开发中心完成自助测试后,开发者可以一键申请发布到产品中心,已发布的产品可直接应用于商用环境。 了解设备管理服务 请前往平台简介查看设备管理服务的介绍。 开发中心和设备管理服务有哪些差异? 两者所在的物联网平台环境不一样 开发中心所在的平台环境为测试环境,设备管理服务所在的平台环境为商用环境。两个环境的设备数据不能互通,已对接测试环境的设备/应用要迁移商用环境,需要在商用环境重新创建应用和注册设备,并修改设备/应用中平台的接入信息。 两者的设备数量限制不一样 开发中心单个项目(应用)下最多可注册20个设备,设备管理服务单个应用下最多可注册1000万个设备。在其他的平台能力上,两者保持一致,例如开发中心和设备管理服务使用同样的API,更多的平台能力使用限制请查看使用限制。 两者的计费策略不一样 开发中心为免费使用,设备管理为付费使用,设备管理服务的具体计费策略请查看计费详情。 开发中心和设备接入服务是否有联系? 开发中心是基于设备管理服务的物联网开发工具,在开发中心上开发的产品(Profile文件和编解码插件)只适用于设备管理服务,不能在设备接入服务中导入和使用。
  • 方案概述 基于设备管理服务去实现一个物联网解决方案时,需要完成以下开发操作: 开发操作 开发说明 平台侧的开发 主要包括Profile的开发和编解码插件的开发。编解码插件的开发仅针对上报数据为二进制码流格式的设备,对于上报数据为JSON格式的设备不需要开发编解码插件。 设备侧的开发 主要为设备与物联网平台的集成对接开发,包括设备接入物联网平台、业务数据上报和对平台下发控制命令的处理。 应用侧的开发 主要为业务应用与物联网平台的集成对接开发,包括API接口的调用、业务数据的获取和HTTPS证书的管理。 基于物联网平台开发一个物联网解决方案的工作流程请参考从这里开始。
  • 使用在线模拟器调试 模拟器在线调测具备设备模拟和应用模拟功能,可以对定义的Profile文件和编解码插件进行调试,用户可以直观的感受设备上报数据到物联网平台,以及使用物联网平台下发远程控制命令。 在“产品开发”页面进入到创建的产品中,选择“在线调测”,并单击“新增测试设备”。 选择“没有真实的物理设备”,使用模拟器进行调测,单击“创建”后,系统会默认创建一个模拟设备,并接入调测界面。 模拟设备数据上报场景,假设上报路灯采集的光照强度为:20,路灯开关状态为:0(关闭),则在设备模拟器中,输入十六进制码流:1400(光照强度消息为第一个字节,对应的十六进制码流为14;路灯开关状态为第二字节,对应的十六进制码流为00),然后单击“发送”,我们可以在应用模拟器中看到转换为JSON格式的数据为:"Light_Intensity": 20, "Light_Status": 0。 模拟远程下发控制命令场景,在应用模拟器中,选择服务:StreetLight,命令:SWITCH_LIGHT,命令取值为:ON,单击“立即发送”,我们可以在设备模拟器中看到转换为十六进制的码流:4F4E(经ASCLL码转为为十六进制)。
  • 产品在线开发 产品模型(也称Profile)用于描述设备具备的能力和特性。开发者通过定义Profile文件,在物联网平台构建一款设备的抽象模型,使平台理解该款设备支持的服务、属性、命令等信息,例如温度、光强度、开关等。 本示例以一款智慧路灯为例进行描述,假设路灯设备上报一条数据消息,包含路灯的光照强度(Light_Intensity)和路灯的开关状态(Light_Status);支持远程控制路灯开关状态的命令(SWITCH_LIGHT)。 在“产品开发”界面,点击“新建产品”,然后选择“自定义产品”。 在弹出的对话框中,设置产品信息,完成后点击“创建”。 进入到Profile定义界面后,点击“新建服务”,填写服务信息,然后点击“√”。 定义路灯上报的环境光强度和路灯开关状态的属性。首先输入“服务名称”:StreetLight,然后点击“新增属性”。 首先定义一条属性为:路灯采集的当前环境的光照强度,数据类型为int,光照强度范围为:0~100。 再点击“添加属性”按钮,定义一条属性为:路灯当前的开关灯状态,数据类型为int,0代表关闭,1代表打开状态。 接下来定义远程控制开关灯状态的命令。点击“添加命令”按钮,定义命令名称为:SWITCH_LIGHT。 点击“添加下发命令字段”,命令名称为:SWITCH_LIGHT,数据类型为:string,长度为:3个字符,枚举值为:ON,OFF。 点击“确定”按钮,完成该路灯的Profile文件创建。
  • 开发中心申请和创建项目 用户第一次使用物联网平台云服务时,首先需要申请开通“开发中心”服务。基于开发中心,用户可以在线开发设备的Profile文件和编解码插件;另外开发中心提供了设备和应用模拟器,可以便捷地调测开发的Profile文件和编解码插件的正确性。 登录华为云官方网站,访问IoT设备管理服务。 在设备管理云服务首页,点击“开发中心”开通业务。 填写开通信息,本示例以选择“智能路灯解决方案”为例,点击“立即开通”。 (可选)进入“开发中心”首页后,如果用户是第一次使用,首先需要点击右上角的“厂商信息”,编辑并完善厂商信息后,返回主页。 在“开发中心”首页,点击“新建项目”,创建一个新的物联网产品项目,填写项目名称、所属行业后,点击“确定”。 创建完项目后,会生成应用ID和应用密钥,请将密钥下载到本地并妥善保管,然后进入项目。 应用密钥用于应用服务器接入的鉴权,在界面上不可见,请妥善保管,如果忘记了密钥,可以在“对接信息”功能中,对密钥进行重置。 项目创建完成后,可以在“对接信息”中,查看项目的基本信息,例如设备接入信息、应用接入信息、重置密钥等。
  • 编解码插件在线开发 通常情况下设备为了省电,设备会采用“二进制”格式上报数据,编解码插件的作用就是将设备上报的“二进制”格式数据,按照Profile文件的定义的属性转换为“JSON”格式数据,便于物联网平台和应用服务器识别。同时,用户远程下发控制命令时,物联网平台会将“JSON”格式的命令转换为“二进制”格式数据下发给设备。 注:如果设备本身上报的是JSON格式数据,则不需要定义编解码插件,如使用Agent Lite接入的设备。 在“产品开发”页面进入到创建的产品中,选择“编解码插件开发”。 在“在线编解码插件编辑器”中,点击“新增消息”。 输入消息名:LightData,消息类型选择:数据上报,然后再点击“添加字段”。 输入上报消息的名字:LightIntensity,数据类型:int8u(8位无符号整型),长度:1字节,单击“完成”。 再次单击“添加字段”,添加路灯上报的路灯开关状态数据。 输入名字:LightStatus,数据类型:int8u(8位无符号整型),长度:1字节,单击“完成”。 单击“完成”,完成路灯上报数据的编解码定义。 再次单击“新增消息”,定义远程控制路灯开关的命令对应的编解码插件消息。 输入消息名:SwitchStatus,消息类型选择:命令下发,然后再点击“添加字段”。 输入名字:SwitchStatus,数据类型:string(字符串类型),长度:3字符,单击“完成”。 单击“完成”,完成远程控制命令的编解码定义。 拖动右侧“设备模型”区域的属性字段和命令字段(Profile文件定义的字段),与编解码插件定义的数据上报消息和命令下发消息的相应字段建立映射关系。 编解码插件与Profile文件建立映射完成后,单击右上角“保存”,并单击“部署”,完成编解码插件的部署。
共100000条