Jump to related tools in the same category or review the original source on GitHub.

Smart Home & IoT @tag-assistant Updated 7/18/2026 1,352 downloads 0 stars Security: Pass

🏠 Nest Sdm OpenClaw Plugin & Skill | ClawHub

Looking to integrate Nest Sdm into your AI workflows? This free OpenClaw plugin from ClawHub helps you automate smart home & iot tasks instantly, without having to write custom tools from scratch.

What this skill does

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

Install

ClawHub CLI
openclaw skills install @tag-assistant/nest-sdm
Node.js (npx)
npx clawhub@latest install nest-sdm

Full SKILL.md

Open original
Metadata table.
namedescription
nest-sdmControl Nest thermostat, doorbell, and cameras via the Google Smart Device Management (SDM) API.

SKILL.md content below is scrollable.

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

Type Traits Control
THERMOSTAT Temperature, Humidity, Mode, Eco, Fan, HVAC, Setpoint, Connectivity Full read/write
DOORBELL LiveStream, CameraImage, Person, Motion, Chime, EventImage, ClipPreview Read + stream
DISPLAY LiveStream, CameraImage, Person, Sound, Motion, EventImage Read + stream

SDM API Commands Reference

Thermostat Commands

Command Params
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

Command Params
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 [email protected] with pubsub + cloud-platform scopes. Save tokens to .nest-pubsub-tokens.json.
  2. Create topic β€” nest-events create-topic (creates projects/YOUR_GCP_PROJECT/topics/nest-sdm-events)
  3. Grant permissions β€” nest-events grant-permissions (adds [email protected])
  4. Create subscription β€” nest-events create-subscription
  5. Enable in Device Access Console β€” https://console.nest.google.com/device-access β†’ Enable Pub/Sub β†’ Enter topic ID
  6. Trigger initial events β€” nest devices (one-time API call)
  7. Start listener β€” nest-events listen

Event Types Supported

Event Alert
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:

Variable Description Default
NEST_PUBSUB_TOKENS Path to Pub/Sub OAuth tokens ~/.openclaw/workspace/.nest-pubsub-tokens.json
TELEGRAM_BOT_TOKEN Bot token for alerts from ~/.zshenv
TELEGRAM_CHAT_ID User/chat ID for alerts from ~/.zshenv
POLL_INTERVAL Seconds between polls 10
GCP_PROJECT GCP project ID YOUR_GCP_PROJECT
PUBSUB_TOPIC Topic name nest-sdm-events
PUBSUB_SUBSCRIPTION Subscription name nest-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).
ClawHub Registry URL: https://clawhub.ai/tag-assistant/skills/nest-sdm

Related skills

If this matches your use case, these are close alternatives in the same category.