通用网络协议

==》点击此处返回主目录《==

网络协议默认使用json格式,根据 cmd 区分指令类型。以下协议是设备端默认就支持的,服务器需要根据协议进行适配。若需要根据服务器协议定制软件,请先进行商务洽谈。另外,因SIM卡流量有限,有些指令不需要频繁发送,有些字段不需要发送,请尽量节省流量。

以下是一些常用的辅助工具下载:

向日葵远程工具下载:https://sunlogin.oray.com/download?categ=personal

MQTTX 调试下载:https://mqttx.app/zh

ApiPost HTTP 调试工具:https://www.apipost.cn/download.html?utm_source=10039&bd_vid=9737545722984463407

注意:设备上传给服务器的数据,默认通过长连接(MQTT/socket)方式上传,也可以通过配置HTTP 接口用于接收设备上报的数据。HTTP接口请求示例如下:

配置 HTTP 接口的方法:

1、在 ini 写码配置文件中添加以下内容,然后通过写码工具配置到设备中。

ini文件中添加的内容内容说明
"api":"http://www.testapi.com" 设备端所有回复给服务器的指令都上传到这个http接口中
 "api":"{\\\"getpara,qrcode\\\":\\\"http://www.testapi.com\\\"}"设备端只有getpara,qrcode这两个指令的消息回复上传到这个 http 接口
 "api":"{}"清除已配置的 http 接口

2、通过服务器发送 setpara 指令配置。

setpara指令内容内容说明
{"cmd":"setpara","api":"http://www.testapi.com"}设备端所有回复给服务器的指令都上传到这个http接口中
{"cmd":"setpara","api":"{\"getpara,qrcode\":\"http://www.testapi.com\"}"设备端只有getpara,qrcode这两个指令的消息回复上传到这个 http 接口
{"cmd":"setpara","api":"{}"}清除已配置的 http 接口

一、TCP/IP 心跳包(heartbeat指令,TCP/IP 服务器必须对接,MQTT服务器不需要对接)

  • 终端上传

    示例:{"cmd":"heartbeat","sn":"B002TTSTESTDEVICE001"}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“heartbeat”

sn字符串设备sn号,唯一标志一个设备
  • 服务器回复

    示例: {"cmd":"heartbeat"}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“heartbeat”

心跳包频率默认2分钟一次,设备连上服务器就会发送一条心跳包,只有收到服务器回复才会提示“服务连接成功”,否则会提示“服务连接失败”。

二、获取设备写码参数(getpara指令,必须对接,流量卡充值需要用到 ICCID)

  • 服务器下发

    示例:{"cmd":"getpara","full":1}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“getpara”

full整形为1,则获取完整的MQTT / TCP参数。否则只返回设备ID
  • 终端回复

示例:{
    "cmd": "getpara",
    "type": "3",
    "para": "[B005202104300001,K3ISBNQWQD,nIGVV+R6ZMBS0JcCPN55MA==]",
    "iccid": "89860483262090779731",
    "imsi": "460080338604181",
    "imei": "863586880000009",
    "poweron": "欢迎使用四机收款音箱",
    "poweroff": "谢谢使用",
    "volume": "1(1-7)",
    "batt": 4192,
    "verno": "[TTS]B006_COMMON_1.0.14_XXXX",
    "otakey": "zyGnh14pvFvYZbyW6bSGLBzIHqXO88jg",
    "SimManuID": 0,
    "SimExpire": 1677599999,
    "ProdDate": "2022-09-15"
}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“getpara”

type字符串服务器类型名称。"0":自建MQTT,"1":阿里云物联网公共实例,"2":百度云物联网,"3":腾讯云物联网,"4":阿里云微消息队列,"5":阿里云物联网私有实例,"6":TCP/IP 服务器,"7":华为云设备接入IoTDA
para字符串设备联网参数,格式参考《4G设备写码》第4步。
imei字符串设备imei号码
imsi字符串SIM卡IMSI号码
iccid字符串SIM卡 ICCID 号码。(用于SIM卡充值)
poweron字符串开机铃声
poweroff字符串关机铃声
volume字符串当前音量(最小音量-最大音量)
batt整形当前电量(mv)
verno字符串软件版本号
SimManuID整形物联网卡卡商 ID。(涉及公司供应商信息,仅供公司内部识别)
SimExpire整形物联网卡到期时间戳,东八区时间
ProdDate字符串音箱的出厂日期

三、语音播报(voice指令,支持中文 TTS 和 MP3文件播报)

  • 服务器下发

    TTS示例:{"cmd":"voice","before":"1-YX0","after":"1-YDI","money":"12.34","msg":"微信收款12.34元","speed":50,"msgid":"202210260001"}

    MP3示例:{"cmd":"voice","before":"0-收款成功","after":"0-收款结束","money":"45.67","channel":2,"msgid":"202210260002"}

    MP3示例:{"cmd":"voice","before":"0-收款成功","after":"0-收款结束","money":"89.01","playAudibleMsg":"PY3-CH8-SHI-CH9-PIT-CH0-CH1-MNY","msgid":"202210260003"}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“voice”

msg字符串TTS播报的内容,中文字符必须是 UTF8 编码。只要存在该字段,就会使用 TTS 播报,若需要使用 MP3 播报,则不要传该值。
speed整形TTS播报语速。取值0-100,值越大,语速越快。默认为50。
channel整形自定义收款渠道语音,比如:0-顾客取消付款,1-收银通收款,2-微信收款,3-支付宝收款。当使用MP3播报时必传。不传msg才生效。
money字符串收款金额,必须保留2位小数。在有显示屏的项目中,该金额会在显示屏上显示。当需要在显示屏上显示金额时,必须传入该参数。
playAudibleMsg字符串依次播报指定的MP3文件名称(101.MP3,104.MP3),改协议适用于外语,或中国小语种
before字符串播报收款金额前播报。取值为中文字符串或MP3文件名。0-TTS播报,1-MP3播报。(B008 版本开始支持)
after字符串播报收款金额后播报。取值为中文字符串或MP3文件名。0-TTS播报,1-MP3播报。(B008 版本开始支持)
msgid字符串消息ID,通常不需要传,若当前消息ID与上一个消息ID相同,则认为是同一个消息,终端不重复执行。若不传消息ID ,则音箱播报消息后不回复。

注意:语音播报指令播报优先级为: msg > playAudibleMsg > (channel+money)

  • 终端回复

示例:{"cmd":"voice","sn": "B002COMMONTESTDEVICE","msgid":"202210260003","status":1}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“voice”

sn字符串mqtt连接时,该字段不传;TCP/IP连接时才传
msgid字符串消息ID(接收的信息中没有该字段,不回复)
status字符串1-播报成功,2-播报失败。


四、获取设备位置信息(getloc 指令)

  • 服务器下发

    示例:{"cmd":"getloc", "msgid":"202010260003"}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“getloc”

msgid字符串消息ID,若当前消息ID与上一个消息ID相同,则认为是同一个消息,终端不重复执行。建议用带时间戳的编号赋值
  • 终端回复

示例:{"cmd":"getloc","sn": "B002COMMONTESTDEVICE","lat":"028.2044303","lng":"112.8847263","lbs":[{"lac":"120600609","mnc":"0","rssi":"18","mcc":"460","cid":"29601"},{"lac":"252332421","mnc":"0","rssi":"18","mcc":"460","cid":"29601"},{"lac":"121619222","mnc":"0","rssi":"16","mcc":"460","cid":"29601"},{"lac":"98152263","mnc":"0","rssi":"15","mcc":"460","cid":"29601"},{"lac":"252332422","mnc":"0","rssi":"17","mcc":"460","cid":"29601"},{"lac":"13706903","mnc":"0","rssi":"8","mcc":"460","cid":"29601"}]}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“getloc”

sn字符串mqtt连接时,该字段不传;TCP/IP连接时才传
lat字符串根据lbs数据获取到的纬度(注:2.5G流量版本上不会上传该字段)
lng字符串根据lbs数据获取到的经度(注:2.5G流量版本上不会上传该字段)
lbs字符串获取经纬度的lbs数据

五、开关控制(switch指令)

  • 服务器下发

    示例:{"cmd":"switch", "gpio":[{"pin":4,"flag":1},{"pin":12,"flag":0,"reset":3}],"cam":17,"Blight":0}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“switch”

gpioJson数组

gpio 数组

pin整形gpio 编号,取值 0—31。注意:gpio口不能随意控制,只能控制硬件预留的gpio口,否则会引起设备工作不正常。(上述示例指令中 4 为黄灯,12 为蓝灯)
flag整形gpio 开关状态,1-gpio拉高,0-gpio拉低
reset整形指定多少秒之后,gpio 复位。若不需要复位,则不传该字段(B008版本开始支持)
cam整形

高位:摄像头补光灯开关,0关闭, F最大亮度

低位:摄像头扫码频率,0关闭摄像头

(json格式不支持16进制整形,需转换为十进制传输)

Blight整形屏幕背光时间,单位秒,0=>常亮
  • 终端回复 

           该指令终端不回复

六、设置写码参数(setpara指令,同写码工具)

  • 服务器下发

    示例:{
        "cmd": "setpara",
        "para": "B002COMMONTESTDEVICE,3,K3ISBNQWQD,KaUCMeuTMuB7q2n5bcOcsA==",
        "SnSize": 20,
        "cam": 0,
        "sound": "00",
        "poweron": "欢迎使用四机收款云音箱",
        "poweroff": "谢谢使用"
    }

    字段类型必选取值说明
    cmd字符串

    指令名称,固定取值:“setpara”

    para字符串

    服务器连接参数,参考《设备参数写码

    SnSize整形devicename 或 clientid 的字节长度。当 para 不为空时,该字段必须传
    campara字符串摄像头参数,示例:"110"。字符1:开关,取值0/1;字符2:补光灯开关,取值0/1; 字符3:扫码"嘀"声开关,取值0/1. 
    sound字符串"00": 中文普通话TTS播报,"01": 中文普通话MP3播报
    poweron字符串开机铃声
    poweroff字符串关机铃声
    api字符串

    摄像头扫码和身份证识别上报的 http 接口。参考下面第八条或第九条说明。

    Blight整形屏幕背光时间(秒),0-常亮

    uart1

    uart2

    字符串uart串口功能定义,"0"-键盘,"1"-身份证,"2"-摄像头
    ttspeed字符串TTS 播报语速,默认为 "50", 字符串数字,取值0~100
    eint字符串

    B008版本:外部中断配置,格式:"8*A([0]下降沿提示|[1]上升沿提示)"

    示例:"8*30([0]|[1]请扫场所码)"

    simExpire

    整形SIM卡到期时间。传入任意整数,若传入0,则将SIM卡到期时间重置
    vol字符串取值:当前音量*最小音量*最大音量;比如 "3*1*7",表示当前音量为3,最小音量为1,最大音量为7.
    simtip整形0:流量卡到期不播报语音提醒;非0-提前30天每次开机提醒,提前10天有数据交互就提醒。
    user字符串当待机界面左上角出现 “商户:未绑定” 时,可通过该字段设置绑定商户的名称,比如:{"cmd":"setpara","user":"音箱厂家"}。该参数在 ini 写码配置文件中对应 “USR” 参数。
    ota字符串

    在线差分升级版本下载地址,支持 http 和 https,比如:"###https://cdn.openluat-luatcommunity.openluat.com/attachment/[VERNO]_V1.0.2.bin"。###为默认格式,[VERNO]会被替换成设备当前版本。假设当前版本为“B008_通用版本_V1.0.1”,则升级的时候版本下载链接为:https://cdn.openluat-luatcommunity.openluat.com/attachment/B008_通用版本_V1.0.1_1.0.2.bin。该链接放入到浏览器中必须能够下载文件“B008_通用版本_V1.0.1_1.0.2.bin”才能够使用,版本名称表示从 1.0.1版本升级到1.0.2版本

    restart字符串

    重启模式

    "00" - 关闭工厂测试模式,正常重启开机

    "01" - 关闭工厂测试模式,静默重启。重启后不播报开机铃声,联网提示,直到连接服务器成功,进入正常工作模式。重启时用户无感知

  • 终端回复

        {"cmd":"setpara","error":"seterror","sound":"01","para":"0"}   

        若para参数设置失败,才回复上述信息。

七、二维码识别(qrcode 指令)

  • 服务器下发

   示例:

 1)音箱扫手机的付款码: {"cmd":"qrcode", "qrpay":"100"}

 2)用户手机扫音箱屏幕上的收款码:{"cmd":"qrcode","qrpay":"100","qrdata":"收款二维码内容","msg":"请支付100元","timeout":30}

 3)取消支付:{"cmd":"qrcode", "qrpay":"100", "cancel":1}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“qrcode”

qrpay字符串收款金额。若qrpay=0则用户扫码后需要在手机上输入金额,若qrpay>0则用户扫码后不需要在手机上输入金额
qrdata字符串

屏幕上显示的收款二维码。若不传该字段,则打开音箱的摄像头,扫用户手机上的付款码。

title字符串收款的字符提示,显示在二维码上方的标题,比如 “请支付100元”,“Pay:100”
before字符串音箱收款的语音提示,同voice指令,取值为中文字符串或MP3文件名。0-TTS播报,1-MP3播报。最早播报
msg字符串音箱收款的语音提示,同voice指令,使用 TTS 播报,比如 “请支付100元”

playAudibleMsg

字符串音箱收款的语音提示,同voice指令,使用 MP3 播报,比如 “PY1-CH1-BAI-MNY”
after字符串音箱收款的语音提示,同voice指令,取值为中文字符串或MP3文件名。0-TTS播报,1-MP3播报。最迟播报
timeout整形支付超时时间(秒),若为0则一直显示,若不传则默认为屏幕背光时间。支付超时后退回待机界面。若 qrdata 不存在则无效。

cancel

整形需要取消支付,则传1,否则不传

若设备不带数字键盘,服务器可主动下发该指令启动二维码收款。

  • 终端上传(音箱摄像头扫二维码)

       示例:{"cmd":"qrcode","sn":"B002COMMONTESTDEVICE","data":"二维码内容base64编码","money":"31.22","msgid":"20220916103030"}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“qrcode”

sn字符串设备SN号,唯一标志一个设备的 ID
data字符串

摄像头识别的二维码内容 base64 编码。服务器接收到该消息后,需要base64解码才能得到二维码内容。

money字符串音箱主动识别用户付款码时,通过键盘输入待收取的金额
msgid字符串消息ID,由当前时间的 年、月、日、时、分、秒  拼成

默认通过 MQTT / TCP socket 上报,也可以配置 http 接口上报。

八、身份证识别(idcard 指令)

  • 终端上传

   示例: {"cmd":"idcard","xb":"男","mz":"汉","cs":"19870608","zz":"广东省深圳市南山区XXXXX","hm": "430112202205183168","qfjg":"南山公安局","yxq1":"20190422","yxq2":"20390422"}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“idcard”

xb字符串

性别

mz字符串

民族

cs字符串

出生日期

zz整形住址
hm整形身份证号码
qfjg字符串签发机关
yxq1字符串有效期起始日期
yxq2字符串有效期结束日期

默认通过 MQTT / TCP socket 上报,也可以配置 http 接口上报。

  • 服务器下发

    该指令服务器不回复

九、UI 显示(display指令,必须带显示屏才能使用)

  • 服务器下发

示例:

{
    "cmd":"display",
    "times":0, 
    "ui":[
        {"type":0,"data":"欢迎使用智能云音箱","x":10000,"y":5,"size":32,"color":63519},
        {"type":0,"data":"二维码显示","x":40,"y":80,"size":32,"color":65535},
        {"type":1,"data":"This is Qrcode","w":100,"x":220,"y":60,"color":63519},
        {"type":0,"data":"日期时间显示","x":10000,"y":160,"size":32,"color":2047},       {"type":2,"date":100,"dx":10000,"dy":200,"dsize":28,"dcolor":65504,"time":200,"tx":10000,"ty":200,"tsize":28, "tcolor":65504}
    ]
}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“display”

times整形当前界面显示的秒数。0 表示常亮
ui

可选

json数组:表示 UI 中需要显示的元素。

字符串:显示预设的屏幕,比如 "poweron","poweroff",  "idle",  "volume"

type整形0:显示字符串,1:显示二维码,2:显示日期时间
data字符串type=0:待显示的字符串; type=1:二维码的内容
x整形UI 显示的横向坐标,取值范围 0~320。10000 表示居中显示
y整形UI 显示的竖向坐标,取值范围 0~240。10000 表示居中显示
w整形二维码显示的宽度。不能大于屏幕尺寸。
size整形表示字符串显示的字体大小,必须为偶数
color整形

16位的RGB565颜色值,取值范围0~65535。RGB888换算成RGB565算法:RGB值第一个字节取高五位,第二个字节取高六位,第三个字节取高五位。比如颜色为粉色,RGB888值为(255, 101, 230),换算成RGB565值为64316(0XFB3C)

date整形

日期显示的格式。

100: 2022年01月05日;

101: 2022/01/05;

102: 2022-01-05

time整形

时间显示格式。   200:12:20 ;     201:12:20:45

dx,dy

tx,ty

整形

日期显示的坐标,同 x,y

时间显示的坐标,同 x,y

dsize

tsize

整形

日期显示的字体大小,同 size

时间显示的字体大小,若dx=tx且dy=ty,则使用 dsize

dcolor

tcolor

整形

日期显示的字体颜色,同 color

时间显示的字体颜色,若dx=tx且dy=ty,则使用 dcolor

scrn字符串

屏幕名称,比如“test”。

当ui为json数组时,会将屏幕保存在设备内存中。下次发送"ui"=“test”即可显示,比如:{"cmd":"display","times":0,"ui":"test"}。当ui不存在时,就会删除屏幕,比如:{"cmd":"display","scrn":"test","msgid":"20230303"}。

该指令可以用来替换系统预设的界面,比如:"poweron","poweroff","idle","volume"

msgid字符串消息id,当该值不为空时,设备会有消息返回。
  • 终端回复(当不传 msgid 时,终端不做回复)

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“display”

draw

字符串

屏幕显示的结果描述。

mem字符串屏幕保存或删除的结果描述
msgid字符串消息id,与服务器下发的消息ID一致

以上示例程序,显示效果如下: 

十、红外传感器(irs 指令,必须硬件支持)

  • 终端上传

   示例:{"cmd":"eint","sn":"XXXXXXXXXX","count":1}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“eint”(旧版本是 “irs”)

sn字符串设备唯一标志
count整形

取值为大于0的整数,表示检测到红外线的次数

当红外传感器检测到红外线时,会根据系统设置,判断是否上报该指令。

  • 服务器下发

若服务器需要对红外线传感器进行设置,可以下发以下指令。

示例:

新版本: {"cmd":"setpara","eint":"8*A([0]下降沿提示|[1]上升沿提示)"}  (B008 版本)

旧版本:{"cmd":"setpara","irs":"8*30(请扫场所码)"}

irs取值中,8 表示gpio8,不可随意更改;30表示每隔30秒上报一次红外数据;(请扫场所码)表示当检测到红外线时音箱的提示语音,若不需要提示可留空,比如 "8*30()"*1

十一、NFC读卡器(nfc 指令)

  • 终端上传

    当NFC读卡器读到了数据时,就会使用该指令上报 NFC 数据到服务器

   示例:{"cmd":"nfc","sn":"433399156591058565","data":["020000004AF89B2B020804006263646566676869","0201000088012020000005000000000000000000"],"msgid":"20230704095502"}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“nfc”

sn字符串设备唯一标志
datajson数组

前面4个字节为数据头,后面为实际读取到的 NFC 卡数据

字节1:指令码02, 表示读卡器读到了卡。

字节2:扇区号,表示0扇区,如果读取的是卡号,则传 FF。

字节3:扇区块号 ,该示例表示读取的是0扇区0块的数据,如果读取的是卡号,则传 FF。

字节4:结果码 ,00表示读取成功。01表示密钥不正确读取失败,02 表示其它原因读取失败。

示例指令表示成功读取0扇区0块的数据为:4AF89B2B020804006263646566676869;成功读取1扇区0块的数据为:88012020000005000000000000000000

money字符串音箱主动识别用户付款码时,通过键盘输入待收取的金额
msgid字符串消息ID,由当前时间的 年、月、日、时、分、秒  拼成
  • 服务器下发

有的NFC卡读取数据,需要密码,则服务器下发该指令设置NFC卡的读取密码

示例:{"cmd":"nfc","key":["555555555555","111111111111"]}

字段类型必选取值说明
cmd字符串

指令名称,固定取值:“nfc”

keyjson数组

设备收到该指令后,会依次将数组中的数据通过串口传输给NFC读卡器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值