Location Awareness
位置感知
此技能提供需执行的命令。当用户询问位置时,请运行以下适当的命令。
⚠️ 重要提示:所有命令均使用scripts/location.sh
每条命令都必须通过scripts/location.sh运行。例如:

用户提问:"步行回家要多久?"
您运行:
scripts/location.sh eta home --mode walk
输出: 4.6公里,步行约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 | 当前位置、内部地理围栏、地图链接 |
我们开始 | 仅提供HERE WeGo地图链接 |
检查 | 检查已触发的操作/提醒(由cron使用) |
地点 [--near] [--区域 R] [--类别 C] | 列出已保存的地点 |
地理围栏 | 列出所有地理围栏的完整详情 |
提醒 <文本> <地点ID> | 添加一次性位置提醒 |
提醒事项 | 列出待处理的提醒事项 |
添加地点 <名称> [半径] [--区域 R] [--类别 C] | 保存当前位置 |
编辑地点 <ID> [--名称] [--半径] [--区域] [--类别] [--操作] [--冷却时间] | 修改地点 |
删除地点 <ID> | 删除地点 |
启用 <ID>/禁用 <ID> | 切换地理围栏开关状态 |
history [place] [--days N] | 我上次在某个地点是什么时候? |
nearby <category> [radius] | 查找附近的兴趣点(咖啡馆、酒吧、餐厅等) |
stats [--days N] | 在每个地点花费的时间、访问次数 |
proximity <text> <place/lat> [lon] [radius] | 接近某个位置时发出提醒 |
eta <place> [--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:VAR_NAME"(从环境变量读取)或纯字符串。
替代方案:完全通过环境变量配置(无需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中自定义步行/骑行速度,用于预计到达时间计算:
{
"speeds_kmh": {
"walk": 6,
"bike": 15
}
}
地理围栏配置
编辑scripts/geofences.json:
{
"geofences": [
{
"id": "grocery",
"name": "Grocery Store",
"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 来运行定期的位置检查。在~/.openclaw/cron/jobs.json中添加一个任务:
{
"name": "Location Check",
"schedule": "*/5 * * * *",
"prompt": "Run scripts/location.sh check --json and notify me of any triggered actions, reminders, or proximity alerts.",
"channel": "signal",
"to": "+1234567890",
"wakeMode": "now"
}
这使调度保持在 OpenClaw 内部,而不需要外部的 systemd 服务。


微信扫一扫,打赏作者吧~