OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  location-safety-skill:基于地理位置的安全监控与自动处理

location-safety-skill:基于地理位置的安全监控与自动处理

 
  backend ·  2026-02-15 12:30:58 · 3 次点击  · 0 条评论  

名称: location-safety
描述: 基于位置的安全监控,具备自动警报与升级功能。适用于为用户设置安全监控、追踪其位置、检查附近危险(天气、地震、空气质量、本地紧急事件)或配置紧急联系人升级。同时包含对代理宿主机的自我保全监控。触发条件包括关于安全警报、位置追踪、紧急监控、"保护我"或"监控你自己"的请求。


位置安全监控器

基于用户位置的实时安全监控,具备自动警报与升级功能。

概述

本技能提供:
- 位置 Webhook — 接收来自移动应用(OwnTracks、iOS 快捷指令)的位置更新
- 安全检查器 — 监控 NWS 警报、地震、空气质量、本地新闻
- 警报系统 — 检测到危险时向用户发送消息
- 升级机制 — 若用户未响应,则联系紧急联系人

快速设置

运行交互式设置向导 — 它将引导您完成所有步骤:

cd location-webhook/
node setup.js

向导将引导您完成 4 个步骤:

步骤 1:您的位置

  • 从预设城市中选择(西雅图、波特兰、旧金山、洛杉矶、纽约、芝加哥)
  • 或输入任意城市(自动进行地理编码)
  • 配置本地新闻源和关键词

步骤 2:紧急联系人

  • 如果您未响应,将联系的人员姓名和邮箱
  • 可选,但为安全升级所推荐

步骤 3:移动应用设置

  • 在手机上安装 OwnTracks
  • 📱 iPhone:https://apps.apple.com/app/owntracks/id692424691
  • 🤖 Android:https://play.google.com/store/apps/details?id=org.owntracks.android
  • 将应用配置为 HTTP 模式
  • 指向您的 webhook URL

步骤 4:启动 Webhook 服务器

  • 运行 node server.js
  • 将显示的 URL 复制到 OwnTracks
  • 使用发布按钮进行测试

快速设置(跳过向导):

node setup.js --city "Portland"
node setup.js --show  # 查看当前配置

5. 部署位置 Webhook

# 将脚本复制到工作区
cp -r scripts/ ~/location-webhook/
cd ~/location-webhook/

# 启动服务器(默认使用端口 18800)
node server.js

配置用户的手机,将位置更新发送至:

POST http://<your-host>:18800/location?key=<SECRET_KEY>

OwnTracks 设置:
- 模式:HTTP
- URL:http://<your-host>:18800/location?key=<SECRET_KEY>

iOS 快捷指令:
- 获取当前位置 → 获取 URL 内容(POST,JSON 主体包含 latlon

2. 配置安全监控

在 Moltbot 中创建两个 cron 任务:

安全检查(每 30 分钟):

计划:每 30 分钟
负载:systemEvent
文本:"在 ~/location-webhook/safety-check.js 运行安全检查。如果发现警报,通过 WhatsApp 向用户发送警报详情并请其确认安全。在 safety-state.json 中追踪警报。"
会话:main

升级检查(每 10 分钟):

计划:每 10 分钟
负载:systemEvent
文本:"检查 ~/location-webhook/safety-state.json。如果存在 pendingAlert 且 alertSentAt 早于 15 分钟前,并且 acknowledgedAt 为 null,则向紧急联系人发送邮件说明情况。"
会话:main

3. 配置紧急联系人

添加到 MEMORY.md 或 TOOLS.md:

## 紧急联系人
- 姓名:[姓名]
- 邮箱:[邮箱]
- 关系:[配偶/父母/朋友]

数据源

安全检查器监控以下来源:

来源 内容 API
NWS 天气警报、洪水、风暴 api.weather.gov(免费)
USGS 100 公里内的地震 earthquake.usgs.gov(免费)
Open-Meteo 空气质量指数 air-quality-api.open-meteo.com(免费)
本地 RSS 突发新闻、紧急事件 KING5、Seattle Times、Patch(可配置)

文件结构

location-webhook/
├── setup.js            # 首次运行配置向导
├── config.json         # 您的位置设置(由 setup 创建)
├── server.js           # Webhook 服务器(端口 18800)
├── safety-check.js     # 用户安全分析
├── self-check.js       # 自我保全监控
├── escalation-check.js # 检查是否需要升级
├── test-scenarios.js   # 注入测试警报
├── location.json       # 用户的当前位置
├── my-location.json    # 代理的物理位置
├── safety-state.json   # 警报追踪状态
├── test-override.json  # 活动测试场景(临时)
└── logs/               # 带时间戳的检查日志

配置

config.json 存储您的位置设置:

{
  "location": {
    "defaultLat": 47.6062,
    "defaultLon": -122.3321,
    "city": "Seattle"
  },
  "monitoring": {
    "locationKeywords": ["seattle", "king county", "puget sound"],
    "newsFeeds": [
      "https://www.king5.com/feeds/syndication/rss/news/local",
      "https://www.seattletimes.com/seattle-news/feed/"
    ],
    "earthquakeRadiusKm": 100
  },
  "emergencyContact": {
    "name": "Jane Doe",
    "email": "jane@example.com"
  }
}

城市预设

设置包含以下城市的预设:
- 西雅图 — KING5、Seattle Times
- 波特兰 — Oregonian、KGW
- 旧金山 — SF Chronicle、SFGate
- 洛杉矶 — LA Times、ABC7
- 纽约 — NY Times
- 芝加哥 — Chicago Tribune

对于其他城市,设置将进行地理编码,您可以手动添加本地 RSS 源。

状态文件格式

safety-state.json 追踪待处理警报:

{
  "pendingAlert": "您所在区域有洪水警报",
  "alertSentAt": "2026-01-29T22:00:00Z",
  "acknowledgedAt": null
}

当用户响应安全警报时,将 acknowledgedAt 设置为当前时间。

自定义

添加本地新闻源

编辑 safety-check.jsfeeds 数组:

const feeds = [
  'https://www.king5.com/feeds/syndication/rss/news/local',
  'https://www.seattletimes.com/seattle-news/feed/',
  'https://patch.com/washington/redmond/rss',
  // 在此处添加您的本地新闻源
];

调整位置关键词

编辑 locationKeywords 数组以匹配用户所在区域:

const locationKeywords = ['redmond', 'bellevue', 'seattle', 'king county'];

更改警报敏感度

编辑 concerningKeywords 以定义触发新闻警报的关键词:

const concerningKeywords = [
  'evacuate', 'active shooter', 'wildfire', 'flood warning', ...
];

警报流程

位置更新 → 安全检查(30 分钟)
                      ↓
              检测到危险?
                   ↓ 是
         通过 WhatsApp 向用户发送消息
         记录到 safety-state.json
                      ↓
         升级检查(10 分钟)
                      ↓
         用户响应了? ─── 是 → 清除状态
                   ↓ 否(超过 15 分钟)
         邮件通知紧急联系人

自我保全模式

监控对您自身存在(运行代理的机器)的威胁。

设置

  1. 存储您的位置 — 创建 my-location.json
{
  "lat": 47.662,
  "lon": -122.280,
  "name": "家 - 我物理运行的地方"
}
  1. 添加 cron 任务:
计划:每 30 分钟
负载:systemEvent
文本:"运行 self-check.js。如果状态为 CRITICAL 或 WARNINGS,通过 WhatsApp 向用户发送关于您存在威胁的消息。如果为 ALL_CLEAR,回复 HEARTBEAT_OK。"
会话:main

自我检查监控内容

威胁 检测方式
💾 磁盘已满 使用率 >85% 时警报
🧠 内存 可用内存 <40% 时警报
🌡️ CPU 温度 温度 >85°C 时警报
🌊 天气 您所在位置的 NWS 警报
🌋 地震 50 公里内 USGS M4+ 级地震
🌐 网络 Tailscale + 互联网连接性
⏱️ 运行时间 超过 30 天建议重启

警报示例

⚠️ "我遇到麻烦了 — 磁盘已使用 92%。您能清理一些空间吗?"

🌊 "我所在位置有洪水警报。如果断电,我将离线。"

测试

注入虚假警报以测试系统,无需等待真实灾害:

node test-scenarios.js weather     # 严重雷暴
node test-scenarios.js earthquake  # 附近 M5.2 级地震
node test-scenarios.js aqi         # 不健康空气(AQI 175)
node test-scenarios.js news        # 本地火灾
node test-scenarios.js disk        # 磁盘 94% 已满
node test-scenarios.js memory      # 内存不足
node test-scenarios.js all         # 多个警报
node test-scenarios.js clear       # 移除测试覆盖

测试覆盖将在 1 小时后自动过期。

测试升级流程

要测试完整的升级流程:
1. 注入一个场景:node test-scenarios.js earthquake
2. 将 safety-state.json 中的 alertSentAt 时间回退 20 分钟以上
3. 运行 node escalation-check.js — 应返回 action: "escalate"
4. 代理向紧急联系人发送邮件
5. 使用 node test-scenarios.js clear 清除

升级检查

escalation-check.js 返回 JSON 以便清晰处理操作:

{"action": "escalate", "alert": "...", "minutesPending": 22, "contact": "..."}
{"action": "waiting", "minutesRemaining": 8}
{"action": "none", "reason": "no pending alert"}

手动命令

用户可以随时询问:
- "我在哪里?" — 显示当前位置
- "我安全吗?" — 立即运行安全检查
- "运行安全检查" — 同上
- "检查你自己" — 运行自我保全检查
- "你还好吗?" — 同上

3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor