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:
bash
pip install -e /Users/marianobelinky/Coding/belidis/eufy
- •Generate/edit the config once per operator:
Fillbash
eufy 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 thebashdocker 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
bash
eufy login # lists stations/cameras/IPs
- •Pull a still
Images land inbash
eufy snapshot driveway # uses alias eufy snapshot T8140XXXXXXXXXXXX -o ./tmp
paths.mediaunless-ooverrides it. - •Stream alarms into Tuya hub
Leave it running (LaunchAgent/systemd) sobash
eufy events watch --webhook http://<hub-ip>:5000/api/eufy/events
/api/eufy/eventsalways has fresh motion history. - •Guard / siren (needs ws bridge)
bash
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