1. 概述
1.1. 文档说明
生物雷达数据接口,用于推送生物雷达数据至客户服务器,URL接口数据接口需要客户自行实现。
文档日志
| 序号 | 修改人 | 修改日期 | 修改内容 | 版本号 |
|---|---|---|---|---|
| 1 | ome | 2018-8-16 15:01:36 | 新增sn序列号信息推送 | V1.0.1 |
| 2 | ome | 2018-8-22 10:01:36 | 新增signal信号值信息推送,完善在床状态信息 | V1.0.2 |
| 3 | ome | 2018-12-19 15:31:41 | 新增睡眠报告推送接口 | V1.0.3 |
| 4 | ome | 2019-3-19 09:00:07 | 新增在床状态信息 | V1.0.4 |
| 5 | ome | 2019-10-8 15:21:12 | 新增实时数据单双雷达信息区分 | V1.0.5 |
| 6 | ome | 2020-3-17 11:48:44 | 新增报告推送单双雷达信息区分 | V1.0.6 |
| 7 | ome | 2020-6-9 13:09:46 | 新增推送接口说明,新增驻留时长、预警类型、呼吸状态推送(BR07卫生间场景专用) | V1.0.7 |
| 8 | ome | 2020-11-4 17:50:22 | 新增在线状态说明 | V1.0.8 |
| 9 | ome | 2021-4-28 11:12:00 | 设备序列号统一调整为int类型 | V1.0.9 |
| 10 | ome | 2022-1-13 18:14:37 | 新增跌倒设备预警类型14 | V1.0.10 |
| 11 | ome | 2022-3-10 11:14:37 | 新增java接口样例 | V1.0.11 |
| 12 | ome | 2022-3-18 11:42:28 | 优化接口字段说明 | V1.0.12 |
| 13 | ome | 2022-9-23 14:25:25 | 报告接口新增上床、离床时间 | V1.0.13 |
| 14 | ome | 2022-10-08 14:25:25 | 实时、报告接口新增设备类型 | V1.0.14 |
| 15 | ome | 2023-8-29 11:13:52 | 报告接口新增鼾声次数、止鼾次数 | V1.0.15 |
2. 接口
2.1. 实时数据接口
客户提供接口,以接收服务器推送的信息。(根据生物雷达监测的数据计算各项信息后,返回给客户)
基本信息
-
请求url:
http://api.example.com/datapost(由客户提供的接口链接) -
请求协议:
HTTP -
请求方式:
POST -
请求格式:
application/json -
推送间隔:
5-15 s
请求参数
| 字段 | 参数位置 | 类型 | 默认值 | 必输项 | 结构 | 描述 |
|---|---|---|---|---|---|---|
| 无 | body | cust_json | 是 | 根据json格式转为JSON字符串。详细定义请见下文RadarDataEntity说明 |
[
{
"mac": "3C71BF2E9999",
"sn": "",
"radarNumber": 1,
"deviceModel": 35,
"heartRate": 0,
"respiratoryRate": 0,
"turn": 0,
"online": 2,
"isbed": 0,
"signal": 29,
"stayTime": 30,
"alarmType": 6,
"breathStatus": 10,
"ip": "118.196.253.149",
"timeStamp": "2019-10-08 15:17:22"
},
{
"mac": "3C71BF2E9999",
"sn": "",
"radarNumber": 2,
"deviceModel": 35,
"heartRate": 66,
"respiratoryRate": 20,
"turn": 3,
"online": 2,
"isbed": 1,
"signal": 67,
"stayTime": 30,
"alarmType": 6,
"breathStatus": 10,
"ip": "118.196.253.149",
"timeStamp": "2019-10-08 15:17:22"
}
]
| 字段 | 类型 | 非空 | 结构 | 描述 |
|---|---|---|---|---|
| mac | string | 是 | 设备MAC地址 | |
| sn | string | 否 | 设备序列号,按需获取 | |
| radarNumber | int | 是 | 设备雷达序号(默认为1。1:雷达一数据,2:雷达二数据,同时表示该设备为双雷达。) | |
| deviceModel | int | 是 | 设备型号(防跌倒默认为34,智能床默认为35,具体型号请咨询获取,防跌倒无报告) | |
| heartRate | int | 是 | 心率 | |
| respiratoryRate | int | 是 | 呼吸率 | |
| turn | int | 是 | 翻身次数 | |
| online | int | 是 | 是否在线(0:离线,1:在线。超过N秒接收不到数据自行判断离线,建议值为60秒以上) | |
| isbed | int | 是 | 在床状态(0:离床,1:在床,11:分析中,21:设备异常) | |
| signal | int | 是 | 信号值(信号值越大表示监测对象的体征信号强度越大,一般30以上表示有人) | |
| stayTime | int | 是 | 驻留时长(默认为0,BR07卫生间场景特有属性,单位:分钟) | |
| alarmType | int | 是 | 预警类型(默认为0,卫生间场景属性;0:正常,6:驻留时间超过n分钟,7:体征数据异常,14:跌倒预警) | |
| breathStatus | int | 是 | 呼吸状态(默认为0,BR07卫生间场景特有属性;值越大表示呼吸越平稳) | |
| ip | string | 否 | 设备上传IP地址,按需获取 | |
| timeStamp | string | 是 | 时间(2017-03-25 17:18:24) |
接口参考实例C#
[HttpPost("/api/datapost")]
[AllowAnonymous]
public IActionResult datapost()
{
string resultJosn = "";
try
{
resultJosn = "{\"code\": 1,\"msg\": \"未知异常\"}";
Stream stream = HttpContext.Request.Body;
//获取响应内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
string requestDataStr = reader.ReadToEnd();
string getPostTime = "";
var arr = JArray.Parse(requestDataStr);
var msg = "post成功,data数据有" + arr.Count + "个";
if (arr.Count > 0)
{
getPostTime = arr[0]["timeStamp"].ToString();
}
resultJosn = "{\"code\": 0,\"msg\": \"ok\"}";
}
}
catch (Exception ex)
{
resultJosn = "{\"code\": 1,\"msg\": \"" + ex.Message + "\"}";
}
return Content(resultJosn);
}
接口参考实例JAVA
@PostMapping("/api/datapost")
public String datapost(HttpServletRequest request) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
}
String reqBody = sb.toString();
JSONArray pbj = JSONUtil.parseArray(reqBody);
String msg = "post成功,data数据有" + pbj.size() + "个";
StringBuilder returnJson = new StringBuilder();
returnJson.append("{");
returnJson.append("\"ret\":0,");
returnJson.append("\"msg\":\"" + msg + "\",");
returnJson.append("\"err_code\":0");
returnJson.append("}");
String rjson = returnJson.toString();
return rjson;
}
2.2. 睡眠报告接口
客户提供接口,以接收服务器推送的信息。(根据生物雷达监测的数据计算生成报告后,返回给客户)
请求参数
| 字段 | 参数位置 | 类型 | 默认值 | 必输项 | 结构 | 描述 |
|---|---|---|---|---|---|---|
| 无 | body | report_json | 是 | 根据json格式转为JSON字符串。详细定义请见下文RadarReportDataEntity说明 |
[
{
"sleep_id":"20181202160510607437",
"mac": "5CCF7F6A7B31",
"sn": "182024",
"radar_number": 1,
"device_model": 35,
"snore_times": 0,
"stopsnore_times": 0,
"inbed_time": 158,
"outbed_time": 0,
"sleep_time": 16,
"deep_sleeptime": 0,
"light_sleeptime": 16,
"rem_time": 0,
"wake_time": 142,
"sleep_score": 72,
"fall_sleeptime": 124,
"stime": "16:22",
"etime": "19:01",
"sdate": "2018-12-02 16:22:00",
"edate": "2018-12-02 19:01:00",
"date": "2018年12月02-02日",
"turn_count": 0,
"heart_rate": 73,
"breath_rate": 13,
"heart_rate_h": 75,
"breath_rate_h": 15,
"heart_rate_l": 71,
"breath_rate_l": 11,
"outbed_times": 0,
"assess_result": {
"types": [
{
"type_name": "入睡困难"
},
{
"type_name": "睡眠质量过低"
}
],
"reason": [
{
"reason_name": "入睡时长超过30分钟"
},
{
"reason_name": "可能睡前专注看手机,如长文章等"
},
{
"reason_name": "综合评分过低,主要影响因素为深睡比例和入睡速度"
}
],
"program": [
{
"program_name": "睡前一小时降低环境亮度,播放舒缓音乐放松心情,缓慢平衡地呼吸。"
},
{
"program_name": "睡前喝点热牛奶"
},
{
"program_name": "少玩手机"
},
{
"program_name": "4-7-8呼吸法:利用鼻子吸气4秒,憋气7秒,最后再呼气8秒,做3次循环"
}
],
"more": [
{
"title": "睡眠的生理过程是怎样的?",
"url": "http://ask.medix.cn/answers/008c0f5be212e2633f8496411e8ef485.htm?ad=off"
},
{
"title": "什么样的环境益于睡眠?",
"url": "http://ask.medix.cn/answers/4053ff42cd211c56df9d73098d521d0f.htm?ad=off"
},
{
"title": "更多睡眠知识",
"url": "http://ask.medix.cn/1a69de81f43998b703805e5cbf43c6c4.htm?ad=off"
}
]
},
"user_sleepScore": 70,
"user_scoreWords": "睡眠质量一般",
"user_vsAllPeople": "战胜全国 65% 的小伙伴",
"datelist": ["2018-12-02 16:22:54","2018-12-02 16:24:54",...,"2018-12-02 23:12:54"],
"resplist": [23,21,..., 23],
"cyclelist":[1,8,...,0],
"turnlist": [1,1,...,0],
"rexlist": [25,25,...,75 ],
"heartlist": [85,83,...,85]
}
]
| 字段 | 类型 | 非空 | 结构 | 描述 |
|---|---|---|---|---|
| sleep_id | string | 是 | 睡眠报告ID | |
| mac | string | 是 | 设备MAC地址 | |
| sn | string | 是 | 设备序列号,按需获取 | |
| radar_number | int | 是 | 设备雷达序号(默认为1。1:雷达一数据,2:雷达二数据,同时表示该设备为双雷达。) | |
| device_model | int | 是 | 设备型号(防跌倒默认为34,智能床默认为35,具体型号请咨询获取,防跌倒无报告) | |
| snore_times | int | 是 | 鼾声次数 | |
| stopsnore_times | int | 是 | 止鼾次数 | |
| inbed_time | int | 是 | 在床时间(分钟) | |
| outbed_time | int | 是 | 离床时间(分钟) | |
| sleep_time | int | 是 | 睡眠时间(分钟) | |
| deep_sleeptime | int | 是 | 深睡时间(分钟) | |
| light_sleeptime | int | 是 | 浅睡时间(分钟) | |
| rem_time | int | 是 | REM时间(分钟) | |
| wake_time | int | 是 | 清醒时长(分钟) | |
| sleep_score | int | 是 | 睡眠效率 | |
| fall_sleeptime | int | 是 | 入睡用时(分钟) | |
| stime | string | 是 | 上床时间(时分,如22:40) | |
| etime | string | 是 | 起床时间(时分,如22:40) | |
| sdate | string | 是 | 上床日期(时分,如2018-12-02 22:40:00) | |
| edate | string | 是 | 起床时间(时分,如2018-12-03 08:40:00) | |
| date | string | 是 | 报告日期( "2018年12月02-03日") | |
| turn_count | int | 是 | 翻身次数(次) | |
| heart_rate | int | 是 | 平均心率(次/分) | |
| breath_rate | int | 是 | 平均呼吸频率(次/分) | |
| heart_rate_h | int | 是 | 心率最高值 | |
| breath_rate_h | int | 是 | 呼吸频率最高值 | |
| heart_rate_l | int | 是 | 心率最低值 | |
| breath_rate_l | int | 是 | 呼吸频率最低值 | |
| outbed_times | int | 是 | 离床次数 | |
| assess_result | object | 是 | 评估及诊断信息 | |
| types | object | 是 | 评估结果 | |
| type_name | string | 是 | 评估结果说明 | |
| reason | object | 是 | 诊断结果 | |
| reason_name | string | 是 | 诊断结果说明 | |
| program | object | 是 | 建议方案 | |
| program_name | string | 是 | 建议方案说明 | |
| more | object | 是 | 相关问答 | |
| title | string | 是 | 相关问答标题 | |
| url | string | 是 | 相关问答URL | |
| user_sleepScore | int | 是 | 睡眠质量 | |
| user_scoreWords | string | 是 | 睡眠结果 | |
| user_vsAllPeople | string | 是 | 睡眠对比结果 | |
| datelist | array | 是 | 日期数组 | |
| resplist | array | 是 | 呼吸频率数组,与datelist对应 | |
| cyclelist | array | 是 | 周期数组,与datelist对应。含义: 0:深睡 1:浅睡,第一个浅睡点为入睡点 2:REM 3:短时离床,也相当于起夜 4:离床,报告以外的周期 5:上床点 6:起床点 7:入睡过程,上床点5和入睡点8之间的为清醒点 8:入睡点 9:短时间网络异常,长时间则会结束计算报告处理 |
|
| turnlist | array | 是 | 翻身数组,与datelist对应 | |
| rexlist | array | 是 | 睡眠曲线数组,与datelist对应 | |
| heartlist | array | 是 | 心率数组,与datelist对应 |
接口参考实例C#
if ("POST" == _context.Request.RequestType)
{
//传data
Stream stream = _context.Request.InputStream;
string requestDataStr = "";
if (stream != null && stream.Length > 0)
{
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
requestDataStr = reader.ReadToEnd().ToString();
}
}
var arr = JArray.Parse(requestDataStr);
var msg = "post成功,data数据有" + arr.Count + "个";
StringBuilder returnJson = new StringBuilder();
returnJson.Append("{");
returnJson.Append("\"ret\":0,");
returnJson.Append("\"msg\":\"" + msg + "\",");
returnJson.Append("\"err_code\":0");
returnJson.Append("}");
rjson = returnJson.ToString();
_context.Response.Write(rjson);
}