Releases: csoscd/ha-solarvault
Release list
v2.3.0-beta.3
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_idsPfade inkl. Konfliktauflösungtest_subdevice_entity.py– ENUM-Mapping, options_offset, Null-Guard, Int-Fixtest_subdevice_availability.py– Expansionsbatterie-Lösch-Timer-Bypass, ∞-Verfügbarkeit, Grace Periodtest_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 inJackeryMainNumberbehoben (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
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.pytosensor.pyas shared public exports
Test coverage: 87 tests, 53.88 % coverage
v2.3.0-beta.1 – SOC bounds fix, plug helper refactor
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/
maxSocDischgfields, 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 fromswitch.pytosensor.py
as shared public exports.switch.pynow imports fromsensor.pyinstead of maintaining
private duplicates.
Test coverage: 87 tests, 53.72 % coverage
v2.2.0 – HTO910A Meter Collector support
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
collectorsarray 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 inPwTotal grid import power from meter (W) Grid Export Power outPwTotal grid export power from meter (W) Communication State commStateOnline / Offline Communication Mode commModeLAN / Cloud (Relay) IP Address wipD0 Reader IP on the local network -
Energy flow integration for D0 Reader:
jackery_home_powernow uses D0 ReaderinPw/outPwas 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
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:
maxFeedGridis distinct frommaxOutPw— 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
What's new in v2.0.3
Added
- WLAN IP sensor: Maps
wipfield 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" intranslations/de.json.
Full Changelog: v2.0.2...v2.0.3
v2.0.2 – SmartMeter/battery fix, migration cleanup, 1200 W option
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:
- Main-device sensors with
battery_*orct_*in their name (e.g.Battery SoC,CT Status) were incorrectly skipped during migration. - Switch and number entities were migrated to the wrong unique-ID format (
…_main_swEpsinstead 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
Fixed
jackery_home_powercould show negative values: The base formulap_home = p_grid - p_ongcan temporarily yield a negative result when the SmartMeter (type-101) and SolarVault (type-2) are sampled at different moments — e.g. whengrid_sellmomentarily exceedsongrid_supplydue to asynchronous sensor updates. House loads are physically never negative, so any negative result is a measurement artefact. Addedmax(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
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
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).