通过 Device Access API 控制 Nest 智能家居设备(恒温器、摄像头、门铃)。用于查询或调节室内温度、查看摄像画面、检查门口访客、监控房间或设定温度计划。
Nest 设备访问是一项面向实际任务的技能,主要用于Control Nest 设备通过 Google 智能设备管理 API.Setup.Google 云与设备访问.;Google 云与设备访问. 在 Copeble.cloud.google.com 创建 Google 云项目.pay 5 费用与 c。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
通过 Google 的智能设备管理(Smart Device Management)API 控制 Nest 设备。
console.cloud.google.com 创建一个 Google Cloud 项目console.nest.google.com/device-access 创建一个 Device Access 项目https://www.google.com 添加为已授权的重定向 URI运行 OAuth 流程以获取 refresh token:
# 1. 在浏览器中打开以下 URL(请替换 CLIENT_ID 和 PROJECT_ID): https://nestservices.google.com/partnerconnections/PROJECT_ID/auth?redirect_uri=https://www.google.com&access_type=offline&prompt=consent&client_id=CLIENT_ID&response_type=code&scope=https://www.googleapis.com/auth/sdm.service # 2. 授权后,从重定向 URL 中复制 'code' 参数值 # 3. 使用 code 换取 access token 与 refresh token: curl -X POST https://oauth2.googleapis.com/token -d "client_id=CLIENT_ID" -d "client_secret=CLIENT_SECRET" -d "code=AUTH_CODE" -d "grant_type=authorization_code" -d "redirect_uri=https://www.google.com"
建议存储于 1Password 或环境变量中:
1Password(推荐):
创建一个条目,包含以下字段:project_id、client_id、client_secret、refresh_token
环境变量:
export NEST_PROJECT_ID="your-project-id" export NEST_CLIENT_ID="your-client-id" export NEST_CLIENT_SECRET="your-client-secret" export NEST_REFRESH_TOKEN="your-refresh-token"
python3 scripts/nest.py list
# 获取当前状态 python3 scripts/nest.py get# 设置温度(摄氏度) python3 scripts/nest.py set-temp 21 --unit c --type heat # 设置温度(华氏度) python3 scripts/nest.py set-temp 70 --unit f --type heat # 切换模式(HEAT、COOL、HEATCOOL、OFF) python3 scripts/nest.py set-mode HEAT # 启用节能模式(Eco mode) python3 scripts/nest.py set-eco MANUAL_ECO
# 生成实时视频流 URL(RTSP 协议,有效期约 5 分钟) python3 scripts/nest.py stream
from nest import NestClient client = NestClient() # 列出所有设备 devices = client.list_devices() # 恒温器控制 client.set_heat_temperature(device_id, 21.0) # 单位:摄氏度 client.set_thermostat_mode(device_id, 'HEAT') client.set_eco_mode(device_id, 'MANUAL_ECO') # 摄像头视频流 result = client.generate_stream(device_id) rtsp_url = result['results']['streamUrls']['rtspUrl']
脚本按以下顺序查找凭据:
NEST_OP_VAULT 和 NEST_OP_ITEM(或使用默认值:vault 名为 "Alfred",item 名为 "Nest Device Access API")NEST_PROJECT_ID、NEST_CLIENT_ID、NEST_CLIENT_SECRET、NEST_REFRESH_TOKEN| 场景 | 摄氏度 | 华氏度 |
|---|---|---|
| 节能模式(离家) | 15–17°C | 59–63°F |
| 舒适温度 | 19–21°C | 66–70°F |
| 温暖模式 | 22–23°C | 72–73°F |
| 夜间模式 | 17–18°C | 63–65°F |
如需在有人按门铃或检测到移动时即时收到通知,需配置 Google Cloud Pub/Sub 并接入 webhook。
gcloud)在您的 clawdbot.json 中添加以下内容:
{
"hooks": {
"enabled": true,
"token": "your-secret-token-here"
}
}
生成 token 命令:openssl rand -hex 24
gcloud config set project YOUR_GCP_PROJECT_ID # 创建 topic gcloud pubsub topics create nest-events # 授予 SDM 服务账号发布权限(包括服务账号和发布者组) gcloud pubsub topics add-iam-policy-binding nest-events --member="serviceAccount:sdm-prod@sdm-prod.iam.gserviceaccount.com" --role="roles/pubsub.publisher" gcloud pubsub topics add-iam-policy-binding nest-events --member="group:sdm-publisher@googlegroups.com" --role="roles/pubsub.publisher"
访问 console.nest.google.com/device-access → 您的项目 → 编辑 → 设置 Pub/Sub topic 为:
projects/YOUR_GCP_PROJECT_ID/topics/nest-events
# 安装 cloudflared curl -L -o ~/.local/bin/cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 chmod +x ~/.local/bin/cloudflared # 认证(将自动打开浏览器) ~/.local/bin/cloudflared tunnel login # 创建具名隧道 ~/.local/bin/cloudflared tunnel create nest-webhook # 记录输出中的 Tunnel ID(UUID)
创建 ~/.cloudflared/config.yml:
tunnel: nest-webhook
credentials-file: /home/YOUR_USER/.cloudflared/TUNNEL_ID.json
ingress:
- hostname: nest.yourdomain.com
service: http://localhost:8420
- service: http_status:404
创建 DNS 解析记录:
~/.local/bin/cloudflared tunnel route dns nest-webhook nest.yourdomain.com
Webhook 服务端(/etc/systemd/system/nest-webhook.service):
[Unit] Description=Nest Pub/Sub Webhook Server After=network.target [Service] Type=simple User=YOUR_USER Environment=CLAWDBOT_GATEWAY_URL=http://localhost:18789 Environment=CLAWDBOT_HOOKS_TOKEN=your-hooks-token-here ExecStart=/usr/bin/python3 /path/to/skills/nest-devices/scripts/nest-webhook.py Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
Cloudflare Tunnel 服务(/etc/systemd/system/cloudflared-nest.service):
[Unit] Description=Cloudflare Tunnel for Nest Webhook After=network-online.target Wants=network-online.target [Service] Type=simple User=YOUR_USER ExecStart=/home/YOUR_USER/.local/bin/cloudflared tunnel run nest-webhook Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable --now nest-webhook cloudflared-nest
gcloud pubsub subscriptions create nest-events-sub --topic=nest-events --push-endpoint="https://nest.yourdomain.com/nest/events" --ack-deadline=30
# 测试 webhook 健康状态
curl https://nest.yourdomain.com/health
# 模拟门铃事件
curl -X POST http://localhost:8420/nest/events
-H "Content-Type: application/json"
-d '{"message":{"data":"eyJyZXNvdXJjZVVwZGF0ZSI6eyJuYW1lIjoiZW50ZXJwcmlzZXMvdGVzdC9kZXZpY2VzL0RPT1JCRUxMLTAxIiwiZXZlbnRzIjp7InNkbS5kZXZpY2VzLmV2ZW50cy5Eb29yYmVsbENoaW1lLkNoaW1lIjp7ImV2ZW50SWQiOiJ0ZXN0In19fX0="}}'
| 事件 | 行为 |
|---|---|
DoorbellChime.Chime |
🔔 触发告警 — 向 Telegram 发送照片 |
CameraPerson.Person |
🚶 触发告警 — 向 Telegram 发送照片 |
CameraMotion.Motion |
📹 仅记录日志(不触发告警) |
CameraSound.Sound |
🔊 仅记录日志(不触发告警) |
CameraClipPreview.ClipPreview |
🎬 仅记录日志(不触发告警) |
陈旧性过滤(Staleness filter):超过 5 分钟的事件仅记录日志,不会触发告警。此举可避免因 Pub/Sub 消息延迟投递而引发大量重复通知。
当门铃或人物事件触发告警时:
GenerateImage API —— 快速、事件精准的快照ffmpeg 截取 RTSP 实时流当前帧(需系统已安装 ffmpeg)| 变量名 | 是否必需 | 说明 |
|---|---|---|
CLAWDBOT_GATEWAY_URL |
否 | 网关地址(默认:http://localhost:18789) |
CLAWDBOT_HOOKS_TOKEN |
是 | 用于告警通知的网关 hooks token |
OP_SVC_ACCT_TOKEN |
是 | 1Password 服务账号 token,用于获取 Nest API 凭据 |
TELEGRAM_BOT_TOKEN |
是 | Telegram Bot token,用于发送告警消息 |
TELEGRAM_CHAT_ID |
是 | 接收告警消息的 Telegram 聊天 ID |
PORT |
否 | Webhook 服务端监听端口(默认:8420) |
projects/YOUR_GCP_PROJECT_ID/topics/nest-events相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习