希卡立健康监测系列-数据云流转协议
希卡立健康监测系列-数据云流转协议 第一部分:对接方式讲解 一、AMQP 云流转方式 1、阿里云AMQP客户端SDK下载 参考文档: HTTPhttps://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 可支持的SDK:Java/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} 表格内容对应代码示例中标红部分 部分代码示例: (仅供参考) Pythonpublic 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 sysimport loggingimport timefrom proton.handlers import MessagingHandlerfrom proton.reactor import Containerimport hashlibimport hmacimport base64import osreload(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程序样例如下 Pythondef 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云流转消息内容示例 无论用户采用Java或Python处理AMQP消息,收到的消息内容保持一致。虽然不同版本的设备接收到的消息有细微差别,但在设备上下线过程中,用户接收到的消息是一致的。 【补充:不同版本的设备(即Wi-Fi设备和4G-LTE设备)接收到的消息有细微差别详细解释:呼吸心率的信息所对应的 AMQP Topic 格式有所不同。】 基于Wi-Fi版本的示例如下: jsonTopic:/产品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版本的示例如下: jsonAMQP-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的上报简化示例如下: jsonTopic:/产品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_st和record_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 字符串 750个4位16进制字符串,总长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 列表 心率呼吸率统计的起止区间的时间点(一维,含开头和结尾,元素为字符串格式),长度为hrs和brs字段的列表长度+1 hrs 列表 hr_br_time_split_point所指示的前后时间点的区间内的平均心率 hrv 整型 心率变异性(毫秒) light_duration 整型 浅睡时长(分钟) max_br 整型 最大呼吸率 max_hr 整型 最大心率 min_br 整型 最小呼吸率 min_hr 整型 最小心率 mood 整型 心情分数,分值范围0-100 moving_array 字符串 (开发测试版)长度为入睡到醒来的总分钟数的字符串,每位数值为0-2,0表示体动,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 元组列表 N个3元组,三元组分别为(st,ed,type),表示在st到ed的时间范围内,分期种类为type,type在1-4的范围内,依次表示清醒期/眼动期/浅睡期/深睡期 tiredness 整型 缓解疲劳分数,分值范围0-100 wake_duration 整型 夜醒时长(分钟) wake_num 整型 夜醒次数 wake_time 北京时间 醒来时间 4、AMQP云流转消息内容示例 无论用户采用Java或Python处理AMQP消息,收到的消息内容保持一致。 内容示例: JSONTopic:/产品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 1、Api请求样例(GET方法+/dailyreport路由,请注意端口不同): 返回所查询日期的json格式的睡眠日报,仅仅是对通过amqp对接睡眠报告的条件下错接或需要历史日期的报告的情况下使用的 HTTPhttp://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_prod或x2_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中字段的定义详见"第三部分、睡眠报告对接"中的释义; 2、Api请求样例(GET方法+/periodreport路由): 返回所查询日期范围内的json格式的睡眠日报的列表 HTTPhttp://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_prod或x2_prod,需要为专有参数 start_date 字符串 报告起始日期(含此日期),必选参数 end_date 字符串 报告结束日期(含此日期),必选参数 调用样例如下: 返回结果为json格式,内容含义为: 键 类型 含义 code 整型 响应状态码(200成功,40X无权限或无数据,500数据库异常) msg 字符串 简要信息 data json 键值对分别为日期和当日日报(结构和前述每日的推送json一致)的字典,是时间段内的汇总Json(200)/-1(40X报错)/报错信息字符串(500) 3、Api请求样例(GET方法+/reportindex路由): 获取所选时间周期内(包括其实和结束)内有有效睡眠报告的日期所构成的列表 HTTPhttp://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_prod或x2_prod,需要为专有参数 start_date 字符串 报告起始日期(含此日期),必选参数 end_date 字符串 报告结束日期(含此日期),必选参数 调用样例如下: 返回结果为json格式,内容含义为: 键 类型 含义 code 整型 响应状态码(200成功,40X无权限或无数据,500数据库异常) msg 字符串 简要信息 data 列表 是时间段内的有报告的日期列表(200)/-1(40X报错)/报错信息字符串(500) 4、Api请求样例(POST方法+/control-mq路由,请注意端口不同): 提前指示amqp报告立刻开始计算(不立刻返回),报告仍然将从消息队列推送。(不推荐高频成批次调用,建议通过设置第五部分中configset接口中的record_ed参数来控制) HTTPcurl --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) 5、Api请求样例(POST方法+/comparison路由,请注意端口与之前的均不同): 与periodreport接口不同,返回的是希卡立小程序风格的周报/月报,与上一周/月的对比结果的json数据 HTTPcurl --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_prod或x2_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 1、Api请求样例(POST方法+/bedinfo路由): 用于设置床垫的宽度和厚度 HTTPcurl --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 整型 下发属性时刻 2、Api请求样例(POST方法+/pressure路由): 用于控制压敏在无人的情况下进行初始化 HTTPcurl --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_prod或x2_prod,需要为专有参数 返回样例如下: 返回结果为json格式,内容含义为: 键 类型 含义 code 整型 响应状态码(200成功,40X参数问题或无权限) msg 字符串 简要信息 data 整型/字符串 (仅验证报错情况下存在该字段)-1(400参数错误)/验证失败原因(401验证不通过) result 字符串 简要信息 success 布尔型 设置属性成功与否 timestamp 整型 下发属性时刻 四、纯API获取睡眠报告(AMQP对接报告的条件下请忽略这个板块) 1、Api请求样例(GET方法+/dailyreport路由,请注意端口不同): HTTPhttp://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个体动或翻身被检出 2、Api请求样例(GET方法+/sleepstage路由): HTTPhttp://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个分期类别(type在1-4的范围内,依次表示清醒期/眼动期/浅睡期/深睡期)和n+1个时间点(包含起始+结束+n-1个分割时间点)的列表所构成的json(200)/-1(40X报错)/报错信息字符串(500) 3、Api请求样例(GET方法+/ratedata路由): HTTPhttp://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) 4、Api请求样例(GET方法+/apneadata路由): HTTPhttp://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) 5、Api请求样例(GET方法+/plusdata路由,目前仅限X2/X3设备使用): HTTPhttp://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,越高越好 6、Api请求样例(GET方法+/dcgdata路由,目前仅限X2/X3设备使用): HTTPhttp://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个整数转化为4位16进制的字符串后拼接的结果;这750个整数的含义为所选的代表心动图的数据(15秒长度,50Hz采样) rr_period 整型 平均rr间期,单位ms sdnn 整型 心率变异性的sdnn统计量 7、Api请求样例(GET方法+/fullreport路由,以上4个(对X2/X3设备允许6个)API结果统一获取): HTTPhttp://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对应dailyreport,t对应sleepstage,r对应ratedata,a对应apneadata,p对应plusdata,d对应dcgdata; 如'st'表示仅获取sleepdata和sleepstage的返回,'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分钟以上,才能进行后续的离床预警; 内容示例: JSONTopic:/产品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对接预警的情况下请忽略这个板块) 1、Api请求样例(GET方法+/warning路由): HTTPhttp://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 字符串 通知类型,包括heart,breathing,out_of_bed,online,offline date_time 长整型 推送时间 record_date 字符 date_time转化为的北京时间,格式为"%Y-%m-%d %H:%M:%S" 第五部分、AMQP对接条件下的警报及睡眠参数设置和查询方式:API 1、API请求样例(POST 方法+/configset 路由): HTTPhttp://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_prod或x2_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调用示例截图: 2、API请求样例(GET 方法+/cofigget 路由): HTTPhttp://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_prod或x2_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 预警呼吸率上限,单位次/分钟