A Chrome extension that improves the Fox ESS Cloud (v2) experience with useful quality-of-life features.
- Popup Controls: Quick access to toggles directly from the extension popup
- Unstack Charts: On by default — Switch between stacked and unstacked view for ECharts bar and line charts
- Sankey Diagram: On by default — Add an energy flow Sankey diagram to the energy stats page, which replaces the Supply/Usage panel
- Solar Production Gauge: On by default — Real-time solar power gauge (vertical progress bar) showing current output as a percentage of PV capacity
- Download or clone this repository
- Open Chrome and go to
chrome://extensions/ - Enable Developer mode (top right)
- Click "Load unpacked" and select the
dist/folder - Visit https://www.foxesscloud.com/v2/ and log in
- Click the extension icon to open the popup controls
- Toggle the checkboxes to turn features on/off
The extension source lives in src/ and is split into ES modules. The production build goes to dist/.
foxesscloud-extension/
├── src/injected/ ← Source modules (edit here)
│ ├── index.js ← Entry point — wires everything together
│ ├── state.js ← Shared mutable state
│ ├── chart/ ← ECharts unstack/hook modules
│ ├── sankey/ ← Sankey diagram module
│ ├── interceptor/ ← API fetch/XHR interceptors
│ ├── progress-bar/ ← Solar production gauge
│ └── websocket/ ← WebSocket interceptor
├── dist/ ← Production build (load in Chrome)
│ ├── manifest.json
│ ├── content.js
│ ├── injected.js
│ ├── popup.html
│ └── popup.js
└── package.json
| Command | Description |
|---|---|
npm run build |
Production build (minified, outputs to dist/injected.js) |
npm run build:dev |
Dev build (unminified, easier debugging) |
npm run watch |
Auto-rebuild on every file save |
Run npm run watch once and leave it running while you edit files in src/injected/. The dist/injected.js file is rebuilt automatically.
- Node.js (any recent version)
- npm
npm install
npm run watch- Manifest Version: 3
- Build tool: esbuild — fast bundler, no config needed
- Uses
chrome.scripting+ main-world injection for deep ECharts integration - Observes DOM changes to handle dynamically loaded charts
- Intercepts
fetch,XMLHttpRequest, andWebSocketto capture energy data and plant details
Made for personal use. Feel free to customize!