Skip to content

Releases: joyfulhouse/microair-bt

v0.5.0

Choose a tag to compare

@btli btli released this 21 Sep 18:47
89a11ef

Added

  • Feature parity with the OEM app's write path. The EasyStart app can write
    exactly three parameters outside its firmware-update family: the startup
    mask (SMask), the short-cycle protection timer (SCPT) and the
    fault-enable mask (FMask). All three are now controllable from Home
    Assistant, through one shared guarded write path (live-status running
    guard, fresh EEPROM preflight, single write, EEPROM readback verification,
    persistent notification).
  • Startup mode select entity (configuration): normal, relearn,
    default_ramp, plus superlearn (the app's hidden long-press variant of
    relearn) when the unit's firmware is 29 or newer. Selecting relearn sends
    the same relearn instruction as the set_startup_mode service and posts the
    OEM power-cycle / five-start procedure. Disabled by default until the
    write path is verified live: enabling the entity is the operator's explicit
    confirmation (the service keeps its confirm: true flag).
  • No power-up delay switch (startup-mask bit 2) and, disabled by default,
    the hidden Start delay mode switch (bit 3, which makes the SCPT byte a
    start delay in the app).
  • Short-cycle protection timer number entity (1-250 min, whole minutes),
    with an interpretation attribute that reports start_delay when the hidden
    mode is set.
  • Seven fault protection switches (unexpected current, power interruption,
    compressor stall, start hardware failed, open overload, overcurrent, wiring
    issue). They are disabled by default in the entity registry, standing in
    for the app's confirm dialog: enable them deliberately before use. The
    integration refuses to disable the last enabled protection.
  • Fault mask diagnostic sensor; the Startup mask and Fault mask
    sensors now expose their decoded bits as attributes.
  • set_startup_mode service accepts superlearn.

Changed

  • The protocol whitelist grows from three to five command strings
    (SCPT=HH and FMask=HH); SCPT=00 and FMask=00 remain banned at both
    the builder and the single GATT write site. The 19 firmware-update commands
    stay structurally impossible to send.
  • Startup-mode arithmetic follows the app's SuperLearn label bit 4: it
    persists through normal and default_ramp, is set by superlearn, and is
    cleared only by choosing plain relearn deliberately. Bits 2-3 (the flag
    switches) are preserved across every mode change. superlearn is refused
    for firmware below 29 at the client, so no surface can bypass the gate.
  • Write notifications carry guidance specific to what was stored (the relearn
    procedure only for relearn / superlearn; a reminder for default_ramp
    and for a disabled protection).
  • Client write API: write_startup_mode, write_startup_flag, write_scpt,
    write_fault_protection; WriteRejected / WriteState replace the
    startup-mask-specific names.

v0.4.0

Choose a tag to compare

@btli btli released this 16 Sep 22:05
4567a5a

Added

  • Live mode (opt-in, per device): holds one GATT connection open through a
    single Bluetooth proxy and reads ReadLive on a fast timer (default 5 s,
    minimum 2 s) for near-real-time compressor current, like the OEM app —
    instead of the default connect-per-poll. Two new options: Live mode
    (default off) and Live-mode read interval. Toggling either takes effect
    without a restart.
  • Live mode reconnects on its own if the link drops (gated on the unit still
    advertising) and refreshes the near-static EEPROM image at most hourly, so a
    dropped frame in the big transfer never blocks live current.

Changed

  • While live mode is active the single BLE central is held open, so the OEM app
    cannot connect and set_startup_mode is rejected up front with a message
    to turn Live mode (or the Polling switch) off first. The default
    connect-per-poll mode is unchanged and remains recommended for reliability on
    weak proxy links.

v0.3.0

Choose a tag to compare

@btli btli released this 16 Sep 04:02
80c965c

Added

  • Estimated compressor power sensor (sensor.<name>_power, W). The EasyStart
    reports compressor current but no line voltage, so power is estimated as
    current x nominal voltage x power factor. It covers the compressor only
    (not the air handler) and refreshes at the polling cadence; the assumptions
    are exposed as entity attributes (estimate, scope, nominal_voltage,
    power_factor). Use a dedicated meter for revenue-grade energy.
  • Two options to tune the estimate: nominal line voltage (default 240 V,
    accepted 90-300) and compressor power factor (default 0.9, accepted
    0-1). Editing them rescales the sensor without a new BLE read. To integrate
    energy (kWh), add a Riemann-sum helper on this sensor and feed the Energy
    dashboard.

v0.2.2

Choose a tag to compare

@btli btli released this 12 Sep 22:59
28777f1

Changed

  • Polls read live telemetry only. The ~1 KB EEPROM image (about 50
    notification frames at the proxy MTU of 23) is now read at the first
    successful poll, after a set_startup_mode readback, and at most hourly;
    every other poll sends just ReadLive. On a marginal ESPHome-proxy link a
    single dropped frame in the EEPROM transfer used to fail the whole poll and
    leave every entity unavailable (#6).
  • The live read runs first, so a failed EEPROM refresh keeps the cached image
    and the poll still succeeds. A failed bootstrap read gets one immediate retry
    on a fresh connection; until an image is read the model, firmware and startup
    mask sensors report unknown while telemetry flows.

Added

  • Debug logging of the reassembled reply size and frame count per command, and
    of the underlying error when config-flow setup cannot read the unit.

v0.2.1

Choose a tag to compare

@btli btli released this 12 Sep 17:59
d151527

Added

  • Brand assets (custom_components/microair_bt/brand/{icon,logo}.png + hDPI
    @2x variants; sources under brand/): the OEM EasyStart app launcher
    icon and the Micro-Air wordmark from microair.net, so HACS and Home
    Assistant render an icon and brand validation passes without the
    ignore: brands workaround.

v0.2.0

Choose a tag to compare

@btli btli released this 11 Sep 16:21

Added

  • Home Assistant integration (custom_components/microair_bt), one config
    entry per EasyStart:
    • Bluetooth auto-discovery on the EasyStart_* local name plus manual add by
      address; setup reads the EEPROM and only accepts the verified control model
      (398ULBT).
    • Sensors: status (enum), current, line frequency, last start peak,
      short-cycle delay, learned starts, total starts, total faults; diagnostic
      model, firmware and startup-mask sensors.
    • Binary sensors: Powered (advertising) and Fault.
    • Polling configuration switch that pauses all BLE reads and writes and
      persists across restarts, for OEM-app maintenance.
    • microair_bt.set_startup_mode service (normal / relearn /
      default_ramp) with explicit confirm, a running-compressor guard
      (allow_running option), EEPROM readback verification, a response payload
      and a persistent notification describing the outcome and the OEM
      power-cycle procedure.
    • Options flow: minimum polling interval (≥ 15 s) and allow_running.
  • Advertisement-gated coordinator: polls only while the unit is heard, never
    retains an idle GATT connection, single connection attempt per poll (never
    evicts the OEM app), exponential backoff to 5 minutes.
  • HA-level tests (config flow, coordinator, entities, service outcomes) against
    a fake peripheral.
  • HACS metadata (hacs.json), INSTALL.md, and GitHub Actions for HACS
    validation, hassfest, and lint/type/test gates.

Changed

  • Rewrote README.md to the standard JoyfulHouse integration layout (badges,
    features, install, entities, service, automations, troubleshooting) and this
    changelog to Keep a Changelog format.
  • Scrubbed environment-specific network details (Home Assistant hostnames,
    proxy names and addresses, token paths) from CLAUDE.md and the wiki; the
    wiki now documents the device, protocol and integration design generically.
  • pyproject.toml version aligned with the integration manifest.

v0.1.0

Choose a tag to compare

@btli btli released this 11 Sep 16:21
848ecd2

Protocol library, transaction-scoped BLE client and read-only probe. See CHANGELOG.md.