Nest Devices

Polar Sponsor
爱发电 赞助
.NET 9.0

通过 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

  1. 在 console.cloud.google.com 创建一个 Google Cloud 项目
  2. 支付 5 美元费用,并在 console.nest.google.com/device-access 创建一个 Device Access 项目
  3. 创建 OAuth 2.0 凭据(类型为 Web 应用)
  4. 将 https://www.google.com 添加为已授权的重定向 URI
  5. 将您的 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']

配置说明

脚本按以下顺序查找凭据:

  1. 1Password:设置 NEST_OP_VAULT 和 NEST_OP_ITEM(或使用默认值:vault 名为 "Alfred",item 名为 "Nest Device Access API")
  2. 环境变量: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 消息延迟投递而引发大量重复通知。

图像捕获机制

当门铃或人物事件触发告警时:

  1. 首选方式:调用 SDM GenerateImage API —— 快速、事件精准的快照
  2. 备用方式:通过 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)默认不触发告警

相关专题

更多
DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架零基础入门教程
XORM框架零基础入门教程

本专题梳理XORM框架的入门路径,从框架定位、依赖安装、连接数据库到跑通第一个增删改查示例,讲清Engine初始化、日志开启与项目目录规划,并对比GORM等同类ORM的差异,帮助Go开发者建立整体认知。

2026.11.04

0

15

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

2026.11.03

0

18

Docker Desktop镜像构建教程
Docker Desktop镜像构建教程

想使用Docker Desktop将本地项目构建成Docker镜像?本专题围绕镜像构建的实际操作展开,介绍Dockerfile编写、构建命令使用、镜像标签设置和构建日志查看等内容,同时整理镜像无法生成、依赖安装失败及构建缓存异常等问题的排查思路。

2026.11.03

0

11

Docker Desktop容器创建指南
Docker Desktop容器创建指南

本专题聚焦Docker Desktop容器创建与运行配置,介绍通过本地镜像或远程镜像创建容器的方法,以及容器启动、终端访问、日志查看和基础管理等操作。针对端口冲突、参数配置不当、容器无法启动等情况,也整理了相应的排查方向。

2026.11.03

0

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习