Home Flow Card

Configuration

Every option the card reads, by where it goes in the YAML. Required fields are marked with *.

Coming from Power Flow Card Plus?
Change type to custom:home-flow-card and move grid, solar, battery and home out of entities to the top level; their options stay the same. Options that only change Power Flow Card Plus' circles and lines (for example display_zero_lines) have no effect here.

Card options

The card type, which nodes it draws, and how it moves.

example.yaml
type: custom:home-flow-card
grid:
  entity: sensor.grid_power
solar:
  entity: sensor.solar_power
battery:
  entity: sensor.battery_power
  state_of_charge: sensor.battery_soc
animate_numbers: true
type*stringRequired
custom:home-flow-card
titlestring
Card title.
modestringdefault power
What the sensors measure: power for live power in W, or energy for energy in Wh over the period picked on the dashboard's energy date picker (today without one). In energy mode every node, the car and the heat pump read energy sensors, each wire carries its energy over the period and, without an expected range in Wh, the pulses share out what was supplied. A grid or battery that ran both ways gets a parallel line and a value each way. What only says what is happening now is left out: the grid's outage, the car's idle conditions and the heat pump's turning fan. See the energy example.
With mode: energy, the energy date picker to follow, as in Energy Flow Card Plus, for example energy_living_room. Without it, the dashboard's own.
Each node's energy sensor, by node: grid, solar, battery, home, generator, car and heat_pump, each written like the node's entity. With them, the card gets a selector in its top right corner between live power and today, and reads today itself instead of following a date picker. The house keeps its live size and place. A node without an energy sensor is left out of today; the home without one shows what flowed into it. Only with mode: power, the default. See the example.
viewslistdefault [live, today]
With energy_entities, any of live, today, yesterday, week, month and year for the selector, always shown in that order. Two sit side by side; more open in Home Assistant's dropdown. A single one shows that view without a selector.
The nodes, at the top level of the card; see their sections below. Leave one out and it is not drawn; one of grid, solar or battery is required. Without home, the card works out what the home uses from the others.
generatorobject
A generator for grid outages; see Generator.
carobject
An electric car in front of the house; see Car.
heat_pumpobject
A heat pump on the front wall; see Heat pump.
animate_numbersbooleandefault true
Roll each number to its new value when a reading changes. Always still when your system asks for reduced motion.
disable_dotsbooleandefault false
Keep the wires still: no pulses, only the colour of the power they carry.
wire_widthnumberdefault 1
How many times thicker the wires are drawn, for example 2 for twice as thick. Like the labels' text, wires keep a similar size in px whatever the card's width: they stay visible in a narrow sidebar and do not swell on a wide dashboard.
two_way_value_sizenumberdefault 1
In energy mode, how large the values of a grid or battery that ran both ways are drawn against the other labels' values, for example 0.8 so their two values take less room.
clickable_entitiesbooleandefault true
Tapping a value opens its entity's details; false turns that off. A node's own actions run either way.

Numbers and pulses

How values are rounded and how fast the pulses run, shared with Power Flow Card Plus.

example.yaml
kilo_threshold: 1000
kilo_decimals: 2
max_expected_value: 5000
base_decimalsnumberdefault 0
Decimals of values in W, or Wh in energy mode.
kilo_decimalsnumberdefault 1
Decimals of values in kW (kWh).
kilo_thresholdnumberdefault 1000
From how many W (Wh) a value is shown in kW (kWh).
mega_decimalsnumberdefault 2
Decimals of values in MW (MWh).
mega_thresholdnumberdefault 1000000
From how many W (Wh) a value is shown in MW (MWh).
min_flow_rate / max_flow_ratenumberdefault 0.75 / 6
Seconds per pulse at the most and the least power.
The range the pulses follow, in W (Wh in energy mode): slowest and shortest at the min, fastest and longest at the max. In energy mode without them, each wire's pulses share out what was supplied over the period instead. The older min_expected_power and max_expected_power still work in power mode; the visual editor saves them under the new names.

Grid

Under grid: the cable running off to the street.

example.yaml
grid:
  entity:
    consumption: sensor.grid_import_power
    production: sensor.grid_export_power
  power_outage:
    entity: binary_sensor.grid_outage
    label_alert: Blackout
entity*stringobjectRequired
A power or energy sensor, positive while importing and negative while exporting; or consumption (import) and production (export), one sensor per direction, each positive.
namestringdefault Grid
Label name.
use_metadatabooleandefault false
Take the name from the entity.
The entity that reports an outage. While the grid is down, its cable goes dead and its label shows a dash and an alert. Live only: energy mode leaves it out.
power_outage.state_alertstringdefault on
The state of power_outage.entity that means the grid is down.
power_outage.label_alertstringdefault Power Outage
The alert under the grid's name during an outage.
invert_statebooleandefault false
Swap import and export, for a sensor that reads the other way round.
display_zero_tolerancenumberdefault 0
Below this, in W (Wh in energy mode), the grid counts as idle.
Unit shown instead of the sensor's own.
decimalsnumber
Decimals of the value, instead of the card's base_decimals and kilo_decimals.
color.consumptionstringlistdefault theme
Colour of the wire while importing, as #rrggbb or [r, g, b].
color.productionstringlistdefault theme
Colour of the wire while exporting.
What tapping, holding or double-tapping the label does; see Actions.

Solar

Under solar: the panels on the roof.

example.yaml
solar:
  entity: sensor.solar_power
  name: Roof
  color: "#ff9800"
entity*stringRequired
The solar production sensor.
namestringdefault Solar
Label name.
use_metadatabooleandefault false
Take the name from the entity.
invert_statebooleandefault false
For a sensor that reads production as negative.
display_zero_tolerancenumberdefault 0
Below this, in W (Wh in energy mode), the solar counts as idle.
Unit shown instead of the sensor's own.
decimalsnumber
Decimals of the value, instead of the card's base_decimals and kilo_decimals.
colorstringlistdefault theme
Colour of the wire, as #rrggbb or [r, g, b].
What tapping, holding or double-tapping the label does; see Actions.

Battery

Under battery: the battery on the wall, with its charge bar.

example.yaml
battery:
  entity: sensor.battery_power
  state_of_charge: sensor.battery_soc
  state_of_charge_position: after_value
  state_of_charge_severity:
    red: 10
    yellow: 25
entity*stringobjectRequired
A power or energy sensor, positive while discharging and negative while charging; or consumption (discharge) and production (charge), one sensor per direction, each positive.
The state of charge sensor, in %. Fills the charge bar and shows on the label.
state_of_charge_positionstringdefault below_value
Where the label shows the state of charge: below_value, beside whether it is charging; above_value, swapped with the value as the large one; or on the value's line, after_value or before_value. Without a state of charge, the label shows the value either way. The older below_power, above_power, after_power and before_power still work; the visual editor saves them under the new names.
The charge bar is red below this charge, in %.
The charge bar is yellow below this charge, in %, and green above it.
state_of_charge_unitstringdefault %
Unit of the state of charge.
Put a space between the state of charge and its unit.
Decimals of the state of charge.
namestringdefault Battery
Label name.
use_metadatabooleandefault false
Take the name and icon from the entity.
iconstringdefault by charge
The icon on the battery: mdi:battery, mdi:battery-high, mdi:battery-medium, mdi:battery-low or mdi:battery-outline. By default it follows the state of charge.
invert_statebooleandefault false
Swap charging and discharging, for a sensor that reads the other way round.
display_zero_tolerancenumberdefault 0
Below this, in W (Wh in energy mode), the battery counts as idle.
Unit shown instead of the sensor's own.
decimalsnumber
Decimals of the value, instead of the card's base_decimals and kilo_decimals.
color.consumptionstringlistdefault theme
Colour of the wire while discharging, as #rrggbb or [r, g, b].
color.productionstringlistdefault theme
Colour of the wire while charging.
What tapping, holding or double-tapping the label does; see Actions.

Home

Under home: the outlet inside the house. Optional; without it the card works out what the home uses.

example.yaml
home:
  entity: sensor.home_power
  override_state: true
entitystring
The home's consumption sensor, opened on tap and read with override_state.
namestringdefault Home
Label name.
use_metadatabooleandefault false
Take the name from the entity.
override_statebooleandefault false
Show the entity's reading instead of the consumption the card works out.
Unit shown instead of the sensor's own.
decimalsnumber
Decimals of the value, instead of the card's.
What tapping, holding or double-tapping the label does; see Actions.

Generator

Under generator: a generator the inverter switches to during a grid outage. It gets its own wire into the inverter and is never drawn on the grid cable. It needs grid.power_outage to know when the grid is down; while it runs, its label takes the grid's place. In energy mode it needs no power_outage: it shows beside the grid whenever it ran over the period.

example.yaml
grid:
  entity: sensor.grid_power
  power_outage:
    entity: binary_sensor.grid_outage
generator:
  entity: sensor.generator_power
entity*stringRequired
The generator's power or energy sensor.
namestringdefault Generator
Label name.

Car

Under car: an electric car parked in front of the house, wired to the home's outlet.

example.yaml
car:
  entity: sensor.wallbox_power
  state_of_charge: sensor.car_battery_level
  visibility:
    - condition: state
      entity: device_tracker.car
      state: home
  idle:
    - condition: state
      entity: binary_sensor.car_plugged_in
      state: "off"
entity*stringRequired
Its charging power or energy, positive while it charges and negative while it feeds the home.
Its battery level, in %, shown on its label under its power.
namestringdefault Car
Label name.
Conditions, set up with the same editor as a card's visibility tab: the car shows only while all of them hold, for example while its tracker reads home. While hidden it keeps its room, so the house does not move as the car comes and goes. Without conditions the car always shows.
idlelist
Conditions: while all of them hold, the car is parked and unplugged. It is drawn faded, without its cable, and its label shows its state of charge; without one, the car shows on its own, without a label. Without conditions the car is idle while it draws no power. Live only: in energy mode the car is idle while it used nothing over the period.

Heat pump

Under heat_pump: a heat pump on the front wall, wired to the home's outlet, its fan turning while it runs. With a car configured it hangs above where the car parks; without one, low and further along the wall, its label below it. Only the config decides, so it stays put while the car is away.

example.yaml
heat_pump:
  entity: sensor.heat_pump_power
  climate: climate.heat_pump
  status: temperature_and_target
entity*stringRequired
Its power or energy.
climatestring
Its climate entity: a tap on its label opens it, and its label reads its state or temperature from it. Without it, a tap opens entity.
statusstringdefault state
What its label shows under its power, read from climate: state (what it is doing, for example Heating), temperature, or temperature_and_target (38 °C → 45 °C).
namestringdefault Heat pump
Label name.

Conditions

car.visibility and car.idle take the conditions of a card's visibility tab. Since Home Assistant 2026.10 its editor writes state and numeric_state with entity_id, as automations do, and offers template, sun, zone and device conditions, which Home Assistant checks for the card. Before 2026.10 those are ignored.

statecondition
entity, and state or state_not: a value or a list.
numeric_statecondition
entity, above, below.
screencondition
media_query
usercondition
users: user ids.
timecondition
after, before, weekdays.
locationcondition
target: zones, by id, area, floor or label; match_mode: any_zone or active_zone; away. Or the older locations: home, not_home or zone names.
and / orcondition
conditions: all of them, or any of them.
notcondition
conditions: passes unless all of them hold.

Actions

tap_action, hold_action and double_tap_action take Home Assistant's actions: more-info, toggle, navigate, url, perform-action, assist or none. Without any of them, tapping a label opens its entity's details, unless clickable_entities: false.