Implements the freshharvest.com two-step login handshake, config flow, 6-hour polling coordinator, and four delivery sensors. Portal page parsing is not implemented; async_get_next_delivery raises until the account HTML is mapped against a signed-in session.
2.3 KiB
ha-freshharvest
Unofficial Home Assistant integration for Fresh Harvest, the Georgia local-produce delivery subscription.
Status: incomplete — does not work yet. The login handshake is implemented and the entity scaffolding is in place, but the portal page parsing is not written. See Why it is unfinished.
What it is meant to expose
| Entity | Value |
|---|---|
sensor.fresh_harvest_next_delivery |
Date of the next scheduled delivery |
sensor.fresh_harvest_order_total |
Cost of the upcoming order |
sensor.fresh_harvest_order_status |
Portal order status |
sensor.fresh_harvest_items_in_box |
Item count, with contents in items attribute |
How the site works
Fresh Harvest is not on Shopify, Farmigo, or Local Line — the page metadata
reports Vy Technology - Custom Code. It is a server-rendered jQuery site with
no JSON API and no mobile app, so this integration scrapes HTML.
Login is a two-step handshake:
GET /s/popup/loginreturns the form plus two hidden anti-replay fields,LoginSecurityandSubmitToken, minted per session.POST /s/submit/loginwithLoginEmail,LoginPassword, both tokens, and an emptyRedirect.
The tokens are bound to the cookie issued by step 1, so the two requests must share a cookie jar and cannot be cached or split.
Why it is unfinished
Signed out, every /p/* path returns HTTP 200 — including invented ones.
The site has no distinguishable 404, so the account pages cannot be located by
probing, and the delivery markup cannot be guessed. Finishing this requires one
signed-in session to capture the real account, delivery, and box-contents pages.
Concretely, what remains:
- Implement
FreshHarvestClient.async_get_next_delivery()in api.py. - Replace the provisional
_looks_authenticated()heuristic, which currently guesses at a "sign out" link, with a real signed-in marker.
Installation
Copy custom_components/freshharvest/ into your Home Assistant config/custom_components/
directory and restart, then add the integration from Settings → Devices & Services.
Disclaimer
Unofficial and unaffiliated. Polls every 6 hours; please do not lower that — this is a small business's website, not an API.