Home Assistant integration for Philips Avent SCD973/SCD923 baby monitors, providing local streaming, temperature monitoring, night light control, lullaby playback, and motion/sound alerts.
| Feature | Entity Type | Description |
|---|---|---|
| 📹 Live Video | Camera | 1080p H.264 stream via WebRTC→RTSP bridge |
| 🌡️ Temperature | Sensor | Room temperature from built-in sensor |
| 💡 Night Light | Switch + Number | On/off + brightness 1-100% |
| 🎵 Lullabies | Buttons + Number | Play/pause/stop/next/prev + volume |
| 🏃 Motion Alert | Switch | Motion detection on/off |
| 🔊 Sound Alert | Switch | Sound detection on/off |
| 🏃 Motion Detected | Binary Sensor | Fires when motion is detected (auto-clears after 30s) |
| 🔊 Sound Detected | Binary Sensor | Fires when sound is detected (auto-clears after 30s) |
| 🔒 Privacy Mode | Switch | Camera on/off |
Multiple monitors on one Tuya account are supported: the bridge serves each camera from the same port on a distinct RTSP path derived from the camera's display name.
The integration is model-agnostic (it talks to the Tuya cloud API generically), so other Philips Avent monitors may work even if they are not listed here. Status below reflects what users have actually confirmed:
| Model | Status |
|---|---|
| SCD973 / SCD923 | ✅ Fully supported (primary development hardware) |
| SCD951 | ✅ Working (video fix shipped in 2026.5.1) |
| SCD643/26 | ✅ Working |
| SCD971 | ✅ Working |
| SCD921 | |
| SCD953/26 | ❓ Requested, not yet confirmed (#42) |
Got a model that isn't listed, or one that misbehaves? A diagnostics dump is the fastest way to get it mapped.
Or manually:
- Open HACS → Integrations → Three dots menu → Custom repositories
- Add
https://github.com/thekoma/aventproxyas category Integration - Install "Philips Avent Baby Monitor"
- Restart Home Assistant
Or manually:
- Settings → Add-ons → Add-on Store → Three dots → Repositories
- Add
https://github.com/thekoma/aventproxy - Install "Philips Avent WebRTC Bridge (Addon)"
Two cards, one choice. The store shows the bridge twice:
| Card | Install it when |
|---|---|
| Philips Avent WebRTC Bridge (Addon) | You run a stable release of the integration |
| Philips Avent WebRTC Bridge Beta (Addon) | You run a beta or rc build of the integration |
| Philips Avent WebRTC Bridge Dev (Addon) | Someone asked you to test a specific fix off main. No release notes, no promises |
Keep both sides on the same version. The two halves talk over a config file whose contents grow with each release, so a stable bridge paired with an rc integration can miss a field it needs. As an example, bridges before 2026.7.0-rc2 do not read api_host, so an account outside Europe logs in and then fails to stream.
- Go to Settings → Integrations → Add Integration → Philips Avent Baby Monitor
- Enter your email and password (same as the Baby Monitor+ app), and check that the country matches the one your Avent account was created in (it is pre-filled from your Home Assistant country)
- Check your email for the 6-digit verification code
- Enter the code — done!
The integration discovers your cameras automatically and creates all entities. The bridge add-on starts streaming.
The country matters: a Philips/Tuya account lives in one regional server, and the session from one is not valid on another. Getting it wrong shows up as a login that fails right after you type the verification code.
Two-way audio is off by default. Asking the camera for it makes the monitor stop a playing lullaby and restart it from the beginning when you close the stream, so listening does not imply talking. If a client of yours really talks back through the RTSP stream, turn on Two-way audio (talkback) under Configure.
If you don't run the add-on but host the bridge yourself, in its own container or on another machine, tell the integration where to find it: Settings → Integrations → Philips Avent → Configure → Bridge host. It defaults to localhost, which is only correct when the bridge shares the network with Home Assistant. A wrong host makes the camera entity flap between Unavailable and Idle, because Home Assistant marks a camera unavailable while its stream cannot be opened.
The integration exposes binary_sensor.<camera>_sound_detected and binary_sensor.<camera>_motion_detected that turn on for ~30 seconds when the monitor reports an event. They are the trigger points for any automation.
Note: detection must be enabled on the device side via the 🔊 Sound Alert / 🏃 Motion Alert switches — otherwise the monitor never sends the event.
# Mobile notification when sound is detected
automation:
- alias: "Baby crying alert"
trigger:
- platform: state
entity_id: binary_sensor.baby_monitor_sound_detected
to: "on"
action:
- service: notify.mobile_app_my_phone
data:
title: "Sound detected in nursery"
message: "Baby may be awake"
# Pop up the camera feed on a dashboard when motion is detected
- alias: "Show baby cam on motion"
trigger:
- platform: state
entity_id: binary_sensor.baby_monitor_motion_detected
to: "on"
action:
- service: browser_mod.popup
data:
content:
type: picture-entity
entity: camera.baby_monitor
camera_view: liveThe integration uses the same Tuya Mobile SDK API as the official Philips Avent Baby Monitor+ app. Authentication uses the same password + MFA flow — your traffic is indistinguishable from the real app.
┌─────────────────────────────┐
│ Home Assistant │
│ │
│ ┌────────────────────────┐ │
│ │ Custom Integration │ │ Tuya Cloud
│ │ (login, sensors, │◄─┼──► a1.tuya**.com
│ │ lights, lullabies) │ │ (API calls, your
│ │ │ │ account's region)
│ └────────────────────────┘ │
│ │
│ ┌────────────────────────┐ │
│ │ Bridge Add-on │ │ Camera
│ │ (WebRTC → RTSP) │◄─┼──► via STUN/TURN
│ │ :38554 │ │ (1080p H.264)
│ └────────────────────────┘ │
│ │
│ ┌────────────────────────┐ │
│ │ Camera Entities │ │
│ │ rtsp://host:38554/N1 │ │
│ │ rtsp://host:38554/N2 │ │
│ │ ... │ │
│ └────────────────────────┘ │
└─────────────────────────────┘
| DPS | Code | Description | Values |
|---|---|---|---|
| 138 | bulb_switch |
Night light | on/off |
| 158 | floodlight_lightness |
Brightness | 1–100 |
| 201 | play_control |
Lullaby | play/pause/stop/next/prev |
| 207 | sensor_temperature |
Temperature | °C × 100 |
| 209 | play_volume |
Volume | 1–100 |
| 134 | motion_switch |
Motion alert | on/off |
| 139 | decibel_switch |
Sound alert | on/off |
| 237 | privacy_switch |
Privacy mode | 0/1 |
Full reference: examples/DPS_REFERENCE.md
This integration was built through reverse engineering of the Tuya Mobile SDK API. The complete methodology is documented in WHITEPAPER.md, including:
- API signing algorithm (HMAC-SHA256 with composite key)
- Password + MFA login flow
- MQTT credential derivation for WebRTC signaling
- 10 documented failures and dead ends
The signing algorithm is generic to all Tuya Thing SDK apps. See tools/apk-key-extractor/ for automated key extraction from any APK.
python3 -m venv .venv && source .venv/bin/activate
pip install pytest pycryptodome aiohttp voluptuous homeassistant
PYTHONPATH=. pytest tests/test_philips_avent/ -vcd avent-webrtc-bridge && go build -o avent-webrtc-bridge .
./avent-webrtc-bridge direct --helpFound a bug or an entity that behaves oddly? See docs/reporting-issues.md. It's a parent-friendly, three-click walkthrough for downloading the diagnostics dump that lets us triage your device without asking for packet captures.
The WebRTC bridge (avent-webrtc-bridge/) is forked from tuya-ipc-terminal by seydx, which itself uses WebRTC and codec utilities from go2rtc by AlexxIT. The bridge has since diverged significantly with Philips Avent-specific features including RTP timestamp rebasing, SPS/PPS injection, RTSP backchannel audio, and MQTT-based WebRTC signaling via the Tuya Mobile SDK.
Protocol research in WHITEPAPER.md sections 14 to 17, covering the WebRTC signaling frames, the native libThingP2PSDK.so analysis and the local-signaling path, was contributed by @leonardpitzu in #51 from work on the sibling aventlocal project.
MIT — See LICENSE
This project is not affiliated with, endorsed by, or connected to Koninklijke Philips N.V., Tuya Inc., or any of their subsidiaries. "Philips" and "AVENT" are registered trademarks of Koninklijke Philips N.V. The Philips AVENT logo and branding are used solely for identification purposes to help users recognize which device this integration supports. All API access uses the owner's own credentials and the same protocol as the official app.
