Two-part integration for making flaky Eufy RTSP cameras usable in Apple Home through Scrypted.
It targets the failure pattern where Eufy answers RTSP OPTIONS but returns RTSP/1.0 404 Stream Not Found on DESCRIBE until the Eufy app or Home Assistant wakes the camera stream.
This repo can handle:
- Waking Eufy RTSP streams from Home Assistant.
- Probing whether the RTSP stream is published.
- Optional motion-triggered and keepalive stream refresh.
- A Scrypted camera provider that calls the HA wake webhook when Apple Home opens live view.
This repo does not replace:
eufy-security-ws/ the HA Eufy integration. HA still needs those entities and services to start/stop Eufy RTSP.- Scrypted HomeKit plugin. HKSV recording is implemented there, not in Home Assistant.
- Apple Home hub/iCloud+ requirements.
The practical architecture is:
Eufy camera/HomeBase
-> HA Eufy integration start/stop RTSP services
-> Eufy HKSV Wake custom integration
-> Scrypted Eufy HKSV Wake camera provider
-> Scrypted HomeKit plugin
-> Apple Home live view + HKSV
custom_components/eufy_hksv_wake/ Home Assistant custom integration
scrypted-eufy-hksv-wake/ Scrypted companion plugin
examples/ Reference snippets
HACS:
- Push this repository to GitHub.
- Home Assistant -> HACS -> Integrations -> Custom repositories.
- Add your repo URL.
- Category:
Integration. - Install
Eufy HKSV Wake. - Restart Home Assistant.
Manual:
cp -R custom_components/eufy_hksv_wake /config/custom_components/Restart Home Assistant.
Add one entry per camera:
Settings -> Devices & services -> Add integration -> Eufy HKSV Wake
Example:
Camera name: Garage
Eufy camera entity: camera.garage
RTSP URL used by Scrypted: rtsp://USERNAME:PASSWORD@10.0.10.200/live2
Optional motion sensor entity: binary_sensor.garage_motion_detected
Start RTSP service: eufy_security.start_rtsp_livestream
Stop RTSP service: eufy_security.stop_rtsp_livestream
Delay: 2
Refresh interval: 0
Probe timeout: 5
If RTSP credentials contain special characters, URL encode them:
@ -> %40
: -> %3A
# -> %23
After adding the entry, open the RTSP Stream Status sensor attributes and copy the webhook_path.
The Scrypted companion package is in:
scrypted-eufy-hksv-wake/
Build locally:
cd scrypted-eufy-hksv-wake
npm install
npm run buildFor development deployment to your Scrypted server, use Scrypted's normal plugin development flow:
npx scrypted login
npx scrypted-deployThen in Scrypted:
- Open the
Eufy HKSV Wakeplugin. - Add a camera.
- Set the exact Eufy RTSP URL.
- Set the full HA wake webhook URL:
http://HOME_ASSISTANT_IP:8123/api/webhook/eufy_hksv_wake_<id>
- Start with
Wake Delay Milliseconds=2500. - Enable Scrypted HomeKit on that created camera and pair it to Apple Home.
Use this Scrypted companion camera only for flaky cameras. Stable cameras can still use Scrypted's standard RTSP camera plugin directly.
Wake one camera:
action: eufy_hksv_wake.wake_stream
data:
camera_entity_id: camera.garageProbe one camera:
action: eufy_hksv_wake.probe_stream
data:
camera_entity_id: camera.garageRefresh all configured cameras:
action: eufy_hksv_wake.refresh_allFor wired cameras:
- Prefer Eufy continuous RTSP if available.
- Keep Scrypted prebuffer enabled only after the stream stays stable.
- Use keepalive only for cameras that still sleep.
For battery cameras:
- Avoid periodic keepalive unless battery drain is acceptable.
- Use motion wake first.
- Expect HKSV reliability to be lower than with continuous wired RTSP.
Local checks used during development:
python3 -m compileall -q custom_components/eufy_hksv_wake
cd scrypted-eufy-hksv-wake
npm run check
npm run build