协议定义
本文档的协议提供给硬件快捷使用小机云服务功能,与小机云的http接口功能基本一致
# 协议格式
$XGC#Cmd#SN#Timestamp#Content&#CheckCode#\r\n
$ 符号:协议开始符号
&# 符号:内容分割符
\r\n 符号:协议结束符,十六进制0x0A 0x0D,可以是\r\n
# 符号:内容分割符,对协议内容进行分段。每段内容描述如下:
- $XGC:协议固定开头
- Cmd:协议功能,如Cmd为DATA为上传数据,Cmd为OTA为上传OTA状态
- SN:设备唯一编码,需要与控制台中录入的设备SN保持项目中唯一
- Timestamp:协议生成时间,13位UTC格式,不用可填0,系统会自动填入接收到的时间
- Content:协议数据,数据格式见协议详情,注意数据中不可以出现#号。如果没有内容可以不需要该字段。
- CheckCode:校验码,&#前所有字符进行异或得到 1 个字节的十六进制数,以2 个ASCII 字符形式输出。如以下协议:$XGC#Cmd#SN#Timestamp#Content&#CheckCode#\r\n &#之前部分异或得到校验码为0x28,则CheckCode位填28
指令类型:
通知指令:带有通知描述指令,为设备或平台主动发送的通知。
操作指令:带“查询/通知”描述的指令,从机可主动查询,或当相关状态变化时主机或平台主动发起通知
# 协议回复格式
$XGC_ACK#Cmd#SN#Timestamp#Content&#CheckCode#\r\n
如果无特殊说明,指令统一回复:
成功:$XGC_ACK#Cmd#SN#Timestamp#OK&#CheckCode#
失败:$XGC_ACK#Cmd#SN#Timestamp#ERR:message&#CheckCode#
#上传数据-KV格式
格式:$XGC#DATA#SerialNo#Timestamp#key1:data1;key2:data2&#CheckCode#\r\n
注意:只支持上传key:value格式数据,字符串内容需要加"",数组格式内容需要加[],bool内容支持0和1表示
可以设置一个数组也可以同时设置多组数据
示例一:$XGC#DATA#123456#0#value:32;enabled:false;msg:"ok";items:["a","b","a"];numbers:[1,2,3]A#
回复:$XGC_ACK#DATA#123456#1692263526373#OK(#
示例二:$XGC#DATA#switch:1G#
# 查询最新一条数据
格式:$XGC#GET_LAST_DATA#SerialNo#Timestamp&#CheckCode#\r\n
示例:$XGC#GET_LAST_DATA#123456#0#
回复:$XGC_ACK#GET_LAST_DATA#123456#1692263213303#noDataF#
回复:$XGC_ACK#GET_LAST_DATA#1231#1692263605101#msg:ok;value:32;enabled:false;timestamp:1692263526273D#
# 查询设备TAGS
格式:$XGC#GET_TAGS#SerialNo#Timestamp&#CheckCode#\r\n
示例:$XGC#GET_TAGS#123456#0@#
回复:$XGC_ACK#GET_TAGS#123456#1679995315528#A,BB&#
回复:$XGC_ACK#GET_TAGS#1231#1692265017707#tagsNotFoundE#
#上传设备属性
格式:$XGC#SET_PROPS#SerialNo#Timestamp#capacity:value;rssi:value;longititu:value;lagtitude:value&#CheckCode#\r\n
描述:用于设置设备属性,如电量,信号,位置,以及自定义属性。
其中电量,信号,位置这三个属性将会在地图上显示。最多可定义32个属性
字符串的值需要加""
示例一:更新电量
$XGC#SET_PROPS#123456#0#capacity:11 #
示例二:更新电量,信号,经度,纬度
$XGC#SET_PROPS#123456#0#capacity:10;rssi:30;longitude:113.391845;latitude:25.365365F#
经度和纬度值保留到小数点后六位,注意,经度和纬度数值必须同时存在
示例一:更新电量和自定义属性,字符串的值需要加""
$XGC#SET_PROPS#123456#0#capacity:82;temperature:56;aa:"bb";cc:"dd";ee:"ff"9#
回复:$XGC_ACK#SET_PROPS#123456#1680071835177#OK#
# 查询设备属性
格式:$XGC#GET_PROPS#SerialNo#Timestamp&#CheckCode#\r\n
示例:$XGC#GET_PROPS#123456�#0D#
回复:$XGC_ACK#GET_PROPS#123456#1679994827900#rssi:22;longitude:116.40154828045652;latitude:39.90310373211554;capacity:18E#
回复:$XGC_ACK#GET_PROPS#1231#1692265017707#propsNottFound�A#
# 删除设备属性
格式:$XGC#DEL_PROP#SerialNo#Timestamp#key1,key2&#CheckCode#\r\n
示例:$XGC#DEL_PROP#123456#0#rssi,aaM#
回复:$XGC_ACK#DEL_PROP#123456#1680073820673#OK3#
# 查询远程升级(OTA)
格式:$XGC#GET_OTA#SerialNo#Timestamp#isHttpsUrl:false;isEncode:true&#CheckCode#\r\n
参数:
isHttpsUrl:可选,是否返回https链接,可选值true/false。false或去掉该参数则返回http链接
isEncode:可选,下载地址是否经过url编码。该指令默认返回的url已经过url编码
示例:$XGC#GET_OTA#123456#0F#
回复:
未找到OTA任务:$XGC_ACK#GET_OTA#1231#1692273102836#otaNotFoundG#
找到OTA任务,下载链接经过url编码:$XGC_ACK#GET_OTA#123456#1679994375469#fwVersion:1;filename:ota.bin;md5:b8f752928c4ed3931bcae18d2df02bd4;url:http%3A%2F%2Ffiles.xsgee.com%2Fdevice-center-dev%2Fproject%2F10118e22fa5dd3f10ca2%2Fota%2F1640005786251366402%2Fhosts%3FExpires%3D1679997970%26OSSAccessKeyId%3DLTAI4gDKwEZaW2PGxNSFSignature%3DiF70T1bVKWmlYb54wiGBuFIBo%253D%26%2370%23N#
#上传远程升级(OTA)状态
格式:$XGC#OTA_STATE#SerialNo#Timestamp#stage:finish;swVersion:1.0&#CheckCode#\r\n
state: 执行状态
finish:配置完成,需要带上OTA任务的swVersion
failed:配置失败,无需带上swVersion
downloading:正在下载
upgrading:正在升级
状态说明:状态说明
示例:
$XGC#OTA_STATE#123456#0#stage:finish;swVersion:1	#
$XGC#OTA_STATE#123456#0#stage:failedM#
回复:
配置成功:
$XGC_ACK#OTA_STATE#123456#1680075126979#OK�#
上传finish状态,上传的swVersion与OTA任务的swVersion不一致:
$XGC_ACK#OTA_STATE#123456#1692275671777#ERR:software version is not expectedB#
# 查询设备配置
格式:$XGC#GET_CONFIG#SerialNo#Timestamp&#CheckCode#\r\n
示例:$XGC#GET_CONFIG#123456�#5A#
回复:
未找到配置任务
$XGC_ACK#GET_CONFIG#1231#1692265017707#configNotFoundE#
$XGC_ACK#GET_CONFIG#1231#1692270217631#configVersion:230817190334;max:40;min:20#
#上传设备配置状态
格式:$XGC#CONFIG_STATE#SerialNo#Timestamp#stage:finish;configVersion:230329001&#CheckCode#\r\n
state: 执行状态
- finish:配置完成,需要带上收到的配置configVersion
- failed:配置失败,无需带上configVersion
示例:
$XGC#CONFIG_STATE#123456#0#stage:finish;configVersion:230324180246D#
$XGC#CONFIG_STATE#123456#0#stage:failed#
回复:
$XGC_ACK#CONFIG_STATE#123456#1680057814047#OKA#
$XGC_ACK#CONFIG_STATE#123456#1692276082697#ERR:version of config is not expected#
#上传日志
格式:$XGC#PUSH_LOG#SerialNo#Timestamp#log_content@level@code&#CheckCode#\r\n
log_content:日志内容,必填,不可包含,"$","#","&#","@"
level:日志等级,非必填,info(默认),warning,error,三个等级
code:错误码,非必填
示例一:$XGC#PUSH_LOG#123456#0#device boot ok. temperature sensor:ok. g-sensor: ok@info@200A#
示例二:$XGC#PUSH_LOG#123#0#设备开机成功,温度传感器:正常,重力传感器:正常D#
回复示例:$XGC_ACK#PUSH_LOG#123456#1680017055067#OK2#
# 查询平台时间
格式:$XGC#NOW#SerialNo#Timestamp#format:timestamp&#CheckCode#\r\n
format: 可选,date或timestamp,默认timestamp
示例:$XGC#NOW#123456#0#format:timestampE#
回复:$XGC_ACK#NOW#123456#1692262196515#timestamp:1692262196515B#
回复:$XGC_ACK#NOW#1231#1692262679844#year:2023;month:8;day:17;hour:16;minute:57;second:59;millis:844$#