Skip to content

Tags: electrification-bus/python-sdk

Tags

v0.24.0

Toggle v0.24.0's commit message
ebus-sdk 0.24.0

v0.23.1

Toggle v0.23.1's commit message
ebus-sdk 0.23.1

Fixes the deferred-queue spin introduced by 0.23.0's id keying (#82),
a stale id resolver orphaning its device, and the python_type
disagreement check that raised mid-materialization.

v0.23.0

Toggle v0.23.0's commit message
ebus-sdk 0.23.0

Seven builder defects and gaps, batched into one bump.

Fixed: conditionally_settable inert (#72), a live model value never
reaching the wire (#77), remove() raising on a vanished group (#73),
deferred descendants surviving removal (#75), bookkeeping recorded after
materialization (#76).

Added: remove_capabilities() (#78).
Changed: bookkeeping keyed on the resolved device id (#74).

v0.22.0

Toggle v0.22.0's commit message
ebus-sdk 0.22.0

Root capabilities, extend(), and idempotent materialization.

- node_id callable (#64)
- DeviceTreeBuilder contract docs (#65)
- fix: the builder replaced properties in a model it does not own (#66)
- fix: a child could silently shadow an ancestor's or sibling's id (#67)
- DeviceTreeBuilder.add_root_capabilities() (#67)
- DeviceTreeBuilder.extend() (#68)

v0.21.0

Toggle v0.21.0's commit message
ebus-sdk 0.21.0

Declarative device trees and a configurable Homie domain.

- PropertySpec property-level parity (#58)
- DeviceSpec + DeviceTreeBuilder (#57)
- Device(homie_domain=...) (#61)

v0.20.1

Toggle v0.20.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: two thread-safety fixes (0.20.1) - property publish lock, per-th…

…read bulk context (#56)

Two thread-safety fixes, both in the model layer.

Property (#50 follow-up): compute-payload/publish/memoize is now one atomic unit
per property under a reentrant lock. Interleaved with a reconnect refresh, the
0.20.0 memo could record an older payload than the one last written, after which
the publish-on-change gate suppressed the correcting publish and the broker kept a
wrong retained value.

GroupedPropertyDict (#55): the active bulk-update context is now thread-local.
Two threads entering bulk contexts on one dict displaced each other and the first
to exit ended bulk mode for both, fragmenting the survivor batch into individual
events (extra $description republishes and $state flapping downstream).

Also: CI jobs that run code gain timeout-minutes, so a lock regression fails
instead of running to GitHub 6-hour default.

v0.20.0

Toggle v0.20.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: 0.20.0 (publish-on-change gate + declare_lost teardown) (#54)

Bumps __version__ to 0.20.0 (single source of truth), promotes Unreleased to
[0.20.0], and adds the compare/tag link definitions.

Two API-visible changes: property values are no longer republished when the wire
payload is unchanged (#50), and declare_lost() / stop(announce=False) close the
teardown gap (#46). Plus four stale doc claims corrected (#53).

v0.19.0

Toggle v0.19.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: 0.19.0 (tree-complete affordance + four follow-up fixes) (#45)

MINOR rather than PATCH: adds public Controller API.

Added
- Controller.is_tree_complete(root_id) and set_on_tree_ready_callback(), the
  reconciling answer to "has the declared tree fully described itself?" (#37)

Changed
- refresh_tree() is explicitly best-effort; one raising device no longer takes
  out the whole tree's reconnect (#36)
- ruff rule selection declared explicitly, CI pin moved to 0.16.1 (#39)
- remove_node()/delete_node() cross-reference each other (#38)

Fixed
- Node.delete_property() republishes $description, as add_property() always
  has (#35)

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>

v0.18.1

Toggle v0.18.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: 0.18.1 (refresh_tree $state ordering + consumer contract gui…

…de) (#34)

Pure-fix release. No API change, no ebus-mqtt-client floor bump.

- fix: Device.refresh_tree() now publishes a device's own $state after its
  descendants rather than before, so a device no longer announces ready while
  the children its $description names have published nothing (#31, #32).
  Thanks to @cayossarian.
- docs: doc/consuming-a-homie-tree.md, the consumer-side contract guide (#33).

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>

v0.18.0

Toggle v0.18.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: 0.18.0 (soc capability fix + ebus-mqtt-client 0.4.0 floor) (#30

)

* deps: require ebus-mqtt-client 0.4.0 and document the loop-native transport

The bring-your-own-transport seam answers WHICH connection a producer
publishes through, but paho's network loop still has to be pumped somewhere,
and by default that is a background thread: the exact thing the seam's
motivating host forbids. README.md named that constraint ("a host like Home
Assistant ... forbids background threads") without being able to point at an
answer.

ebus-mqtt-client 0.4.0 adds one: MqttClient.asyncio_driver() pumps the network
loop on the caller's asyncio loop (paho socket hooks plus a periodic
loop_misc) instead of paho's thread, mutually exclusive with start() per
client. Document it in the bring-your-own-transport section with a worked
snippet, and raise the floor accordingly.

The SDK does not import the driver and needs nothing from 0.4.0 at runtime:
the full suite passes unchanged against it (verified in an isolated venv). The
floor rises because a consumer following the documented guidance needs it
present, not because the SDK's own code does. The driver module loads lazily
and imports only the standard library plus paho, so a thread-mode consumer or
a constrained build never loads it.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>

* release: 0.18.0 (soc capability fix + ebus-mqtt-client 0.4.0 floor)

Promote the Unreleased entries under 0.18.0 and bump __version__.

Minor rather than patch: the release changes what the HA discovery bridge puts
on the wire for existing publishers (soc/soe metadata, four meter registers
gaining a state_class), removes the invented `battery` customizer key rather
than aliasing it, and raises the ebus-mqtt-client floor to 0.4.0.

Also tidy the changelog's link references, which had drifted across six
releases: 0.12.0 through 0.17.0 had no reference at all (so their headings
rendered as literal brackets) and [Unreleased] still compared from v0.11.0.
All 22 version headings now resolve, every GitHub reference points at a tag
that exists, and the 0.1.2 reference is repointed at PyPI: it predates this
repo's tagging convention (earliest tag v0.1.4), so the tag it named has never
existed, and the section's advice to read `git log v0.1.2` was unfollowable.
Two missing blank lines before headings are fixed, so markdownlint is clean.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>

---------

Co-authored-by: Claude Opus 5 (1M context) <[email protected]>