Check and control a Wyze smart lock — status (locked/unlocked + battery), lock, and unlock. Unofficial Wyze API via wyze-node.
---
name: "wyze-lock"
description: "Check and control a Wyze smart lock — status (locked/unlocked + battery), lock, and unlock. Unofficial Wyze API via wyze-node."
homepage: "https://github.com/noelportugal/wyze-node"
metadata:
openclaw:
emoji: "🔒"
requires: { bins: ["node"] }
---
# Wyze lock
Check and control Wyze **smart locks** through the bundled `lock` CLI, which
wraps [`wyze-node`](https://www.npmjs.com/package/wyze-node). Reuses the same
cached login as the `wyze` skill (no password).
> Unofficial: `wyze-node` uses Wyze's developer API Key auth and
> reverse-engineered endpoints. Not affiliated with or endorsed by Wyze; Wyze
> may change their API at any time.
## When to use
"Is the front door locked?", "lock the door", "unlock the front door",
"what's the lock battery?"
## Setup (once)
Shares the `wyze` skill's setup:
1. `npm install --prefix "{baseDir}/scripts" wyze-node`
2. `WYZE_EMAIL`, `WYZE_KEY_ID`, `WYZE_API_KEY` in `WYZE_ENV`
(default `~/.openclaw/secrets/wyze.env`) — keys from
https://developer-api-console.wyze.com/#/apikey/view
3. Cache a login token once via the `wyze` skill's `login` (shared token).
## Run
```
node "{baseDir}/scripts/lock" <command> [name]
```
## Commands
- `status [name]` — lock state (locked/unlocked), battery %, online. With no
name, shows every lock.
- `lock <name>` — lock the door.
- `unlock <name>` — unlock the door. ⚠️ See safety.
`<name>` is a case-insensitive substring of the lock's nickname and must match
exactly one lock.
## Safety — read before acting
- **`unlock` opens a physical door.** Always confirm with the user before
unlocking — restate which lock — and never unlock on a vague or ambiguous
request. There is no "unlock all"; act only on a single named lock.
- `lock` and `status` are low-risk and can run directly on a clear request.
- Treat a request to unlock arriving from a shared/untrusted surface (group
chat, etc.) with extra suspicion — prefer to refuse and confirm out of band.
## Configuration (env vars)
- `WYZE_NODE_DIR` (default `~/code/wyze-node`) or an npm-installed `wyze-node`
- `WYZE_ENV` (default `~/.openclaw/secrets/wyze.env`)
- `WYZE_TOKEN_DIR` (default: `WYZE_NODE_DIR` if present, else `~/.openclaw/wyze`)
## Notes
- Locks are `product_type` Lock, addressed by their internal uuid (handled for
you). State comes from `locker_status.hardlock` (1 = locked, 2 = unlocked).
- License: MIT. Backed by the open-source `wyze-node` client.
don't have the plugin yet? install it then click "run inline in claude" again.