Releases: dale-sharp/sa-fuel-homeassistant
Release list
v1.1.9 - 2026-07-22
[1.1.9] - 2026-07-22
Changed
- Migrated the toolchain (devcontainer,
ruff,ty,requires-python) from Python
3.13 to 3.14, and removedrequires-python's upper bound entirely. Home Assistant
core dropped Python 3.13 support in its recent releases, which had silently frozen
this repo'shomeassistant/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 formatnow emits Python 3.14's PEP 758 unparenthesized multi-exception
exceptsyntax (e.g.except ValueError, TypeError:), applied automatically to
api.pyandconfig_flow.pyby thetarget-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.pyintoapi.py(data modelsSiteDetail/SitePrice/SAFuelData
and theSAFuelAPIClientHTTP client) and a trimmedcoordinator.py
(SAFuelDataCoordinatoronly), matchingfree-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
TypeErrorin the DNS-resolver mock, caused by
native Windows dev silently testing against a ~1-year-stalehomeassistantrelease (a
Python-3.13.2 resolution-fork threshold kept Windows on2025.4.4while 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 siblingfree-games-homeassistantrepo.
Changed
- Removed the
pymicro-vad/pyspeex-noiseWindows-only dependency override and narrowed
requires-pythonto>=3.13.2,<3.14(matching the devcontainer's actual Python version);
uv.locknow resolves a single, unforkedhomeassistantversion 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
[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
viacaplog; test output is kept clean by suppressing expected log noise from the HA
loader and integration debug messages. DEVICE_IDENTIFIER_PREFIXconstant inconst.pyto eliminate duplicated"sa_fuel_"
string acrossentity.py,__init__.py, andcoordinator.py.- Shared schema-builder functions (
_cities_schema,_suburbs_schema,_sites_schema,
_fuel_types_schema) inconfig_flow.pyto remove duplication between config and
options flows.
Fixed
- Replaced
assert self._ref is not Noneguards in config and options flow step methods
withasync_abort(reason="unknown"), which is safe under Python's optimised mode (-O). - Removed unused
asyncio.gatherwrapper inasync_step_initof the options flow. - Removed
_KNOWN_FUEL_NAMESdict fromconfig_flow.py; fuel name fallback now uses
f"Fuel {fid}"sourced from the API response.
v1.1.3 - 2026-06-24
[1.1.3] - 2026-06-24
Added
- Version bump for removing brand ignore from HACS validation Action
v1.1.2 - 2026-06-24
[1.1.2] - 2026-06-24
Added
- Brand assets (
brand/dark_icon.pngandbrand/dark_logo.png) for display in HACS and
the Home Assistant integrations gallery.
v1.1.1 - 2026-06-23
[1.1.1] - 2026-06-23
Added
- Brand assets (
brand/icon.pngandbrand/logo.png) for display in HACS and the
Home Assistant integrations gallery.
v1.1.0 - 2026-06-20
[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
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 includedsa_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
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.