Add-on rows already carried quantity, unit and extended price; only the name was exposed. The attribute now renders the full line and a new monetary sensor reports the add-ons subtotal separately from the box. The fixture totals were copied from a seven-add-on cart while the fixture itself had one, so they are now self-consistent and a test asserts that add-ons plus box price equals the portal's subtotal.
2.1 KiB
2.1 KiB
Changelog
All notable changes to this project are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.2.0] - 2026-08-03
Added
sensor.fresh_harvest_next_delivery_add_ons, the combined cost of the add-ons excluding the produce box.add_ons_totalandbox_priceattributes on the item-count sensor.- A test asserting
add_ons_total + box_priceequals the portal's own subtotal, so a mis-parsed price cannot pass silently.
Changed
add_onsattribute entries now carry quantity, unit, and extended price (4 Complete Recovery Smoothie 15.2 fl oz — $17.96) rather than a bare name. Templates reading these strings will need updating.- The test fixture's totals are now internally consistent, so the subtotal reconciliation is a real invariant rather than copied numbers.
[0.1.0] - 2026-08-03
Added
- Config flow taking freshharvest.com portal credentials.
- Session client implementing the two-step login handshake against
/s/popup/loginand/s/submit/login, including the per-sessionLoginSecurityandSubmitTokenanti-replay fields, with one automatic re-authentication when a session lapses. - Dashboard parser reading delivery day, next arrival date, both upcoming
carts, produce-box contents, add-ons, and order totals from a single
GET /p/dashboard/details. - Update coordinator polling every 6 hours, surfacing auth failures as
ConfigEntryAuthFailedso Home Assistant prompts for re-authentication. - Five sensors: next delivery date, next delivery total, next delivery item count, open order delivery date, and shopping window.
- Parser tests covering totals, contents, the locked/open distinction, money parsing, and year rollover on undated cart tabs.
- English translations under
translations/en.json, which is where custom integrations read entity and config-flow strings from. - Example dashboard view under
examples/dashboard-view.yaml: a three-section tab with a delivery countdown, order tiles, and the full box contents.