Skip to main content

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.

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)

Source distribution for fp-soother-lib 1.1.0
File Size Uploaded
fp_soother_lib-1.1.0.tar.gz 27.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fp-soother-lib 1.1.0
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page