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.513" }, { "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.513" } ]
字段 | 类型 | 非空 | 结构 | 描述 |
---|---|---|---|---|
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.456) |
接口参考实例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); }