github samuelebistoletti/HomeAssistant-V2C-Cloud v1.4.0

3 hours ago

[1.4.0] - 2026-09-16

Stable release. Promotes the 1.4.0 line to general availability after the
public beta window (beta.1 2026-09-11 → beta.11 2026-09-16) closed with
no unresolved regressions. No code changes relative to 1.4.0-beta.11.

This is the cumulative 1.3.x1.4.0 change set, developed and validated
across the eleven pre-releases listed below. The integration gains
account-free local-only setup, resilience to a V2C Cloud outage or
authentication failure without losing LAN control, and a new diagnostic
sensor for which transport is actually carrying the data.

Breaking (auto-migrated): the config entry schema is upgraded from v2 to
v3 on first load. No user action is required.

Added

  • Local-only setup. The integration can be configured without a V2C
    account: enter the charger's IP address and the device id is read from the
    charger itself. Such an entry never calls the cloud; cloud-only controls are
    unavailable on it.
  • Per-charger manual IP override in the integration options, for the
    cases where the cloud can't currently supply — or supplies the wrong —
    address for a charger.
  • LAN entries keep working through a V2C Cloud outage or authentication
    failure.
    Polling and control continue over the local network, a repair
    notice is raised, and it clears itself automatically as soon as the cloud
    authenticates again — including after a Reconfigure or an HA restart, not
    just within the same running session. Cloud-only (4G) entries, which have
    no second transport, still require reauthentication.
  • Active transport diagnostic sensor per charger — Local network,
    V2C Cloud or Offline — exposing the address in use and its source
    (manual, cloud, cache, charger) as attributes. A charger whose LAN address
    changes after a DHCP renewal is found again automatically, without a
    manual IP.
  • Six per-phase measurement sensors: IntensityMeasure_L1/L2/L3 (A) and
    VoltageMeasure_L1/L2/L3 (V). LAN-only, so they report as unavailable in
    cloud-only mode.
  • days_of_week field on v2c_cloud.program_timer — digits 1-7 with
    1 = Monday (e.g. "123" = Mon+Tue+Wed), defaulting to every day.

Changed

  • Config entry schema v2 → v3, adding manual_ips and lan_only.
  • The connection type stored on the entry is the only thing that selects the
    transport. LAN entries keep their LAN polling interval regardless of cloud
    availability, and switching it in the integration options no longer needs
    a separate reload step — the entry's own update listener handles it.
  • Contracted power can now be set down to -5 kW (previously the slider
    stopped at 1 kW), for installations that use a negative value to reserve
    headroom for the rest of the house.
  • Controls that exist only in the V2C Cloud API — OCPP, the RFID reader,
    installation type, slave device, language, the reboot and firmware update
    buttons, and the cloud connectivity sensor — honestly report as
    unavailable while the cloud is unauthenticated, or on an entry set up
    without an account, instead of offering a command that would be silently
    dropped. Everything served over the local network keeps working.
  • A switch whose command fails falls back to the value the charger actually
    reports (or Unknown if there is none) rather than keeping an unconfirmed
    guess; overlapping commands are tracked individually so one failure can no
    longer discard the state a later command established.
  • The manual-IP options UX reflects the stored configuration end to end:
    the checkbox is ticked whenever addresses are set, each charger's form
    opens on the address in force, the options list every address currently
    in use, and clearing the box hands every override back to cloud discovery
    (except when switching to Cloud only, where it is kept for the return
    trip to Wi-Fi).
  • ChargeState follows the LAN enum (0/1/2/4/5/6, no code 3); cloud values
    are translated onto it during cloud→LAN synthesis.
  • DynamicPowerMode: 2 = minimum power mode, 3 = exclusive PV mode.
  • POST /device/timer sends exactly timeStart, timeEnd and daysOfWeek
    with timerId as a query parameter, and rejects malformed day strings.
  • IntensityMeasure_L1y is normalised onto the documented
    IntensityMeasure_L1.
  • Entities report Unavailable instead of Unknown when the reading cannot
    be produced by the active transport.
  • /device/logo_led is documented in the published cloud spec.
  • Dependencies: aiohttp >=3.14.3, aioresponses >=0.7.9, colorlog 6.12.0,
    ruff 0.16.6, pip >=26.2.1, and pytest-cov now pinned in
    requirements_test.txt. Actions: actions/setup-python v7, actions/stale
    v11.0.0, softprops/action-gh-release v3.0.3, home-assistant/actions/hassfest
    SHA refresh.
  • Dependabot additionally tracks the devcontainers and docker ecosystems.
  • .ruff.toml ignores CPY001.

Deprecated

  • active field of v2c_cloud.program_timer — accepted for compatibility
    but ignored. Use the Timer switch to enable or disable programmed timers.

Fixed

  • entry.data is read as a Mapping, not a dict. Home Assistant hands
    real config entries a MappingProxyType; an isinstance(entry.data, dict)
    guard was silently discarding manual IPs and cached pairings on every real
    instance while passing hundreds of tests built on dict test doubles.
  • A V2C Cloud authentication failure is detected on every refresh. It was
    previously possible for the pairings cache to mask an outage for up to an
    hour after a restart.
  • The Active Transport sensor's unique_id now carries the same v2c_ prefix
    every other entity uses; an existing installation is migrated onto it
    automatically so entity_id, history and automations survive the update.
  • Two account-setup UI bugs: the "With a V2C account" step showed the wrong
    title/description, and a local-connectivity error showed a raw translation
    key instead of a message.
  • async_shutdown is awaited on config-entry unload, so each local
    coordinator's scheduled refresh is cancelled.
  • Control errors distinguish a cloud-only entry from an unreachable charger
    and point at the manual-IP option.
  • A handful of manual-IP options-flow edge cases: opting in with no known
    charger now reports why nothing was saved, clearing the checkbox also
    clears stored addresses on a Cloud only (4G) entry, and the flow no longer
    writes anything (or reloads) until it actually completes.
  • A command the cloud refuses surfaces a readable error instead of a
    traceback, no longer opens the reauthentication dialog from a service
    call, and makes the integration re-check the connection immediately
    rather than waiting for the next scheduled refresh.

Security

  • pip-audit runs --strict with zero ignored advisories on both runtime and
    test dependencies.

Don't miss a new HomeAssistant-V2C-Cloud release

NewReleases is sending notifications on new releases.