全文搜索
文章
全文搜索
栏目搜索
产品系列 解决方案 技术中心 新闻动态 关于我们 人才招聘 商城

希卡立健康监测系列-数据云流转协议

希卡立健康监测系列-数据云流转协议

 

第一部分:对接方式讲解

一、AMQP 云流转方式

1、阿里云AMQP客户端SDK下载

参考文档:

HTTP
https://help.aliyun.com/zh/iot/developer-reference/connect-an-amqp-client-to-iot-platform?spm=a2c4g.11186623.help-menu-30520.d_4_2_0.5b3b2a2b6rPoAh

可支持的SDKJava/Python 2.7/Python 3/PHP/.NET

需注意:本参考文档为用户已自行将对应阿里云环境配置完成后可使用

2、本协议中采用的AMQP方式的如下:

1、实时呼吸心率

2、睡眠报告

3、使用客户端接收AMQP数据

Java形式:

Java SDK为例,下载示例demo,然后根据我司提供的账户文档,替换代码中所对应的关键信息,运行后即可获得JSON格式云流转数据。下表列出了代码中需替换的标志位。

对应部分

需替换标志位

替换内容

host 部分

${YourHost}

iot-010a0clt.amqp.iothub.aliyuncs.com

accessKey 部分

ALIBABA_CLOUD_ACCESS_KEY_ID

 

accessSecret 部分

ALIBABA_CLOUD_ACCESS_KEY_SECRET

 

consumerGroupId 部分

${YourConsumerGroupId}

 

clientId 部分

${YourClientId}

自定义,用来区分自己的多个接收端

iotInstanceId 部分

${YourIotInstanceId}

 

表格内容对应代码示例中标红部分

部分代码示例:                                                                       (仅供参考)

Python
public class AmqpClient {
    private final static Logger logger = LoggerFactory.getLogger(AmqpClient.class);
    /**
     * 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考
     */
    private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static String accessSecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");;
    private static String consumerGroupId = "${YourConsumerGroupId}";

    //iotInstanceId:实例ID。若是2021年07月30日之前(不含当日)开通的公共实例,请填空字符串。
    private static String iotInstanceId = "${YourIotInstanceId}";

    //控制台服务端订阅中消费组状态页客户端ID一栏将显示clientId参数。
    //建议使用机器UUID、MAC地址、IP等唯一标识等作为clientId。便于您区分识别不同的客户端。
    private static String clientId = "${YourClientId}";

    //${YourHost}为接入域名,请参见AMQP客户端接入说明文档。
    private static String host = "${YourHost}";

    // 指定单个进程启动的连接数
    // 单个连接消费速率有限,请参考使用限制,最大64个连接
    // 连接数和消费速率及rebalance相关,建议每500QPS增加一个连接
    private static int connectionCount = 4;

    //业务处理异步线程池,线程池参数可以根据您的业务特点调整,或者您也可以用其他异步方式处理接收到的消息。
    private final static ExecutorService executorService = new ThreadPoolExecutor(
        Runtime.getRuntime().availableProcessors(),
        Runtime.getRuntime().availableProcessors() * 2, 60, TimeUnit.SECONDS,
        new LinkedBlockingQueue(50000));
  .......................
  .......................
        executorService.shutdown();
        if (executorService.awaitTermination(10, TimeUnit.SECONDS)) {
            logger.info("shutdown success");
        } else {
            logger.info("failed to handle messages");
        }
    }
   

Python形式:

Python 2.7 SDK 为例,根据我司提供的账户文档,替换代码中的关键信息,运行后即可获得 JSON 格式的云流转数据。下表列出了代码中需替换的标志位。

对应部分

需替换标志位

替换内容

url 部分

${YourHost}

iot-010a0clt.amqp.iothub.aliyuncs.com

accessKey 部分

ALIBABA_CLOUD_ACCESS_KEY_ID

 

accessSecret 部分

ALIBABA_CLOUD_ACCESS_KEY_SECRET

 

consumerGroupId 部分

${YourConsumerGroupId}

 

clientId 部分

${YourClientId}

自定义,用来区分自己的多个接收端

iotInstanceId 部分

${YourIotInstanceId}

 

表格内容对应代码示例中标红部分

部分代码示例:                                                                        (仅供参考)

Python
# encoding=utf-8import sys
import logging
import time
from proton.handlers import MessagingHandler
from proton.reactor import Container
import hashlib
import hmac
import base64
import os

reload(sys)
sys.setdefaultencoding('utf-8')
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
console_handler = logging.StreamHandler(sys.stdout)


def current_time_millis():
    return str(int(round(time.time() * 1000)))


def do_sign(secret, sign_content):
    m = hmac.new(secret, sign_content, digestmod=hashlib.sha1)
    return base64.b64encode(m.digest())


class AmqpClient(MessagingHandler):
    def __init__(self):
        super(AmqpClient, self).__init__()

    def on_start(self, event):
        # 接入域名,请参见AMQP客户端接入说明文档。
        url = "amqps://${YourHost}:5671"# 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考
        accessKey = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
        accessSecret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        consumerGroupId = "${YourConsumerGroupId}"
        clientId = "${YourClientId}"# iotInstanceId:实例ID。
        iotInstanceId = "${YourIotInstanceId}"# 签名方法:支持hmacmd5,hmacsha1和hmacsha256。
        signMethod = "hmacsha1"
        timestamp = current_time_millis()
        # userName组装方法,请参见AMQP客户端接入说明文档。
        userName = clientId + "|authMode=aksign" + ",signMethod=" + signMethod \
                        + ",timestamp=" + timestamp + ",authId=" + accessKey \
                        + ",iotInstanceId=" + iotInstanceId + ",consumerGroupId=" + consumerGroupId + "|"
        signContent = "authId=" + accessKey + "×tamp=" + timestamp
        # 计算签名,password组装方法,请参见AMQP客户端接入说明文档。
        passWord = do_sign(accessSecret.encode("utf-8"), signContent.encode("utf-8"))
        conn = event.container.connect(url, user=userName, password=passWord, heartbeat=60)
        self.receiver = event.container.create_receiver(conn)

    # 当连接成功建立时被调用。def on_connection_opened(self, event):
        logger.info("Connection established, remoteUrl: %s", event.connection.hostname)

    # 当连接关闭时被调用。def on_connection_closed(self, event):
        logger.info("Connection closed: %s", self)

    # 当远端因错误而关闭连接时被调用。def on_connection_error(self, event):
        logger.info("Connection error")

    # 当建立AMQP连接错误时被调用,包括身份验证错误和套接字错误。def on_transport_error(self, event):
        if event.transport.condition:
            if event.transport.condition.info:
                logger.error("%s: %s: %s" % (
                    event.transport.condition.name, event.transport.condition.description,
                    event.transport.condition.info))
            else:
                logger.error("%s: %s" % (event.transport.condition.name, event.transport.condition.description))
        else:
            logging.error("Unspecified transport error")

    # 当收到消息时被调用。def on_message(self, event):
        message = event.message
        content = message.body.decode('utf-8')
        topic = message.properties.get("topic")
        message_id = message.properties.get("messageId")
        print("receive message: message_id=%s, topic=%s, content=%s" % (message_id, topic, content))
        event.receiver.flow(1)


Container(AmqpClient()).run()

二、API 方式

1、本协议中采用的API方式的如下:

1、历史报告,日报告和周报查询;

2、警报参数设置和查询方式;

2、使用说明:

1. 根据 api 的不同准备不同的请求和传递实际有效的功能参数

2. API 用户验证方面:需要额外传递验证所用参数,含义如下

参数标志位

含义

appkey

分配给每个客户的 16 位随机字符串,需要每次调用 api 时传输;

secret

分配给每个客户的 24 位随机字符串,始终保留在开发者本地,不在请求参数中

timestamp

发出 api 请求时的 13 时间戳,超时将会拒绝请求;

sign

加密后得到的字符串;

补充:

sign 计算方法为:sign以外的其他请求参数(包括 appkey timestamp),按键字母顺序排序后的 k1=v1&k2=v2&……&kn=vn&secret=YOURSECRET 字符串,对其进行 UTF-8 编码后进行md5哈希,所得32位字符串再全部大写化即为sign

*Python程序样例如下

Python
def genesign(args):
"""
args={
'device_name':'YOUR_DEVICE_NAME',
'date':'QUERIED_DATE',
'db':'QUERIED-DB',
'appkey':'YOUR_KEY'
}
"""

timestamp=round(time.time()*1000)
args['timestamp']=str(timestamp)
print("Timestamp should be %d"%timestamp)

secret="YOUR_SECRET"

str_part=['%s=%s'%(k,args[k]) for k in sorted(args)]
str_part.append("secret=%s"%secret)
reqstring=('&'.join(str_part))
right_sign=hashlib.md5(reqstring.encode(encoding='UTF-8')).hexdigest().upper()
print("Sign should be %s"%right_sign)
return 0

3、基本响应内容和常见错误码:

1、响应体基本结构

类型

含义

code

整型

响应状态码(200成功,40X无权限或无数据,500数据库异常)

msg

字符串

成功与否大类简写的字符串

data

json

所查询的具体内容(200)/0(200)/-1(40X报错)/报错信息字符串(500)

2、错误返回条件下的常见情况

code

msg

data

含义

400

Essenttial params not passed

-1

参数缺失或类别错误,post方法的情况下还可能是没有使用json传参

401

Rejected

 

"Timeout!"

时间戳已经过期(一般为10分钟)或超前过多,最常见原因为时间戳误传为秒级精度的10位时间戳

"User not registered"

appkey误传

"Signiture incorrect"

签名计算有误

"No previlege"

所传设备无权限操作或查询

"Valid request should arrive between 5-13 o'clock"

部分接口存在时段限制

403

--

--

访问被拒绝

404

No record matched

-1

请求中所要求查找或设置的设备或对应记录不存在

--

--

访问了错误路由

405

--

--

请求的Method错误

500

--

--

接口的服务端运行报错

 

 

第二部分:实时呼吸心率对接

一、数据传输方式:阿里云AMQP云流转方式

二、数据传输格式:JSON

三、物模型字段定义及格式

序号

标识符

数据类型

取值范围

含义

1

deviceName

text (字符串)

数据长度:10240

设备备注名

2

HeartRate

int32 (整数型)

取值范围:0 ~ 150

心率,单位:bpm

3

D

int32 (整数型)

取值范围:0 ~ 65535

睡眠分期

计算方法:数值余8

0-设备初始化中;1-清醒;2-REM;3-浅睡;4-深睡

4

E

int32 (整数型)

取值范围:0 ~ 100

呼吸暂停时长,单位:秒

0表示未发生呼吸暂停

5

RespiratoryRate

int32 (整数型)

取值范围:0 ~ 50

呼吸率,单位:bpm

6

HRV

int32 (整数型)

取值范围:0 ~ 40

焦虑分数,越高表示越放松,越低表示越紧张

7

Version

text (字符串)

数据长度:10240

设备运行固件版本

8

Amp_value

int32 (整数型)

取值范围:0 ~ 100000

信号幅度,表示设备探测信号质量与稳定度

9

time_now

text (字符串)

数据长度:10240

时间戳

10

People_flag

int32 (整数型)

取值范围:0 ~ 1

有无人

11

id

text (字符串)

数据长度:10240

设备ID

12

moving

 

int32 (整数型)

取值范围:0 ~ 1

 

大体动标志

0-无大体动;1-有大体动

13

RSSI

int32(整数型)

取值范围-1000-0

信号质量,越高越好

*AMQP 流转消息中可能含有其他表格中未列出的数据,均为睡眠报告中需要用到的中

间值,对于实时展示无意义可以忽略。

四、AMQP云流转消息内容示例

无论用户采用JavaPython处理AMQP消息,收到的消息内容保持一致。虽然不同版本的设备接收到的消息有细微差别,但在设备上下线过程中,用户接收到的消息是一致的。

【补充:不同版本的设备(即Wi-Fi设备和4G-LTE设备)接收到的消息有细微差别详细解释:呼吸心率的信息所对应的 AMQP Topic 格式有所不同。】

基于Wi-Fi版本的示例如下:

 

json
Topic:/产品id/设备id/thing/event/property/post
{"deviceType":"CustomCategory","iotId":"w48OQocXrxrby728cKJOi0m708","requestId":"xkl","checkFailedData":{},"productKey":"i0m7Ob0vHiU","gmtCreate":1722831370123,"deviceName":"51416062","items":{"HeartRate":{"value":67,"time":1722831370121},"C":{"value":0,"time":1722831370121},"D":{"value":10241,"time":1722831370121},"E":{"value":0,"time":1722831370121},"RespiratoryRate":{"value":15,"time":1722831370121},"RDS_ID":{"value":1,"time":1722831370121},"HRV":{"value":14,"time":1722831370121},"Version":{"value":"1.1.6+3.1.7","time":1722831370121},"Amp_value":{"value":1883,"time":1722831370121},"time_now":{"value":"2024-08-0512:16:10\n","time":1722831370121},"People_flag":{"value":1,"time":1722831370121},"id":{"value":"51416062","time":1722831370121},"DeviceName":{"value":"M1_S01B02N1022","time":1722831370121},"RSSI":{"value":-60,"time":1722831370121}}}

基于4G-LTE版本的示例如下:

json
AMQP-4G-LTE下发消息内容
Topic:/产品id/设备id/user/update
{"id":"xkl","version":"1.0","items":{"People_flag":{"value":0},"Amp_value":{"value":0},"HeartRate":{"value":0},"RespiratoryRate":{"value":0},"DeviceName":{"value":"X1LTE_S01B02N041"},"id":{"value":"35686441"},"Version":{"value":"2.0.6+3.1.7"},"C":{"value":0},"D":{"value":0},"E":{"value":0},"HRV":{"value":0},"RDS_ID":{"value":97},"time_now":{"value":"MonAug517:56:132024"},"RSSI":{"value":-60}},"method":"thing.event.property.post"}

4G-LTE的上报简化示例如下:

json
Topic:/产品id/设备id/user/update
{"O":0,"S":46,"H":61,"R":12,"I":"58754062","D":10241,"A":0,"X":37,"M":0,"B":-60}  
# 特别说明,此处O对应原字段People_flag,S对应原字段Amp_value,H对应原字段HeartRate,R对应原字段RespiratoryRate,I对应原字段Id,D对应原字段D,A对应原字段E,X对应原字段HRV,M对应原字段moving,B对应原字段RSSI

 

第三部分:睡眠报告对接

睡眠报告的对接存在两大类:AMQP推送,或者纯api调用

AMQP推送特点:独立于希卡立官方小程序、必须事先设置个性化报告起止时间、客户端被动从消息队列接收并过滤、预警消息也能独立推送

api调用特点:依托于希卡立官方小程序、不需要设置报告起止时间、客户端主动发起查询

一、睡眠报告的AMQP获取

使用前注意:

如需获取睡眠报告,须先行进行API设置,详情请参照部分的表格关于record_strecord_ed的配置,确保相关设备能够计算并输出睡眠报告。

1、数据传输方式:阿里云AMQP云流转方式

2、数据传输格式:JSON

3、字段定义及格式

类型

含义

AHI

整型

睡眠期间每小时呼吸暂停数

ambulation_num

整型

离床次数

Apn_begins

时间戳列表

呼吸暂停检出时间点列表

Apn_lens

整型列表

被检出的呼吸暂停长度

apnea_duration_average

整型

呼吸暂停平均秒数

apnea_duration_max

整型

呼吸暂停最长秒数

apnea_num

整型

呼吸暂停次数

ave_br

整型

平均呼吸率

ave_hr

整型

平均心率

bed_duration

整型

卧床时长(分钟)

brs

列表

hr_br_time_split_point所指示的前后时间点的区间内的平均呼吸率

bluetooth_name

字符串

设备背部标识(蓝牙)名称

date

字符串

报告产生日期

dcg

字符串

750416进制字符串,总长3000,表示50Hz采样的15秒长度的代表性心动图的数值;如’00011000……’表示dcg数组的第一位的数值为1,第二位的数值为4096仅限X2设备

deep_duration

整型

深睡时长(分钟)

device_name

整型

8位设备唯一标志

getoffbed_time

北京时间

下床时间

gotobed_time

北京时间

上床时间

heart_hp

整型

心脏健康分数,分值范围0-100

hr_br_time_split_point

列表

心率呼吸率统计的起止区间的时间点(一维,含开头和结尾,元素为字符串格式),长度为hrsbrs字段的列表长度+1

hrs

列表

hr_br_time_split_point所指示的前后时间点的区间内的平均心率

hrv

整型

心率变异性(毫秒)

light_duration

整型

浅睡时长(分钟)

max_br

整型

最大呼吸率

max_hr

整型

最大心率

min_br

整型

最小呼吸率

min_hr

整型

最小心率

mood

 

整型

心情分数,分值范围0-100

moving_array

字符串

(开发测试版)长度为入睡到醒来的总分钟数的字符串,每位数值为0-20表示体动,1表示体动,2表示翻身

moving_index

浮点数

体动指数(每小时体动数)

moving_num

整型

体动次数

off_periods

列表

[[t11,t12],[t21,t22]……]形式的列表,其中tn1表示离床开始,tn2表示离床结束;列表长度与ambulation_num字段一致

Onbed_valid

布尔值

如果有连续且总计达1小时的在床,标志为1,反之为0

pnn50

整型

心动图RR间期差分绝对值大于50ms的个数占总RR间期个数之比,单位为%仅限X2设备

respiration_score

整型

呼吸分数,分值范围0-100

rmssd

整型

心动图差分RR间期的均方根(毫秒),仅限X2设备

rr_period

整型

心动图RR间期的均值(毫秒),仅限X2设备

sdnn

整型

心动图RR间期的std(毫秒),仅限X2设备

sleep_duration

整型

睡眠时长(分钟),不含清醒

sleep_efficiency

浮点数

睡眠效率

sleep_latency

整型

入睡潜伏期(分钟)

sleep_score

整型

睡眠总体分数,分值范围0-100

sleep_time

北京时间

入睡时间

sleep_valid

布尔值

如果有连续且总计达1小时的睡眠,标志为1,反之为0

stages

元组列表

N3元组,三元组分别为(st,ed,type),表示在sted的时间范围内,分期种类为typetype1-4的范围内,依次表示清醒期/眼动期/浅睡期/深睡期

tiredness

整型

缓解疲劳分数,分值范围0-100

wake_duration

整型

夜醒时长(分钟)

wake_num

整型

夜醒次数

wake_time

北京时间

醒来时间

4AMQP云流转消息内容示例

无论用户采用JavaPython处理AMQP消息,收到的消息内容保持一致。

内容示例:

JSON
Topic:/产品id/设备id/user/fullreport
{'AHI': '1.4118', 'brs': [11, 14, 13, 13, 13, 14, 13, 12, 12, 14, 12, 12, 12, 12, 12, 13, 14, 12, 13, 11, 12, 12, 12, 12, 13, 12, 12, 13, 10, 11, 11, 11, 11, 11, 10, 11, 10, 10, 11, 10, 12, 11, 10, 11, 10, 11, 11, 11, 11, 11, 12, 12, 13], 'hrs': [67, 69, 59, 65, 72, 75, 73, 62, 65, 70, 75, 73, 69, 65, 73, 76, 75, 72, 72, 65, 65, 65, 67, 65, 65, 66, 70, 70, 66, 68, 65, 68, 63, 60, 58, 63, 65, 60, 62, 62, 64, 63, 59, 71, 60, 59, 60, 66, 63, 63, 69, 63, 64], 'hrv': 150, 'date': '2024-10-21', 'Onbed_valid': 1, 'sleep_valid': 1, 'mood': 86, 'ave_br': 12, 'ave_hr': 66, 'max_br': 23, 'max_hr': 84, 'min_br': 7, 'min_hr': 50, 'stages': [['2024-10-21 00:51:14', '2024-10-21 00:52:20', 1], ['2024-10-21 00:52:20', '2024-10-21 00:53:27', 2], ['2024-10-21 00:53:27', '2024-10-21 01:00:09', 3], ['2024-10-21 01:00:09', '2024-10-21 01:03:31', 2], ['2024-10-21 01:03:31', '2024-10-21 01:41:55', 3], ['2024-10-21 01:41:55', '2024-10-21 01:45:16', 2], ['2024-10-21 01:45:16', '2024-10-21 02:07:35', 3], ['2024-10-21 02:07:35', '2024-10-21 02:08:42', 2], ['2024-10-21 02:08:42', '2024-10-21 02:34:21', 3], ['2024-10-21 02:34:21', '2024-10-21 02:38:49', 2], ['2024-10-21 02:38:49', '2024-10-21 02:42:09', 1], ['2024-10-21 02:42:09', '2024-10-21 02:44:23', 2], ['2024-10-21 02:44:23', '2024-10-21 02:53:18', 3], ['2024-10-21 02:53:18', '2024-10-21 02:54:24', 2], ['2024-10-21 02:54:24', '2024-10-21 02:57:46', 1], ['2024-10-21 02:57:46', '2024-10-21 02:58:53', 2], ['2024-10-21 02:58:53', '2024-10-21 03:05:34', 3], ['2024-10-21 03:05:34', '2024-10-21 03:08:56', 2], ['2024-10-21 03:08:56', '2024-10-21 03:15:37', 3], ['2024-10-21 03:15:37', '2024-10-21 03:25:39', 2], ['2024-10-21 03:25:39', '2024-10-21 03:27:53', 3], ['2024-10-21 03:27:53', '2024-10-21 03:39:02', 2], ['2024-10-21 03:39:02', '2024-10-21 04:00:14', 3], ['2024-10-21 04:00:14', '2024-10-21 04:04:43', 2], ['2024-10-21 04:04:43', '2024-10-21 04:06:56', 3], ['2024-10-21 04:06:56', '2024-10-21 05:15:01', 4], ['2024-10-21 05:15:01', '2024-10-21 05:16:08', 3], ['2024-10-21 05:16:08', '2024-10-21 05:30:39', 2], ['2024-10-21 05:30:39', '2024-10-21 05:37:20', 3], ['2024-10-21 05:37:20', '2024-10-21 06:15:17', 4], ['2024-10-21 06:15:17', '2024-10-21 06:18:39', 3], ['2024-10-21 06:18:39', '2024-10-21 06:20:08', 2], ['2024-10-21 06:20:08', '2024-10-21 06:23:06', 1], ['2024-10-21 06:23:06', '2024-10-21 06:25:20', 2], ['2024-10-21 06:25:20', '2024-10-21 06:36:47', 3], ['2024-10-21 06:36:47', '2024-10-21 06:38:00', 1], ['2024-10-21 06:38:00', '2024-10-21 06:38:08', 2], ['2024-10-21 06:38:08', '2024-10-21 06:38:40', 1], ['2024-10-21 06:38:40', '2024-10-21 06:38:44', 2], ['2024-10-21 06:38:44', '2024-10-21 06:44:20', 1], ['2024-10-21 06:44:20', '2024-10-21 06:47:42', 2], ['2024-10-21 06:47:42', '2024-10-21 06:57:49', 3], ['2024-10-21 06:57:49', '2024-10-21 06:58:56', 2], ['2024-10-21 06:58:56', '2024-10-21 07:00:03', 3], ['2024-10-21 07:00:03', '2024-10-21 07:01:10', 2], ['2024-10-21 07:01:10', '2024-10-21 07:25:46', 3], ['2024-10-21 07:25:46', '2024-10-21 07:26:54', 2], ['2024-10-21 07:26:54', '2024-10-21 07:28:00', 3], ['2024-10-21 07:28:00', '2024-10-21 07:29:09', 2], ['2024-10-21 07:29:09', '2024-10-21 07:35:52', 3], ['2024-10-21 07:35:52', '2024-10-21 07:40:22', 2], ['2024-10-21 07:40:22', '2024-10-21 08:01:35', 3], ['2024-10-21 08:01:35', '2024-10-21 08:07:10', 2], ['2024-10-21 08:07:10', '2024-10-21 08:12:46', 3], ['2024-10-21 08:12:46', '2024-10-21 08:13:53', 2], ['2024-10-21 08:13:53', '2024-10-21 08:13:57', 1]], 'Apn_lens': [9, 8, 7, 8, 8, 8, 9, 12, 7, 12], 'heart_hp': 99, 'wake_num': 8, 'apnea_num': 10, 'tiredness': 61, 'wake_time': '2024-10-21 08:13:57', 'Apn_begins': ['2024-10-21 02:42:12', '2024-10-21 02:57:48', '2024-10-21 03:07:12', '2024-10-21 03:18:05', '2024-10-21 03:20:15', '2024-10-21 03:34:24', '2024-10-21 05:53:46', '2024-10-21 06:44:56', '2024-10-21 06:49:17', '2024-10-21 07:16:30'], 'moving_num': 13, 'sleep_time': '2024-10-21 00:51:14', 'device_name': '41976853', 'sleep_score': 69, 'bed_duration': 537, 'gotobed_time': '2024-10-20 23:09:27', 'moving_index': '0.0306', 'deep_duration': 106, 'sleep_latency': 102, 'wake_duration': 18, 'ambulation_num': 2, 'bluetooth_name': 'X2_S01B01N021', 'getoffbed_time': '2024-10-21 08:17:05', 'light_duration': 234, 'sleep_duration': 425, 'sleep_efficiency': '0.7914', 'respiration_score': 68, 'apnea_duration_max': 12, 'apnea_duration_average': 9, 'hr_br_time_split_point': ['2024-10-20 23:09:27', '2024-10-20 23:19:55', '2024-10-20 23:30:24', '2024-10-20 23:40:53', '2024-10-20 23:51:21', '2024-10-21 00:01:49', '2024-10-21 00:12:19', '2024-10-21 00:22:50', '2024-10-21 00:33:20', '2024-10-21 00:43:49', '2024-10-21 00:54:19', '2024-10-21 01:04:49', '2024-10-21 01:15:16', '2024-10-21 01:26:12', '2024-10-21 01:36:40', '2024-10-21 01:47:07', '2024-10-21 01:57:34', '2024-10-21 02:08:02', '2024-10-21 02:18:30', '2024-10-21 02:28:57', '2024-10-21 02:39:24', '2024-10-21 02:49:51', '2024-10-21 03:00:18', '2024-10-21 03:10:46', '2024-10-21 03:21:14', '2024-10-21 03:31:41', '2024-10-21 03:42:08', '2024-10-21 03:52:36', '2024-10-21 04:03:03', '2024-10-21 04:13:31', '2024-10-21 04:23:58', '2024-10-21 04:34:27', '2024-10-21 04:44:55', '2024-10-21 04:55:24', '2024-10-21 05:05:51', '2024-10-21 05:16:19', '2024-10-21 05:26:46', '2024-10-21 05:37:14', '2024-10-21 05:47:41', '2024-10-21 05:58:09', '2024-10-21 06:08:37', '2024-10-21 06:19:05', '2024-10-21 06:29:33', '2024-10-21 06:40:01', '2024-10-21 06:50:33', '2024-10-21 07:01:04', '2024-10-21 07:11:33', '2024-10-21 07:22:02', '2024-10-21 07:32:33', '2024-10-21 07:43:03', '2024-10-21 07:53:32', '2024-10-21 08:04:00', '2024-10-21 08:14:28', '2024-10-21 08:17:05']}

含义:见字段含义表,其他信息包括:

* 睡眠打分:90分以上 - 睡的很棒

       75-90分 睡得还不错哦

            60-74- 睡的一般哦

            60分以下 - 睡的不大好哦

* 呼吸健康打分:0-100分值,对应需要关注-优秀

二、AMQP版本的历史报告和周报获取方式:API

1Api请求样例(GET方法+/dailyreport路由,请注意端口不同):

返回所查询日期的json格式的睡眠日报,仅仅是对通过amqp对接睡眠报告的条件下错接或需要历史日期的报告的情况下使用的

HTTP
http://59.110.175.77:4879/dailyreport?id=YOUR_DEVICE_ID&db=YOUR_DB&date=YOUR_DATE&appkey=YOUR_KEY×tamp=CURRENT_TIME&sign=YOUR_SIGN

这里末尾的三个校验参数如何设置详见第一部分的二、API方式,下面给出有效参数的含义:

类型

含义

id

整型

设备唯一标志,必选参数

db

字符串

所在数据库,必选参数,不是xkl_prodx2_prod,需要为专有参数

date

字符串

报告所处日期(2024.1.1日晚-2024.1.2日早的报告,日期应设置为’2024-1-2’) 必选参数

API调用示例截图:

 

 

类型

含义

code

整型

响应状态码(200成功,40X无权限或无数据,500数据库异常)

msg

字符串

简要信息

data

整型/字符串

AMQP推送同样层次的Json字符串(200)/-1(40X)/报错信息字符串(500)

返回成功的Data字段的json中字段的定义详见"第三部分、睡眠报告对接"中的释义;

2Api请求样例(GET方法+/periodreport路由):

返回所查询日期范围内的json格式的睡眠日报的列表

HTTP
http://59.110.175.77:4879/periodreport?db=YOUR_DB&id=YOUR_DEVICE_ID&start_date=YOUR_START_DATE&end_date=YOUR_END_DATE&appkey=YOUR_KEY×tamp=CURRENT_TIME&sign=YOUR_SIGN

这里末尾的三个校验参数如何设置详见第一部分的二、API方式,下面给出有效参数的含义:

类型

含义

id

整型

设备唯一标志,必选参数

db

字符串

所在数据库,必选参数,不是xkl_prodx2_prod,需要为专有参数

start_date

字符串

报告起始日期(含此日期)必选参数

end_date

字符串

报告结束日期(含此日期)必选参数

调用样例如下:

 

返回结果为json格式,内容含义为:

类型

含义

code

整型

响应状态码(200成功,40X无权限或无数据,500数据库异常)

msg

字符串

简要信息

data

json

键值对分别为日期和当日日报(结构和前述每日的推送json一致)的字典,是时间段内的汇总Json(200)/-1(40X报错)/报错信息字符串(500)

3Api请求样例(GET方法+/reportindex路由):

获取所选时间周期内(包括其实和结束)内有有效睡眠报告的日期所构成的列表

HTTP
http://59.110.175.77:4879/reportindex?db=YOUR_DB&id=YOUR_DEVICE_ID&start_date=YOUR_START_DATE&end_date=YOUR_END_DATE&appkey=YOUR_KEY×tamp=CURRENT_TIME&sign=YOUR_SIGN

      这里末尾的三个校验参数定义不变,下面给出有效参数的含义:

类型

含义

id

整型

设备唯一标志,必选参数

db

字符串

所在数据库,必选参数,不是xkl_prodx2_prod,需要为专有参数

start_date

字符串

报告起始日期(含此日期)必选参数

end_date

字符串

报告结束日期(含此日期)必选参数

调用样例如下:

 

返回结果为json格式,内容含义为:

类型

含义

code

整型

响应状态码(200成功,40X无权限或无数据,500数据库异常)

msg

字符串

简要信息

data

列表

时间段内的有报告的日期列表(200)/-1(40X报错)/报错信息字符串(500)

4Api请求样例(POST方法+/control-mq路由,请注意端口不同:

提前指示amqp报告立刻开始计算(不立刻返回),报告仍然将从消息队列推送。(不推荐高频成批次调用,建议通过设置第五部分中configset接口中的record_ed参数来控制)

HTTP
curl --request POST \
  --url http://59.110.175.77:4861/control-mq \
  --data '{
      "appkey": "YOUR_APPKEY",
      "device_name": "YOUR_DEVICE_ID",
      "timestamp": "CURRENT_TIME",
      "sign": "YOUR_SIGN"
}'

      这里末尾的三个校验参数定义不变,下面给出有效参数的含义。有效的请求发送时间范围为北京时间的5-13时,否则请求将被拒绝

类型

含义

id

整型

设备唯一标志,必选参数

返回结果为json格式,内容含义为:

类型

含义

code

整型

响应状态码(200成功,40X无权限或无数据,500数据库异常)

msg

字符串

简要信息

data

整型/字符串

0(200)/-1(40X报错)/报错信息字符串(500)

5Api请求样例(POST方法+/comparison路由,请注意端口与之前的均不同:

periodreport接口不同,返回的是希卡立小程序风格的周报/月报,与上一周/月的对比结果的json数据

HTTP
curl --request POST \
  --url http://59.110.175.77:4881/comparison \
  --header 'Content-Type: application/json' \
  --data '{
        "appkey": "YOUR_APPKEY",
        "db": "YOUR_DB",
        "device_name": "YOUR_DEVICE_ID",
        "endDay": "2025-3-31",
        "flag": "1",
        "startDay": "2025-3-1",
        "timestamp": "CURRENT_TIME",
        "sign": "YOUR_SIGN"
}

有效参数的含义。:

类型

含义

device_name

整型

 

设备唯一标志,必选参数,和AMQP相关api中的id字段含义相同

db

字符串

所在数据库,必选参数,不是xkl_prodx2_prod,需要为专有参数

startDay

字符串

yyyy-mm-dd格式的日期,推荐为自然周/月的第一天,必选参数

endDay

字符串

yyyy-mm-dd格式的日期,推荐为自然周/月的最后一天,必选参数

flag

整型

可选范围为{0,1}0表示返回周报(此时时间范围内至少需要3天存在报告),1表示返回月报(此时时间范围内至少需要15天存在报告)

调用样例如下:

 

返回结果为json格式,内容含义为:

类型

含义

code

整型

响应状态码(200成功,40X参数问题或无权限,500设备不存在或报告数据不足)

msg

字符串

简要信息

data

整型/字符串

(仅验证报错情况下存在该字段)-1(400参数错误)/验证失败原因(401验证不通过)

result

字符串

完整的对比结果结构体

success

布尔型

设置属性成功与否

timestamp

整型

下发属性时刻

result字段返回信息

字段

类型

释义

title1

字符串

所查周日期范围/所查月份

title2

字符串

上一周(对比周)日期范围/所查月份的上一月份

sleepPreparationTime

整型

所查周/月平均入睡准备时间 单位:分钟

sleepPreparationTimeText

字符串

所查周/月平均入睡准备时间

deepSleepDuration

整型

所查周/月平均深睡时长 单位:分钟

deepSleepDurationText

字符串

所查周/月平均深睡时长

asleepDuration

整型

所查周/月平均睡眠总时长 单位:分钟

asleepDurationText

字符串

所查周/月平均睡眠总时长

reserve1

整型

所查周/月平均离床次数 单位:次

reserve1Text

字符串

所查周/月平均离床次数

apneaNum

整型

所查周/月平均呼吸暂停次数 单位:次

apneaNumText

字符串

所查周/月平均呼吸暂停次数

hrv

整型

所查周/月平均焦虑指数HRV

hrvText

字符串

所查周/月平均焦虑指数HRV

sleepPreparationTimeLast

整型

对比周/月平均入睡准备时间 单位:分钟

sleepPreparationTimeLastText

字符串

对比周/月平均入睡准备时间

deepSleepDurationLast

整型

对比周/月平均深睡时长 单位:分钟

deepSleepDurationLastText

字符串

对比周/月平均深睡时长

asleepDurationLast

整型

对比周/月平均睡眠总时长 单位:分钟

asleepDurationLastText

字符串

对比周/月平均睡眠总时长

reserve1Last

整型

对比周/月平均离床次数 单位:次

reserve1LastText

字符串

对比周/月平均离床次数

apneaNumLast

整型

对比周/月平均呼吸暂停次数 单位:次

apneaNumLastText

字符串

对比周/月平均呼吸暂停次数

hrvLast

整型

对比周/月平均焦虑指数HRV

hrvLastText

字符串

对比周/月平均焦虑指数HRV

sleepPreparationTimeCompare

字符串

入睡准备时间环比

deepSleepDurationCompare

字符串

深睡时长环比

asleepDurationCompare

字符串

睡眠总时长环比

reserve1Compare

字符串

离床次数环比

apneaNumCompare

字符串

呼吸暂停次数环比

hrvCompare

字符串

焦虑指数HRV环比

respirationScore

整型

所查周/月呼吸健康分数

mood

整型

所查周/月情绪水平分数

tiredness

整型

所查周/月疲劳水平分数

heartHp

整型

所查周/月心脏健康水平分数

analyzeTextList

字符串集合

所查周/月对比报告分析

suggestionText

字符串集合

所查周/月对比报告建议

三、AMQP版本X2进阶功能对接方式:API

1Api请求样例(POST方法+/bedinfo路由):

用于设置床垫的宽度和厚度

HTTP
curl --request POST \
  --url http://59.110.175.77:4881/bedinfo \
  --header 'Content-Type: application/json' \
  --data '{
    "timestamp":1739498788040,
    "appkey":"YOUR_KEY",
    "sign":"YOUR_SIGN",
    "bedWidth":90.0,
    "db":"YOUR_DATABASE",
    "device_name":"YOUR_DEVICE_ID",
    "mattressThickness":10.0
}

参数说明如下:

类型

含义

device_name

整型

 

设备唯一标志,必选参数,和AMQP相关api中的id字段含义相同

db

字符串

所在数据库,必选参数,amqp对接睡眠报告的条件下,所传参数为客户定制数据库名称;纯api对接条件下,所传参数为xkl_prod

bedWidth

浮点数

床宽,单位为厘米,必选参数

mattressThickness

浮点数

床垫厚度,单位为厘米,必选参数

sleepEnv

整型

0-单人睡,1-双人睡,其他-非法数值

返回样例如下:

 

返回结果为json格式,内容含义为:

类型

含义

code

整型

响应状态码(200成功,40X无权限或无数据)

msg

字符串

简要信息

data

整型/字符串

(仅验证报错情况下存在该字段)-1(400参数错误)/验证失败原因(401验证不通过)

result

字符串

简要信息

success

布尔型

设置属性成功与否

timestamp

整型

下发属性时刻

2Api请求样例(POST方法+/pressure路由):

用于控制压敏在无人的情况下进行初始化

HTTP
curl --request POST \
  --url http://59.110.175.77:4881/pressure \
  --header 'Content-Type: application/json' \
  --data '{
    "timestamp":1739498788040,
    "appkey":"YOUR_KEY",
    "sign":"YOUR_SIGN",
    "db":"YOUR_DATABASE",
    "device_name":"YOUR_DEVICE_ID"
}

参数说明如下:

类型

含义

device_name

整型

 

设备唯一标志,必选参数,和AMQP相关api中的id字段含义相同

db

字符串

所在数据库,必选参数,不是xkl_prodx2_prod,需要为专有参数

返回样例如下:

 

返回结果为json格式,内容含义为:

类型

含义

code

整型

响应状态码(200成功,40X参数问题或无权限)

msg

字符串

简要信息

data

整型/字符串

(仅验证报错情况下存在该字段)-1(400参数错误)/验证失败原因(401验证不通过)

result

字符串

简要信息

success

布尔型

设置属性成功与否

timestamp

整型

下发属性时刻

四、纯API获取睡眠报告(AMQP对接报告的条件下请忽略这个板块)

1Api请求样例(GET方法+/dailyreport路由,请注意端口不同):

HTTP
http://59.110.175.77:4859/dailyreport?device_name=YOUR_DEVICE_ID&date=YOUR_DATE&db=YOUR_DB&appkey=YOUR_KEY×tamp=CURRENT_TIME&sign=YOUR_SIGN

参数说明如下:

类型

含义

device_name

整型

 

设备唯一标志,必选参数,和AMQP相关api中的id字段含义相同

db

字符串

所在数据库,必选参数,可选范围仅有[xkl_prod, x2_prod]

date

字符串

报告的昨夜时间,如1.1-1.2所出报告,应传递参数为'20XX-1-1',AMQP相关api含义不同必选参数

调用样例如下:

 

返回结果为json格式,内容含义为:

类型

含义

code

整型

响应状态码(200成功,40X无权限或无数据,500数据库异常)

msg

字符串

简要信息

data

json

简单格式的主要睡眠信息所构成的json(200)/-1(40X报错)/报错信息字符串(500)

data部分字段示意:

字段名

数据类型

作用

id

整型

表内记录主键

user_id

整型

对应用户id

device_id

整型

对应设备id

date

时间戳

昨夜的时间戳,如5.1-5.2晨的睡眠报告中,date将会是5.1

go_to_bed_time

时间戳

上床时间

getup_time

时间戳

下床时间

sleep_time

时间戳

入睡时间

wake_time

时间戳

醒来时间

bed_duration

整型

卧床时长(分钟)

asleep_duration

整型

入睡时长(分钟)

deep_sleep_duration

整型

深睡时长(分钟)

light_sleep_duration

整型

浅睡时长(分钟)

awake_duration

整型

清醒时长(分钟)

ambulation_num

整型

离床次数

apnea_num

整型

呼吸暂停总个数

apnea_duration_max

整型

呼吸暂停最长时长()

apnea_duration_average

整型

呼吸暂停平均时长()

respiration_score

浮点数

呼吸分数(AHI有关)

sleep_score

整型

睡眠整体分数

anxiety_index

整型

焦虑指数

isempty

布尔型

是否整夜无人,是为1

early_stop

布尔型

是否提前下线,是为1

reserve_1

字符串

体动次数,如果为‘null’则表示未打开该功能,’0’表示无体动被检出,’n’表示有n个体动或翻身被检出

2Api请求样例(GET方法+/sleepstage路由):

HTTP
http://59.110.175.77:4859/sleepstage?device_name=YOUR_DEVICE_ID&date=YOUR_DATE&db=YOUR_DB&appkey=YOUR_KEY×tamp=CURRENT_TIME&sign=YOUR_SIGN

参数说明如下:

类型

含义

device_name

整型

 

设备唯一标志,必选参数,和前述api中的id字段含义相同

db

字符串

所在数据库,必选参数,可选范围仅有[xkl_prod, x2_prod]

date

字符串

报告的昨夜时间,如1.1-1.2所出报告,应传递参数为'20XX-1-1',AMQP相关api含义不同必选参数

调用样例如下:

 

返回结果为json格式,内容含义为:

类型

含义

code

整型

响应状态码(200成功,40X无权限或无数据,500数据库异常)

msg

字符串

简要信息

data

json

n个分期类别(type1-4的范围内,依次表示清醒期/眼动期/浅睡期/深睡期)和n+1个时间点(包含起始+结束+n-1个分割时间点)的列表所构成的json(200)/-1(40X报错)/报错信息字符串(500)

3Api请求样例(GET方法+/ratedata路由):

HTTP
http://59.110.175.77:4859/ratedata?device_name=YOUR_DEVICE_ID&date=YOUR_DATE&db=YOUR_DB&appkey=YOUR_KEY×tamp=CURRENT_TIME&sign=YOUR_SIGN

参数说明如下:

类型

含义

device_name

整型

 

设备唯一标志,必选参数,和前述api中的id字段含义相同

db

字符串

所在数据库,必选参数,可选范围仅有[xkl_prod, x2_prod]

date

字符串

报告的昨夜时间,如1.1-1.2所出报告,应传递参数为'20XX-1-1',AMQP相关api含义不同必选参数

调用样例如下:

 

返回结果为json格式,内容含义为:

类型

含义

code

整型

响应状态码(200成功,40X无权限或无数据,500数据库异常)

msg

字符串

简要信息

data

json

n个平均心率(0表示区间内无人)n个平均呼吸率(0表示区间内无人),以及n+1个时间点(包含起始+结束+n-1个分割时间点)的列表所构成的json(200)/-1(40X报错)/报错信息字符串(500)

4Api请求样例(GET方法+/apneadata路由):

HTTP
http://59.110.175.77:4859/apneadata?device_name=YOUR_DEVICE_ID&date=YOUR_DATE&db=YOUR_DB&appkey=YOUR_KEY×tamp=CURRENT_TIME&sign=YOUR_SIGN

参数说明如下:

类型

含义

device_name

整型

 

设备唯一标志,必选参数,和前述api中的id字段含义相同

db

字符串

所在数据库,必选参数,可选范围仅有[xkl_prod, x2_prod]

date

字符串

报告的昨夜时间,如1.1-1.2所出报告,应传递参数为'20XX-1-1',AMQP相关api含义不同必选参数

调用样例如下:

 

返回结果为json格式,内容含义为:

类型

含义

code

整型

响应状态码(200成功,40X无权限或无数据,500数据库异常)

msg

字符串

简要信息

data

json

n个呼吸暂停秒数,以及n个时间点(呼吸暂停开始时间点)的列表所构成的json(200)/-1(40X报错)/报错信息字符串(500)

5Api请求样例(GET方法+/plusdata路由,目前仅限X2/X3设备使用:

HTTP
http://59.110.175.77:4859/plusdata?device_name=YOUR_DEVICE_ID&date=YOUR_DATE&db=YOUR_DB&appkey=YOUR_KEY×tamp=CURRENT_TIME&sign=YOUR_SIGN

参数说明如下:

类型

含义

device_name

整型

 

设备唯一标志,必选参数,和AMQP相关api中的id字段含义相同

db

字符串

所在数据库,必选参数,可选范围仅有[xkl_prod, x2_prod]

date

字符串

报告的昨夜时间,如1.1-1.2所出报告,应传递参数为'20XX-1-1',AMQP相关api含义不同必选参数

调用样例如下:

 

返回结果为json格式,内容含义为:

类型

含义

code

整型

响应状态码(200成功,40X无权限或无数据,500数据库异常)

msg

字符串

简要信息

data

json

简单格式的主要睡眠信息所构成的json(200)/-1(40X报错)/报错信息字符串(500)

data部分有效字段示意:

字段名

数据类型

作用

id

整型

表内记录主键

user_id

整型

对应用户id

device_id

整型

对应设备id

date

时间戳

昨夜的时间戳,如5.1-5.2晨的睡眠报告中,date将会是5.1

ave_hr

整型

整夜平均心率

max_hr

整型

整夜最大心率

min_hr

整型

整夜最小心率

ave_br

整型

整夜平均呼吸率

mood

整型

心情指数,范围0-100,越高越好

tiredness

整型

疲劳指数,范围0-100,越高越好

heart_hp

整型

心脏健康指数,范围0-100,越高越好

6Api请求样例(GET方法+/dcgdata路由,目前仅限X2/X3设备使用:

HTTP
http://59.110.175.77:4859/dcgdata?device_name=YOUR_DEVICE_ID&date=YOUR_DATE&db=YOUR_DB&appkey=YOUR_KEY×tamp=CURRENT_TIME&sign=YOUR_SIGN

参数说明如下:

类型

含义

device_name

整型

 

设备唯一标志,必选参数,和AMQP相关api中的id字段含义相同

db

字符串

所在数据库,必选参数,可选范围仅有[xkl_prod, x2_prod]

date

字符串

报告的昨夜时间,如1.1-1.2所出报告,应传递参数为'20XX-1-1',AMQP相关api含义不同必选参数

调用样例如下:

 

返回结果为json格式,内容含义为:

类型

含义

code

整型

响应状态码(200成功,40X无权限或无数据,500数据库异常)

msg

字符串

简要信息

data

json

简单格式的主要睡眠信息所构成的json(200)/-1(40X报错)/报错信息字符串(500)

data部分字段示意:

字段名

数据类型

作用

id

整型

表内记录主键

user_id

整型

对应用户id

device_id

整型

对应设备id

date

时间戳

昨夜的时间戳,如5.1-5.2晨的睡眠报告中,date将会是5.1

dcg

 

字符串

长度为4*750的字符串,代表750个整数转化为416进制的字符串后拼接的结果;这750个整数的含义为所选的代表心动图的数据(15秒长度,50Hz采样)

rr_period

整型

平均rr间期,单位ms

sdnn

整型

心率变异性的sdnn统计量

7Api请求样例(GET方法+/fullreport路由,以上4(X2/X3设备允许6)API结果统一获取:

HTTP
http://59.110.175.77:4859/fullreport?device_name=YOUR_DEVICE_ID&date=YOUR_DATE&db=YOUR_DB&target=YOUR_TARGET&appkey=YOUR_KEY×tamp=CURRENT_TIME&sign=YOUR_SIGN

参数说明如下:

类型

含义

device_name

整型

 

设备唯一标志,必选参数,和前述api中的id字段含义相同

db

字符串

所在数据库,必选参数,可选范围仅有[xkl_prod, x2_prod]

date

 

字符串

 

报告的昨夜时间,如1.1-1.2所出报告,应传递参数为'20XX-1-1',AMQP相关api含义不同必选参数

target

字符串

's','t','r','a','p','d'的组合,s对应dailyreportt对应sleepstager对应ratedataa对应apneadatap对应plusdatad对应dcgdata

'st'表示仅获取sleepdatasleepstage的返回,'stra'表示获取前4类的api结果,'strapd'表示获取全部的6类的api结果

调用样例如下:

 

返回结果为json格式,内容含义为:

类型

含义

code

整型

响应状态码(200成功,40X无权限或无数据,500数据库异常)

msg

字符串

简要信息

data

json

key分别为SleepData(前述dailyreport/TimeData(前述sleepstage路由对应结果)/TimeData/RateData/ApneaData/PlusData/DcgData,值分别为对应的api的响应的data部分,所构成的json(200)/-1(40X报错)/报错信息字符串(500)

 

第四部分:警报消息对接

一、预警消息的阿里云AMQP云流转获取

使用前注意:

如需获取警报消息,须先行进行API设置,详情请参照四、警报参数设置和查询方式中的参数表格关于预警部分的配置,确保相关设备能够输出警报消息;警报消息只会在设置的预警时间段内生成。

1、数据传输格式:JSON

2、字段定义及格式

类型

含义

phone

字符串

手机号

DeviceType

字符串

设备类型,例:睡眠监测仪X1

id

字符串

设备id(纯数字)

DeviceName

字符串

设备名称(字符串)

type

整形

通知类型(0.呼吸率 1.心率 2.离床 3.设备上线 4.设备下线)

typeStr

字符串

通知类型中文解释(呼吸率 心率 离床...)

title

字符串

通知标题(例:心率过低,请注意!)

content

字符串

通知内容(例:21:37分,呼吸率为12,超出设定预警范围,请注意!)

dateTime

长整型

推送时间

注意:离床预警---需要先在床10分钟以上,才能进行后续的离床预警;

内容示例:

JSON
Topic:/产品id/设备id/user/warning

呼吸率过低:
{
    "content": "23:33分,呼吸率为7,超出设定预警范围,请注意!",
    "dateTime": 1748273646858,
    "deviceName": "X2_S01B01N267",
    "id": "41977099",
    "title": "呼吸率过低,请注意!",
    "type": 0,
    "typeStr": "呼吸率预警"
}
呼吸率过高:
{
    "content": "06:23分,呼吸率为26,超出设定预警范围,请注意!",
    "dateTime": 1748298245912,
    "deviceName": "X2_S01B01N336",
    "id": "41977168",
    "title": "呼吸率过高,请注意!",
    "type": 0,
    "typeStr": "呼吸率预警"
}
心率过低:
{
    "content": "23:33分,心率为48,超出设定预警范围,请注意!",
    "dateTime": 1748273646858,
    "deviceName": "X2_S01B01N267",
    "id": "41977099",
    "title": "心率过低,请注意!",
    "type": 1,
    "typeStr": "心率预警"
}
心率过高:
{
    "content": "06:23分,心率为109,超出设定预警范围,请注意!",
    "dateTime": 1748298245912,
    "deviceName": "X2_S01B01N336",
    "id": "41977168",
    "title": "心率过高,请注意!",
    "type": 1,
    "typeStr": "心率预警"
}
离床:
{
    "content": "06:24分,起夜离床超过5分钟未归,请注意!",
    "dateTime": 1748298245640,
    "deviceName": "X2_S01B01N267",
    "id": "41977099",
    "title": "离床长时未归,请注意!",
    "type": 2,
    "typeStr": "离床预警"
}
设备上线:
{
    "content": "08:55分,设备上线!",
    "dateTime": 1748307300792,
    "deviceName": "X2_S01B01N259",
    "id": "41977091",
    "title": "设备上线",
    "type": 3,
    "typeStr": "设备上线"
}
设备离线:
{
    "content": "08:15分,设备离线!",
    "dateTime": 1748304900981,
    "deviceName": "X2_S01B01N259",
    "id": "41977091",
    "title": "设备离线",
    "type": 4,
    "typeStr": "设备离线"
}

二、预警消息获取的纯API对接(AMQP对接预警的情况下请忽略这个板块)

1Api请求样例(GET方法+/warning路由):

HTTP
http://59.110.175.77:4859/warning?device_name=YOUR_DEVICE_ID&st=QUERY_START_TIME&ed=QUERY_END_TIME&appkey=YOUR_KEY×tamp=CURRENT_TIME&sign=YOUR_SIGN

参数说明如下:

类型

含义

device_name

 

整型

 

设备唯一标志,必选参数,和AMQP相关api中的id字段含义相同

st

整型

查询范围的起始时间点的13位时间戳,默认值为请求前1小时

ed

整型

查询范围的结束时间点的13位时间戳,默认值为请求时间点

调用样例如下:

 

返回结果为json格式,内容含义为:

类型

含义

code

整型

响应状态码(200成功,40X无权限或无数据,500数据库异常)

msg

字符串

简要信息

data

json

简单格式的主要睡眠信息所构成的json(200)/-1(40X报错)/报错信息字符串(500)

data部分字段示意:

类型

含义

user_id

整型

数据库内部用户id

device_id

整型

数据库内部设备id

title

字符串

通知标题(例:心率过低,请注意!)

content

字符串

通知内容(例:21:37分,呼吸率为12,超出设定预警范围,请注意!)

type

字符串

通知类型,包括heartbreathingout_of_bedonlineoffline

date_time

长整型

推送时间

record_date

字符

date_time转化为的北京时间,格式为"%Y-%m-%d %H:%M:%S"

 

第五部分、AMQP对接条件下的警报及睡眠参数设置和查询方式:API

1API请求样例(POST 方法+/configset 路由):

HTTP
http://59.110.175.77:4877/configset?k1=v1&k2=v2&......&kn=vn&appkey=YOUR_KEY&timetamp=CURRENT_TIME&sign=YOUR_SIGN

这里末尾的三个校验参数如何设置详见第一部分的二、API方式,可以一次性传递n个有效参数键值对(n≥3,包括三个必选参数),下面给出有效参数的含义:

类型

含义

id

整型

设备唯一标志,必选参数

db

字符串

所在数据库,必选参数,不是xkl_prodx2_prod,需要为专有参数

product

字符串

设备所属产品,必选参数

record_st

整型

睡眠报告的记录开始时间,为当天0点至所需时间的秒数;如设置20:00:00为睡眠报告起始,则设置为20*60*60=72000

record_ed

整型

睡眠报告的记录结束时间,为当天0点至所需时间的秒数;如设置8:00:00为睡眠报告结束,则应设置为8*60*60=28800

warn_st

字符串

子类指标(hr/br/offbed)指标统一的预警开始时间,如20:00:00开始预警则直接传入20:00(精确到分);优先级高于分别设置子类预警的warn_st

warn_ed

字符串

子类指标(hr/br/offbed)统一的预警结束时间,如8:00:00开始预警则直接传入8:00(精确到分);优先级高于分别设置子类预警的warn_ed

hr_warn_start

字符串

心率单独的预警开始时间,如20:00:00开始预警则直接传入20:00(精确到分)

hr_warn_end

字符串

心率单独的预警结束时间,如8:00:00开始预警则直接传入8:00(精确到分)

br_warn_start

字符串

呼吸率单独的预警开始时间,如20:00:00开始预警则直接传入20:00(精确到分)

br_warn_end

字符串

呼吸率单独的预警结束时间,如8:00:00开始预警则直接传入8:00(精确到分)

offbed_warn_start

字符串

离床单独的预警开始时间,如20:00:00开始预警则直接传入20:00(精确到分)

offbed_warn_end

字符串

离床单独的预警结束时间,如8:00:00开始预警则直接传入8:00(精确到分)

all_day

 

布尔型

1表示子类指标(hr/br/offbed)都全天预警,0表示按之前设置的起止时间预警;优先级高于分别设置子类预警的all_day

hr_all_day

布尔型

1表示心率一项全天预警,0表示按之前设置的起止时间预警

br_all_day

布尔型

1表示呼吸率一项全天预警,0表示按之前设置的起止时间预警

offbed_all_day

布尔型

1表示离床一项全天预警,0表示按之前设置的起止时间预警

interval

整型

预警推送最小间隔时间(单位分钟)

offbed_switch

布尔型

是否开启离床过久预警,1为是

offbed_thre

整型

离床过久的报警阈值,单位为分钟

hr_switch

布尔型

是否开启心率超限预警,1为是

hr_min

整型

预警心率下限,单位为次/分钟

hr_max

整型

预警心率上限,单位为次/分钟

br_switch

布尔型

是否开启呼吸超限预警,1为是

br_min

整型

预警呼吸率下限,单位次/分钟

br_max

整型

预警呼吸率上限,单位次/分钟

API调用示例截图:

 

2API请求样例(GET 方法+/cofigget 路由):

HTTP
http://59.110.175.77:4877/configget?db=YOUR_DB&id=YOUR_DEVICE_ID&product=YOUR_PRODUCT_KEY&appkey=YOUR_KEY&timetamp=CURRENT_TIME&sign=YOUR_SIGN

 

类型

含义

id

整型

设备唯一标志,必选参数

db

字符串

所在数据库,必选参数,不是xkl_prodx2_prod,需要为专有参数

product

字符串

设备所属产品,必选参数

这里参数和POST方法所用的定义相同,但是路由不同API调用示例截图:

 

返回结果字段与前述POST方法设置参数的对应关系如下表(同名字段含义一致,表中仅展示非同名字段)

Get方法返回字段

POST方法中设置字段

含义

id

数据库内字段,可以忽略

device_name

id

设备唯一标志

product_key

product

设备所属产品

record_start

record_st

睡眠报告的记录开始时间

record_end

record_ed

睡眠报告的记录结束时间

heart_rate_switch

hr_switch

是否开启心率超限预警,1为是

min_heart_rate

hr_min

预警心率下限,单位为次/分钟

max_heart_rate

hr_max

预警心率上限,单位为次/分钟

breath_rate_switch

br_switch

是否开启呼吸超限预警,1为是

min_breath_rate

br_min

预警呼吸率下限,单位次/分钟

max_breath_rate

br_max

预警呼吸率上限,单位次/分钟