名称: location-awareness
版本: 1.2.0
描述: 通过隐私友好的 GPS 追踪(支持 Home Assistant、OwnTracks、GPS Logger)实现位置感知。可设置基于位置的提醒,并查询移动历史、行程时间和附近兴趣点。
元数据: {"clawdbot":{"emoji":"📍","requires":{"bins":["python3"]}}}
本技能提供可执行的命令。当用户询问位置信息时,请运行下方对应的命令。
scripts/location.sh每条命令都必须通过 scripts/location.sh 运行。例如:
用户提问: “步行回家要多久?”
你应运行:
scripts/location.sh eta home --mode walk
输出: 4.6 km,步行约 45 分钟
你直接回复输出内容即可。
请勿直接运行 eta 或其他子命令——它们并非独立的可执行命令。
| 用户提问 | 运行此命令(请精确复制) | 回复内容 |
|---|---|---|
| “我在哪?” | scripts/location.sh status |
仅区域名称 |
| “地图” / “地图链接” | scripts/location.sh herewego |
仅返回 URL |
| “我的坐标是多少?” | scripts/location.sh status |
输出中的经纬度 |
| “步行回家要多久?” | scripts/location.sh eta home --mode walk |
距离 + 时长 |
| “骑自行车到 X 要多久?” | scripts/location.sh eta X --mode bike |
距离 + 时长 |
| “开车到 X 有多远?” | scripts/location.sh eta X --mode car |
距离 + 时长 |
| “当我到达 Y 时,提醒我 X” | scripts/location.sh remind "X" Y |
简短确认 |
| “我有哪些提醒?” | scripts/location.sh reminders |
项目列表或“无” |
| “列出我的地点” | scripts/location.sh places |
项目列表 |
| “列出附近的地点” | scripts/location.sh places --near |
按距离排序 |
| “列出我在市中心的酒吧” | scripts/location.sh places --region downtown --category pub |
筛选后的列表 |
| “将此处保存为 X” | scripts/location.sh addplace "X" |
确认 |
| “删除地点 X” | scripts/location.sh delplace X |
确认 |
| “禁用杂货店规则” | scripts/location.sh disable grocery |
确认 |
| “列出我的地理围栏规则” | scripts/location.sh geofences |
项目列表 |
| “我上次在 X 是什么时候?” | scripts/location.sh history X |
日期/时间 |
| “我今天去过哪些地方?” | scripts/location.sh history --days 1 |
地点列表 |
| “在附近找一家咖啡馆” | scripts/location.sh nearby cafe |
带距离的兴趣点列表 |
| “1 公里内有酒吧吗?” | scripts/location.sh nearby pub 1000 |
筛选后的兴趣点列表 |
| “我这周在工作地点待了多久?” | scripts/location.sh stats --days 7 |
各地点停留时长 |
回复风格: 简洁。无需前言。不要说“这是你的位置:”。直接给出答案。
所有命令均通过 scripts/location.sh <命令> 执行:
| 命令 | 描述 |
|---|---|
status |
当前位置、进入的地理围栏、地图链接 |
herewego |
仅返回 HERE WeGo 地图链接 |
check |
检查是否有触发的动作/提醒(由 cron 使用) |
places [--near] [--region R] [--category C] |
列出已保存的地点 |
geofences |
列出所有地理围栏的完整详情 |
remind <文本> <地点ID> |
添加一次性位置提醒 |
reminders |
列出待处理的提醒 |
addplace <名称> [半径] [--region R] [--category C] |
保存当前位置 |
editplace <ID> [--name] [--radius] [--region] [--category] [--action] [--cooldown] |
修改地点 |
delplace <ID> |
删除地点 |
enable <ID> / disable <ID> |
启用/禁用地理围栏 |
history [地点] [--days N] |
我上次在某个地点是什么时候? |
nearby <类别> [半径] |
查找附近兴趣点(咖啡馆、酒吧、餐厅等) |
stats [--days N] |
在每个地点花费的时间、访问次数 |
proximity <文本> <地点/纬度> [经度] [半径] |
接近某位置时发出警报 |
eta <地点> [--mode walk\|bike\|car] |
前往某地点的行程时间和距离 |
注意: eta 接受已保存的地点名称、坐标(纬度,经度)或任何地点名称(通过 OpenStreetMap 进行地理编码,偏向当前位置)。
注意: status 如果在已知地点内,则返回区域名称,否则通过反向地理编码返回街道地址(例如,“市中心,主街 123 号”)。
地理围栏 —— 包含经纬度、半径和可选动作的已保存地点。持久化存储。
提醒 —— 与地点绑定的一次性提醒。送达后删除。
区域/类别 —— 用于筛选的可选标签(例如,“市中心”、“酒吧”)。
编辑 scripts/config.json:
Home Assistant(默认):
{
"provider": "homeassistant",
"homeassistant": {
"url": "https://your-ha.example.com",
"token": "your-long-lived-token",
"entity_id": "device_tracker.phone"
}
}
OwnTracks:
{
"provider": "owntracks",
"owntracks": {
"url": "https://owntracks.example.com",
"user": "username",
"device": "phone"
}
}
通用 HTTP:
{
"provider": "http",
"http": {
"url": "https://your-api.com/location",
"headers": {"Authorization": "Bearer token"}
}
}
GPSLogger(基于文件):
{
"provider": "gpslogger",
"gpslogger": {
"file": "/path/to/location.json"
}
}
支持密钥管理:"env:变量名"(从环境变量读取)或纯字符串。
替代方案: 完全通过环境变量配置(无需 config.json):
| 提供程序 | 环境变量 |
|---|---|
LOCATION_PROVIDER |
homeassistant、owntracks、http 或 gpslogger(默认:homeassistant) |
| Home Assistant | HA_URL、HA_TOKEN、HA_ENTITY_ID |
| OwnTracks | OWNTRACKS_URL、OWNTRACKS_USER、OWNTRACKS_DEVICE、OWNTRACKS_TOKEN |
| HTTP | LOCATION_HTTP_URL |
| GPSLogger | GPSLOGGER_FILE |
环境变量的优先级高于 config.json 中的值。请在 ~/.openclaw/.env 或你的 shell 环境中设置它们。
输出格式: 大多数查询命令默认输出人类可读的文本。添加 --json 参数可获取 JSON 输出(适用于脚本处理)。
在 scripts/config.json 中自定义步行/骑行速度以进行 ETA 计算:
{
"speeds_kmh": {
"walk": 6,
"bike": 15
}
}
编辑 scripts/geofences.json:
{
"geofences": [
{
"id": "grocery",
"name": "杂货店",
"lat": 40.7128,
"lon": -74.0060,
"radius_m": 30,
"action": "shopping_tasks",
"cooldown_hours": 4,
"enabled": true,
"region": "downtown",
"category": "shop"
}
],
"location_reminders": [],
"proximity_alerts": []
}
使用 OpenClaw 内置的 cron 运行定期位置检查。在 ~/.openclaw/cron/jobs.json 中添加一个任务:
{
"name": "位置检查",
"schedule": "*/5 * * * *",
"prompt": "运行 scripts/location.sh check --json 并通知我任何触发的动作、提醒或接近警报。",
"channel": "signal",
"to": "+1234567890",
"wakeMode": "now"
}
这可以将调度保留在 OpenClaw 内部,无需依赖外部 systemd 服务。