通信协议 - a2633063/zM1 GitHub Wiki

通信格式

如果你要依此开发您特有的客户端控制,有任何问题直接联系我.

MQTT主题

使用MQTT服务器时,

zM1接收数据监听的topic为device/zm1/MAC/set

zM1反馈的数据的topic为device/zm1/MAC/state

zM1定时反馈功率等信息topic为device/zm1/MAC/sensor

(MAC为小写mac地址字符串,如1234567890ab)

使用UDP时,zM1接收数据监听的端口为10182,发送数据的端口为10181,发送的目标IP为255.255.255.255,即局域网内全网广播.

通信通过Json格式进行通信,无论是否使用MQTT服务器,通信协议内容相同.

如:

{
    "name":"zM1_1234",
    "mac":"1234567890ab"
}

当手机app/其他服务器(后面简称为app)通过MQTT或UDP给zM1设备(后面简称为zM1或设备)后,zM1会返回相似的命令.

控制

{
	"name":"zM1_1234",			//当前设备名称,设备依靠此判断此条命令是否应该执行后面的命令
	"mac":"1234567890ab",		//当前设备mac地址,设备依靠此判断此条命令是否应该执行后面的命令
	"PM25":"1.0",				//当前PM2.5
	"formaldehyde":"0.2",		//甲醛
	"temperature":"20",			//温度
	"humidity":"64",			//湿度
	"ssid":"当前连接ssid",		  //当前连接的wifi名称
	"cmd":"restart",			//重启排插
	"version":"版本信息",		 //当前固件版本
	"brightness":4,				//屏幕亮度0为关屏,1-4为对应亮度
	"interval":5,				//传感器上报频率,单位为秒,默认值为5
	"zone":480,					//时区,单位为分钟,详细见以下说明,默认为+8:00
	"time":-1,					//校时,详细见以下说明
	"setting":
	{
		"name":"zm1",			//设置zTC1的新名称,最长32个字节
		"mqtt_uri":"www.mqtt.com",	//设置mqtt服务器
		"mqtt_port":1883,		//设置mqtt服务器端口
		"mqtt_user":"z",		//设置mqtt服务器登录用户名
		"mqtt_password":"123456"	//设置mqtt服务器登录密码
	},

    "task_0":			//设置当前插口定时任务,总共0-4 5组,1-4省略 
    {					//注意 设置task时,task中所有字段都必须存在而且数据有效
    	"hour":12,			//设置定时任务时间为12:59
     	"minute":59,		//同上
     	"repeat":10,		//重复,bit0-bit6分别表示周一-周日,全部为0时表示一次
     	"action":1,			//动作,0表示关屏 1-4对应亮度
     	"on":1				//当前任务是否有效 0表示无效,1表示有效
     },
     
     "za1":
     {
		"on" :1,					//联动开关 0表示关,其他为开
		"za1_mac" : "000000000001",	//需要被联动的zA1 mac地址
		"start_time" : 1,			//时间段开始时间,详细见以下说明
		"end_time" : 1440,			//时间段结束时间,详细见以下说明
		"PM25" : [ 3, 4, 5],		//3阶段值,详细见以下说明
		"formaldehyde" : [ 6, 7, 8],//3阶段值,详细见以下说明
		"speed" : [ 9, 10, 100 ]	//3阶段值,详细见以下说明
     
     }

	
}
  • 以上命令中,"mac"字段为必须有,当有多个zM1设备时,设备会依靠此字段来判断此条命令是否应该由自己执行.

  • mac字段为最根本的识别符,所以无论app发送给设备还是设备发送给app,mac字段都不能省略且不能为null或其他无意义的内容.

  • zone字段为时区设置,单位为分钟,即时区小时对应分钟数.时区范围-12:00~+14:00,则此值范围为:-720~840.例如中国时区为+8:00,则值为(+8*60+0)=480.

  • time字段为手动校时,当app发送给设备要求校时时,值必须为-1.校时后设备会在此字段返回校时结果.为-1表示校时失败.整值表示校时的utc针对时区后的修改时间戳.

  • 如果仅仅为了查询某个字段的结果可以将字段冒号后的参数写为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,则每周一周四周六定时任务有效.
  • za1联动说明:

    • start_time/end_time: 表示一天中的时间,转换为分钟.如15:10值为910 08:00值为480

    • start_time>end_time时表示跨零点的时间段,如start_time=1380,end_time=360时,表示时间段为23:00-06:00时间段

    • PM25/formaldehyde/speed3组数组表示当PM2.5或甲醛值在对应段是对应的风扇,判断逻辑为:

      在开始时间至结束时间内
      如果甲醛高于甲醛_3 或PM2.5高于PM2.5_3 则风速调为风速_3
      否则如果甲醛高于甲醛_2 或PM2.5高于PM2.5_2 则风速调为风速_2
      否则如果甲醛高于甲醛_1 或PM2.5高于PM2.5_1 则风速调为风速_1
      否则关闭
      
    • PM25值范围0-65535, formaldehyde值为实际甲醛值*100后的值,如30表示甲醛值0.30,speed0-100对应zA1风速

传感器反馈

zM1定时反馈功率等信息,根据设置的反馈时间,每隔一段时间反馈.

mqtt 的 topic为device/zm1/MAC/sensor

{
	"mac":"d0bae4618552",	//唯一标识符
	"PM25":"1.0",				//当前PM2.5
	"formaldehyde":"0.2",		//甲醛
	"temperature":"20",			//温度
	"humidity":"64",			//湿度
}

设备配对

{"cmd":"device report"},此命令为当app设备列表中无此设备时,发送此命令,设备会返回名称,设备类型编号,mac地址及设备类型名称,

{
    "name":"zM1_1234",		//当前设备名称
    "type":4,			//设备类型编号,1表示zTC1排插
    "type_name":"zM1",		//设备类型名称
	"mac":"1234567890ab",	//当前设备的mac地址
	"ip":"192.168.0.1"		//当前设备的ip地址
}

app接收到此命令后,会将此设备加入到列表中.

ota在线升级

查询当前版本:

{
"mac" : "1234567890ab",
"version":null
}

zM1返回数据:

{
    "mac" : "1234567890ab",
    "version":"v1.0.2"
}

v0.2即为当前版本,app可与服务器判断当前最新版本.若当前版本与最新版本不同,则可以发送一下ota升级命令进行升级.

ota升级:

{
"mac" : "1234567890ab",
    "setting":
    {
    	"ota":"http://192.168.43.119/zM1_MK3031_moc.ota.bin"
    }
}

其中,"http://192.168.43.119/zM1_MK3031_moc.ota.bin" 为固件下载地址.需要保证用浏览器打开此链接,可以直接下载bin文件即可

注意:链接中不可含有@符号.

链接不可为重定向地址

zM1返回数据:

{
	"mac" : "1234567890ab",
    "setting":
    {
    	"ota":"http://192.168.43.119/zM1_MK3031_moc.ota.bin"
    }
}

升级完成后,zTC1通过UDP返回数据,并自动重启:

{
	"mac":"1234567890ab",
	"ota_progress":100
}

homeassistant 相关协议

homeassistant同样为读取以上json格式数据来同步/控制状态.