Releases: joyfulhouse/microair-bt
Releases · joyfulhouse/microair-bt
Release list
v0.5.0
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, plussuperlearn(the app's hidden long-press variant of
relearn) when the unit's firmware is 29 or newer. Selectingrelearnsends
the same relearn instruction as theset_startup_modeservice 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 itsconfirm: trueflag). - 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 aninterpretationattribute that reportsstart_delaywhen 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_modeservice acceptssuperlearn.
Changed
- The protocol whitelist grows from three to five command strings
(SCPT=HHandFMask=HH);SCPT=00andFMask=00remain 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 throughnormalanddefault_ramp, is set bysuperlearn, and is
cleared only by choosing plainrelearndeliberately. Bits 2-3 (the flag
switches) are preserved across every mode change.superlearnis 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 forrelearn/superlearn; a reminder fordefault_ramp
and for a disabled protection). - Client write API:
write_startup_mode,write_startup_flag,write_scpt,
write_fault_protection;WriteRejected/WriteStatereplace the
startup-mask-specific names.
v0.4.0
Added
- Live mode (opt-in, per device): holds one GATT connection open through a
single Bluetooth proxy and readsReadLiveon 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 andset_startup_modeis 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
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
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 aset_startup_modereadback, and at most hourly;
every other poll sends justReadLive. 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
Added
- Brand assets (
custom_components/microair_bt/brand/{icon,logo}.png+ hDPI
@2xvariants; sources underbrand/): 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: brandsworkaround.
v0.2.0
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_modeservice (normal/relearn/
default_ramp) with explicitconfirm, a running-compressor guard
(allow_runningoption), 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.
- Bluetooth auto-discovery on the
- 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.mdto 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) fromCLAUDE.mdand the wiki; the
wiki now documents the device, protocol and integration design generically. pyproject.tomlversion aligned with the integration manifest.