Skip to content

Releases: csoscd/ha-solarvault

v2.3.0-beta.3

v2.3.0-beta.3 Pre-release
Pre-release

Choose a tag to compare

@csoscd csoscd released this 02 Aug 16:06

v2.3.0-beta.3 – Test-Audit-Abdeckung & Upstream-Sync

Neue Features (seit beta.1)

  • SOC-Grenzen-Fix: Min-/Max-Werte der SOC-Slider werden jetzt dynamisch aus den Gerätedaten gezogen (minSocChg/maxSocChg/minSocDischg/maxSocDischg). Charge-Limit hat korrekte Grenzen 50–100 %, Discharge-Limit 5–49 %.
  • %-Einheit auf beiden SOC-Schiebern (closes #16).
  • Upstream-Sync v2.0.0: FUNC_ENABLE_BITS-Dekodierung, Type-102/107-Handler, flache Body-Verarbeitung für unbekannte Typen, CT_SUBTYPE_MAP, COMM_MODE_*-Konstanten, plug_comm_mode()/plug_mqtt_control_allowed()-Hilfsfunktionen, should_create_plug_switch().
  • maxFeedGrid: Korrekte Wertebegrenzung und Darstellung.

Test-Suite

  • 173 Tests (war 137 in beta.1, 123 in 2.2.0), Coverage 65 % (Schwelle auf 50 % angehoben)
  • 4 neue Testmodule schließen alle 9 Audit-Lücken:
    • test_migration.py_migrate_unique_ids Pfade inkl. Konfliktauflösung
    • test_subdevice_entity.py – ENUM-Mapping, options_offset, Null-Guard, Int-Fix
    • test_subdevice_availability.py – Expansionsbatterie-Lösch-Timer-Bypass, ∞-Verfügbarkeit, Grace Period
    • test_switch_select_cache.py – optimistisches Cache-Patch-Pattern (v1.3.1)
  • Erweiterte bestehende Tests: p_home-Clamp (v2.0.1), gridSellPw=0 (v1.1.68), SN-Isolation (Ü1), Type-123/401-Reauth, Null-Filter Expansionsbatterie (v1.3.8)

Fixes

  • mypy has-type-Fehler in JackeryMainNumber behoben (fehlende Typ-Deklarationen für geerbte HA-Attribute).

CI

Alle drei Jobs grün: Lint (ruff + mypy + translation check), Tests (173 passed, 65 % coverage), HACS + Hassfest-Validierung.

v2.3.0-beta.2 – SOC % unit, bounds fix, plug helper refactor

Choose a tag to compare

@csoscd csoscd released this 31 Jul 20:10

v2.3.0-beta.2 – Pre-release for testing

Supersedes beta.1. Enable "Show beta versions" in HACS → Integrations → Jackery SolarVault → (gear icon) to install.


Fixed

  • SOC Charge Limit slider range corrected to 50–100 % (was 0–100 %; values below 50 % were silently ignored by device)
  • SOC Discharge Limit slider range corrected to 5–49 % (was 0–100 %; values above 49 % were silently ignored by device)
  • Smart plug switch creation filter tightened: only devType=6 creates switches (previous check was too broad)

Added

  • Percentage unit on SOC sliders: SOC Charge Limit, SOC Discharge Limit and SOC Force Charge now show the % unit in the HA UI (closes #16)
  • Dynamic SOC limit bounds: Slider min/max update automatically when device reports minSocChg/maxSocChg/minSocDischg/maxSocDischg

Refactored

  • Plug helper functions moved from switch.py to sensor.py as shared public exports

Test coverage: 87 tests, 53.88 % coverage

v2.3.0-beta.1 – SOC bounds fix, plug helper refactor

Choose a tag to compare

@csoscd csoscd released this 30 Jul 22:38

v2.3.0-beta.1 – Pre-release for testing

This pre-release is intended for HACS beta testing before promoting to a stable release.
Enable "Show beta versions" in HACS → Integrations → Jackery SolarVault → (gear icon) to install.


Fixed

  • SOC Charge Limit slider range corrected to 50–100 % (device enforces minimum 50 %;
    previously the slider allowed 0–100 %, but values below 50 % were silently ignored).
    Confirmed identical on SolarVault 3 and SolarVault 3 Pro Max.

  • SOC Discharge Limit slider range corrected to 5–49 % (device enforces maximum 49 %;
    previously the slider allowed 0–100 %, but values above 49 % were silently ignored).

  • Smart plug switch creation filter tightened: switches are now only created for
    devType=6 (smart plugs). The previous check (devType != 2) would incorrectly have
    created switches for CT devices or collectors if they appeared in the subdevice list.

Added

  • Dynamic SOC limit bounds: When the device reports minSocChg/maxSocChg/minSocDischg/
    maxSocDischg fields, the slider min/max values update automatically to reflect device-reported
    limits (adopted from upstream).

Refactored

  • Plug helper functions (plug_comm_mode, plug_mqtt_control_allowed, should_create_plug_switch,
    COMM_MODE_LABELS, COMM_MODE_LOCAL, COMM_MODE_CLOUD) moved from switch.py to sensor.py
    as shared public exports. switch.py now imports from sensor.py instead of maintaining
    private duplicates.

Test coverage: 87 tests, 53.72 % coverage

v2.2.0 – HTO910A Meter Collector support

Choose a tag to compare

@csoscd csoscd released this 27 Jul 21:24
cd62d12

What's new in v2.2.0

Added

  • Smart Meter D0 Reader support (Issue Jackery-Official#19): The Jackery Smart Meter D0 Reader (model HTO910A, devType=4, subType=7) reads the optical D0 infrared interface of German electricity meters (IEC 62056-21 / SML protocol). It sits magnetically on the IR port of the meter and reports the total import/export power that the meter measures — no per-phase breakdown.

    The device appears in a collectors array within type-101 messages — a field that was previously silently ignored by the integration. Now creates 5 HA sensors per device:

    Sensor MQTT field Description
    Grid Import Power inPw Total grid import power from meter (W)
    Grid Export Power outPw Total grid export power from meter (W)
    Communication State commState Online / Offline
    Communication Mode commMode LAN / Cloud (Relay)
    IP Address wip D0 Reader IP on the local network
  • Energy flow integration for D0 Reader: jackery_home_power now uses D0 Reader inPw/outPw as grid measurement source when the SmartMeter 3P (HTO907A) is not present.

  • Translations for EN / DE / FR.

Note: Type-23 cumulative kWh counters for the D0 Reader are not yet implemented — no type-23 sample was available. Will be added once a user provides one.

Full Changelog: v2.1.0...v2.2.0

v2.1.0 – Max Grid Feed-In Limit writable

Choose a tag to compare

@csoscd csoscd released this 27 Jul 21:20
372578d

What's new in v2.1.0

Added

  • Max Grid Feed-In Limit (maxFeedGrid): New writable Number entity (0–800 W, step 10 W). The system-level enforced grid feed-in cap can now be adjusted directly from HA. The device-reported value from type-106 remains visible as a separate read-back sensor. Confirmed writable via cmd=5 by community (Issue #11).

    Note: maxFeedGrid is distinct from maxOutPw — the latter is the user-selectable app limit (controlled via the existing "Max Feed-In Power" select entity with 800/1200/2500 W options).

Full Changelog: v2.0.3...v2.1.0

v2.0.3 – WLAN IP sensor, entity reference, translation fix

Choose a tag to compare

@csoscd csoscd released this 27 Jul 18:59
ca53495

What's new in v2.0.3

Added

  • WLAN IP sensor: Maps wip field from type-2 body — the WiFi IP address of the SolarVault main unit (distinct from the SmartMeter's IP address).
  • Entity Reference guide (docs/entity-reference.md): Full guide to all 100+ entities — dashboard recommendations, SmartMeter vs. SolarVault for grid sensors, entity ID naming convention, complete sensor tables by category, Energy Flow Card Plus YAML. Closes #9.

Fixed

  • German translation low_power: "Schwachstrom" → "Energiesparmodus" in translations/de.json.

Full Changelog: v2.0.2...v2.0.3

v2.0.2 – SmartMeter/battery fix, migration cleanup, 1200 W option

Choose a tag to compare

@csoscd csoscd released this 25 Jul 09:00
ea040f9

What's fixed in v2.0.2

SmartMeter and expansion battery entities missing after HA restart (Issue #7)

A regression in v2.0.0 caused SmartMeter 3P, BP2500, and smart plug entities to never be created after a Home Assistant restart or integration reload.

Root cause: The coordinator attribute config_entry_id was accidentally renamed to _config_entry_id (private) in v2.0.0, while the hasattr(self, "config_entry_id") guards in the sub-device discovery code still checked the old public name — always returning False. Fixed by restoring the public attribute.

Duplicate "unavailable" sensors after upgrade from v1.x

The v2.0.0 entity migration had two bugs that left orphaned entities showing "unavailable" or "unknown" alongside working duplicates:

  1. Main-device sensors with battery_* or ct_* in their name (e.g. Battery SoC, CT Status) were incorrectly skipped during migration.
  2. Switch and number entities were migrated to the wrong unique-ID format (…_main_swEps instead of …_switch_swEps).

v2.0.2 detects and removes these orphaned/wrongly-migrated entities on startup. No manual cleanup needed.

Upgrading from v1.x: After updating and restarting Home Assistant, duplicate "unavailable" entities are removed automatically. A browser hard-refresh (Ctrl+Shift+R) may be needed if the UI still shows stale entries.

What's new in v2.0.2

Max Feed-in Power: 1200 W option for SV3 Pro (Issue #5)

The Max Feed-in Power select entity now includes 1200 W (SV3 Pro) alongside 800 W and 2500 W (SV3 Pro Max). Previously, SV3 Pro users with 1200 W set in the app saw "unknown" in the select entity.


See CHANGELOG.md for full history.

v2.0.1

Choose a tag to compare

@csoscd csoscd released this 24 Jul 20:49
8ae0d4a

Fixed

  • jackery_home_power could show negative values: The base formula p_home = p_grid - p_ong can temporarily yield a negative result when the SmartMeter (type-101) and SolarVault (type-2) are sampled at different moments — e.g. when grid_sell momentarily exceeds ongrid_supply due to asynchronous sensor updates. House loads are physically never negative, so any negative result is a measurement artefact. Added max(0.0, p_home) clamp after all formula branches. Grid charging (inOngridPw > 0) is correctly handled by the formula itself and does not produce negative values.

v2.0.0 – Multi-Instance, Re-Auth, Device Registry, ENUM Sensors

Choose a tag to compare

@csoscd csoscd released this 23 Jul 19:26

What's new in v2.0.0

Multi-instance support

Multiple Jackery devices can now be integrated simultaneously. Each config entry is identified by its device serial number. Existing single-device installations are migrated automatically on first startup — entity IDs and HA history are preserved.

Re-authentication flow

If the device reports a token mismatch (MQTT type-123 / errorCode 401), Home Assistant now shows a persistent notification prompting you to re-enter the token — no need to remove and re-add the integration.

Device card: model and firmware version

The HA device card now shows the device model (DIY3 for SolarVault 3 Pro Max) and the current firmware version, extracted from incoming MQTT messages.

Human-readable ENUM status sensors

Device Status, OnGrid Status, CT Status, and Grid Meter Link now display human-readable labels (e.g. "Normal", "Connected") instead of raw integers. Translated into English, German, and French.

New sensor: Max Feed Grid Power

max_feed_grid_power (maxFeedGrid, from type-106) exposes the device-side feed-in limit for diagnostics. May differ from the writable maxOutPw setting.

Smart Plug commMode guard

MQTT switch commands to smart plugs are now blocked when the plug is in cloud-relay mode (commMode=2). Home Assistant shows a persistent notification; extra_state_attributes expose commMode, commMode_label, and mqtt_controllable for diagnostics and automations.

Bug fix: Auto Standby select state revert

Writing a new value via the Auto Standby select reverted to the old value on the next MQTT event (~10 s). Fixed by patching the coordinator cache after the write (v1.3.1 pattern).


See CHANGELOG.md for the full history.

Upgrade note: After updating via HACS, an HA restart is required (not just integration reload) to apply the entity unique ID migration and updated translation files.

v1.3.9 – Fix expansion battery sensors deleted every ~60 s

Choose a tag to compare

@csoscd csoscd released this 17 Jul 15:16

Fixed

Root cause: expansion battery entities gelöscht durch Lösch-Timer

_check_for_new_plugs hat in Step 1/2 einen 60-Sekunden-Lösch-Timer für jede bekannte SN gestartet, die in der aktuellen type-101-Nachricht fehlt. BP2500-Expansionsbatterien erscheinen ausschließlich in type-23-Nachrichten (~alle 10 Min) — niemals in type-101.

Folge: Jede eingehende type-101-Nachricht startete den 60-s-Timer für die Batterie-SN. Nach ~60 s wurde entity.async_remove(force_remove=True) aufgerufen → Entity komplett aus HA gelöscht → „Sensor nicht verfügbar". Die nächste type-23 erstellte die Entity neu, die nächste type-101 startete den Timer wieder — ein dauerhafter Erstell/Lösch-Kreislauf.

Fix: Expansion-Battery-SNs (in _expansion_battery_sns verfolgt) werden jetzt explizit aus beiden Schritten ausgeschlossen — dem Timer-Start (Step 1) und der Lösch-Ausführung (Step 2).

Zusätzlich (aus v1.3.8)

Null-Wert-Filter für den type-23-Cache: None-Werte aus dem Gerät überschreiben keine real gecachten Energiewerte mehr. Neu erstellte Entities werden mit dem gecachten Wert vorinitialisiert.

Update

HACS → Update auf v1.3.9 → Integration neu laden (Einstellungen → Geräte & Dienste → Jackery → ⋮ → Neu laden).