华为云用户手册

  • 车辆管理-设置多边形区域电子围栏 接口说明 请求对应的消息ID:0x8604 响应对应的消息ID:0x0001(终端通用响应) 请求示例 { "service_id": "VehicleManagement" "command_name": "SetPolygonArea", "paras": { "areaId": 1, "areaProperty": 1, "startTime": "211119170110", "endTime": "211119170111", "maxSpeed": 0, "durationOverSpeed": 0, "vertices": [ { "latitude": 0, "longitude": 1 } ], "maxNightSpeed": 0, "areaName": "test" } } 请求参数 paras字段同协议中消息的映射关系 表25 参数描述 字段名 类型 协议字段 参数描述 areaId int 区域ID 区域ID areaProperty int 区域属性 区域属性 startTime string 起始时间 格式为YYMMDDHHMMSS endTime string 结束时间 格式为YYMMDDHHMMSS vertices jsonObject 区域定点 多边形区域定点信息 maxSpeed int 最高速度 单位为千米每小时(km/h) durationOverSpeed int 超速持续时间 单位为秒(s) maxNightSpeed int 夜间最高速度 单位为千米每小时(km/h) areaName string 区 域名 称 区域的名称描述 vertice字段同协议中消息的映射关系 表26 参数描述 字段名 类型 协议字段 参数描述 latitude int 中心点纬度 以度为单位的纬度值乘以10的6次方,精确到百万分之一。 longitude int 中心点经度 以度为单位的经度值乘以10的6次方,精确到百万分之一。 响应示例 { "command_id": "1641969363120826882", "response": { "paras": { "flowNo": 0, "msgId": 33027, "resultCode": 0 }, "result_code": 0 } } 响应参数(终端通用响应) paras字段定义 表27 参数描述 字段名 类型 参数描述 flowNo int 应答流水号 msgId int 对应的平台的消息ID resultCode int 结果
  • 车辆管理-删除圆形区域电子围栏 接口说明 请求对应的消息ID:0x8601 响应对应的消息ID:0x0001(终端通用响应) 请求示例 { "service_id": "VehicleManagement", "command_name": "RemoveRoundArea", "paras": { "areaIds": [ 1 ] } } 请求参数 paras字段同协议中消息的映射关系 表23 参数描述 字段名 类型 协议字段 参数描述 areaIds stringList 区域ID列表 / 响应示例 { "command_id": "1641969363120826882", "response": { "paras": { "flowNo": 0, "msgId": 33027, "resultCode": 0 }, "result_code": 0 } } 响应参数(终端通用响应) paras字段定义 表24 参数描述 字段名 类型 参数描述 flowNo int 应答流水号 msgId int 对应的平台的消息ID resultCode int 结果
  • 位置及报警-临时位置跟踪控制 接口说明 请求对应的消息ID:0x8202 响应对应的消息ID:0x0001(终端通用响应) 请求示例 { "service_id": "Location", "command_name": "LocationTrace", "paras": { "timeInterval": 10, "period": 20 } } 请求参数 paras字段定义 表14 参数描述 字段名 必选/可选 类型 参数描述 timeInterval 必选 int 时间间隔,单位为秒(s) period 必选 int 位置跟踪有效期,单位为秒(s) 响应示例 { "command_id": "1641971752394383473", "response": { "paras": { "flowNo": 0, "msgId": 33282, "resultCode": 0 }, "result_code": 0 } } 响应参数 paras字段定义 表15 参数描述 字段名 类型 参数描述 flowNo int 应答流水号 msgId int 对应的平台的消息ID resultCode int 结果
  • 位置及报警-人工确认报警信息 接口说明 对应的消息ID:0x8203 请求示例 { "service_id": "Location", "command_name": "AlarmConform", "paras": { "flowNo": 123, "criticalAlarm": false, "dangerousWarning": false, "areaAlarm": true, "routeAlarm": false, "drivingTimeAlarm": false, "startingAbnormalAlarm": false, "displacementAbnormalAlarm": false } } 请求参数 paras字段定义 表16 参数描述 字段名 必选/可选 类型 参数描述 flowNo 必选 int 报警消息流水号 criticalAlarm 必选 boolean 确认紧急报警 dangerousWarning 必选 boolean 确认危险预警 areaAlarm 必选 boolean 确认进出区域报警 routeAlarm 必选 boolean 确认进出路线报警 drivingTimeAlarm 必选 boolean 确认路段行驶时间不足/过长报警 startingAbnormalAlarm 必选 boolean 确认车辆非法点火报警 displacementAbnormalAlarm 必选 boolean 确认车辆非法位移报警 响应示例 { "command_id": "1641971845905632317", "response": { "paras": { "flowNo": 0, "msgId": 33283, "resultCode": 0 }, "result_code": 0 } } 响应参数 paras字段定义 表17 参数描述 字段名 类型 参数描述 flowNo int 应答流水号 msgId int 对应的平台的消息ID resultCode int 结果
  • 位置及报警-链路检测 接口说明 请求对应的消息ID:0x8204 响应对应的消息ID:0x0001(终端通用响应) 请求示例 { "service_id": "Location", "command_name": "CheckConnection", "paras": {} } 响应示例 { "command_id": "1641971911322353065", "response": { "paras": { "flowNo": 0, "msgId": 33284, "resultCode": 0 }, "result_code": 0 } } 响应参数 paras字段定义 表18 参数描述 字段名 类型 参数描述 flowNo int 应答流水号 msgId int 对应的平台的消息ID resultCode int 结果
  • 车辆管理-设置圆形区域电子围栏 接口说明 请求对应的消息ID:0x8600 响应对应的消息ID:0x0001(终端通用响应) { "service_id": "VehicleManagement", "command_name": "SetRoundArea", "paras": { "type": 1, "areas": [{ "areaId": 1, "areaProperty": 1, "latitude": 0, "longitude": 0, "radius": 0, "startTime": "211119170110", "endTime": "211119170111", "maxSpeed": 0, "durationOverSpeed": 0, "maxNightSpeed": 0, "areaName": "test" }] } } 请求参数 paras字段同协议中消息的映射关系 表19 参数描述 字段名 类型 协议字段 参数描述 type int 设置属性 0:更新区域 1:追加区域 2:修改区域 areas jsonObject 区域 圆形区域列表 Area字段说明 表20 参数描述 字段名 类型 协议字段 参数描述 areaId int 区域ID 区域ID areaProperty int 区域属性 区域属性 latitude int 中心点纬度 以度为单位的纬度值乘以10的6次方,精确到百万分之一。 longitude int 中心点经度 以度为单位的经度值乘以10的6次方,精确到百万分之一。 radius int 半径 单位为米 startTime string 起始时间 格式为YYMMDDHHMMSS endTime string 结束时间 格式为YYMMDDHHMMSS maxSpeed int 最高速度 单位为千米每小时(km/h) durationOverSpeed int 超速持续时间 单位为秒(s) maxNightSpeed int 夜间最高速度 单位为千米每小时(km/h) areaName string 区域名称 区域的名称描述 区域属性说明 表21 属性说明 位 标志 0 是否开启起始时间与结束时间的判断规则,0:否;1:是 1 是否启用最高速度,超速持续时间和夜将最高速度的判断规则,0:否;1:是 2 进区域是否报警给驾驶员,0:1;1:是 3 进区域是否报警给平台,0:1;1:是 4 出区域是否告警给驾驶员,0:否;1:是 5 出区域是否告警给平台,0:否;1:是 6 0:北纬;1:南纬 7 0:东经;1:西经 8 0:允许开门;1:禁止开门 9-13 保留 14 0:进区域开启通信模块;1:进区域关闭通信模块 15 0:进区域不采集GNSS详细定位数据;1:进区域采集GNSS详细定位数据 响应示例 { "command_id": "1641971911322353065", "response": { "paras": { "flowNo": 0, "msgId": 33284, "resultCode": 0 }, "result_code": 0 } } 响应参数(终端通用响应) paras字段定义 表22 参数描述 字段名 类型 参数描述 flowNo int 应答流水号 msgId int 对应的平台的消息ID resultCode int 结果
  • 终端管理-查询终端属性 接口说明 请求对应的消息ID:0x8107 响应对应的消息ID:0x0107 请求示例 { "service_id": "TerminalManagement", "command_name": "QueryTerminalProperty", "paras": {} } 响应示例 { "command_id": "1641970411683486238", "response": { "paras": { "clientType": { "passenger": true, "dangerousGoods": true, "track": true, "taxis": true, "video": true, "splitter": false, "trailer": false }, "manufacturerId": "2D_AN", "deviceType": "BSJ-GF-06", "nodeId": "5kw3noL", "iccId": "12345678901234567890", "hardwareVersion": "3.0.0", "firmwareVersion": "1.1.25", "gssn": { "galileo": true, "gps": true, "bds": true, "glonass": true }, "communication": { "other": false, "gprs": true, "cdma": true, "tdscdma": true, "wcdma": true, "cdma2000": true, "tdlte": true } }, "result_code": 0 } } 响应参数 paras字段定义 表11 参数描述 字段名 类型 参数描述 clientType JsonObject 终端类型 passenger:false-不适用客运车辆,true-适用客运车辆 dangerousGoods:false-不适用危险品车辆,true-适用危险品车辆 track:false-不适用普通货运车辆,true-适用普通货运车辆 taxis:false-不适用出租车辆,true-适用出租车辆 video:false-不支持硬盘录像,true-支持硬盘录像 splitter:false-一体机,true-分体机 trailer:false-不适用挂车,true-适用挂车 manufacturerId string 制造商ID deviceType string 终端型号 nodeId string 终端ID iccId string 终端SIM卡ICCID hardwareVersion string 终端硬件版本号 firmwareVersion string 终端固件版本号 gssn jsonObject GNSS模块属性 galileo:false-不支持Galileo定位,true-支持Galileo定位 gps:false-不支持GPS定位,true-支持GPS定位 bds:false-不支持北斗定位,true-支持北斗定位 glonass:false-不支持GLONASS定位,true-支持GLONASS定位 communication jsonObject 通信模块属性 other:false-不支持其他通信方式,true-支持其他通信方式 gprs:false-不支持GPRS通信方式,true-支持GPRS通信方式 cdma:false-不支持 CDM A通信方式,true-支持CDMA通信方式 tdscdma:false-不支持TD-SCDMA通信方式,true-支持TD-SCDMA通信方式 wcdma:false-不支持WCDMA通信方式,true-支持WCDMA通信方式 cdma2000:false-不支持CDMA2000通信方式,true-支持CDMA2000通信方式 tdlte:false-不支持TD-LTE通信方式,true-支持TD-LTE通信方式
  • 终端管理-终端控制 接口说明 请求对应的消息ID:0x8105 响应对应的消息ID:0x0001(终端通用响应) 请求示例 { "service_id": "TerminalManagement", "command_name": "TerminalControl", "paras": { "commandId": 4, "parameter": null } } 请求参数 paras字段定义 表9 参数描述 字段名 必选/可选 类型 参数描述 commandId 必选 int 命令字(十进制表示) parameter 可选 string 命令参数 响应示例 { "command_id": "1641970324270870620", "response": { "paras": { "flowNo": 0, "msgId": 33029, "resultCode": 0 }, "result_code": 0 } } 响应参数(终端通用响应) paras字段定义 表10 参数描述 字段名 类型 参数描述 flowNo int 应答流水号 msgId int 对应的平台的消息ID resultCode int 结果
  • 位置及报警-位置信息查询 接口说明 请求对应的消息ID:0x8201 响应对应的消息ID:0x0201 请求示例 { "service_id": "Location", "command_name": "QueryLocation", "paras": {} } 响应示例 { "command_id": "1641971430850245415", "response": { "paras": { "flowNo": 0, "locationReport": { "alarm": { "emergencyAlarm": 0, "overSpeedAlarm": 1, "fatigueDrivingAlarm": 0, "dangerousDrivingAlarm": 1, "powerVoltageAlarm": 0, "powerOffAlarm": 0, "cameraErrorAlarm": 1, "overSpeedWarning": 1, "fatigueDrivingWarning": 0, "violationDrivingAlarm": 0, "tirePressureWarning": 0, "rightTurnErrorAlarm": 0, "overDrivingTimeAlarm": 0, "overParkAlarm": 0, "drivingAreaAlarm": 0, "drivingRouteAlarm": 0, "drivingTimeAbnormalAlarm": 0, "offCourseAlarm": 0, "gasolineAlarm": 0, "stolenAlarm": 0, "startingAbnormalAlarm": 0, "displacementAbnormalAlarm": 0, "rolloverAlarm": 0, "rolloverWarning": 0, "gnsserrorAlarm": 1, "gnssantennaNotConnectedAlarm": 0, "lcderrorAlarm": 1, "ttserrorAlarm": 0, "icerrorAlarm": 0, "vssalarm": 0, "gnssantennaShortCircuitAlarm": 1 }, "status": { "accStatus": 0, "positioningStatus": 0, "latitudeStatus": 0, "longitudeStatus": 1, "businessStatus": 0, "encryptedStatus": 1, "forwardCollisionWarningStatus": 0, "laneDeviationAlarmStatus": 0, "loadStatus": 0, "oilStatus": 1, "powerStatus": 0, "doorStatus": 1, "firstDoorStatus": 1, "secondDoorStatus": 1, "thirdDoorStatus": 0, "fourthDoorStatus": 0, "fifthDoorStatus": 0, "galileoStatus": 0, "vehicleStatus": 0, "gpsstatus": 0, "bdsstatus": 0, "glonassstatus": 0 }, "longitude": 0.041957, "latitude": 0.056143, "height": 48243, "speed": 10001, "direction": 300, "dateTime": "220112151406", "extend": [] } }, "result_code": 0 } } 响应参数 表12 参数描述 字段名 类型 参数描述 flowNo int 应答流水号 locationReport jsonObject 字段定义参考表2 表13 协议报文字段与属性对应表 起始字节 字段 数据类型 对应属性 0 报警标志 DWORD alarm 4 状态 DWORD status 8 纬度 DWORD longitude 12 经度 DWORD latitude 16 高程 WORD height 18 速度 WORD speed 20 方向 WORD direction 21 时间 BCD[6] dateTime
  • 终端管理-查询指定终端参数 接口说明 请求对应的消息ID:0x8106 响应对应的消息ID:0x0104 请求示例 { "service_id": "TerminalManagement", "command_name": "QueryAssignedTerminalParameters", "paras": { "parameterIds": [1] } } 请求参数 paras字段定义 表7 参数描述 字段名 必选/可选 类型 参数描述 parameterIds 必选 stringList 查询的终端参数的参数ID(十进制表示)列表 响应示例 { "command_id": "1641973633890258246", "response": { "paras": { "flowNo": 0, "total": 1, "parameters": { "1": 120 } }, "result_code": 0 } } 响应参数 paras字段定义 表8 参数描述 字段名 类型 参数描述 flowNo int 应答流水号 total int 应答参数个数 parameters JsonObject 终端参数的参数列表,其中key为参数ID(十进制表示),value为参数值
  • 终端管理-查询终端参数 接口说明 请求对应的消息ID:0x8104 响应对应的消息ID:0x0104 请求示例 { "service_id": "TerminalManagement", "command_name": "QueryTerminalParameters", "paras": {} } 响应示例 { "command_id": "1641973633890258246", "response": { "paras": { "flowNo": 0, "total": 1, "parameters": { "1": 120 } }, "result_code": 0 } } 响应参数 paras字段定义 表6 参数描述 字段名 类型 参数描述 flowNo int 应答流水号 total int 应答参数个数 parameters JsonObject 终端参数的参数列表,其中key为参数ID(十进制表示),value为参数值
  • 终端管理-设置终端参数 接口说明 请求对应的消息ID:0x8103 响应对应的消息ID:0x0001(终端通用响应) 请求示例 { "service_id": "TerminalManagement", "command_name": "SetTerminalParameters", "paras": { "parameters": { "1": 120 } } } 请求参数 paras字段定义 表4 参数描述 字段名 必选/可选 类型 参数描述 parameters 必选 JsonObject 设置的终端参数的参数列表,其中key为参数ID(十进制表示),value为参数值 约束: 平台当前固定心跳时长为180s 不支持多值参数 响应示例 { "command_id": "1641969363120826882", "response": { "paras": { "flowNo": 0, "msgId": 33027, "resultCode": 0 }, "result_code": 0 } } 响应参数(终端通用响应) paras字段定义 表5 参数描述 字段名 类型 参数描述 flowNo int 应答流水号 msgId int 对应的平台的消息ID resultCode int 结果
  • 属性上报 以下消息转换为IoTDA平台的属性,应用可以通过查询设备影子或者数据转发接收属性上报消息。 上报位置信息 对应的消息ID:0x0200 推送样例: { "resource": "device.property", "event": "report", "event_time": "20151212T121212Z", "notify_data": { "header": { "device_id": "00000000000012345678", "product_id": "ABC123456789", "app_id": "d4922d8a-6c8e-4396-852c-164aefa6638f", "gateway_id": "00000000000012345678", "node_id": "00000000000012345678", "tags": [ { "tag_value": "testTagValue", "tag_key": "testTagName" } ] }, "body": { "services": [ { "service_id": "Location", "properties": { "alarm": { "emergencyAlarm": 0, "overSpeedAlarm": 0, "fatigueDrivingAlarm": 0, "dangerousDrivingAlarm": 0, "powerVoltageAlarm": 0, "powerOffAlarm": 0, "cameraErrorAlarm": 0, "overSpeedWarning": 0, "fatigueDrivingWarning": 0, "violationDrivingAlarm": 0, "tirePressureWarning": 0, "rightTurnErrorAlarm": 0, "overDrivingTimeAlarm": 0, "overParkAlarm": 0, "drivingAreaAlarm": 0, "drivingRouteAlarm": 0, "drivingTimeAbnormalAlarm": 0, "offCourseAlarm": 0, "gasolineAlarm": 0, "stolenAlarm": 0, "startingAbnormalAlarm": 0, "displacementAbnormalAlarm": 0, "rolloverAlarm": 0, "rolloverWarning": 0, "icerrorAlarm": 0, "lcderrorAlarm": 0, "ttserrorAlarm": 1, "gnssantennaShortCircuitAlarm": 0, "gnsserrorAlarm": 0, "gnssantennaNotConnectedAlarm": 0, "vssalarm": 0 }, "status": { "accStatus": 0, "positioningStatus": 0, "latitudeStatus": 0, "longitudeStatus": 0, "businessStatus": 0, "encryptedStatus": 0, "forwardCollisionWarningStatus": 0, "laneDeviationAlarmStatus": 0, "loadStatus": 0, "oilStatus": 0, "powerStatus": 1, "doorStatus": 0, "firstDoorStatus": 0, "secondDoorStatus": 0, "thirdDoorStatus": 0, "fourthDoorStatus": 0, "fifthDoorStatus": 0, "galileoStatus": 0, "vehicleStatus": 0, "gpsstatus": 0, "glonassstatus": 0, "bdsstatus": 0 }, "longitude": 116.307629, "latitude": 40.058359, "height": 312, "speed": 3, "direction": 99, "dateTime": "200707192359", "extend": [ ] }, "event_time": "20151212T121212Z" } ] } } } 表1 协议报文字段与属性对应表 起始字节 字段 数据类型 对应属性 0 报警标志 DWORD alarm 4 状态 DWORD status 8 纬度 DWORD longitude 12 经度 DWORD latitude 16 高程 WORD height 18 速度 WORD speed 20 方向 WORD direction 21 时间 BCD[6] dateTime 表2 报警预警标志位与alarm属性对应表 位 定义 对应属性 0 1:紧急报警 emergencyAlarm 1 1:超速报警 overSpeedAlarm 2 1:疲劳驾驶报警 fatigueDrivingAlarm 3 1:危险驾驶行为报警 dangerousDrivingAlarm 4 1:GNSS模块发生故障报警 gnsserrorAlarm 5 1:GNSS天线未接或被剪断报警 gnssantennaNotConnectedAlarm 6 1:GNSS天线短路报警 gnssantennaShortCircuitAlarm 7 1:终端主电源欠压报警 powerVoltageAlarm 8 1:终端主电源掉电报警 powerOffAlarm 9 1:终端LCD或显示器故障报警 lcderrorAlarm 10 1: TTS 模块故障报警 ttserrorAlarm 11 1:摄像头故障报警 cameraErrorAlarm 12 1:道路运输证IC卡模块故障报警 icerrorAlarm 13 1:超速预警 overSpeedWarning 14 1:疲劳驾驶预警 fatigueDrivingWarning 15 1:违规行驶报警 violationDrivingAlarm 16 1:胎压预警 tirePressureWarning 17 1:右转盲区异常报警 rightTurnErrorAlarm 18 1:当天累计驾驶超时报警 overDrivingTimeAlarm 19 1:超时停车报警 overParkAlarm 20 1:进出区域报警 drivingAreaAlarm 21 1:进出路线报警 drivingRouteAlarm 22 1:路段行驶时间不足/过长报警 drivingTimeAbnormalAlarm 23 1:路线偏离报警 offCourseAlarm 24 1:车辆VSS故障 vssalarm 25 1:车辆油量异常报警 gasolineAlarm 26 1:车辆被盗报警(通过车辆防盗器) stolenAlarm 27 1:车辆非法点火报警 startingAbnormalAlarm 28 1:车辆非法位移报警 displacementAbnormalAlarm 29 1:碰撞侧翻报警 rolloverAlarm 30 1:侧翻预警 rolloverWarning 31 保留 - 表3 状态标志位与status属性对应表 位 定义 对应属性 0 0:ACC关;1:ACC开 accStatus 1 0:未定位;1:定位 positioningStatus 2 0:北纬;1:南纬 latitudeStatus 3 0:东经;1:西经 longitudeStatus 4 0:运营状态;1:停运状态 businessStatus 5 0:经纬度未经保密插件加密;1:经纬度已经保密插加密 encryptedStatus 6 1:紧急刹车系统采集的前撞预警 forwardCollisionWarningStatus 7 1:车道偏移预警 laneDeviationAlarmStatus 8~9 00:空车;01:半载;10:保留;11:满载 loadStatus 10 0:车辆油路正常;1:车辆油路断开 oilStatus 11 0:车辆电路正常;1:车辆电路断开 powerStatus 12 0:车门解锁;1:车门加锁 doorStatus 13 0:门1关;1:门1开(前门) firstDoorStatus 14 0:门2关;1:门2开(中门) secondDoorStatus 15 0:门3关;1:门3开(后门) thirdDoorStatus 16 0:门4关;1:门4开(驾驶席门) fourthDoorStatus 17 0:门5关;1:门5开(自定义) fifthDoorStatus 18 0:未使用GPS卫星进行定位;1:使用GPS卫星进行定位 gpsstatus 19 0:未使用北斗卫星进行定位;1:使用北斗卫星进行定位 bdsstatus 20 0:未使用GLONASS卫星进行定位;1:使用GLONASS卫星进行定位 glonassstatus 21 0:未使用Galileo卫星进行定位;1:使用Galileo卫星进行定位 galileoStatus 22 0:车辆处于停止状态;1:车辆处于行驶状态 vehicleStatus 23~31 保留 -
  • 方案架构 方案总体架构框图如下: 图1 总体架构图 各种不同协议类型的设备,通过泛协议插件,最终以MQTT协议和华为云 物联网平台 进行链接。泛协议插件是各种不同协议类型设备和华为云物联网平台之间的中间层,用以屏蔽各种不同协议之间的差异。泛协议插件由三部分组成: “泛协议设备接入层”:用于以特定网络协议与泛协议设备建链。 “协议桥接适配层”:负责完成第三方协议数据和平台格式数据的互相转换。 上行:把第三方协议数据转成平台格式数据,并调用泛协议SDK接口进行上报。 下行:收到平台下行数据时,将平台格式数据转换为第三方协议数据转发给第三方协议设备。 “泛协议SDK”:即平台提供的泛协议接入接入SDK,提供了网桥的通用功能实现。
  • 部署插件 访问 设备接入服务 ,单击“管理控制台 ”进入设备接入控制台。 单击“IoTDA实例 ”,单击具体实例“详情”按钮,选择“泛协议接入”。 图1 泛协议-泛协议接入 选择“云网关”,单击“新增云网关” 。端口填写为“8898”。镜像选择镜像名称为“protocol-plugin-sl651”的镜像。 图2 泛协议-部署成功SL651 防火墙和安全组需要放通8898端口(TCP)。 父主题: SL651协议接入
  • 部署插件 具体操作: 访问设备接入服务,单击“管理控制台 ”进入设备接入控制台。 单击“IoTDA实例 ”,单击具体实例“详情”按钮,选择“泛协议接入”。 图1 泛协议-泛协议接入 选择“云网关”,单击“新增云网关” 。端口填写为“8890”。镜像选择镜像名称为“protocol-plugin-hj212”的镜像。 图2 泛协议-部署成功HJ212 防火墙放通8890端口(TCP)。 父主题: HJ212协议接入
  • 上报升级结果 根据PCP协议约定的交互流程,设备在执行完软件升级后,将会向物联网平台上报升级的结果。 设备发送的请求消息 根据PCP消息结构的定义可以得出,设备向物联网平台上报升级结果,各个消息字段的填写如下: 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致,为18。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段的数据类型得出数据区长度为17字节,转换为十六进制为:0011。 数据区:结果码,以上报升级成功为例,结果码为00。当前版本号:升级完成后的版本号,与物联网平台下发的软件版本一致,即v1.0,转换为十六进制为:56312E30000000000000000000000000。 字段 数据类型 描述及要求 结果码 BYTE 0X00升级成功。 0X01设备使用中。 0X04电量不足。 0X05剩余空间不足。 0X09内存不足。 0X0A安装升级包失败。 0X7F内部异常。 当前版本号 BYTE[16] 设备当前版本号。 设备向物联网平台上报升级结果的消息为:FFFE 01 18 0000 0011 0056312E30000000000000000000000000(CRC16校验前),经CRC16计算得到校验码为:C7D2。则替换校验码后设备向物联网平台上报升级结果码流为:FFFE0118C7D200110056312E30000000000000000000000000。 物联网平台发送的应答消息 物联网平台收到设备上报的升级结果消息后,将对设备进行应答,各个消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致:18。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段定义得出该数据长度为1个字节,转换为十六进制为:0001。 数据区:处理成功,则返回00,升级任务不存在80。本示例以返回00处理成功为例进行说明。 字段 数据类型 描述及要求 结果码 BYTE 0X00处理成功。 0X80升级任务不存在。 物联网平台向设备的应答消息为:FFFE 01 18 0000 0001 00 (CRC16校验前),经CRC16计算得到校验码为:AFA1。则替换校验码后物联网平台返回的应答消息为:FFFE0118AFA1000100 。
  • 执行软件升级 根据PCP协议约定的交互流程,物联网平台收到设备发送的软件包下载结果通知后,需要通知设备进行升级操作。 物联网平台发送的请求消息 根据PCP消息结构的定义可以得出,物联网平台向设备发送执行软件升级消息,各个消息字段的填写如下: 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致,为17。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段的数据类型得出无数据区,即为0字节,转换为十六进制为:0000。 数据区:无数据区,无需携带该字段。 字段 数据类型 描述及要求 无数据区 物联网平台向设备下发的执行软件升级的消息为:FFFE 01 17 0000 0000(CRC16校验前),经CRC16计算得到校验码为:CF90。则替换校验码后物联网平台向设备发送的消息为:FFFE0117CF900000。 设备发送的应答消息 设备收到物联网平台下发的执行升级消息后,将对收到消息后的执行动作进行应答,各消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致:17。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段定义得出该数据长度为1个字节,转换为十六进制为:0001。 数据区:处理成功,则返回00,其它处理结果请参考数据区定义。本示例以返回00处理成功为例进行说明。 字段 数据类型 描述及要求 结果码 BYTE 0X00处理成功。 0X01设备使用中。 0X04电量不足。 0X05剩余空间不足。 0X09内存不足。 设备向物联网平台应答的消息为:FFFE 01 17 0000 0001 00 (CRC16校验前),经CRC16计算得到校验码为:B725。则替换校验码后设备返回的响应消息为:FFFE0117B725000100 。
  • 上报下载结果 根据PCP协议约定的交互流程,设备接收完所有分片数据并组装完软件包后,需要向物联网平台上报软件包的下载结果。 设备发送的请求消息 根据PCP消息结构的定义可以得出,设备向物联网平台发送的上报软件包下载结果消息,各个消息字段的填写如下: 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致,为16。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段的数据类型得出数据区长度为1个字节,转换为十六进制为:0001。 数据区:上报软件包的下载结果,比如下载成功,设备侧上报00。 字段 数据类型 描述及要求 下载状态 BYTE 0X00下载成功。 0X05剩余空间不足。 0X06下载超时。 0X07升级包校验失败。 0X08升级包类型不支持。 设备向物联网平台发送升级包下载结果的消息为:FFFE 01 16 0000 0001 00(CRC16校验前),经CRC16计算得到校验码为:850E。则替换校验码后设备发送的升级包下载结果的消息为:FFFE0116850E000100。 物联网平台的应答消息 物联网平台收到设备上报的软件包下载结果后,将会向设备返回应答消息,各个消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致:16。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段定义得出该数据长度为1个字节,转换为十六进制为:0001。 数据区:处理成功,则返回00,处理失败返回80。本示例以返回00处理成功为例进行说明。 字段 数据类型 描述及要求 结果码 BYTE 0X00处理成功。 0X80升级任务不存在。 物联网平台向设备应答的消息为:FFFE 01 16 0000 0001 00 (CRC16校验前),经CRC16计算得到校验码为:850E。则替换校验码后物联网平台向设备应答的消息为:FFFE0116850E000100。
  • 下载升级包 根据PCP协议约定的交互流程,物联网平台通知设备有新的软件版本时,设备向物联网平台请求下载软件包,按照分片的序号进行下载。 设备发送的请求消息 根据PCP消息结构的定义可以得出,设备向物联网平台发送的请求软件包分片的第一条消息,各消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:查询消息码表可知请求升级包的消息码为21,转换为十六进制为:15。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段的数据类型得出数据区长度为18个字节,转换为十六进制为:0012。 数据区:目标版本号为平台下发的新版本通知版本号,即v1.0,转换为十六进制为56312E30000000000000000000000000,分片序号为第0个分片,即0000。 字段 数据类型 描述及要求 目的版本号 BYTE[16] 目的版本号,由ASCII字符组成,位数不足时,后补“0X00”。 分片序号 WORD 表示请求获取的分片序号,从0开始计算,分片的总数为软件包大小除以每个分片的大小并向上取整获得。设备可以保存已经收到的分片,下次直接从缺失的分片开始请求,达到断点续传的效果。 设备向物联网平台发送请求软件包分片的第一条消息为:FFFE 01 15 0000 0012 56312E30000000000000000000000000 0000(CRC16校验前),经CRC16计算得到校验码为:5618。则替换校验码后设备发送的第一条请求分片消息为:FFFE01155618001256312E300000000000000000000000000000。 其它分片请求的消息流只需要替换分片序号后,重新计算并替换CRC16校验码即可,此处就不再展开。 物联网平台的应答消息 物联网平台收到设备的请求软件包分片消息后,将会给设备下发分片的数据。物联网平台向设备响应的第一条请求分片的消息,各消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致:15。 校验码:CRC16计算前先用0000替代。 数据区:先讲数据区再讲数据区长度。结果码:00,分片序号:第0个分片:0000,分片数据:跟软件包定义的内容有关,我们假设软件包内容为HELLO, IoT SOTA!,经ASCII码转换为十六进制为:48454C4C4F2C20496F5420534F544121,共16字节。用户上传软件包时手动输入升级包分片大小为500byte,即最大长度为500字节。这种情况下,无需在数据的后面补充0。 数据区长度:根据数据区的字段定义得出该数据长度为19,转换为十六进制为:0013。 字段 数据类型 描述及要求 结果码 BYTE 0X00处理成功。 0X80升级任务不存在。 0X81指定的分片不存在。 分片序号 WORD 表示返回的分片序号。 分片数据 BYTE[n] 分片的内容,n为实际的分片大小。如果结果码不为0,则不带此字段。 物联网平台向设备发送的第一个软件包分片消息为:FFFE 01 15 0000 0013 00 0000 48454C4C4F2C20496F5420534F544121(CRC16校验前),经CRC16计算得到校验码为:E107。则替换校验码后物联网平台向设备发送的第一个软件包分片消息为:FFFE0115E107001300000048454C4C4F2C20496F5420534F544121。 其它软件包分片的消息流只需要替换分片序号和分片数据后,重新计算并替换CRC16校验码即可,此处就不再展开。
  • 下载新版本软件包通知 根据PCP协议约定的交互流程,查询完版本号后,物联网平台下发指令让设备下载新版本的软件包。 物联网平台发送消息 根据PCP消息结构的定义可以得出,物联网平台向设备下发下载新版本软件包通知时,各消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:此处为新版本通知,查询消息码表可以知道新版本通知为20,转换为十六进制为14。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的消息字段可以得出,数据区长度为22个字节,转换为十六进制为:0016。 数据区:根据数据区的定义可知。 目标版本号:由16个字节组成,假设升级的目标版本号为v1.0版本,转换为十六进制并在后面14个字节补充0后得到:56312E30000000000000000000000000。 升级包分片大小:由2个字节组成,单位为byte,用户上传软件包时可以手动输入升级包分片大小,如果不设置默认为500byte,大小为32~500之间。假设为500byte,转换为十六进制后为:01F4。 升级包分片总数:由2个字节组成,由软件包大小除以每个分片的大小并向上取整获得。假设软件包大小为500byte,则分片数量为1,转换为十六进制后为:0001。 检验码:由2个字节组成,目前已废弃,固定为:0000。 字段 数据类型 描述及要求 目的版本号 BYTE[16] 目的版本号,由ASCII字符组成,位数不足时,后补“0X00”。 升级包分片大小 WORD 每个分片的大小 升级包分片总数 WORD 升级包分片总数 升级包校验码 WORD 固定为:0000 将下载新版本软件包通知的消息流组合起来得到:FFFE 01 14 0000 0016 56312E30000000000000000000000000 01F4 0001 0000。前面说了,还要将消息流进行CRC16算法计算得到校验码为02F7。因此,物联网平台向设备通知下载新版本软件包的信息,物联网平台向设备发送的消息流为FFFE011402F7001656312E3000000000000000000000000001F400010000。 设备返回的应答消息 设备收到下载新版本软件包通知后,设备向物联网平台返回应答消息,是否允许设备进行升级,各消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致,为14。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段的数据类型得出数据区长度为1个字节,转换为十六进制为:0001。 数据区:设备根据自身的情况对平台下发的新版本通知进行响应,本示例以设备应答“允许升级”为例进行介绍,得出数据区为:00。其它应答消息请根据应答消息字段进行适配。 字段 数据类型 描述及要求 结果码 BYTE “0X00”允许升级 “0X01”设备使用中 “0X02”信号质量差 “0X03”已经是最新版本 “0X04”电量不足 “0X05”剩余空间不足 “0X09”内存不足 “0X7F”内部异常 将设备给物联网平台的应答消息流组合起来得到:FFFE 01 14 0000 0001 00。前面说了,还要将消息流进行CRC16算法计算得到校验码为D768。因此,设备向平台返回的应答消息流为FFFE0114D768000100。
  • 概述 设备的OTA软件升级是基于华为定义的PCP协议进行的,设备侧需根据PCP协议定义的交互流程进行适配开发。下面我们将结合物联网平台与设备的软件升级交互流程,介绍终端设备将如何基于PCP协议构建交互过程中的请求消息和应答消息,帮助您更好的根据PCP协议进行终端侧的软件升级功能开发。 下面我们先了解下PCP消息的结构,PCP协议的请求消息和应答消息都遵循相同的消息结构,主要由这几部分组成: PCP协议消息由:起始标识位、版本号、消息码、校验码、数据区长度和数据区组成,各字段的要求和描述如下表所示。 字段名 字段类型 描述和要求 起始标识 WORD 起始标识,固定为0XFFFE。 版本号 BYTE 高四位预留;低四位表示协议版本号,当前为1。 消息码 BYTE 标识物联网平台与设备之间的请求消息类型,应答消息的消息码和请求消息相同。消息码的定义为: 0-18:预留消息码,暂未使用。 19:查询设备版本。 20:下载新版本软件包通知。 21:请求下载升级包。 22:上报升级包下载结果。 23:执行软件升级。 24:上报升级结果。 25-127:预留消息码,暂未使用。 校验码 WORD 从起始标识到数据区的最后一个字节的CRC16校验值,计算前先把校验码字段置为0,计算完成后把结果写到校验码字段。 说明: CRC16算法:CRC16/CCITT x16+x12+x5+1 数据区长度 WORD 数据区的长度。 数据区 BYTE[n] 可变长度,具体由各个指令定义,可参考下面介绍的各个指令对应的请求消息和应答消息定义。 数据类型 描述 BYTE 无符号一字节整数 WORD 无符号二字节整数 DWORD 无符号四字节整数 BYTE[n] n字节的十六进制数 STRING 字符串
  • 查询设备版本号 从设备的软件升级流程(本流程只描述物联网平台与设备基于PCP协议交互的流程)可以看到,首先物联网平台向设备下发查询版本号信息,设备进行应答。 物联网平台发送消息 根据PCP消息结构的定义可以得出,物联网平台向设备下发查询版本号时,各消息字段的填写如下: 起始标识:固定为消息流的前2个字节,固定为FFFE。 版本号:数据类型为1个字节整数,且固定为1,即在消息流中为01。 消息码:数据类型为1个字节整数,查询设备版本的消息码为19,转换为十六进制为13。 校验码:数据类型为2个字节整数,先将校验码置为0000,然后将完整的消息码流进行CRC16的算法计算得到校验码,再将得到的校验码替换原消息中的0000。 数据区长度:数据类型为2个字节整数,代表数据区的消息长度,根据数据区的数据结构可以得出该条消息无数据区,即数据区长度为0000。 数据区:数据区代表要真正发送给设备的数据,根据查询版本信息的数据区定义,该条消息是没有实际要传送的数据的,即无需数据区字段。 字段 数据类型 描述及要求 无数据区 因此将查询版本消息的码流组合起来得到:FFFE 01 13 0000 0000。前面的校验码时讲了,需要将组合后的消息码流进行CRC16算法(物联网平台提供了基于JAVA和C语言的CRC16算法代码样例,您可以直接使用)得到校验码4C9A,然后将该校验码替换原码流中的0000后得到FFFE01134C9A0000,该消息码流即为物联网平台发送给设备的查询版本信息的消息码流。 设备返回的应答消息 设备收到物联网平台要查询设备的软件版本号消息,设备要向物联网平台反馈查询的结果,各消息字段的填写如下。 起始标识固定为:FFFE。 版本号固定为:01。 消息码:与请求的消息码一致,为13。 校验码:CRC16计算前先用0000替代。 数据区长度:根据数据区的字段的数据类型得出数据区长度为17个字节,转换为十六进制为:0011。 数据区:根据数据区的定义可知,处理成功的结果码为00,版本号信息假设为V0.9,将V0.9进行ASCII转码得到56302E39,由于版本号的数据类型为BYTE[16],即16个字节,当前只有4个字节,因此需要在版本号数据后面补0,得到56302E39000000000000000000000000。因此,数据区合并后为0056302E39000000000000000000000000。 字段 数据类型 描述及要求 结果码 BYTE “0X00”处理成功 当前版本号 BYTE[16] 当前版本号,由ASCII字符组成,位数不足时,后补“0X00”。 将查询版本信息的消息流组合起来得到:FFFE 01 13 0000 0011 0056302E39000000000000000000000000。前面讲到,还要将消息流进行CRC16算法计算得到校验码为8DE3。因此,物联网平台向设备查询版本号信息,设备向平台返回的消息流为FFFE01138DE300110056302E39000000000000000000000000。
  • 上传编解码插件 2023年8月1日后新用户不再提供离线插件功能。 当本地已经准备好编解码插件(如线下开发)时,则可以通过“插件开发”的“离线开发方式”上传至物联网平台。 访问设备接入服务,单击“管理控制台”进入设备接入控制台。选择您的实例,单击实例卡片进入。 单击左侧导航栏的“产品”,在产品列表中,找到对应的产品,单击产品进入产品界面。 在产品详情页面,单击“插件开发”,选择“离线开发”,加载本地的插件包,然后单击“上传插件”。 图2 离线开发-完成上传 插件包的设备类型、型号、厂商ID等信息需要与该产品保持一致,才可以成功上传。 当界面提示“上传离线插件成功”,表示插件已部署到物联网平台。
  • MQTT的TLS支持 平台推荐使用TLS来保护设备和平台的传输安全。 平台目前支持TLS1.3、1.2 、1.1版本以及GMTLS。其中TLS 1.1 计划后续不再支持,建议使用 TLS 1.3作为首选 TLS 版本。GMTLS版本仅在国密算法的企业版才支持。 基础版,标准版以及支持通用加密算法的企业版使用TLS连接时,平台支持如下加密套件: TLS_AES_256_GCM_SHA384 TLS_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 支持国密算法的企业版使用TLS连接时平台支持如下加密套件: ECC_SM4_GCM_SM3 ECC_SM4_CBC_SM3 ECDHE_SM4_GCM_SM3 ECDHE_SM4_CBC_SM3 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 带CBC的加密套件存在安全风险,请谨慎使用。
  • 使用限制 描述 限制 单个MQTT直连设备在同一时间的连接数 1 单账户设备侧每秒最大建链请求数量 基础版100 标准版请参考标准版规格 企业版请参考企业版规格 单账号设备侧每秒最大上行的请求数量(单消息payload平均为512字节) 基础版500 标准版请参考标准版规格 企业版请参考企业版规格 单个MQTT连接每秒最大上行消息数量 50/s 单个MQTT连接最大带宽(上行消息) 1MB(默认) MQTT单条发布消息最大长度。超过此大小的发布请求将被直接拒绝。 1MB MQTT协议规范 MQTT v5.0、MQTT v3.1.1、MQTT v3.1 与标准MQTT协议的区别 不支持QoS2 不支持will、retain msg MQTT协议支持的安全等级 采用TCP通道基础 + TLS协议(TLSv1、 TLSv1.1、TLSv1.2和TLSv1.3版本) MQTT连接心跳时间建议值 心跳时间限定为30至1200秒,推荐设置为120秒 MQTT协议消息发布与订阅 设备只能对自己的Topic进行消息发布与订阅 单个MQTT连接的最大订阅数量。 100个 MQTT自定义Topic支持的最大长度 128字节 MQTT自定义Topic支持每个产品添加的最大个数 10个/产品 单账号支持上传设备侧CA证书个数 100个
  • MQTT设备与物联网平台通信 设备使用MQTT协议接入平台时,平台和设备通过Topic进行通信。物联网平台预置了Topic,通过这些预置的Topic,平台和设备可以实现消息、属性、命令的交互。您还可以在设备接入控制台,自定义Topic,实现设备平台通信的个性化配置。 数据类型 消息类型 说明 数据上行 设备属性上报 用于设备按产品模型中定义的格式将属性数据上报给平台。 设备消息上报 设备无法按照产品模型中定义的属性格式进行数据上报时,将设备的自定义数据通过设备消息上报接口上报给平台,平台将设备上报的消息转发给应用服务器或华为云其他云服务上进行存储和处理。 网关批量属性上报 用于网关设备将多个设备的属性数据一次性上报给平台。 设备事件上报 用于设备按产品模型中定义的格式将事件数据上报给平台。 数据下行 平台消息下发 用于平台下发自定义格式的数据给设备。 平台设置设备属性 设备的产品模型中定义了平台可向设备设置的属性,平台/应用服务器可通过属性设置的方式修改指定设备的属性值。 平台查询设备属性 平台/应用服务器通过属性查询的方式,实时查询指定设备的属性数据。 平台命令下发 平台/应用服务器按产品模型中定义的命令格式下发控制命令给设备。 平台事件下发 平台/应用服务器按产品模型中定义的事件格式下发事件给设备。 Topic接口介绍 物联网平台预置的Topic如下表所示: Topic分类 用途 Topic Public(发布者) Subscriber(订阅者) 设备消息相关Topic 设备消息上报 $oc/devices/{device_id}/sys/messages/up 设备 平台 平台下发消息给设备 $oc/devices/{device_id}/sys/messages/down 平台 设备 设备命令相关Topic 平台下发命令给设备 $oc/devices/{device_id}/sys/commands/request_id={request_id} 平台 设备 设备返回命令响应 $oc/devices/{device_id}/sys/commands/response/request_id={request_id} 设备 平台 设备属性相关Topic 设备上报属性数据 $oc/devices/{device_id}/sys/properties/report 设备 平台 网关批量上报属性数据 $oc/devices/{device_id}/sys/gateway/sub_devices/properties/report 设备 平台 平台设置设备属性 $oc/devices/{device_id}/sys/properties/set/request_id={request_id} 平台 设备 属性设置的响应结果 $oc/devices/{device_id}/sys/properties/set/response/request_id={request_id} 设备 平台 平台查询设备属性 $oc/devices/{device_id}/sys/properties/get/request_id={request_id} 平台 设备 属性查询响应结果,这个结果不会对设备属性和影子产生影响 $oc/devices/{device_id}/sys/properties/get/response/request_id={request_id} 设备 平台 设备侧主动获取平台的设备影子数据 $oc/devices/{device_id}/sys/shadow/get/request_id={request_id} 设备 平台 设备侧主动获取平台设备影子数据的响应 $oc/devices/{device_id}/sys/shadow/get/response/request_id={request_id} 平台 设备 设备事件相关Topic 设备事件上报 $oc/devices/{device_id}/sys/events/up 设备 平台 平台事件下发 $oc/devices/{device_id}/sys/events/down 平台 设备 另外,用户还可以通过在控制台上设置自定义Topic,上报用户个性化的数据。具体可参考自定义Topic。
  • 概述 MQTT(Message Queuing Telemetry Transport)是一个基于客户端-服务器的消息发布/订阅传输协议,主要应用于计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备,适合长连接的场景,如智能路灯等。更多关于MQTT协议语法及接口信息,请访问这里获取。 MQTTS是MQTT使用TLS加密的协议。采用MQTTS协议接入平台的设备,设备与物联网平台之间的通信过程,数据都是加密的,具有一定的安全性。
  • 业务流程 采用MQTT协议接入物联网平台的设备,设备与物联网平台之间的通信过程,数据没有加密,建议使用MQTTS协议。 若选择MQTTS协议接入平台,建议通过使用IoT Device SDK接入。 设备接入前,需创建产品(可通过控制台创建或者使用应用侧API创建产品)。 产品创建完毕后,需注册设备(可通过控制台注册单个设备或者使用应用侧API注册设备创建)。 设备注册完毕后,可以按照图中流程实现消息/属性上报、接收命令/属性/消息、OTA升级、自定义Topic等功能。关于平台预置Topic可参考Topic定义 您可以通过mqtt.fx进行原生协议接入调测,可以参考快速体验mqtt接入。
  • 使用真实设备调测产品 当设备侧开发已经完成,但应用侧开发还未完成时,您可以创建真实设备,使用应用模拟器对设备、产品模型、插件等进行调测。真实设备调测界面结构为三个部分: 左侧应用模拟器展示区域:呈现应用服务器接收到的属性数据和下发的命令。 右侧应用模拟器区域:模拟应用下发命令。 下方消息跟踪区域:呈现设备接入,属性上报和命令下发时,平台的处理日志,帮助开发者进行问题的定界和定位。 图6 在线调试-真实设备结构 在烟感产品的开发空间,选择“在线调试”,并单击“新增测试设备”。 在弹出的“新增测试设备”窗口,选择“真实设备”,输入测试设备的参数,单击“确定”。 图7 在线调试-新增测试设备 注:如果使用DTLS传输层安全协议接入时,请妥善保存密钥。 新添加的设备处于未激活状态,此时不能进行在线调试,可参考连接鉴权,待设备接入平台后,进行调试。 单击“调试”,进入调试界面。 图8 在线调试-进入调试 模拟远程下发控制命令场景,在应用模拟器中,选择服务:StreetLight,命令:SWITCH_LIGHT,命令取值为:ON,单击“发送”,我们可以看到路灯被点亮。
共100000条