fp-soother-lib
A Python BLE library for the Fisher-Price Smart Connect Deluxe Soother (model DYW47).
The official app was discontinued in 2024, leaving many users with a device that could no longer be fully controlled. This library gives you direct BLE control from Python.
Usage
Standalone (scans/connects by address)
import asyncio
from fp_soother_lib import SootherClient
async def main():
async with SootherClient.connect("AA:BB:CC:DD:EE:FF", session_key=key) as soother:
if not soother.is_paired:
await soother.pair() # device must already be in pairing mode
await soother.set_nightlight(True)
print(soother.state)
asyncio.run(main())
If address is omitted, SootherClient.connect() scans for the first soother found.
Firmware versions
The client reads the device's firmware version when it connects and picks the matching crypto mode.
Firmware 9 and newer use a per-device session key from pair(), and the
device must be in its own pairing mode while you pair. Save session_key and
pass it back on later connects.
Firmware 8 and older use a static shared key and a different byte layout.
These devices need no pairing. The client sets the key on connect
(uses_shared_key is True), and pair() only syncs the device clock.
Tested against real firmware 8 and firmware 11 devices.
Host-managed discovery (e.g. Home Assistant)
A host that owns its own BLE scanner (Home Assistant's bluetooth integration
is the main example) should resolve BLEDevice objects itself rather than
letting this library run its own scan. Pass ble_device/ble_device_callback
to SootherClient instead of relying on address-based discovery:
from fp_soother_lib import SootherClient
client = SootherClient(address, session_key=key, ble_device_callback=my_resolver)
await client.open()
...
await client.close()
my_resolver is a zero-arg callable returning the host's current best
BLEDevice for address (e.g. Home Assistant's
bluetooth.async_ble_device_from_address), called fresh on every
(re)connect. See AGENTS.md in the repository root for the full rationale.
Legal / Disclaimer
This is an independent, open-source project not affiliated with Fisher-Price or Mattel. Reverse engineering for interoperability purposes is generally permitted under applicable law (e.g. EU Software Directive, US DMCA §1201(f)). This project does not redistribute any Fisher-Price code or assets. Use at your own risk. "Fisher-Price" and "Deluxe Soother" are trademarks of their respective owners.
Metadata
Release files for fp-soother-lib 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fp_soother_lib-1.1.0.tar.gz | 27.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fp_soother_lib-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 61.3 kB
Release files / fp_soother_lib-1.1.0.tar.gz
| Download URL | fp_soother_lib-1.1.0.tar.gz |
|---|---|
| Size | 27.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b5e5746d48e238d7363ea2617eb69e5b70709ca58b5dfb1b526620c72bec97bf
|
|
BLAKE2b-256 checksum How to use checksums |
5561fc95a442a674a2326f1c58b060594983512c107793ef5fee0a9f5d8eabec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logRelease files / fp_soother_lib-1.1.0-py3-none-any.whl
| Download URL | fp_soother_lib-1.1.0-py3-none-any.whl |
|---|---|
| Size | 33.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5e40ab2676fefd5e02851e2dc59bd32a2c7e5ee6f128990b6dc26ddb830c0180
|
|
BLAKE2b-256 checksum How to use checksums |
08a683a7736eeb80045e2d0f3192639cb264fa75b215373e17df5edcee590cf1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency log