Priestley Place Charge HQ

15kW Fox ESS H3 · CQ6-L8 battery stack (47.92kWh nominal) · 44 panels / 20.9kW array
Monitoring only
 
Data sources

Inverter Connection

FoxESS Cloud
Only change this if you're routing through your own CORS proxy in front of FoxESS Cloud.
Sent as X-Proxy-Secret on both FoxESS and Solcast calls if this and the matching base URL below are set — one worker, one secret, both APIs.

Inverter Schedule Inspector

Read-only — shows exactly what's actually configured on the inverter right now, straight from FoxESS, not from this app's own memory of what it last sent.

Server-Side Setup (Stage 1 + 2a + 2b)

Moving the automatic decision loop off this browser page and onto Cloudflare, so it keeps running whether or not this tab is open. Stage 1: config mirrors into Cloudflare KV. Stage 2a: a Cron Trigger proves FoxESS is reachable directly from Cloudflare's servers, every 5 minutes. Stage 2b: the same reserve-target / cycle-budget / sell-floor engine as this app, ported function-for-function, runs on that same schedule and computes a genuine plan — SHADOW MODE only, it logs what it would decide but never sends anything to the inverter. Compare its decision against what this app itself is deciding for the same moment before trusting it to act for real. See the setup notes at the top of energy-proxy-worker.js.

Test Live Control

A small, deliberate, real command — separate from the automatic system, so the write path can be watched and confirmed once before trusting it to run unattended.
Test curtailment (negative feed-in protection) — export limit is confirmed rejected (FoxESS error 42015) under a regular homeowner-tier API key; it looks to be an installer-only setting. Enter a key generated from an installer login below to test whether that has the right permission — leave blank to keep using the main key above (will just repeat the same rejection).

Forecast Sources

BOM's own open-data feed has had outages during platform upgrades — if a BOM request fails, this automatically falls back to the blended model for that run.

Live Pricing Connection

Polls a live-priced retailer's real price feed and logs actual cost against your real usage from today onward. Past days can't be backfilled. Amber Electric is the only provider actually wired up right now — the Provider field exists so a different live-pricing retailer can be added later without restructuring anything else that reads from this connection.

Site & System

 
System losses (soiling, wiring, inverter) — typical 0.78–0.85

Storm Precaution

In-app banner only — nothing here is sent to the inverter automatically. Watches for a forecast damaging wind gust, heavy rain, or thunderstorm — the three biggest real-world causes of storm-driven outages (wind bringing down trees/branches onto lines is the single most common; lightning and heavy rain/flooding affecting substations are the other two). When triggered, shows how much charge is currently on hand versus how much is recommended to hold back for the EPS/backup circuit, so you can decide whether to top up or hold off selling manually.
90km/h is BOM's own official threshold for a "damaging wind" Severe Weather Warning on the mainland. A forecast thunderstorm (Open-Meteo weathercode) always triggers regardless of the two numeric thresholds, as the closest available proxy for lightning risk — there's no direct lightning field on the free tier. Lower the wind/rain numbers if you'd rather be warned earlier at the cost of more false alarms.

Reserve Safety Margin

Extra buffer added on top of the bad-weather reserve target and any peak-window pre-charge, to absorb ordinary forecast error (load or solar coming in worse than predicted) rather than planning to the exact wire. Applies everywhere the plan protects a floor — it makes deliberate selling more conservative, and slightly increases how much gets pre-charged ahead of a peak block.
Set to 0 to go back to the previous exact-forecast behaviour. A few kWh is enough to cover typical forecast noise without giving up much sellable surplus.

Battery Cycle Budget

Paces deliberate battery selling against your warranty's cycle allowance, not just price. FoxESS's CQ6 warranty (and most LFP home batteries) guarantees capacity retention until EITHER a cycle count OR a number of years passes, whichever comes first — so cycles you're not on track to use before the years run out cost nothing extra to spend now.
Leave any of these blank and deliberate selling falls back to its previous rule (sell any confirmed surplus at any positive rate) — this only takes over once all four are filled in.
Usage history & accuracy

Usage History

For prediction
One API call per calendar month, not per day — practical for backfilling since install. Prices Flat Rate segments only; Time of Use/VPP/live pricing still need the hourly pull above.

Correct Usage from Retailer CSV

FoxESS's CT clamps read badly at low currents — this scales your logged usage to match what your retailer actually billed, so cost and payback figures stay accurate. The monthly TOU-vs-Flat breakdown below is a secondary, informational side effect of reading the file.
Providers
Payback Ledger
Tracks what you've actually been billed under, plan by plan, against what the same real usage would have cost with no solar/battery at all — that gap is real savings, banked permanently once a segment's dates are set. Separate from Provider Comparison above, which stays a hypothetical what-if view.

Payback Summary

Plan History

One segment per real plan you were actually billed under. When you switch, set this segment's end date and add a new one starting the next day — that locks in what it actually cost/saved for good.
Live-connected to FoxESS for real telemetry and history — solar/load predictions use your actual logged data once enough is available, falling back to a weather/shape-based estimate otherwise. In Monitoring only, the scheduler is read-only: it plans charge/discharge timing but never sends anything. In Live control, it can send real setpoints to the H3, checked and corrected every 5 minutes against the battery's actual live SoC.