A power flow visualization card for solar hybrid inverters in Home Assistant. Single file, no dependencies.
| Brand | Integration | Status |
|---|---|---|
| Deye | Solarman / deye_inverter | Tested |
| Sunsynk | Sunsynk / Modbus | Preset |
| Huawei | FusionSolar | Preset |
| Fronius | Gen24 / Modbus | Preset |
| Growatt | Growatt / Modbus | Preset |
| Victron | Venus OS / GX | Tested |
| SolarEdge | Modbus / SunSpec | Preset |
| Solis | SolisCloud / Modbus | Preset / Tested |
| Any other | Custom | Custom preset |
Select your brand in the visual editor. Entities and polarity are configured automatically.
- 9 inverter presets with auto-configured entities and polarity
- 9 languages: Portuguese, English, German, French, Spanish, Italian, Dutch, Polish, Swedish
- Configurable battery and grid polarity sign conventions
- Dual MPPT support, configure two solar strings independently
- Optional EV charging node with animated flow, blinking bolt, SOC and daily energy
- Extra consumption nodes, appliances, garage, heat pump, and custom loads, each with its own power sensor, icon, and label
- Animated chevron flow lines (or comet style) with speed and pulse density proportional to power output (
flow_density: fullkeeps every pulse); size adjustable withflow_size - Inverter → home flow coloured by the mix feeding the home (solar green / battery amber / grid red)
- Color-coded values: solar (green), grid (red), home (cyan), battery (yellow)
- Inverter icon with 4 status LEDs indicating active energy flows
- Battery runtime estimation with shutdown SOC and ETA
- Optional weather display (temperature and humidity)
- 24-hour sparkline charts with Catmull-Rom interpolation, updated every 5 minutes
- Sparkline tooltips showing power and timestamp on hover
- Auto-scaling Y-axis on all sparklines
- Circular self-sufficiency ring, split by the source feeding the home (solar / battery / grid), centered %, leaf glyph, sliding slice transitions, and hover/tap label
- Daily totals for import, export, and production in kWh
- Trend arrows for rising, falling, or stable values
- Graceful handling of unavailable sensors (
--) - Dynamic card border color reflecting the dominant energy source
- Visual editor for all configuration options
- Adjustable main-value font size from the visual editor
- Light and dark theme support with automatic detection
- Compact mode (flow diagram only, no sparklines)
- Three-phase grid voltage display (L1/L2/L3)
- Split battery charge/discharge sensors for Solis/Modbus setups
- Daily energy cost overlay (import cost / export earnings)
- Optional energy price display driven by a tariff sensor (with price icons)
- Grid status indicator dot (on-grid / off-grid)
- Click any node to open its more-info dialog — dual-MPPT opens each string (PV1/PV2) separately
- Full theming via CSS custom properties (
--xpf-*) - Performance-optimized: entity diffing, paused updates in hidden tabs
- Animated value transitions, smooth count-up on power and self-sufficiency changes
- Gradient-filled sparkline areas
- Respects
prefers-reduced-motion(all animations disabled) - Fully translated visual editor (all 9 languages)
- One-click entity auto-detection (HA Energy Dashboard + power sensor heuristics)
- Live entity validation in the editor — missing entities flagged in red
prefers-color-schemetheme fallback when HA theme info is absent
- Open HACS in Home Assistant
- Search for "xPower Flow Card" and install
- Refresh your browser (Ctrl+Shift+R)
- Download
xpower-flow-card.jsfrom the latest release - Copy to
/config/www/xpower-flow-card.js - Add resource in Settings > Dashboards > Resources:
- URL:
/local/xpower-flow-card.js - Type: JavaScript Module
- URL:
- Refresh your browser
Add the card through the UI and use the built-in visual editor. Select your inverter brand from the Preset dropdown to auto-fill all entity and polarity fields.
type: custom:xpower-flow-card
preset: deye
language: pt
inverter_name: DEYE 6K
shutdown_soc: 20
battery_capacity: 5120
weather_temp: sensor.outdoor_temperature
weather_humidity: sensor.outdoor_humiditytype: custom:xpower-flow-card
preset: deye
solar: sensor.deye_pv1_power
solar2: sensor.deye_pv2_power
pv_voltage: sensor.deye_pv1_voltage
pv_voltage2: sensor.deye_pv2_voltagetype: custom:xpower-flow-card
preset: huawei
language: de
inverter_name: Huawei SUN2000
shutdown_soc: 10
battery_capacity: 10000type: custom:xpower-flow-card
preset: custom
language: en
inverter_name: My Inverter
bat_polarity: negative
grid_polarity: positive
shutdown_soc: 15
battery_capacity: 10240
solar: sensor.my_pv_power
solar2: sensor.my_pv2_power
battery: sensor.my_battery_power
soc: sensor.my_battery_soc
grid: sensor.my_grid_power
load: sensor.my_load_power
grid_voltage: sensor.my_grid_voltage
battery_voltage: sensor.my_battery_voltage
pv_voltage: sensor.my_pv_voltage
pv_voltage2: sensor.my_pv2_voltage
temperature: sensor.my_inverter_temp
frequency: sensor.my_grid_frequency
grid_status: binary_sensor.my_grid_connected
daily_solar: sensor.my_daily_production
daily_import: sensor.my_daily_import
daily_export: sensor.my_daily_export
daily_load: sensor.my_daily_consumption
daily_charge: sensor.my_daily_charge
daily_discharge: sensor.my_daily_discharge
battery_temperature: sensor.my_battery_temp
weather_temp: sensor.my_outdoor_temp
weather_humidity: sensor.my_outdoor_humidity| Option | Default | Description |
|---|---|---|
preset |
deye |
Inverter brand preset |
language |
pt |
Card language (pt, en, de, fr, es, it, nl, pl, sv) |
inverter_name |
DEYE |
Display name (leave empty to hide) |
bat_polarity |
negative |
negative = charging (Deye) or positive = charging (Huawei) |
grid_polarity |
positive |
positive = import (Deye) or negative = import (SolarEdge) |
shutdown_soc |
20 |
Battery shutdown SOC percentage |
reserve_entity |
Backup reserve SOC entity (e.g. the inverter's shutdown SOC number). Drives the hatched reserve zone and runtime instead of shutdown_soc; tap the battery icon to change it (optional) |
|
energy_chart |
bottom |
Today's energy chart (solar, house, grid, forecast): top, bottom or off |
battery_chart |
off |
Today's battery state-of-charge chart: top, bottom or off |
solar_forecast |
true |
Draw the solar forecast from the Energy dashboard on the energy chart |
battery_capacity |
5120 |
Battery capacity in Wh |
detail |
Detail level: essential (power, battery %, flows and self-sufficiency only), normal (adds daily energy, battery runtime, weather, sun ring, energy chart and frame) or technical (adds MPPT list, voltages, frequency, temperatures, price and the battery chart). Unset shows everything configured, as before. Options you set yourself (e.g. energy_chart) always win |
|
flow_density |
power |
Chevron count follows power (power) or every pulse always shown (full) |
solar2 |
Second MPPT solar power sensor (optional) | |
pv_voltage2 |
Second MPPT PV voltage sensor (optional) | |
weather_temp |
Temperature sensor for weather display | |
weather_humidity |
Humidity sensor for weather display | |
price_sensor |
Electricity price sensor — shows current price with the sensor's own unit (optional) | |
extra{1,2,3}_power |
Power sensor for each extra-consumer node (optional; node hidden when empty) | |
extra{1,2,3}_name |
Custom label for each extra-consumer node (falls back to the icon's name) | |
extra{1,2,3}_icon |
appliance / heatpump / garage |
Icon per node: appliance, heatpump, garage, generic |
Set in YAML (not exposed in the visual editor yet).
Up to three extra loads branch off the home node. Each appears only when its *_power entity is set.
| Option | Description |
|---|---|
extra1_power, extra2_power, extra3_power |
Power sensor for the extra load (required to show the node) |
extra1_name, extra2_name, extra3_name |
Optional label (falls back to the icon's default name) |
extra1_icon, extra2_icon, extra3_icon |
Icon type — appliance, heatpump, or garage (defaults: 1 = appliance, 2 = heatpump, 3 = garage) |
Shorthand aliases also work and map to the three slots: appliance_power → extra1, heatpump_power → extra2, garage_power → extra3 (each with a matching *_name).
| Option | Description |
|---|---|
price_sensor |
Sensor holding the current energy price; shown with a price icon |
import_cost, export_cost |
Import cost / export earnings rates for the daily cost overlay |
Battery power:
negative= charging: Deye, Sunsynk, Growattpositive= charging: Huawei, Fronius, SolarEdge, Victron, Solis
Grid power:
positive= importing: Deye, Sunsynk, Huawei, Fronius, Growatt, Victron, Solisnegative= importing: SolarEdge
The 3 LEDs on the inverter icon reflect active power flows:
| LED | Color | Condition |
|---|---|---|
| 1st | Green | Solar producing (>10 W) |
| 2nd | Orange | Battery discharging (>10 W) |
| 3rd | Red | Grid importing (>10 W) |
LEDs blink when active and remain dim when inactive.
Full history: CHANGELOG.md
Designed and built by @BTNBx.
Licensed under MIT. See LICENSE for details.
