eufy
Manage Eufy Security (HomeBase S380 + SoloCam S340/E340) from the `eufy` CLI—capture snapshots, forward alarms to the Tuya hub, and change guard/alarm modes through eufy-security-ws.
$ Installieren
git clone https://github.com/mbelinky/clawdis-skills /tmp/clawdis-skills && cp -r /tmp/clawdis-skills/eufy ~/.claude/skills/clawdis-skills// tip: Run this command in your terminal to install the skill
SKILL.md
name: eufy
description: Manage Eufy Security (HomeBase S380 + SoloCam S340/E340) from the eufy CLI—capture snapshots, forward alarms to the Tuya hub, and change guard/alarm modes through eufy-security-ws.
metadata: {"clawdis":{"emoji":"🛡️","requires":{"bins":["eufy"]},"install":[{"id":"pip","kind":"pip","cmd":"pip install -e $HOME/Coding/belidis/eufy","label":"Install eufycli"}]}}
eufy skill
Use this when a task references the Eufy camera kit, S380 HomeBase, S340/S330/S230 cameras, or anything that needs alarms/images from those devices.
Environment
- Ensure the helper package is installed:
pip install -e /Users/marianobelinky/Coding/belidis/eufy - Generate/edit the config once per operator:
Filleufy config init $EDITOR ~/.config/eufycli/config.toml[account](email/password/app password),[stations]/[cameras]aliases, default[paths], and optional[webhook]URL (usuallyhttp://127.0.0.1:5000/api/eufy/events). - Secrets hierarchy:
EUFY_PASSWORD/EUFYCLI_PASSWORDenv var →account.password→account.password_command. - Override config paths via
EUFYCLI_CONFIG/ CLI--configflag. - Optional guard/alarm control requires
eufy-security-ws:Then set thedocker run --rm -p 3000:3000 -e USERNAME=... -e PASSWORD=... bropat/eufy-security-ws:latest[ws]block (enabled = true,url,schema) inconfig.toml.
Common CLI flows
- Account sanity check
eufy login # lists stations/cameras/IPs - Pull a still
Images land ineufy snapshot driveway # uses alias eufy snapshot T8140XXXXXXXXXXXX -o ./tmppaths.mediaunless-ooverrides it. - Stream alarms into Tuya hub
Leave it running (LaunchAgent/systemd) soeufy events watch --webhook http://<hub-ip>:5000/api/eufy/events/api/eufy/eventsalways has fresh motion history. - Guard / siren (needs ws bridge)
eufy ws guard homebase away eufy ws alarm homebase --seconds 60
Tuya hub integration cheatsheet
The Flask hub (repo: tuya-hub/tuya-hub) exposes endpoints once the eufycli package is installed:
| Endpoint | Purpose |
|---|---|
GET /api/eufy/status | Returns {available,status} to show config/install issues. |
GET /api/eufy/cameras | Lists metadata/thumbnails for dashboards. |
POST /api/eufy/camera/<alias-or-serial>/snapshot | Streams JPEG stills (headers include capture timestamp). |
POST /api/eufy/events | Accepts {"events": [...]} (exact payload from eufy events watch). |
GET /api/eufy/events | Returns the cached events buffer for UI panels/alerts. |
Pairing workflow:
- Install eufycli inside the hub's virtualenv (
pip install -e /Users/.../belidis/eufy). - Restart the Flask app so
services.eufy.EufyServiceloads the config. - Launch
eufy events watchon a machine that stays on the same LAN and point--webhookto the Flask endpoint. - Use the new REST endpoints (or
eufy snapshot ...) from automations, Tuya flows, or Clawdis scripts.
Troubleshooting
- Config missing –
/api/eufy/statusshows the exact error (e.g.,account.email missing). Runeufy config initand edit the file. - CaptchaRequiredError – rerun
eufy login; the CLI will print a base64 captcha blob. Solve it and re-run with--captcha-id/--captcha-code(Typer prompts automatically). After a successful login the session refresh works silently. - 403/InvalidCredentials – Eufy accounts with 2FA require app passwords. Generate one inside the Eufy Security app and store it in the config or
EUFY_PASSWORD. - Guard/Alarm commands fail – confirm
docker logsforeufy-security-wsshowclient connected, that the[ws]block hasenabled = true, and that the CLI can reach the server (eufy ws guard ...). The Tuya hub does not call guard endpoints automatically; keep using the CLI or build an automation around it. - Snapshots stale –
eufy snapshot ...returns the last motion thumbnail. Trigger motion or use the Eufy app to refresh; RTSP livestreams require enabling RTSP per camera (inside the native app) and storingrtsp_username/passwordthere, which the CLI will surface later.
Related files
- Helper package:
/Users/marianobelinky/Coding/belidis/eufy - Flask hub:
/Users/marianobelinky/Coding/infra/tuya-hub/tuya-hub - Skill reference config:
~/.config/eufycli/config.toml
