Skip to content

Releases: dale-sharp/sa-fuel-homeassistant

v1.1.9 - 2026-07-22

Choose a tag to compare

@dale-sharp dale-sharp released this 22 Jul 11:53
ea11bd9

[1.1.9] - 2026-07-22

Changed

  • Migrated the toolchain (devcontainer, ruff, ty, requires-python) from Python
    3.13 to 3.14, and removed requires-python's upper bound entirely. Home Assistant
    core dropped Python 3.13 support in its recent releases, which had silently frozen
    this repo's homeassistant/pytest-homeassistant-custom-component/aiohttp
    Dependabot updates for roughly 5 months — no update PR for that group had been
    possible since the version cap made every newer release mathematically
    unresolvable. Matches the devcontainer/requires-python-only precedent set by #25.
  • ruff format now emits Python 3.14's PEP 758 unparenthesized multi-exception
    except syntax (e.g. except ValueError, TypeError:), applied automatically to
    api.py and config_flow.py by the target-version = "py314" bump. Verified this
    syntax is valid and correctly behaves as expected under Python 3.14.6 before
    accepting the change — it's new syntax added by PEP 758, not the removed Python 2
    form it superficially resembles.

[1.1.8] - 2026-07-22

Fixed

  • Fixed #43: config entry uniqueness detection for the SAFPIS subscriber token is now
    case-insensitive. Re-entering the same token with different letter casing is now
    correctly caught as a duplicate (during initial setup) or the same account (during
    reconfigure), instead of silently creating a redundant second config entry. Found by
    the adversarial Quality Scale re-review in #40.

[1.1.7] - 2026-07-22

Added

  • Fixed #31: a Home Assistant repair issue is now raised after 3 consecutive
    SAFPIS API fetch failures, and automatically cleared on the next successful
    update. The issue is scoped per config entry (supports multiple SAFPIS
    accounts) and names the affected entry in its description. Authentication
    failures are excluded — those already trigger Home Assistant's own reauth
    flow.

[1.1.6] - 2026-07-22

Changed

  • Split coordinator.py into api.py (data models SiteDetail/SitePrice/SAFuelData
    and the SAFuelAPIClient HTTP client) and a trimmed coordinator.py
    (SAFuelDataCoordinator only), matching free-games-homeassistant's own module
    boundary. No behavior change — pure internal reorganization.

[1.1.5] - 2026-07-22

Fixed

  • Fixed #25: a Linux-only test teardown TypeError in the DNS-resolver mock, caused by
    native Windows dev silently testing against a ~1-year-stale homeassistant release (a
    Python-3.13.2 resolution-fork threshold kept Windows on 2025.4.4 while CI/devcontainer
    already tracked current). Root-caused by dropping native-Windows dev/test support
    entirely — the devcontainer is now the only supported path, matching the same decision
    already made in the sibling free-games-homeassistant repo.

Changed

  • Removed the pymicro-vad/pyspeex-noise Windows-only dependency override and narrowed
    requires-python to >=3.13.2,<3.14 (matching the devcontainer's actual Python version);
    uv.lock now resolves a single, unforked homeassistant version everywhere.
  • Simplified tests/conftest.py's event-loop/DNS-resolver fixtures — removed all
    Windows-specific branching, no longer needed.

v1.1.4 - 2026-06-27

Choose a tag to compare

@dale-sharp dale-sharp released this 26 Jun 18:46
f91d6ae

[1.1.4] - 2026-06-27

Added

  • Comprehensive pytest test suite covering data models, coordinator, config flow, options
    flow, sensors, and diagnostics (58 tests). Error-path tests assert expected log messages
    via caplog; test output is kept clean by suppressing expected log noise from the HA
    loader and integration debug messages.
  • DEVICE_IDENTIFIER_PREFIX constant in const.py to eliminate duplicated "sa_fuel_"
    string across entity.py, __init__.py, and coordinator.py.
  • Shared schema-builder functions (_cities_schema, _suburbs_schema, _sites_schema,
    _fuel_types_schema) in config_flow.py to remove duplication between config and
    options flows.

Fixed

  • Replaced assert self._ref is not None guards in config and options flow step methods
    with async_abort(reason="unknown"), which is safe under Python's optimised mode (-O).
  • Removed unused asyncio.gather wrapper in async_step_init of the options flow.
  • Removed _KNOWN_FUEL_NAMES dict from config_flow.py; fuel name fallback now uses
    f"Fuel {fid}" sourced from the API response.

v1.1.3 - 2026-06-24

Choose a tag to compare

@dale-sharp dale-sharp released this 26 Jun 00:49
628797f

[1.1.3] - 2026-06-24

Added

  • Version bump for removing brand ignore from HACS validation Action

v1.1.2 - 2026-06-24

Choose a tag to compare

@dale-sharp dale-sharp released this 23 Jun 17:19
7c2fdaf

[1.1.2] - 2026-06-24

Added

  • Brand assets (brand/dark_icon.png and brand/dark_logo.png) for display in HACS and
    the Home Assistant integrations gallery.

v1.1.1 - 2026-06-23

Choose a tag to compare

@dale-sharp dale-sharp released this 22 Jun 15:29
10f869b

[1.1.1] - 2026-06-23

Added

  • Brand assets (brand/icon.png and brand/logo.png) for display in HACS and the
    Home Assistant integrations gallery.

v1.1.0 - 2026-06-20

Choose a tag to compare

@dale-sharp dale-sharp released this 19 Jun 16:17
aedb3af

[1.1.0] - 2026-06-20

Fixed

  • BREAKING - Site selection filter now uses hierarchical precedence instead of additive
    (union) behavior. The most specific level of selection takes exclusive precedence:

    • Individual sites selected - ONLY those sites are included (suburb/city selections ignored)
    • Suburbs selected, no individual sites - ONLY sites within those suburbs (city selections ignored)
    • Cities selected, no suburbs or individual sites - ONLY sites within those cities
    • Nothing selected - all sites (unchanged)

    Previously, selecting any combination of cities, suburbs, and individual sites returned
    the union of all matching sites. For example, selecting City=Adelaide and one individual
    site in Kent Town would return that site PLUS every other site in Adelaide.

    Impact: Users who relied on the additive behavior may see devices and entities removed
    from Home Assistant after upgrading. Reconfigure the integration via
    Settings > Devices & Services > SA Fuel Pricing > Configure to re-select the desired sites.

Changed

  • Extracted site filter logic from _async_update_data() into a dedicated
    _resolve_active_site_ids() helper method. No behaviour change - internal refactor only.

v1.0.1 - Bugfix Release

Choose a tag to compare

@dale-sharp dale-sharp released this 19 Jun 14:29
e85ccf6

v1.0.1 - Bugfix Release

Fixes

Release workflow zip structure and contents

  • Fixed the release workflow packaging to correctly structure the zip file for HACS installation
  • The initial fix changed into custom_components/ before zipping, but still included sa_fuel_pricing/ in the zip path
  • HACS would extract this as custom_components/sa_fuel_pricing/custom_components/sa_fuel_pricing/
  • The workflow now changes into custom_components/sa_fuel_pricing/ and zips the contents directly, so the zip archive contains __init__.py, manifest.json, etc. at its root
  • When HACS extracts into custom_components/sa_fuel_pricing/, the files are placed correctly without any path duplication

v1.0.0 - Initial Release

Choose a tag to compare

@dale-sharp dale-sharp released this 19 Jun 13:18

v1.0.0 - Initial Release

First release of the SA Fuel Pricing integration for Home Assistant.

Features

Station & price tracking

  • Tracks live fuel prices for all 700+ South Australian fuel stations via the SAFPIS API
  • Each station is represented as a Home Assistant device; each fuel type at that station is a sensor reporting the current price in AUD/L
  • Supports all 8 fuel types present in SA price data: Unleaded, Diesel, Premium 95, Premium 98, E10, Premium Diesel, LPG, and E85
  • LPG and E85 are disabled by default (uncommon) and can be enabled individually in the entity registry

Flexible station selection

  • Setup wizard lets you narrow tracked stations by city, suburb, or individual station - or leave all steps blank to track the full state
  • Selection is additive: choosing a city plus individual stations from elsewhere gives you the union of both
  • All selections can be updated at any time via the options flow without removing and re-adding the integration

Efficient API usage

  • Reference data (station details, brands, geographic regions) cached for 24 hours - fetched once per day regardless of poll frequency
  • Reference data is preserved across options changes so a settings update does not trigger unnecessary API calls
  • Price poll interval is configurable from 1 to 60 minutes (default 5 min); the SAFPIS API supports a minimum of 1 minute

Dynamic device management

  • New stations appearing in the API are automatically added as devices on the next poll
  • Stations that disappear from the API are automatically removed from the device registry
  • Manual device deletion is enabled for any station with no active prices

Config flows

  • Full UI setup - no YAML configuration required
  • Reauthentication flow: triggered automatically on API 401, prompts for a new token without losing configuration
  • Reconfiguration flow: replace your subscriber token at any time from the integration page

Sensor attributes

Every price sensor exposes: site_id, site_name, site_address, postcode, brand, suburb, city, latitude, longitude, fuel_type, last_updated, and unavailable.

Requirements

  • Home Assistant 2024.1.0 or newer
  • SAFPIS Data Publisher subscriber token (register here)

Installation

Install via HACS by adding https://github.com/dale-sharp/sa-fuel-homeassistant as a custom repository, or copy custom_components/sa_fuel_pricing/ manually into your HA config directory. See the README for full setup instructions.