Skip to content

Humidity Intelligence v2.1.2 — Home Assistant 2026.11 Harmonization

Latest

Choose a tag to compare

@senyo888 senyo888 released this 08 Nov 21:52
7b578f5

Humidity Intelligence v2.1.2 — Home Assistant 2026.11 Harmonization

v2.1.2 — Home Assistant 2026.11 Harmonization

Stable source combines the reviewed v2.1.2-beta.1 implementation with a generated-card correction found during installation validation.
At the pre-publication verification checkpoint, published Stable was v2.1.1.
This record keeps source preparation, instance validation and publication separate.

Marketplace installation

HI now supplies the named humidity_intelligence.zip release asset instead of
requiring the full repository archive. This avoids the oversized download
reported in #145.
On Home Assistant 2026.11+, use Settings → Marketplace; earlier supported
versions retain HACS. The minimum Home Assistant version remains 2026.5.1.

The update footer recognizes Marketplace and legacy HACS through the registered
HI repository identity. Missing or ambiguous provider evidence remains unverified.
Downloaded versions are separate from loaded code and saved-card compatibility.
Optional dashboard cards never become backend dependencies. Setup and Dashboard
add-ons guidance now names Marketplace on Home Assistant 2026.11 or later, with
HACS retained for earlier supported versions.

Thanks to our issue reporters

Thank you to @Slaybcn for reporting the Marketplace
installation failure in #145
and sharing the error logs, and to @Thorsten1982
for confirming the same problem. Your reports helped identify the release-packaging
failure and shape the installation fix in v2.1.2.

Consistent air-quality evidence

VOC is normalized to ppb, CO and CO₂ to ppm, and PM2.5 to µg/m³ before control,
aggregation and Stability evaluation. Unsupported units and invalid values are
excluded and exposed in diagnostics. HI does not rewrite sensor sources,
thresholds or historical records; review those against the canonical units.
Configured CO sources with missing or unsupported units now raise an entry-owned
Home Assistant Repairs warning. Correct the actual source unit to ppm or ppb;
HI never guesses units or changes outputs to resolve the warning.

CO emergency remains the highest-priority lane. Its latch clears only after every
configured source supplies valid readings below the clear threshold throughout a
fresh, continuous two-minute hold. Missing or invalid evidence resets that hold.
The existing thresholds and lane priority remain unchanged.
The reason panel distinguishes current high readings from incomplete clearance
evidence, the continuous hold and readings that have not met the clear threshold.

Configuration and dashboard continuity

Conditional gate forms preserve hidden settings and explicitly saved supplied-slope
sources retain their identities. These corrections are preserved from the tested beta. Calculated kitchen
slopes also retain an unambiguous separately configured source; a source assigned
to another room cannot be borrowed, and supplied slopes retain strict identity.
The PR #147 follow-up also drains active evaluations before successful unload,
retains staged gate values when returning to setup and rejects unmatched residual
slope pairs in multi-source configurations.
Selecting new or different presence entities now requires an explicit state mapping in setup and
Options, while unchanged selections retain their mapping. Failed Options reloads
report incomplete application without exporting cards or announcing UI success.

Interrupted engine-owned visual flashes now attempt to restore the captured light state before
releasing their locks, including during unload. Repeated cancellation waits for
owned cleanup. Retiring visual workers no longer block control evaluation or CO
ventilation. A ten-second deadline stops further restoration submissions; an accepted
device call is drained before unlocking, so cleanup can take longer.
Failures leave restoration explicitly unconfirmed. Restoration omits a captured
null light effect so native service validation does
not reject the entire restoration request. Valid effect names remain preserved.
Engine-owned flash, power and
restoration calls stop at admission when Manual is observed; accepted device commands
cannot be recalled. Manual handover permanently revokes that worker's remaining
writes; turning Manual off allows fresh workers without reviving old snapshots.
Revoked workers leave their active slots immediately, so a continuing alert can
start a fresh worker without waiting for the old repeat interval. Shared light
locks still prevent overlap with accepted commands that are finishing.
The optional power entity is not restored by this correction.

Public admin flash calls now remain owned across loaded HI entries. Unloading the
last entry closes admission and drains those calls before removing the integration;
unloading one of several entries preserves the shared services. Runtime drainage
has a 30-second unload wait. A stalled handler reports failed unload before platform
teardown while retaining cleanup tasks, entry data and light locks. Late cleanup
does not reopen the entry; failed platform teardown retains stopped runtime custody.
Resolve the reported service fault and restart Home
Assistant; a failed unload cannot be recovered by ordinary reload. Platform
teardown and forced HA shutdown remain separate boundaries. See
unload behavior and recovery.

The latest CodeRabbit follow-up also prevents replacement setup from failing
just because another entry is still closing. Partial setup rollback retains
forwarding until it settles and removes only platforms initialized by that
attempt; genuine cleanup failures remain blocked and include a traceback in the
log. Light restoration selects one captured color descriptor, uses Kelvin for
color temperature and skips unknown or unavailable original states. Native
timeout tests explicitly check that restoration still follows a late device call.

The next review adds prompt rollback when a platform fails while a sibling is
still starting, and platform-specific failure logs even when another setup remains
stalled. Cancelled forwarding no longer skips runtime cleanup; HI retains failed
custody when Home Assistant may still have a shielded setup body running. White-mode
lights now restore white mode explicitly using their captured brightness after an
RGB alert flash.

Generated cards now remove references to optional air-quality and output sources
that have not been configured, including references inside button-card JavaScript.
An unrelated entity with an old placeholder name can no longer influence these
cards. Configured sources remain visible to validation when missing, unknown or
unavailable; no dummy helpers or relaxed checks are used.

Both V2 layouts advance to revision 16, superseding revisions 1–15, with
stamp schema 1 and generator contract 1 unchanged. The templates and gallery
YAML are unchanged; the generator correction changes exported cards. This stable
transition therefore includes changed component code and requires new exports.

Updating and rollback

  1. Keep the previous complete package, configuration and compatible saved cards.
  2. Install the complete release package and fully restart Home Assistant. An
    integration reload alone does not prove that the new package loaded.
  3. From v2.1.2-beta.1, v2.1.1 or earlier: run
    humidity_intelligence.refresh_ui, export the V2 layouts through view_cards
    or dump_cards, and replace each complete saved Manual-card YAML. Revision-14
    beta cards also need replacement; installing HI does not replace pasted cards.
  4. Check that both V2 layouts show revision 16 in the generated stamp and live
    Diagnostics.
  5. Verify loaded identity, diagnostics and mapped inputs independently of the
    package manager's version report.

Restart clears in-memory Stability history. No configuration-entry or entity-ID
migration is required. Ambiguous legacy supplied-slope mappings need explicit
correction in Options. See compatibility and migration.

Rollback restores the previous complete package, performs a restart and restores
matching saved cards. Keep backup directories outside custom_components.
Older release tags retain their original delivery limitations; see
exact-tag recovery.

Validation and publication status

The four PR #147 corrections change component bytes beyond cc709769.
The corrected d6174038 package completed its own Lab and Stable-instance tests
on 8 November 2026. Earlier results below retain their original package scope.
Both V2 layouts remain compatible at revision 16/schema 1/generator 1: these
corrections change backend reasons and configuration/lifecycle handling, not card
layout, generated stamps or their rendering contract.

The subsequent PR #148 flash-restoration correction changes component bytes again.
Its cancellation, Manual-handover, CO dispatch during retiring cleanup, executor
ownership and cleanup failure boundaries have dedicated offline regression coverage.
The lifecycle follow-up adds public-service/last-entry ownership, bounded failed
unload, concurrent setup/unload and native HA executor regressions.
The lifecycle package 8cdd3ae subsequently completed its own fresh native Lab
setup and manual Stable-instance acceptance on 8 November 2026. These live checks
cover setup, startup, diagnostics, exports and the saved UI. Stalled unload,
Manual pulses and executor cancellation remain native regression-test evidence;
no live fault injection or physical-light restoration is claimed.
The d6174038 results retain their earlier package scope.

The subsequent five-finding correction, four-finding CodeRabbit follow-up and
three corrections for reload reporting, presence remapping and null light effects
change component bytes again. The corrected package 9f52a22 completed its own
Stable-instance acceptance on 8 November 2026. Setup/reload failure,
partial-platform rollback, cancellation, cleanup logging and light-restoration
failure boundaries retain native offline coverage; no live fault injection is
claimed. The recorded 8cdd3ae Lab pass remains bound to that earlier package;
no new Lab or Marketplace installation result is claimed for 9f52a22.

CodeRabbit also identified inherited presence-gate wording that needs clarification:
an explicitly empty Present states selection applies no presence restriction.
That behavior predates these corrections and remains unchanged. The accepted
Stable configuration uses a nonempty mapping. The wording follow-up remains open;
changing the empty-selection control policy requires a separate maintainer decision.

The changed generator passes regression checks for absent optional mappings,
legacy-name collisions, mapped missing/unknown/unavailable inputs, JavaScript
execution and both V2 layouts. The unchanged release checker remains authoritative.
The earlier revision-16 package 0d99f598 passed the minimal native-instance and
Stable-instance checks below on 7 November 2026. The subsequent review adds CO
unit Repairs and corrects calculated kitchen-slope lookup, changing component
bytes while preserving layout revision 16/schema 1/generator 1. Native offline
checks pass on HA 2026.5.1, 2026.10.1 and 2026.11.0. The revised package
cc709769, including Marketplace setup guidance, has now completed its own
Stable-instance acceptance: 13 passes, 3 explained warnings and no failures.
The earlier results retain their original package scope.
Existing README approval,
the corrected website approval and the approved personal note are recorded
separately. They do not replace the required human GitHub review, promotion,
tag and release checks.

Validation route Recorded result
Revision-16 source and generated-card regressions Passed, including configured remaps and legacy-name collisions
Earlier 0d99f598 revision-16 package, fresh minimal HA 2026.10.1 instance Passed: 12 passes, 3 explained warnings, 0 failures and 1 informational result; all 78 files matched
Earlier 0d99f598 revision-16 package, Stable HA 2026.11.0 Passed: 13 passes, 3 explained warnings, 0 failures; all 78 files matched, five exports parsed and both V2 layouts verified at revision 16
Earlier candidate 2e2792ad, manual Stable-instance upgrade Passed on HA 2026.11.0; 13 passes, 3 explained input/history warnings, no failures; revision 14
Published beta, native Marketplace fresh install and upgrade Passed; upgrade baseline was manually installed v2.1.1
Legacy HACS 2.0.5, HA 2026.10.1: published beta fresh install Installer passed; all 78 files matched the published asset
Legacy HACS replacement over manually loaded v2.1.1 Installer passed; configuration and 36 entity identities preserved. HACS re-download, not a managed-baseline update notification test
Earlier candidate on the isolated legacy instance Manual ZIP bridge loaded 2.1.2; configuration and identities preserved; revision 14
CO Repairs and calculated-slope follow-up, native offline checks Passed on HA 2026.5.1, 2026.10.1 and 2026.11.0
Earlier cc709769 package, Stable HA 2026.11.0 Passed: all 79 files matched; 13 passes, 3 explained warnings, 0 failures; five exports and both saved V2 cards verified at revision 16
PR #147 corrections, automated source checks Passed: runtime/generated-UI regressions, setup/options checks on HA 2026.5.1, 2026.10.1 and 2026.11.0, reason renderers, packaging and version/UI governance; no live instance involved
PR #147 corrected package, fresh isolated HA 2026.10.1 fixture on the Lab host Passed: 13-step native setup including staged-value return, all 79 files matched, five exports validated, 12 passes, 3 explained warnings, 0 failures and 1 informational result; active Lab and TI preserved
PR #147 corrected d6174038 package, Stable HA 2026.11.0 Passed after one recorded Core restart: all 79 files matched, 13 passes, 3 explained warnings, 0 failures; five exports and both existing revision-16 layouts verified
PR #148 lifecycle package 8cdd3ae, fresh isolated HA 2026.10.1 fixture on the Lab host Passed: 13-step native setup, all 80 files matched, five exports validated, 12 passes, 3 explained warnings, 0 failures and 1 informational result; active Lab and TI preserved
PR #148 lifecycle package 8cdd3ae, Stable HA 2026.11.0 Passed after one recorded Core restart: all 80 files matched, 13 passes, 3 explained warnings, 0 failures; five exports and both existing revision-16 layouts verified
PR #149 three-fix package 9f52a22, native offline checks Passed: 425 runtime/config/UI tests; HA 2026.5.1, 2026.10.1 and 2026.11.0 each passed 61 tests plus 34 subtests; independent source reviews passed
PR #149 three-fix package 9f52a22, Stable HA 2026.11.0 Passed after one recorded Core restart: all 80 files matched, 13 passes, 3 explained warnings, 0 failures; five exports and both saved revision-16 layouts verified; protected configuration and dashboards unchanged
Final stable tag and draft release asset Verified before publication on 8 November 2026: v2.1.2 resolves to main 7b578f5; attached humidity_intelligence.zip downloaded and verified against that exact commit and tag. All 80 files and the SHA-256 match the accepted package below
Published stable, Marketplace discovery and fresh install/upgrade Post-publication verification pending; beta results do not establish this route

A note from Senyo

My focus for v2.1.2 is Home Assistant 2026.11 Harmonization: smoother installation, clearer update information and more reliable generated cards, while keeping the Humidity Intelligence experience familiar.

Thank you to Slaybcn and Thorsten1982 for raising the installation issue and helping me understand it. Reports like yours help me improve HI for everyone.