关于本文档
本文档的协议是小机云硬件与外部控制器的通讯协议,用于控制小机云硬件(如DTU等)
从机可通过小机云硬件通讯口(如串口)向小机云发送《小机云文本协议》使用小机云功能,如上传数据
小机云平台的通知指令,也会通过设备发送到从机
名词定义:
硬件结构:以下协议的使用硬件结构为,由上位机(电脑,单片机等嵌入式设备)做主控,向小机云的硬件(DTU或RTU等)发送消息,控制小机云硬件
平台:指点云服务平台
主机:上位机,电脑,单片机等嵌入式设备
从机:小机云硬件(DTU或RTU等)
关于通知:
带有通知描述指令,为设备或平台主动发送的通知。带“查询/通知”描述的指令,从机可主动查询,或当相关状态变化时主机或平台主动发起通知
通讯接口:
小机云硬件与主控设备连接。小机云硬件默认通讯通道顺序为:UART或RS232。如果有UART的情况下为UART,如果没有UART则默认通讯通道为RS232。如果只有RS485,则需要通过快捷指令把通讯通道切换为485。切换通讯通道指令
UART与RS232的默认波特率为115200,RS485的默认波特率为9600
因为485协议通信协议速度慢,不建议要求高实时性的场景下使用485协议通讯
协议格式
以下协议格式无特殊说明,统一格式为:$XGC#ACTION#SN#Timestamp#Content&#Code#。所有协议必须以\r\n结束
具体协议说明请参考《小机云文本协议格式》
# 查询IMEI
指令:$XGC#GET_IMEI#0#0A#
回复:$XGC_ACK#GET_IMEI#867435053362828#0#867435053362828_#
# 配置项目信息
作用:用于向固件配置小机云的项目ID与项目密钥。配置后设备将会自动连接小机云
格式:$XGC#SET_PRJINFO#SN#Timestamp#PID:小机云ProjectId;PSECRET:小机云ProjectSecret&#Code#
$XGC#SET_PRJINFO#867435053362828#0#PID:1000904556b23945fe90;PSECRET:76EDCE04DE96555E16CB34175F2B1565493A74122#
回复:$XGC_ACK#SET_PRJINFO#867435053362828#0#ok9#
# 小机云数据通知
作用:小机云向设备发送的数据消息(如,调试页或自定义控制页发送出来的消息),小机云硬件会通过此协议主动通知到主控
格式:$XGC#DATA_PACK#SN#Timestamp#key1:value1;key2:value2&#Code#
案例一:小机云自定义页,使用了一个开关控件,该控件绑定的字段为switch1,当点击该控件,控件状态从关变为开,页面会向硬件发送如下JSON数据。小机云硬件收到后,会转换成硬件文本协议,再发送到主控
$XGC#DATA_PACK#SN#Timestamp#switch1:true;&#Code#
json
{
"switch1": true
}
案例二:小机云控制台调试页向小机云硬件发送JSON格式数据时,小机云硬件收到后,会转换成硬件文本协议,再发送到主控
$XGC#DATA_PACK#SN#Timestamp#up:true;temperature:32&#Code#
json
{
"up": true,
"temperature": 32,
}
案例三:小机云控制台调试页向小机云硬件发送字符串, "abcdefg"
$XGC#DATA_PACK#SN#Timestamp#abcdefg&#Code#
# 查询/通知设备基本信息
指令:$XGC#GET_BASE_INFO##00#
作用:查询设备的型号,版本,信号,电池电压,是否在充电,等基本信息
model:设备型号
version:设备版本号
rssi:信号值0~31
vbat:电池电压
vbus:充电状态
回复:XGC_ACK#GET_BASE_INFO#867435053362828#0#model:XGC-RG88C;version:1.0.0;rssi:28;vbat:3916;vbus:true�b#
# 查询SIM卡ICCID
指令:$XGC#GET_ICCID#867435053362828#0E#
回复:$XGC_ACK#GET_ICCID#867435053362828#0#898604E0092221379975Y#
# 查询设备网络和SIM卡状态
指令:$XGC#GET_NET_INFO##00#
作用:查询设备的信号值,网络状态,网络模式,SIM卡状态
rssi:信号值0~31
netState:"INIT"表示正在初始化,"REGISTERED"表示已注册,"UNREGISTER"表示未注册
netMode:0:未注册,1:2G GSM网络,2:2.5G EDGE数据网络,3:3G TD网络,4:4G LTE网络,5:3G WCDMA网络
simStatus:true表示sim卡正常,false或者nil表示未检测到卡或者卡异常
回复:$XGC_ACK#GET_NET_INFO#867435053362828#0#rssi:30;netState:REGISTERED;netMode:4;simStatus:trueF#
# 查询/通知 DTU状态
作用:当小机云硬件状态发生变化,硬件发向主机发送状态通知。也可以由主机主动查询。通知与回复指令格式一致。
状态描述:
no-init:开机后的第一状态,本条消息不主动通知,下面的消息会主动通知到主机
init-ok:每次开机,系统硬件,SIM卡,网络等初始化完成
no-project-info:未配置小机云ProjectId与ProjectSecret项目信息,收到项目信息配置后会自动与小机云连接
get-mqtt-info-ok:获取小机云MQTT信息成功
get-mqtt-info-fail:获取小机云MQTT信息失败,或项目信息错误
mqtt-connected:与小机云连接成功
mqtt-disconnected:与小机云连接断开,5秒后会自动重连
指令:$XGC#GET_DTU_STATE#867435053362828#0#
通知/回复:$XGC_ACK#GET_DTU_STATE#867435053362828#0#mqtt-connectedC#
# 小机云设备配置(CONFIG)与远程升级(OTA)通知
有两类通知,配置通知与OTA通知
收到配置通知
格式:$XGC#NOTIFY_CONFIG#SN#Timestamp#configVersion:1693894843740;key1:value1;key2:value2&#Code#
configVersion:配置版本号
key1:自定义key1
value1:自定义key1的值
key2....等自定义的配置
配置执行完成后,需要使用指令回复小机云配置状态。上传配置状态指令详情
收到OTA通知
格式:$XGC#NOTIFY_OTA#SN#Timestamp#configVersion:1693894843740;fwVersion:固件版本;filename:固件名;md5:固件md5;url:固件下载地址&#Code#
$XGC#NOTIFY_OTA#SN#Timestamp#fwVersion:v1.0;filename:update.bin;md5:SD9VY9H3932J0AS08310EF3;url:http%3A%2F%2Ffiles.xsgee.com%2Fdevice-center%2Fproject%2F1000904556a11945fd60%2Fota%2F1689228284937433090%2Fdtu_1_2.bin%3FExpires%3D1691581999%26OSSAccessKeyId%3DSTS.NTpTR7KAzro8BiwZPZr6fhTzn%26Signature%3DHDZ383BViHY4Qc%252FdirOLQeYThQg%253D%26security-token%3DCAIS%252FwF1q6Ft5B2yfSjIr5fFH%252BiDpp5bxa3TQE%252FGvlAPfrlKh5HRjDz2IHhLenloCeEbtPwynGFS7PgdlqdjUJBISAneYMJ86ZJT4FtI2nF4TpXng4YfgbiJREKxaXeiruKwDsz9SNTCAITPD3nPii50x5bjaDymRCbLGJaViJlhHL91N0vCGlggPtpNIRZ4o8I3LGbYMe3XUiTnmW3NFkFlyGEe4CFdkf3mnJzCt0qB1QCql7JF%252B9XLT8L6P5U2DvBWSMyo2eF6TK3F3RNL5gJCnKUM1%252FQbp2ef7oDAWQEMu0TcabSL6Kd%252FNwB0a%252B09ALUBtvX1mfp%252Bvv3DFlsOAbjc3IsagAE4ybmjZ2zeQo25r2QzwtI7Rk9I74Nj5XQ5Yq7WTxuGzlPHGVjBCntaJ8NOsyReXwzTzcAyKwwy%252Fv4ThK3KHjgrdOMuMaElIgoIZqbT%252FLSD4o9VgRfqvJk0dEV2Z%252B9xmeR%252BdcsvsEAXk%252Fml94uaAl1jv%252B3CmxGCbUFPVuFghnL1aw%253D%253D#
fwVersion:固件版本
filename:固件文件名
md5:固件md5
url:固件下载地址
# 设置日志等级
指令:$XGC#SET_LOG_LEVEL#867435053362828#0#LEVEL&#code#
注意:重启设备后生效
- LEVEL:系统会打印大于该等级的日志
- SILENT:不打印日志
- TRACE:日志等级01
- DEBUG:日志等级02
- INFO:日志等级03
- WARN:日志等级04
- ERROR:日志等级05
- FATAL:日志等级06
# 查询当前网络时间
指令:$XGC#GET_NOW#867435053362828#0#timestamp)#
$XGC_ACK#GET_NOW#867435053362828#0#1692157152787#
指令:$XGC#GET_NOW#867435053362828#0#dateB#
$XGC_ACK#GET_NOW#867435053362828#0#year:2023;month:8;day:16;hour:11;minute:39;second:22;millis:576#
# 设置GPIO
作用:设置小机云硬件的GPIO,如果IO不存在,则不返回该IO状态。其中in(x)表示小机云硬件的光耦输入检测,out(x)表示继电器io
指令:$XGC#SET_GPIO#867435053362828#0#out1:1;out2:1;out3:1;out4:1;out5:1;out6:1;out7:1;out8:1f#
回复:$XGC_ACK#SET_GPIO#867435053362828#0out1:1;out2:1;out3:1;out4:1;out5:1;out6:1;out7:1;out8:1z#
指令:$XGC#SET_GPIO#867435053362828#0#out1:0;out2:0;out3:0;out4:0;out5:0;out6:0;out7:0;out8:0f#
回复:$XGC_ACK#SET_GPIO#867435053362828#0#out1:0;out2:0;out3:0;out4:0;out5:0;out6:0;out7:0;out8:0;#
# GPIO状态通知
作用:当小机云硬件GPIO有变化,小机云硬件会主动向主机发送的通知
指令:$XGC_ACK#GPIO_INT#867435053362828#0#in1:1F#
# 查询/通知 所有IO状态
作用:查询所有小机云硬件的GPIO状态,如果IO不存在,则不返回。开机后会主动通知所有IO状态
指令:$XGC#GET_GPIO_ALL#867435053362828#0#out1:0;out2:0;out3:0;out4:0;out5:0;out6:0;out7:0;out8:0;in1:1;in2:1;in3:1;in4:1;in5:1;in6:1;in7:1;in8:1D#
# 查询基站定位
指令:$XGC#GET_LBS#867435053362828#0#
回复:$XGC_ACK#GET_LBS#867435053362828#0#longitude:113.3160324;latitude:022.5571994z#
# 设置硬件通讯通道
作用:小机云硬件默认通讯通道顺序为:UART或RS232。如果有UART的情况下为UART,如果没有UART则默认通讯通道为RS232。如果只有RS485,需要通过快捷指令把通讯通道切换为485。因为485协议通信协议速度慢,不建议要求高实时性的场景下使用485协议通讯
指令:$XGC#SET_DTU_PIPE#867435053362828#232&#code#
参数:uart,232,485
快捷指令,用于快速设置通讯通道。
设置通讯通道为485指令:SET_DTU_PIPE#485\r\n
回复:SET_DTU_PIPE#485-ok
设置通讯通道为232指令:SET_DTU_PIPE#232\r\n
回复:SET_DTU_PIPE#232-ok
设置通讯通道为串口指令:SET_DTU_PIPE#UART\r\n
回复:SET_DTU_PIPE#uart-ok
# 查询硬件通讯通道
指令:$XGC#GET_DTU_PIPE#867435053362828#0C#
回复:$XGC_ACK#GET_DTU_PIPE#867435053362828#0#485@#
# 485发送Modbus RTU协议
作用:使用串口或者232,通过485 Modbus RTU协议数据。固件会自动拼装数据,并自动加入CRC校验码
格式:$XGC#SEND_MBR_485#SN#Timestamp#addr:设备地址;instructions:指令值;reg:操作寄存器;value:操作值&#Code#
指令:$XGC#SEND_MBR_485#867435053362828#0#addr:01;instructions:03;reg:0000;value:0001!#
设备收到以上指令后会向485发送数据: 01 03 00 00 00 01 84 0A
84 0A 为 01 03 00 00 00 01 的 16 位 CRC 结果
回复:$XGC_ACK#485_RECEIVE#867435053362828#0#0103020115781B2#
# 485发送原始数据
作用:使用串口或者232,通过485发送数据
格式:$XGC#SEND_RAW_485#SN#Timestamp#需要发送的数据&#Code#
指令:$XGC#SEND_RAW_485#867435053362828#0#010300000001#
回复:$XGC_ACK#SEND_RAW_485#867435053362828#0#ok#
回复:$XGC_ACK#485_RECEIVE#867435053362828#0#303130323033K#
# 设置自定义参数
作用:用于给上位机,单片机等外部设备存储一些配置信息。重启后存储内容还会存在,重新烧录固件后会被清除
指令:$XGC#SAVE_KEYS#867435053362828#0#a:123;b:abc*#
回复:$XGC_ACK#SAVE_KEYS#867435053362828#0#ok8#
# 查询自定义参数
指令:$XGC#GET_KEYS#867435053362828#0#key1,key24#
回复:$XGC_ACK#GET_KEYS#867435053362828#0#key1:value1;key2:value22#
只返回存在key
# 设置设备属性上传参数
指令:$XGC#SET_UPDATE_PROPS#867435053362828#0#interval:165000;updateLoc:true�C#
作用:设备会自动上传设备属性(信号,电量,充电状态,基站定位,iccid)到小机云,可以通过该指令配置上传参数
interval:上传间隔(ms)。最小上传间隔10000,默认165000
updataLoc:是否上传基站定位,true上传基站定位,false不上传基站定位,默认上传
$XGC#SET_UPDATE_PROPS#867435053362828#0#interval:30000;updateLoc:false8#
$XGC#SET_UPDATE_PROPS#867435053362828#0#interval:60000;updateLoc:true&#
回复:$XGC_ACK#SET_UPDATE_PROPS#867435053362828#0#okf#
# AT固件的OTA升级
对于AT固件来说,小机云的OTA任务是给到主机,如,主控,上位机,单片机等用来升级。
如果需要升级AT固件,则需要通过指令通知AT固件进行升级。
主机收到OTA通知,或通过指令查询OTA任务,拿到OTA任务固件的下载地址。能过下面指令通知AT固件进行升级。
格式:$XGC#DTU_OTA#SN#Timestamp#filename:文件名;fwVersion:固件版本号;url:固件下载地址&#Code#
filename:固件文件名,前缀需要与小机云硬件型号一致。名字长度需要小于32字节
fwVersion:固件版本号
url:固件下载地址,该地址需要经过url编码。(主机通过OTA指令查询或小机云通知拿到的固件下载链接,默认已经经过url编码)
指令:$XGC#DTU_OTA#867435053362828#0#filename:XGC-RG88C_V1.0.bin;fwVersion:1.0.0;url:http%3A%2F%2Ffiles.xsgee.com%2Fdevice-center%2Fproject%2F1000904556a11945fd60%2Fota%2F1689228284937433090%2Fdtu_1_2.bin%3FExpires%3D1691581999%26OSSAccessKeyId%3DSTS.NTpTR7KAzro8BiwZPZr6fhTzn%26Signature%3DHDZ383BViHY4Qc%252FdirOLQeYThQg%253D%26security-token%3DCAIS%252FwF1q6Ft5B2yfSjIr5fFH%252BiDpp5bxa3TQE%252FGvlAPfrlKh5HRjDz2IHhLenloCeEbtPwynGFS7PgdlqdjUJBISAneYMJ86ZJT4FtI2nF4TpXng4YfgbiJREKxaXeiruKwDsz9SNTCAITPD3nPii50x5bjaDymRCbLGJaViJlhHL91N0vCGlggPtpNIRZ4o8I3LGbYMe3XUiTnmW3NFkFlyGEe4CFdkf3mnJzCt0qB1QCql7JF%252B9XLT8L6P5U2DvBWSMyo2eF6TK3F3RNL5gJCnKUM1%252FQbp2ef7oDAWQEMu0TcabSL6Kd%252FNwB0a%252B09ALUBtvX1mfp%252Bvv3DFlsOAbjc3IsagAE4ybmjZ2zeQo25r2QzwtI7Rk9I74Nj5XQ5Yq7WTxuGzlPHGVjBCntaJ8NOsyReXwzTzcAyKwwy%252Fv4ThK3KHjgrdOMuMaElIgoIZqbT%252FLSD4o9VgRfqvJk0dEV2Z%252B9xmeR%252BdcsvsEAXk%252Fml94uaAl1jv%252B3CmxGCbUFPVuFghnL1aw%253D%253D'#
AT固件升级完成后,主机会收到状态回复
成功:$XGC_ACK#DTU_OTA#867435053362828#0#stage:finish;fwVersion:1.0.0}#
失败:$XGC_ACK#DTU_OTA#867435053362828#0#stage:failed}#
当升级完成后,需要使用指令回复小机云升级状态。上传升级状态指令详情
升级完成后,需要发送指令重启新固件才会生效
# 发送短信
格式:$XGC#SEND_SMS#SN#Timestamp#PHONE:手机号;CONTENT:短信内容&#Code#
注意:需要SIM卡支持发送短信功能
指令:$XGC#SEND_SMS#867435053362828#0#PHONE:188xxxxxx;CONTENT:abc#
# DTU重启
指令:$XGC#DTU_REBOOT#867435053362828#00#
回复:$XGC_ACK#DTU_REBOOT#867435053362828#0#}#
有可能会收到不回复
# 发送AT指令
//注意,会一直监听指令回复,需要手动关闭
指令:$XGC#AT#867435053362828#0#AT+CSQA#
//关闭指令回调
指令:$XGC#AT#867435053362828#0#AT+RIL=0#
//打开指令回调
指令:$XGC#AT#867435053362828#0#AT+RIL=1�#