Skip to content

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 源码之后发现以下两个逻辑

  1. 娃娃没有添加到系统,是否支持上线之后主动注册。
  2. 之前考评模块的逻辑,在返回结果时没有唯一值。是否可以新增一个唯一标识,用于回调确认时哪一次操作的。

标准功能

发送指令

opt=blood&baby=a842e3823138&mode_opt=1&&MR=0

  • opt=blood 操作项目
  • baby=a842e3823138 娃娃的 mac 地址
  • mode_opt=1 操作项目
  • MR=0 是否是虚拟仿真模式

血量处理

发送指令

TRAINING

properties
opt=blood&baby=a842e3823138&mode_opt=1&MR=0

SCORE

properties
used_time=101@correct_times=0@test_time=180@set_times=8@mac_addr=a842e3823138@score=0@item_name=milkfood@mode_opt=1

烫伤处理

properties
opt=scald&baby=a842e3823138&mode_opt=1&MR=0
properties
used_time=101@correct_times=0@test_time=180@set_times=16@mac_addr=a842e3823138@score=0@item_name=milkfood@mode_opt=1

海姆立克

properties
opt=hamrich&baby=a842e3823138&mode_opt=1&MR=0
properties
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

安抚轻摇

properties
opt=comforttap&baby=a842e3823138&mode_opt=1&MR=0
properties
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

拍嗝处理

properties
opt=hiccup&baby=a842e3823138&mode_opt=1&MR=0
properties
used_time=98@correct_times=0@test_time=180@set_times=8@mac_addr=a842e3823138@score=0@item_name=milkfood@mode_opt=1

姿态

properties
baby=a842e3823138@opt=pose@mode_opt=1@MR=0

返回结果

properties
mac_addr=a842e3823138@attitude=1@item_name=pose@mode_opt=1@MR=0
properties
attitude=1表示姿态结果 :1是倒姿,3是立姿,4是卧姿,5是爬姿,52的没有坐

头部支撑

properties
opt=support&baby=a842e3823138&mode_opt=1&MR=0

返回的结果

properties
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 表示失败

擦屁屁

properties
opt=wipeass&baby=a842e3823138&mode_opt=1@MR=0

返回内容

properties
used_time=45@correct_times=0@test_time=45@set_times=0@mac_addr=a842e3823138@score=0@item_name=wapeass@mode_opt=1

腹胀处理

properties
opt=gas&baby=a842e3823138&mode_opt=1

打襁褓

properties
opt=swaddle&baby=08d1f91a3830&mode_opt=1

更换尿布

properties
opt=diaper&baby=08d1f91a3830&mode_opt=1

功能性指令

在线状态

3、关于图 3 中的问题

下面红色的字其实就是解决一个问题,就是判断娃娃是不是在线。我们用两种方式:

方式一:自动方式,娃娃每隔 60 秒对平台发一个在线信息,指令码如下

properties
online=yes@baby=fcb467ad1818

主题是:STATE,平台收到这个代码表示 baby=fcb467ad1818 在线,因此娃娃的图标为彩色,反之是离线,图标定为灰色。

方式二:服务器下发指令进行检测

properties
opt=online@baby=fcb467ad1818@mode_opt=1


在线状态实现方案:

  • 方式一
    1. 娃娃每隔 60S 自动发送状态到 MQTT 服务器 -> 后端监听,将获取的在线状态写入 Redis,设置过期时间为 60 S
    2. 当前端页面获取娃娃数据时,从 Redis 缓存中获取数据,在前端渲染在线状态
  • 方式二
    1. 前端选择娃娃之后,点击在线检测 -> 后端从 Redis 中获取在线状态数据,返回到前端

气温感知

下发指令:

properties
opt=air_tem@baby=fcb467ad1818@mode_opt=1

返回指令

properties
air_tem=28.5@baby=fcb467ad1818


气温感知实现方案为:

  1. 浏览器下发气温感知指令 -> 后端转发到 MQTT 服务器 -> 娃娃接受指令,发送温度到 MQTT 服务器 -> 后端监听 MQTT 温度,缓存到 Redis 数据库
  2. 一秒钟之后,浏览器获取温度 -> 后端读取 Redis 的温度数据,返回到前端


文件上传实现方案

  1. 前端使用 Excel 工具解析并且预览,没有问题之后上传 -> 后端接受数据并存储到 MySQL
  • 温度感知 相关功能娃娃已经实现,又返回对应的接口数据,控制系统里面也实现了上传数据的功能
  • 错误睡姿 相关功能娃娃已经实现,但是没有做对应的接口数据,控制系统里面实现了上传数据的功能。
  • 着装感知 相关功能娃娃已经实现,但是没有做对应的接口数据,控制系统里面实现了上传数据的功能。

安抚轻摇

安抚轻摇的返回格式,其后面多了一个 shake=1,其中的 1 表示猛烈摇晃,0 表示正常

properties
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 字段,允许为空,这样我们的灵活度增了

image-20240605101434464

RFID

仿真婴儿使用了 RFID 标签,用于两种情况,一种是衣服的标签,一种是手环的标签。衣服标签的作用判断有没有穿上衣服,穿上后判断穿的哪一套?手环与它的 MAC 地址对应,如果是对应的,当手环靠近娃娃时,娃娃在开机状态时会识别标签,并将娃娃的 MAC 地址与标签地址同时发到平台,平台收到的返回格式是:

properties
rfid=0000001@baby=fcb467ad1818

0000001 是手环的标识,平台收到以上的返回后,弹出 Alert 窗口,显示 RFID 标识和 MAC 地址等相关信息。注:仿真婴儿注册时,多了一个项,就是 RFID,请考虑。

image-20240605101421394

功能测试

图 9 中的这个问题,其实是一个娃娃自检功能,这个功能需要你与我配合。你负责发出自检指令,我负责实施自检,然后将自检结构返回给平台。

你的指令格式是:

properties
opt=check@baby=fcb467ad1818@mode_opt=1

我的返回是:

properties
checked=yes@mac_addr=fcb467ad1818

表示检测全成功,无问题

或者:

properties
checked=no@mac_addr=fcb467ad1818@cpr=no@milk=no@temp=no

Cpr=no 表示心肺复苏失败;milk=no 表示喂奶喂食失败;temp=no 测肛温失败

成功时,使用 Alert 呈现检测成功,失败时将失败的名称列出来。

需要完成内容

婴儿多出一个 rfid 的字段

记录多出来一个 shake 字段、remark 字段

操作计划表

操作计划表实现逻辑

  1. 在实训模式、竞赛模式下,前端可以提交计划
  2. 后端生成计划,存入操作计划表。需要记录 操作标题,操作项目、模式、保存时间
  3. 在操作计划表点击去执行,跳转到对应的控制页面进行操作
  4. 提交指令到后端,然后转化为 MQTT 指令

照顾程序

照顾程序实现逻辑

  1. 在前端的社交模式下,选择领养程序、娃娃,然后提交
  2. 后端接收到指令之后,解析并生成接下来一些周期需要执行的任务,存储到数据库
  3. 后端定时执行指令

RFID 实现逻辑

目前是按照《52 CM 娃娃的控制管理平台的开发更新》上面的需求来。(后端主动推送消息到前段还需要待完善)

开发文档中虽然提到了设置娃娃的 RFID 编号,但是目前好像只有在后台系统中有用,没有下发的 MQTT 指令。

性别管理逻辑

  1. 在性别管理页面,修改对应娃娃的性别。
  2. 前端检测到娃娃性别发送变动之后,背后请求服务器检查娃娃的在线状态。如果在线则可以提交修改,不在线则提交按钮不可用。
  3. 点击提交之后,修改数据库中娃娃的性别,并且发送指令到 MQTT