通信协议 - a2633063/zS7 GitHub Wiki
此文档对应zS7固件v1.0.0及以上版本. 此文档还在更新中
通信格式
MQTT主题
使用MQTT服务器时,
zS7接收数据监听的topic为device/zs7/MAC/set
,
zS7发送出的数据的topic为device/zs7/MAC/state
zS7立刻反馈体重信息topic为device/zs7/MAC/sensor
(MAC为小写mac地址字符串,如1234567890ab)
使用UDP时,zS7接收数据监听的端口为10182,发送数据的端口为10181,发送的目标IP为255.255.255.255,即局域网内全网广播.
通信通过Json格式进行通信,无论是否使用MQTT服务器,通信协议内容相同.
如:
{
"name":"zS7_90ab",
"mac":"1234567890ab"
}
当手机app/其他服务器(后面简称为app)通过MQTT或UDP给zS7设备(后面简称为zS7或设备)后,zS7会返回相似的命令.
控制
{
"name":"zS7_90ab", //当前设备名称,设备依靠此判断此条命令是否应该执行后面的命令
"mac":"1234567890ab", //当前设备mac地址,设备依靠此判断此条命令是否应该执行后面的命令
"ssid":"当前连接ssid", //查询当前连接的wifi名称
"version":"版本信息", //当前固件版本
"heat":1, //加热开关,0为关,1为开
"battery":412, //电池电压
"charge":1, //是否有插上外接电源(MicoUSB)
"history": //历史体重数据.最多十组
{
"weight":[7000,71000], //体重值扩大100倍,单位kg
"utc":[1590281609,0] //对应体重称重的时间,为北京utc时间,当为0时表示当时获取时间失败,时间未知
}
"setting":
{
"name":"zS7", //设置zS7的新名称,最长32个字节
"wifi_ssid":"你的wifi ssid", //设置连接的wifi ssid
"wifi_password":"wifi 密码", //设置连接的wifi 密码
"mqtt_uri":"www.mqtt.com", //设置mqtt服务器
"mqtt_port":1883, //设置mqtt服务器端口
"mqtt_user":"z", //设置mqtt服务器登录用户名
"mqtt_password":"123456" //设置mqtt服务器登录密码
}
}
- 以上命令中,"mac"字段为必须有,当有多个zS7设备时,设备会依靠此字段来判断此条命令是否应该由自己执行.
mac
字段为最根本的识别符,所以无论app发送给设备还是设备发送给app,mac
字段都不能省略且不能为null
或其他无意义的内容.- 如果仅仅为了查询某个字段的结果可以将字段冒号后的参数写为
null
(不带引号,在json中表示空),此时设备不会做任何修改,只会返回当前值 - 请注意以上字段冒号后面携带的参数,有些如
1
,无引号,表示类型为数字,有些为"名称"
表示类型字符.如果类型与要求不同,则与参数写为null效果相同,即为查询. - 当执行命令和其他功能无关时,其他功能的字段可以省略.
- 设备返回app命令的字符串长度不能超过1023,所以如果发现返回的命令长度可能超过1023,请将命令拆解为多条分别发送.否则可能会引起设备重启的问题.
- 定时任务重复值说明:bit0-bit6分别表示周一-周日,
- 当全部为0时,即值为0,表示仅一次有效,定时任务执行后,任务会自动变为无效
- 当全部为1时,即值为127(二进制1111111->十进制127),表每天都有效
- 当其他情况时,bit0-bit6中哪一位为1,表示每周当天定时任务有效,如值为41时(十进制41->二进制0101001),则bit0 3 5为1,则每周一周四周六定时任务有效.
体重反馈
zS7称重后,当数据稳定(屏幕显示值闪烁3次后),会立刻在反馈当前体重信息
topic:device/zs7/MAC/sensor
{
"mac":"1234567890ab", //唯一标识符
"weight":"4.2", //体重值扩大100倍,单位kg
"time":"1590281609" //称重时间,北京utc时间
}
设备配对
{"cmd":"device report"}
,此命令为当app设备列表中无此设备时,发送此命令,设备会返回名称,设备类型编号,mac地址及设备类型名称,
如
{
"name":"zS7_1234", //当前设备名称
"type":5, //设备类型编号,5表示zS7排插
"type_name":"zS7", //设备类型名称
"mac":"1234567890ab" //当前设备的mac地址
}
app接收到此命令后,会将此设备加入到列表中.
ota在线升级
查询当前版本:
{
"mac" : "1234567890ab",
"version":null
}
zS7返回数据:
{
"mac" : "1234567890ab",
"version":"v0.2"
}
v0.2即为当前版本,app可与服务器判断当前最新版本.若当前版本与最新版本不同,则可以发送一下ota升级命令进行升级.
ota升级:
{
"mac" : "1234567890ab",
"setting":
{
"ota1":"http://www.uri.com/user1.1024.new.2.bin",
"ota2":"http://www.uri.com/user2.1024.new.2.bin"
}
}
S7主控ota原理为2个固件交替使用(当前为固件1升级后自动切换为固件2,当前为固件2升级后自动切换为固件1).所以当不确定当前固件为哪个固件时,必须保证
ota1
ota2
字段都存在且固件下载地址正确!
其中, "http://www.uri.com/user1.1024.new.2.bin" 或 "http://www.uri.com/user2.1024.new.2.bin" 为固件下载地址.需要保证用浏览器打开此链接,可以直接下载bin文件即可,且端口必须为80端口.
注意:
链接中不可含有@符号.
链接不可为重定向地址
端口必需为80端口
必须使用域名,直接使用ip一定失败
zS7返回数据:
{
"mac" : "1234567890ab",
"setting":
{
"ota1":"http://www.uri.com/user1.1024.new.2.bin",
"ota2":"http://www.uri.com/user2.1024.new.2.bin"
}
}
升级完成后,zS7会自动重启.通过再次查询版本号确定ota是否成功
举例
app发给设备或设备返回的数据中,字段的顺序没有影响.
控制mac地址为"1234567890ab"的zS7设备打开加热
app发送zS7命令:
{
"mac":"1234567890ab",
"heat":1
}
zS7返回数据:
{
"mac":"1234567890ab",
"heat":1,
"charge":1
}
设置mac地址为"1234567890ab"的zS7设备名称为"zS7"
app发送
{
"mac":"1234567890ab",
setting:
{
"name":"zS7"
}
}
zS7返回:
{
"mac":"1234567890ab",
"name":"zS7",
setting:
{
"name":"zS7"
}
}
查询mac地址为"1234567890ab"的zS7设备的mqtt服务器
app发送:
{
"mac":"1234567890ab",
setting:
{
"mqtt_uri":null
}
}
zS7返回:
{
"mac":"1234567890ab",
"name":"zS7",
setting:
{
"mqtt_uri":"www.mqtt.com"
}
}
homeassistant 相关协议
homeassistant同样为读取以上json格式数据来同步/控制状态.