通过 Device Access API 控制 Nest 智能家居设备(恒温器、摄像头、门铃)。用于查询或调节室内温度、查看摄像画面、检查门口访客、监控房间或设定温度计划。
Nest 设备访问
功能概述
Nest 设备访问是一项面向实际任务的技能,主要用于Control Nest 设备通过 Google 智能设备管理 API.Setup.Google 云与设备访问.;Google 云与设备访问. 在 Copeble.cloud.google.com 创建 Google 云项目.pay 5 费用与 c。
核心要点
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
使用与执行
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
结果检查与注意事项
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
Nest 设备访问
通过 Google 的智能设备管理(Smart Device Management)API 控制 Nest 设备。
配置步骤
1. Google Cloud 与 Device Access
- 在
console.cloud.google.com创建一个 Google Cloud 项目 - 支付 5 美元费用,并在
console.nest.google.com/device-access创建一个 Device Access 项目 - 创建 OAuth 2.0 凭据(类型为 Web 应用)
- 将
https://www.google.com添加为已授权的重定向 URI - 将您的 Nest 账户关联至该 Device Access 项目
2. 获取 Refresh Token
运行 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"
3. 存储凭据
建议存储于 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
恒温器(Thermostat)
# 获取当前状态 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
摄像头(Cameras)
# 生成实时视频流 URL(RTSP 协议,有效期约 5 分钟) python3 scripts/nest.py stream
Python API
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']
配置说明
脚本按以下顺序查找凭据:
- 1Password:设置
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。
前置条件
- 已安装并完成身份验证的 Google Cloud CLI(
gcloud) - Cloudflare 账户(免费版即可支持隧道功能)
- 已在配置中启用 Clawdbot hooks
1. 启用 Clawdbot Hooks
在您的 clawdbot.json 中添加以下内容:
{
"hooks": {
"enabled": true,
"token": "your-secret-token-here"
}
}
生成 token 命令:openssl rand -hex 24
2. 创建 Pub/Sub Topic
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"
3. 将 Topic 关联至 Device Access
访问 console.nest.google.com/device-access → 您的项目 → 编辑 → 设置 Pub/Sub topic 为:
projects/YOUR_GCP_PROJECT_ID/topics/nest-events
4. 配置 Cloudflare Tunnel
# 安装 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
5. 创建 Systemd 服务
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
6. 创建 Pub/Sub Push 订阅
gcloud pubsub subscriptions create nest-events-sub --topic=nest-events --push-endpoint="https://nest.yourdomain.com/nest/events" --ack-deadline=30
7. 测试
# 测试 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 消息延迟投递而引发大量重复通知。
图像捕获机制
当门铃或人物事件触发告警时:
- 首选方式:调用 SDM
GenerateImageAPI —— 快速、事件精准的快照 - 备用方式:通过
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) |
重要配置提示
- 请严格核对 Device Access 控制台中填写的完整 Pub/Sub topic 路径,必须与您的 GCP 项目完全一致:
projects/YOUR_GCP_PROJECT_ID/topics/nest-events - 务必使用 push 订阅(而非 pull 订阅) —— Webhook 服务仅接受 HTTP POST 方式推送的消息
- 配置完成后请进行端到端测试:实际按压门铃,确认照片成功送达。切勿仅依赖模拟的 POST 请求测试结果。
限制说明
- 摄像头事件图像有效期约为 5 分钟(RTSP 备用方案会截取当前帧)
- 实时事件依赖 Pub/Sub 配置(详见上文)
- 未绑定 Cloudflare 账户的快速隧道(Quick tunnels)不保证持续可用性
- 部分较老款 Nest 设备可能不支持全部功能
- 为避免通知疲劳,移动侦测(Motion)与声音事件(Sound)默认不触发告警
热门AI工具
相关专题
本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。
0
2026.11.04
本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。
0
2026.11.04
本专题梳理XORM框架的入门路径,从框架定位、依赖安装、连接数据库到跑通第一个增删改查示例,讲清Engine初始化、日志开启与项目目录规划,并对比GORM等同类ORM的差异,帮助Go开发者建立整体认知。
0
2026.11.04
本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。
0
2026.11.03
想使用Docker Desktop将本地项目构建成Docker镜像?本专题围绕镜像构建的实际操作展开,介绍Dockerfile编写、构建命令使用、镜像标签设置和构建日志查看等内容,同时整理镜像无法生成、依赖安装失败及构建缓存异常等问题的排查思路。
0
2026.11.03
本专题聚焦Docker Desktop容器创建与运行配置,介绍通过本地镜像或远程镜像创建容器的方法,以及容器启动、终端访问、日志查看和基础管理等操作。针对端口冲突、参数配置不当、容器无法启动等情况,也整理了相应的排查方向。
0
2026.11.03
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.7万人学习
共6课时 | 54.7万人学习