MQTT 接口文档
操作模式参数:mode_opt
1
: 实训模式2
: 竞赛模式3
: 社交模式
旧版指令
TRAINING 发布命令主题
SCORE 返回成绩主题
STATE
MRSCORE MR 程序的 MQTT 接口
智能仿真幼儿接口协议
1、本协议适合于金职伟业所有型号的智能仿真幼儿。
2、客户端向智能仿真幼儿发送命令指令要求:
A、智能仿真幼儿通过登录 WIFI(CCMC_jzwy,285251897_jzwy)英特网,通过 MQTT 协议发送纯文本指令。
B、文本格式及命令含义如下:
baby=fcb467ab90dc&mode_opt=2&opt=rfid
opt=cpr&baby=a842e3826318&mode_opt=1&MR=1
通过 &
字符将命令分为三段(与三段顺序无关)
baby=fcb467ab90dc
:表示这段指令由谁来执行,fcb467ab90dc
是 MAC 地址mode_opt=2
:表示操作模式。1
是实训模式;2
是考试竞赛模式;3
是学习社交模式opt=rfid
:表示做什么操作。rfid
表示进行标签识别,cpr
是心肺复苏,hamrich
表示是海姆立克
3、智能仿真幼儿向控制管理平台返回结果
文本格式如下:
used_time=-1850@correct_times=0@test_time=35@set_times=0@mac_addr=a0b765cc4280@score=0@item_name=toilet@mode_opt=1
used_time=111@correct_times=9@test_time=180@set_times=16@mac_addr=24dcc34ca900@score=0@item_name=milkfood@mode_opt=1@err_code=E1@MR=0
使用@字符隔开,与顺序无关
used_time=-1850
:表示使用了多少秒时间correct_times=0
:做对了多少次数test_time=35
:设定测试时间set_times=0
:设定必须要完成多少次操作mac_addr=a0b765cc4280
:MAC 地址,是这个幼儿发来的操作结果score=0
:通过程序算出的客观得分item_name=toilet
:表示操作的项目名称,如 cpr、hamrich 等mode_opt=1
:表示操作的模式err_code=E1
:表示操作错误信息
4、关于智能仿真幼儿的 IP 地址
目前,智能仿真幼儿的 IP 地址与 WIFI 热点的 IP 是同一段局域网 IP,但是没有固定的 IP,如果要固定的幼儿 IP 地址,可以使用路由器通过绑定 MAC 地址的方式设置固定 IP。我们使用的路由器是水星 AX1500。
我看了 Java 源码之后发现以下两个逻辑
- 娃娃没有添加到系统,是否支持上线之后主动注册。
- 之前考评模块的逻辑,在返回结果时没有唯一值。是否可以新增一个唯一标识,用于回调确认时哪一次操作的。
标准功能
发送指令
opt=blood&baby=a842e3823138&mode_opt=1&&MR=0
opt=blood
操作项目baby=a842e3823138
娃娃的 mac 地址mode_opt=1
操作项目MR=0
是否是虚拟仿真模式
血量处理
发送指令
TRAINING
opt=blood&baby=a842e3823138&mode_opt=1&MR=0
SCORE
used_time=101@correct_times=0@test_time=180@set_times=8@mac_addr=a842e3823138@score=0@item_name=milkfood@mode_opt=1
烫伤处理
opt=scald&baby=a842e3823138&mode_opt=1&MR=0
used_time=101@correct_times=0@test_time=180@set_times=16@mac_addr=a842e3823138@score=0@item_name=milkfood@mode_opt=1
海姆立克
opt=hamrich&baby=a842e3823138&mode_opt=1&MR=0
used_time=159@correct_times=0@test_time=90@set_times=3@mac_addr=a842e3823138@score=0@item_name=hamrich@mode_opt=1@MR=0
安抚轻摇
opt=comforttap&baby=a842e3823138&mode_opt=1&MR=0
used_time=133@correct_times=0@test_time=120@set_times=9@mac_addr=a842e3823138@score=0@item_name=comforttap@mode_opt=1@shake=0
拍嗝处理
opt=hiccup&baby=a842e3823138&mode_opt=1&MR=0
used_time=98@correct_times=0@test_time=180@set_times=8@mac_addr=a842e3823138@score=0@item_name=milkfood@mode_opt=1
姿态
baby=a842e3823138@opt=pose@mode_opt=1@MR=0
返回结果
mac_addr=a842e3823138@attitude=1@item_name=pose@mode_opt=1@MR=0
attitude=1表示姿态结果 :1是倒姿,3是立姿,4是卧姿,5是爬姿,52的没有坐
头部支撑
opt=support&baby=a842e3823138&mode_opt=1&MR=0
返回的结果
mac_addr=a842e3823138@result=1@item_name=support@mode_opt=1@MR=0
mac_addr=a842e3823138@holdup=1@item_name=support@mode_opt=1@MR=0
指令中的 result=1 表示正常,result=0 表示失败
指令中的 holdup=1 表示正常,holdup=0 表示失败
擦屁屁
opt=wipeass&baby=a842e3823138&mode_opt=1@MR=0
返回内容
used_time=45@correct_times=0@test_time=45@set_times=0@mac_addr=a842e3823138@score=0@item_name=wapeass@mode_opt=1
腹胀处理
opt=gas&baby=a842e3823138&mode_opt=1
打襁褓
opt=swaddle&baby=08d1f91a3830&mode_opt=1
更换尿布
opt=diaper&baby=08d1f91a3830&mode_opt=1
功能性指令
在线状态
3、关于图 3 中的问题
下面红色的字其实就是解决一个问题,就是判断娃娃是不是在线。我们用两种方式:
方式一:自动方式,娃娃每隔 60 秒对平台发一个在线信息,指令码如下
online=yes@baby=fcb467ad1818
主题是:STATE
,平台收到这个代码表示 baby=fcb467ad1818
在线,因此娃娃的图标为彩色,反之是离线,图标定为灰色。
方式二:服务器下发指令进行检测
opt=online@baby=fcb467ad1818@mode_opt=1
在线状态实现方案:
- 方式一
- 娃娃每隔 60S 自动发送状态到 MQTT 服务器 -> 后端监听,将获取的在线状态写入 Redis,设置过期时间为 60 S
- 当前端页面获取娃娃数据时,从 Redis 缓存中获取数据,在前端渲染在线状态
- 方式二
- 前端选择娃娃之后,点击在线检测 -> 后端从 Redis 中获取在线状态数据,返回到前端
气温感知
下发指令:
opt=air_tem@baby=fcb467ad1818@mode_opt=1
返回指令
air_tem=28.5@baby=fcb467ad1818
气温感知实现方案为:
- 浏览器下发气温感知指令 -> 后端转发到 MQTT 服务器 -> 娃娃接受指令,发送温度到 MQTT 服务器 -> 后端监听 MQTT 温度,缓存到 Redis 数据库
- 一秒钟之后,浏览器获取温度 -> 后端读取 Redis 的温度数据,返回到前端
文件上传实现方案
- 前端使用 Excel 工具解析并且预览,没有问题之后上传 -> 后端接受数据并存储到 MySQL
- 温度感知 相关功能娃娃已经实现,又返回对应的接口数据,控制系统里面也实现了上传数据的功能
- 错误睡姿 相关功能娃娃已经实现,但是没有做对应的接口数据,控制系统里面实现了上传数据的功能。
- 着装感知 相关功能娃娃已经实现,但是没有做对应的接口数据,控制系统里面实现了上传数据的功能。
安抚轻摇
安抚轻摇的返回格式,其后面多了一个 shake=1,其中的 1 表示猛烈摇晃,0 表示正常
used_time=41@correct_times=15@test_time=120@set_times=15
@mac_addr=fcb467ad1818@score=100@item_name=comforttap@mode_opt=1@shake=1
used_time=192@correct_times=143@test_time=160@set_times=45@mac_addr=a842e3826318@score=100@item_name=cpr@mode_opt=1@MR=0
这里的 correct_times=143,中的 143,表示轻摇与抚摸共 143 次,请悉知
- 将娃娃的 ID 去掉,然后在最后,面增加一个备注:如果 shake=1 ,表示“猛烈摇晃”,shake=0 则为空
- 请你在表中增加一个 remark 字段,允许为空,这样我们的灵活度增了
RFID
仿真婴儿使用了 RFID 标签,用于两种情况,一种是衣服的标签,一种是手环的标签。衣服标签的作用判断有没有穿上衣服,穿上后判断穿的哪一套?手环与它的 MAC 地址对应,如果是对应的,当手环靠近娃娃时,娃娃在开机状态时会识别标签,并将娃娃的 MAC 地址与标签地址同时发到平台,平台收到的返回格式是:
rfid=0000001@baby=fcb467ad1818
0000001 是手环的标识,平台收到以上的返回后,弹出 Alert 窗口,显示 RFID 标识和 MAC 地址等相关信息。注:仿真婴儿注册时,多了一个项,就是 RFID,请考虑。
功能测试
图 9 中的这个问题,其实是一个娃娃自检功能,这个功能需要你与我配合。你负责发出自检指令,我负责实施自检,然后将自检结构返回给平台。
你的指令格式是:
opt=check@baby=fcb467ad1818@mode_opt=1
我的返回是:
checked=yes@mac_addr=fcb467ad1818
表示检测全成功,无问题
或者:
checked=no@mac_addr=fcb467ad1818@cpr=no@milk=no@temp=no
Cpr=no 表示心肺复苏失败;milk=no 表示喂奶喂食失败;temp=no 测肛温失败
成功时,使用 Alert 呈现检测成功,失败时将失败的名称列出来。
需要完成内容
婴儿多出一个 rfid 的字段
记录多出来一个 shake 字段、remark 字段
操作计划表
操作计划表实现逻辑
- 在实训模式、竞赛模式下,前端可以提交计划
- 后端生成计划,存入操作计划表。需要记录 操作标题,操作项目、模式、保存时间
- 在操作计划表点击去执行,跳转到对应的控制页面进行操作
- 提交指令到后端,然后转化为 MQTT 指令
照顾程序
照顾程序实现逻辑
- 在前端的社交模式下,选择领养程序、娃娃,然后提交
- 后端接收到指令之后,解析并生成接下来一些周期需要执行的任务,存储到数据库
- 后端定时执行指令
RFID 实现逻辑
目前是按照《52 CM 娃娃的控制管理平台的开发更新》上面的需求来。(后端主动推送消息到前段还需要待完善)
开发文档中虽然提到了设置娃娃的 RFID 编号,但是目前好像只有在后台系统中有用,没有下发的 MQTT 指令。
性别管理逻辑
- 在性别管理页面,修改对应娃娃的性别。
- 前端检测到娃娃性别发送变动之后,背后请求服务器检查娃娃的在线状态。如果在线则可以提交修改,不在线则提交按钮不可用。
- 点击提交之后,修改数据库中娃娃的性别,并且发送指令到 MQTT