介绍
# Location Awareness
**此技能提供了可执行的命令。当用户询问位置时,请运行下方的相应命令。**
## ⚠️ 重要:所有命令均使用 `scripts/location.sh`
每个命令都必须通过 `scripts/location.sh` 运行。例如:
**用户询问:**“走路回家要多久?” **你运行:** ```bash scripts/location.sh eta home --mode walk ``` **输出:**`4.6 km, about 45 min walk` **直接用该输出进行回复。**
请勿直接运行 `eta` 或其他子命令——它们不是独立的命令。
## 快速参考 — 运行指令
| 用户说 | 运行此命令(完全复制) | 回复内容 | |-----------|----------|------------| | "Where am I?" | `scripts/location.sh status` | 仅区域名称 | | "Map" / "map link" | `scripts/location.sh herewego` | 仅 URL | | "What are my coordinates?" | `scripts/location.sh status` | 输出中的经纬度 | | "How long to walk home?" | `scripts/location.sh eta home --mode walk` | 距离 + 时长 | | "How long to bike to X?" | `scripts/location.sh eta X --mode bike` | 距离 + 时长 | | "How far is X by car?" | `scripts/location.sh eta X --mode car` | 距离 + 时长 | | "Remind me to X when I get to Y" | `scripts/location.sh remind "X" Y` | 简短确认 | | "What reminders do I have?" | `scripts/location.sh reminders` | 项目符号列表或 "None" | | "List my places" | `scripts/location.sh places` | 项目符号列表 | | "List places nearby" | `scripts/location.sh places --near` | 按距离排序 | | "List my pubs downtown" | `scripts/location.sh places --region downtown --category pub` | 过滤后的列表 | | "Save this spot as X" | `scripts/location.sh addplace "X"` | 确认 | | "Delete place X" | `scripts/location.sh delplace X` | 确认 | | "Disable the grocery rule" | `scripts/location.sh disable grocery` | 确认 | | "List my geofence rules" | `scripts/location.sh geofences` | 项目符号列表 | | "When was I last at X?" | `scripts/location.sh history X` | 日期/时间 | | "Where have I been today?" | `scripts/location.sh history --days 1` | 地点列表 | | "Find me a cafe nearby" | `scripts/location.sh nearby cafe` | 附带距离的兴趣点 (POI) 列表 | | "Any pubs within 1km?" | `scripts/location.sh nearby pub 1000` | 过滤后的兴趣点 (POI) 列表 | | "How long was I at work this week?" | `scripts/location.sh stats --days 7` | 每个地点的小时数 |
**回复风格:** 简洁。无引言。不要说“这是您的位置:”。仅需答案。
## 所有命令
所有命令均通过 `scripts/location.sh <command>` 执行:
| 命令 | 描述 | |---------|-------------| | `status` | 当前位置、内部地理围栏、地图链接 | | `herewego` | 仅 HERE WeGo 地图链接 | | `check` | 检查触发的操作/提醒(由 cron 使用)| | `places [--near] [--region R] [--category C]` | 列出已保存的地点 | | `geofences` | 列出所有地理围栏及其详细信息 | | `remind <text> <place_id>` | 添加一次性位置提醒 | | `reminders` | 列出待处理的提醒 | | `addplace <name> [radius] [--region R] [--category C]` | 保存当前位置 | | `editplace <id> [--name] [--radius] [--region] [--category] [--action] [--cooldown]` | 修改地点 | | `delplace <id>` | 删除地点 | | `enable <id>` / `disable <id>` | 开启/关闭地理围栏 | | `history [place] [--days N]` | 上次在某个地点是什么时候?| | `nearby <category> [radius]` | 查找附近的兴趣点(POI)(咖啡馆、酒吧、餐厅等)| | `stats [--days N]` | 在每个地点停留的时间、访问次数 | | `proximity <text> <place/lat> [lon] [radius]` | 接近某个位置时发出警报 | | `eta <place> [--mode walk\|bike\|car]` | 到达某地的旅行时间和距离 |
**注意:** `eta` 接受已保存的地点名称、坐标(`lat,lon`)或任何地点名称(通过 OpenStreetMap 进行地理编码,以当前位置为偏差)。
**注意:** `status` 如果在已知地点则返回区域名称,否则反向地理编码为街道地址(例如,“123 Main Street, Downtown”)。
## 概念
**地理围栏 (Geofences)** — 带有经纬度、半径和可选操作的已保存地点。持久化存储。
**提醒 (Reminders)** — 与地点关联的一次性警报。发送后删除。
**区域/类别 (Region/Category)** — 用于过滤的可选标签(例如,“downtown”、“pub”)。
---
## 设置(供管理员使用)
### 提供商配置
编辑 `scripts/config.json`:
**Home Assistant(默认):** ```json { "provider": "homeassistant", "homeassistant": { "url": "https://your-ha.example.com", "token": "your-long-lived-token", "entity_id": "device_tracker.phone" } } ```
**OwnTracks:** ```json { "provider": "owntracks", "owntracks": { "url": "https://owntracks.example.com", "user": "username", "device": "phone" } } ```
**Generic HTTP:** ```json { "provider": "http", "http": { "url": "https://your-api.com/location", "headers": {"Authorization": "Bearer token"} } } ```
**GPSLogger(基于文件):** ```json { "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` 中自定义步行/骑行速度以计算 ETA:
```json { "speeds_kmh": { "walk": 6, "bike": 15 } } ```
### 地理围栏配置
编辑 `scripts/geofences.json`:
```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`:
```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 服务。