nest-sdm

Control Nest thermostat, doorbell, and cameras via the Google Smart Device Management (SDM) API.

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "nest-sdm" with this command: npx skills add tag-assistant/nest-sdm

Nest SDM Skill

Control and monitor Google Nest devices via the Smart Device Management REST API.

Setup

Prerequisites

  1. Device Access Console — Register at https://console.nest.google.com/device-access ($5 one-time fee)
  2. GCP Project — Create at https://console.cloud.google.com with SDM API enabled
  3. OAuth Client — Web application type with https://www.google.com as redirect URI
  4. SDM scope — Add https://www.googleapis.com/auth/sdm.service to OAuth consent screen

First-time Authorization

  1. Build the authorization URL:
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
  1. Open in browser, sign in as the device owner Google account
  2. Enable ALL device permissions, click Next, then Continue through consent
  3. Copy the code= parameter from the redirect URL
  4. Exchange for tokens:
curl -s -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"
  1. Save tokens to the config file (see Configuration below)

Configuration

Create ~/.openclaw/workspace/.nest-sdm-tokens.json:

{
  "client_id": "<your-client-id>",
  "client_secret": "<your-client-secret>",
  "project_id": "<device-access-project-id>",
  "refresh_token": "<your-refresh-token>",
  "token_type": "Bearer",
  "scope": "https://www.googleapis.com/auth/sdm.service"
}

Secure it: chmod 600 ~/.openclaw/workspace/.nest-sdm-tokens.json

CLI Usage

# Alias for convenience
alias nest="<skill-dir>/nest-sdm.sh"

Device Discovery

nest devices                    # List all devices (JSON)
nest structures                 # List structures/rooms

Thermostat

nest thermostat                 # Current status (temp, humidity, mode, setpoints)
nest set-cool <°F>              # Set to COOL mode at temperature
nest set-heat <°F>              # Set to HEAT mode at temperature
nest set-range <low°F> <high°F> # Set HEATCOOL range
nest set-mode <MODE>            # HEAT | COOL | HEATCOOL | OFF
nest set-eco <MODE>             # MANUAL_ECO | OFF
nest fan-on [duration_seconds]  # Turn fan on (default: 900s / 15min)
nest fan-off                    # Turn fan off

Doorbell & Cameras

nest doorbell                   # Doorbell info & capabilities
nest display                    # Kitchen display info
nest camera-stream <DEVICE_ID>  # Generate WebRTC live stream (returns SDP answer)
nest camera-image <EVENT_ID>    # Get event snapshot URL

Raw API

nest api GET devices                              # Raw device list
nest api GET devices/<DEVICE_ID>                  # Single device
nest api POST devices/<DEVICE_ID>:executeCommand '{"command":"...","params":{...}}'

Supported Devices

TypeTraitsControl
THERMOSTATTemperature, Humidity, Mode, Eco, Fan, HVAC, Setpoint, ConnectivityFull read/write
DOORBELLLiveStream, CameraImage, Person, Motion, Chime, EventImage, ClipPreviewRead + stream
DISPLAYLiveStream, CameraImage, Person, Sound, Motion, EventImageRead + stream

SDM API Commands Reference

Thermostat Commands

CommandParams
ThermostatMode.SetMode{"mode": "HEAT|COOL|HEATCOOL|OFF"}
ThermostatTemperatureSetpoint.SetHeat{"heatCelsius": <float>}
ThermostatTemperatureSetpoint.SetCool{"coolCelsius": <float>}
ThermostatTemperatureSetpoint.SetRange{"heatCelsius": <float>, "coolCelsius": <float>}
ThermostatEco.SetMode{"mode": "MANUAL_ECO|OFF"}
Fan.SetTimer{"timerMode": "ON", "duration": "<seconds>s"}

Camera Commands

CommandParams
CameraLiveStream.GenerateWebRtcStream{"offerSdp": "<SDP offer>"}
CameraLiveStream.StopWebRtcStream{"mediaSessionId": "<id>"}
CameraLiveStream.ExtendWebRtcStream{"mediaSessionId": "<id>"}
CameraEventImage.GenerateImage{"eventId": "<event-id>"}

Pub/Sub Real-Time Events

Get instant alerts for doorbell presses, motion, person detection, and device state changes.

CLI: nest-events

nest-events setup-check         # Verify Pub/Sub config is ready
nest-events create-topic        # Create GCP Pub/Sub topic
nest-events grant-permissions   # Grant SDM publisher role
nest-events create-subscription # Create pull subscription
nest-events poll                # Pull events once
nest-events listen              # Poll continuously (daemon)

Setup Steps

  1. OAuth with Pub/Sub scope — Run OAuth flow as your-email@example.com with pubsub + cloud-platform scopes. Save tokens to .nest-pubsub-tokens.json.
  2. Create topicnest-events create-topic (creates projects/YOUR_GCP_PROJECT/topics/nest-sdm-events)
  3. Grant permissionsnest-events grant-permissions (adds sdm-publisher@googlegroups.com)
  4. Create subscriptionnest-events create-subscription
  5. Enable in Device Access Consolehttps://console.nest.google.com/device-access → Enable Pub/Sub → Enter topic ID
  6. Trigger initial eventsnest devices (one-time API call)
  7. Start listenernest-events listen

Event Types Supported

EventAlert
DoorbellChime.Chime🔔 DOORBELL — Someone rang!
CameraPerson.Person👤 Person detected at device
CameraMotion.Motion🏃 Motion at device
CameraSound.Sound🔊 Sound at device
ThermostatHvac status change❄️/🔥 HVAC now COOLING/HEATING
ThermostatTemperatureSetpoint🌡️ Setpoint changed
Temperature trait🌡️ Ambient temperature change

Configuration

Environment Variables:

VariableDescriptionDefault
NEST_PUBSUB_TOKENSPath to Pub/Sub OAuth tokens~/.openclaw/workspace/.nest-pubsub-tokens.json
TELEGRAM_BOT_TOKENBot token for alertsfrom ~/.zshenv
TELEGRAM_CHAT_IDUser/chat ID for alertsfrom ~/.zshenv
POLL_INTERVALSeconds between polls10
GCP_PROJECTGCP project IDYOUR_GCP_PROJECT
PUBSUB_TOPICTopic namenest-sdm-events
PUBSUB_SUBSCRIPTIONSubscription namenest-sdm-events-sub

Event Logs

Raw events are logged to data/nest-events/events-YYYY-MM-DD.jsonl.

Alert Dedup

Same event type won't re-alert within 60 seconds to prevent alert fatigue.

Important Notes

  • Token expiry: If the GCP app is in "testing" mode, refresh tokens expire in 7 days. Publish the app to avoid re-auth.
  • Temperature: API uses Celsius internally. The CLI handles F↔C conversion.
  • Setpoint constraints: HEATCOOL range must have at least 1.5°C (2.7°F) gap between heat and cool setpoints.
  • Camera streams: WebRTC only (no RTSP). Requires SDP offer/answer exchange.
  • Rate limits: 10 queries/min per device, 10 commands/min per device.
  • Events: Use nest-events listen for real-time alerts. Requires Pub/Sub setup (see above).

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

A Python CLI skill for Cutout.Pro visual APIs — background removal, face cutout, and photo enhancement. Supports file upload & image URL input.

Call Cutout.Pro visual processing APIs to perform background removal, face cutout, and photo enhancement. Supports both file upload and image URL input, retu...

Registry SourceRecently Updated
01
Profile unavailable
Coding

client-onboarding-agent

Client onboarding and business diagnostic framework for AI agent deployments. Covers 4-round diagnostic process, 6 constraint categories, deployment SOP with...

Registry SourceRecently Updated
Coding

Ai Tools

AI Tools Box - Search and invoke 100+ AI tools. Categories: Writing, Image, Video, Coding, Office, Search, Chat, Audio, Design, Agent, Translation, Dev Platf...

Registry SourceRecently Updated
018
Profile unavailable