Skip to content

Releases: idomp/owlet

v2026.10.1

Choose a tag to compare

@github-actions github-actions released this 12 Oct 19:34

Fix

  • No more gaps in the readings. Measured on a Dream Sock: the base station uploads vitals for about 45 seconds after APP_ACTIVE is written, then sets the flag back to 0 itself and stops, so the previous 60 s default left a gap of up to 30 s every minute. The integration now writes APP_ACTIVE again as soon as the cloud shows the base cleared it, and the activation interval (default now 30 s) is only a ceiling.

v2026.10.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 19:34

First release of idomp/owlet, a fork of lucasvollebergh/owlet 2026.9.1 that is read-only towards the base station and stricter about what it shows. Drop-in replacement: same domain and entity unique ids.

Breaking

  • Requires Home Assistant 2026.10 or newer; the test suite runs against 2026.10.1.
  • The base station switch is gone. The integration only ever writes APP_ACTIVE to the Owlet cloud (the "a client is watching" flag that makes the base station upload vitals); it can no longer switch the base station on or off, so an automation, a dashboard tap or a voice assistant can never stop the monitoring. The state is still available as the new Base station on binary sensor, with the same unique id, and a leftover switch entity is removed automatically.
  • Freshness rules rewritten. Every value is judged by the cloud's own timestamp on the reading, and a reading without a usable timestamp (missing, unreadable, without time zone or in the future) is never fresh. When the reading is not fresh every entity taken from it is unavailable, including the alerts, the battery and the charging and base station state, where earlier releases kept alerts and battery visible. Whether the sock is charging or the base station is off is only believed from a fresh reading, so an old reading can no longer hide stale data behind "charging". The Data stale sensor explains itself through its attributes, entities expire between polls when the reading ages out, and the Awake sensor is unknown instead of on when the sock reports no sleep state.

Feature

  • New Activation interval option (default 60 s, 10 to 600). APP_ACTIVE, the flag that tells the base station a client is watching, is written at this cadence instead of before every poll, which roughly halves the requests to the Owlet cloud. The property read happens first and no longer depends on the write succeeding; a failed write is logged and retried on the next poll.
  • New entities for properties the Dream Sock reports that earlier releases ignored: Discomfort alert, Low integrity reading, the four Preview priority alarms, Base monitoring status, Battery status and Last red alert (when the red alert summary last changed).
  • Dutch dashboard in dashboards/owlet_nl.yaml: a live view with trend graphs on the heart rate, O2 and skin temperature tiles, sock status and active Owlet alerts, and a trends view with the last 12 hours, sleep, daily statistics and battery.
  • Screenshots of the dashboard and step-by-step installation instructions in the README.

Fix

  • Diagnostics are built from an allowlist instead of a redaction list: the entry section holds only the region and options, raw properties include their value only for known-harmless properties (vitals, alerts, status, firmware versions) and are otherwise listed with type and timestamp alone, so a property Owlet adds later cannot leak identifiers.
  • The alert blueprint fires only when an alert goes from off to on; an alert that reappears after being unavailable (restart, stale data) no longer sends a notification. The dashboards' "No Owlet alerts active" card shows only while every alert is really off, not while alerts are unavailable.
  • Adding the integration now lists the account's socks while logging in, so an account without a supported sock is refused with a clear message instead of failing later at setup. Nothing is written to the base station from the login flow.
  • Accounts are identified by region and email (config entry version 2), so the same email can be set up in both the Europe and World regions; existing entries migrate automatically, and entries created by the jensdufour fork use the same identity and need no change. Reconfiguring into a region that is already set up for the email is refused. Entity unique ids are unchanged.
  • Rate limits and server errors are never mistaken for a bad login. A 429 or 5xx from the Owlet cloud or the login services (including Firebase's "too many attempts") delays the next poll, honouring Retry-After, instead of starting a reauthentication; consecutive failures back off exponentially with jitter up to five minutes. Only one token refresh runs at a time, so two socks polling together cannot invalidate each other's token. Refreshed tokens are stored even when the poll that refreshed them failed, and unreadable responses are a connection error rather than a crash. Device discovery no longer writes APP_ACTIVE.
  • One bad field no longer breaks the whole update: unreadable vitals, a missing or unreadable oem_sock_version, null or oddly typed values and unusual timestamp formats are handled per field. Values are decoded by type, a null alert is unknown instead of off, and sentinel readings (heart rate, oxygen or skin temperature of 0, ten minute average of 255) are unknown instead of being recorded as measurements. A sock whose first snapshot lacked the identifying properties is detected on a later poll instead of staying unidentified.