使用说明
ble人力资源管理服务器
MCP服务器,用作BLE H耳特 比率 M监控以与HRM设备连接。
生成状态
安装
我们建议使用虚拟环境和 uv 管理依赖关系。
此项目使用 pyproject.toml 用于依赖性管理。
# Create and activate a virtual environment
python3 -m venv .venv
source .venv/bin/activate # On Windows use `.venv\Scripts\activate`
# Install uv if not already installed
pip install uv
# Install dependencies
uv sync
环境配置
此项目支持通过 .env 文件。您可以使用提供的 .env.sample 作为模板。
cp .env.sample .env
使用以下环境变量:
QINIU_ACCESS_KEY:您的Qiniu访问密钥。QINIU_SECRET_KEY:你的七牛秘钥。QINIU_BUCKET_NAME:七牛桶的名字。QINIU_BUCKET_DOMAIN:与七牛桶关联的域。
用法
运行服务器
uv run src/hrm/server.py
从PyPI安装后,您可以直接使用以下命令运行服务器:
uvx ble-hrm-server
运行测试
uv run pytest
以覆盖率运行测试
uv run coverage run -m pytest
uv run coverage html
MCP定义
资源
蓝牙HRM是基于蓝牙协议的,我们应该使用 bleak 以发现设备并连接到它。
- 通过HRM配置文件发现蓝牙设备和过滤器(心率服务0x180D)
- 资源:
discover://hrm
工具
-
工具:监测心率
monitoring_heart_rate- 总结:在给定的持续时间内开始监测设备的心率,默认持续时间为30分钟(1800秒)。监控将在后台进行。
- 输入:
- device_id:str,要监视的设备UUID
- duration:int,要监视的持续时间,默认为1800秒(30分钟)
- 输出:无
-
工具:获取心率
get_heart_rate- 摘要:获取当前HR,使用最后10秒并返回HR的平均值
- 输入:无(假设基线读数)
- 输出:当前HR(int),例如。
{"avg_hr": 60}
-
工具:评估活动心率
evaluate_active_heart_rate- 总结:评估最后60秒的最大心率,将此练习中观察到的最大心率记录为活动心率。
- 输入:无(假设基线读数)
- 输出:最大HR:int,例如。
{"max_hr": 100}
-
工具:获取心率桶
get_heart_rate_bucket- 摘要:获取最后10秒的心率桶,桶大小为1秒。
- 输入:
- since_from:float,监控的开始时间,默认为10秒前
- bucket_size:float,bucket的大小,默认为1秒
- 输出:心率桶:列表[字典],例如。
[{"time": 1715904000, "value": 60}, {"time": 1715904001, "value": 61}]
-
工具:构建心率图
build_heart_rate_chart- 摘要:构建最近600秒的心率图,bucket是一个动态大小,默认大小为1秒。最大铲斗数为60,如果铲斗数超过60,铲斗大小将增加到
duration / 60秒。 - 输入:
- since_from:float,监控的开始时间,默认为600秒前
- 输出:心率图PNG URL:str,例如。
https://example.com/chart.png
- 摘要:构建最近600秒的心率图,bucket是一个动态大小,默认大小为1秒。最大铲斗数为60,如果铲斗数超过60,铲斗大小将增加到
MCP设置
以下是服务器的MCP设置:
{
"mcpServers": {
"blue-hrm": {
"command": "uvx",
"args": [
"ble-hrm-server"
]
}
}
}
以下是DeepSeek V3.1测试的LLM的示例提示:
你是一位健康专家,通过心率来检测测试者的心脏健康程度,现在测试者携带了蓝牙的心率带,
以下为检测步骤
- 你通过发现来获取的设备ID,通过rssi获取最接近的设备,再以此设备开始监控。
- 获取当前测试者的静息心率。
- 当测试结束后,提示测试者开始中高强度运动,比如波比跳,当测试者完成运动后,回复后,立刻测试其最高运动心率。
- 之后提示测试者计时休息2分钟,得到确认后,再次获取当前心率,并与最高心率的差额作为恢复心率。
最后通过恢复心率的值和以下列表评估测试者的心脏健康程度,并用健康专家的口吻给测试者一些关于心脏健康方面的建议。
------
- <22: 身体年龄略大于 真实年龄
- 22~52: 身体年龄= 真实年龄
- 53~58: 身体年龄略小于真实年龄
- 59~65: 身体年龄比真实年龄小
- >=66: 身体年龄比真实年龄小很多
代码覆盖率
| 姓名 | 名字 | 小姐 | 封面 |
|---|---|---|---|
| src/hrm/__init__.py | 0 | 0 | 100% |
| src/hrm/bt_client.py | 139 | 5 | 96% |
| src/hrm/ts_db.py | 41 | 1 | 98% |
| 总计 | 180 | 6 | 97% |
赞助商
特别感谢七牛云提供存储服务。七牛还提供LLM推理服务。