Repository navigation
Tags: electrification-bus/python-sdk
Tags
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).
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)
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.
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).
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]>
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]>
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]>
PreviousNext