Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Control Nest thermostat, doorbell, and cameras via the Google Smart Device Management (SDM) API.
Control Nest thermostat, doorbell, and cameras via the Google Smart Device Management (SDM) API.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Control and monitor Google Nest devices via the Smart Device Management REST API.
Device Access Console — Register at https://console.nest.google.com/device-access ($5 one-time fee) GCP Project — Create at https://console.cloud.google.com with SDM API enabled OAuth Client — Web application type with https://www.google.com as redirect URI SDM scope — Add https://www.googleapis.com/auth/sdm.service to OAuth consent screen
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 Open in browser, sign in as the device owner Google account Enable ALL device permissions, click Next, then Continue through consent Copy the code= parameter from the redirect URL 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" Save tokens to the config file (see Configuration below)
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
# Alias for convenience alias nest="<skill-dir>/nest-sdm.sh"
nest devices # List all devices (JSON) nest structures # List structures/rooms
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
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
nest api GET devices # Raw device list nest api GET devices/<DEVICE_ID> # Single device nest api POST devices/<DEVICE_ID>:executeCommand '{"command":"...","params":{...}}'
TypeTraitsControlTHERMOSTATTemperature, Humidity, Mode, Eco, Fan, HVAC, Setpoint, ConnectivityFull read/writeDOORBELLLiveStream, CameraImage, Person, Motion, Chime, EventImage, ClipPreviewRead + streamDISPLAYLiveStream, CameraImage, Person, Sound, Motion, EventImageRead + stream
CommandParamsThermostatMode.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"}
CommandParamsCameraLiveStream.GenerateWebRtcStream{"offerSdp": "<SDP offer>"}CameraLiveStream.StopWebRtcStream{"mediaSessionId": "<id>"}CameraLiveStream.ExtendWebRtcStream{"mediaSessionId": "<id>"}CameraEventImage.GenerateImage{"eventId": "<event-id>"}
Get instant alerts for doorbell presses, motion, person detection, and device state changes.
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)
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. Create topic — nest-events create-topic (creates projects/YOUR_GCP_PROJECT/topics/nest-sdm-events) Grant permissions — nest-events grant-permissions (adds sdm-publisher@googlegroups.com) Create subscription — nest-events create-subscription Enable in Device Access Console — https://console.nest.google.com/device-access → Enable Pub/Sub → Enter topic ID Trigger initial events — nest devices (one-time API call) Start listener — nest-events listen
EventAlertDoorbellChime.Chime🔔 DOORBELL — Someone rang!CameraPerson.Person👤 Person detected at deviceCameraMotion.Motion🏃 Motion at deviceCameraSound.Sound🔊 Sound at deviceThermostatHvac status change❄️/🔥 HVAC now COOLING/HEATINGThermostatTemperatureSetpoint🌡️ Setpoint changedTemperature trait🌡️ Ambient temperature change
Environment Variables: VariableDescriptionDefaultNEST_PUBSUB_TOKENSPath to Pub/Sub OAuth tokens~/.openclaw/workspace/.nest-pubsub-tokens.jsonTELEGRAM_BOT_TOKENBot token for alertsfrom ~/.zshenvTELEGRAM_CHAT_IDUser/chat ID for alertsfrom ~/.zshenvPOLL_INTERVALSeconds between polls10GCP_PROJECTGCP project IDYOUR_GCP_PROJECTPUBSUB_TOPICTopic namenest-sdm-eventsPUBSUB_SUBSCRIPTIONSubscription namenest-sdm-events-sub
Raw events are logged to data/nest-events/events-YYYY-MM-DD.jsonl.
Same event type won't re-alert within 60 seconds to prevent alert fatigue.
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).
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.