Skip to content

2.9.6

Choose a tag to compare

@acdcnow acdcnow released this 21 Sep 22:59
· 2 commits to master since this release

2.9.6 — setup failed, services deadlocked

Fixed

  • Setup never completed: no entities were created. async_register_services stored a dict
    where a set was expected and raised
    AttributeError: 'dict' object has no attribute 'add' on every start. Home Assistant logged
    Error setting up entry Pontos for pontos and never reached the platforms, so the entry had no
    entities at all. This stayed hidden because the config flow could not create an entry before 2.9.4.
  • Every service call deadlocked. The service handler called coordinator.async_refresh() while
    holding the command lock — the same lock the poller uses, and an asyncio.Lock is not reentrant.
    The command waited for itself forever and kept the lock, so polling stopped as well. The refresh now
    happens after the lock is released, and a command waits at most 30 s for a running poll before it is
    reported as device is still busy.
  • Booleans were sent as True/False instead of the true/false the device expects, e.g.
    set/pa1/True, set/sld/True. They are now formatted correctly.

Added

  • testing/offline_smoke.py — runs the real setup path without Home Assistant (stubbed imports,
    the simulated payloads): coordinator refresh, device registration, service registration, every
    platform, all entity properties, every service of a device type with the URL it builds, and unload,
    for all five device types.

    python3 testing/offline_smoke.py
    

    All three bugs above were found by it, not by a linter. Current result: 53 entities / 23 services for
    the Pontos Base, 54 entities for the Trio, 66 for the SafeTech+, 45 for the old SafeTech+ firmware
    and 51 for the NeoSoft, each with a clean unload.

Verified

  • offline_smoke.py passes for every device type; the options form still receives all 14 stored
    values; all device URL lists and all service templates format.
  • Endpoint names and values were checked against upstream's hardware-tested configurations and the
    documented command table (set/ab/false opens, set/ab/true closes, set/dex, set/ala/255,
    set/slp/{days}, set/sld/true, set/rmo/{mode}, set/buz/true).
  • Still no Home Assistant runtime on this machine (2026.9 needs Python >= 3.14), so this is offline
    verification of the real code paths, not an end-to-end test with a device.