# 数据格式说明

## 1. 雷达数据格式 (HBR01)

### 格式特征
- 以 `HBR01:` 开头
- 后跟8个用逗号分隔的数值字段
- 每行一条数据记录

### 数据字段说明
```
HBR01:presence,heart_rate,breath_rate,motion,rssi,heartbeat_waveform,breathing_waveform,raw_signal
```

### 字段含义
1. `presence` - 人员存在状态 (0=无人, 1=有人)
2. `heart_rate` - 心率 (bpm)
3. `breath_rate` - 呼吸率 (bpm)
4. `motion` - 运动状态 (0=静止, 1=运动)
5. `rssi` - 信号强度
6. `heartbeat_waveform` - 心跳波形数据
7. `breathing_waveform` - 呼吸波形数据
8. `raw_signal` - 原始信号数据

### 示例数据
```
HBR01:1,72,16,0,-45,120,45,-25
HBR01:0,0,0,0,-50,0,0,10
```

### 处理方式
在ESP32代码中通过 `parseSensorLine()` 函数处理，按行读取并解析逗号分隔的数值。

## 2. JSON数据格式

### 格式特征
- 以花括号 `{` 开始，`}` 结束
- 符合标准JSON格式
- 可能因长度超过BLE MTU而需要分包传输

### 示例数据
```json
{
  "type": "radarData",
  "deviceId": 1001,
  "timestamp": 1640995200000,
  "presence": 1,
  "heartRate": 72.5,
  "breathRate": 16.2,
  "motion": 0,
  "rssi": -45,
  "heartbeatWaveform": 120,
  "breathingWaveform": 45,
  "rawSignal": -25
}
```

### 分包传输特点
- 每包最大20字节（BLE限制）
- 需要通过匹配花括号来重组完整JSON
- 可能出现一个完整JSON被分成多个BLE包的情况

### 接收处理方式
使用JavaScript代码中的 `processChunk()` 函数处理：
1. 将接收到的数据片段追加到缓冲区
2. 通过计数花括号来识别完整的JSON对象
3. 提取完整JSON并解析
4. 清理缓冲区中已处理的部分

## 3. 两种格式的主要区别

| 特性 | 雷达数据 (HBR01) | JSON数据 |
|------|------------------|----------|
| 格式标识 | HBR01:开头 | 花括号{}包围 |
| 数据结构 | 固定8个数值字段 | 灵活的键值对 |
| 分隔符 | 逗号分隔 | JSON标准格式 |
| 分包处理 | 按行处理 | 按花括号匹配 |
| 解析方式 | 数值转换 | JSON解析 |

## 4. 处理建议

### 雷达数据处理
- 按行读取处理
- 验证以"HBR01:"开头
- 按逗号分割提取8个字段
- 进行数值有效性检查

### JSON数据处理
- 使用缓冲区累积数据
- 通过花括号匹配识别完整对象
- 使用JSON解析库处理
- 注意缓冲区大小限制和清理