An energy flow visualization widget for Node-RED Dashboard 2.0 that displays real-time energy flow between solar panels, inverter, home consumption, grid, battery, and electric vehicle.

[!NOTE] This node comes with a default low-quality image built-in to keep the size of this node small. The high-fidelity version is available as a drop-in replacement where all paths can remain the same. To use the high-fidelity version, copy house.png to your Node-RED static folder and reference it in the widget configuration (e.g.
/house.png).
Search for node-red-dashboard-2-energy-overview in the Node-RED palette manager.
Due to Issue #1159, it might be difficult to pre-install this widget.
The node accepts msg.payload with routes and labels properties:
msg.payload = {
routes: {
solarToInverter: true, // Solar panels producing
inverterToHome: true, // Power to home
inverterToGrid: true, // Exporting to grid
gridToInverter: true, // Importing from grid
inverterToBattery: true, // Charging battery
batteryToInverter: true, // Discharging battery
inverterToCar: true, // Charging EV
carToInverter: true // V2H/V2G (vehicle to home/grid)
},
labels: {
solar: { value: "5.2 kW", sublabel: "Producing" },
home: { value: "2.1 kW", sublabel: "Consuming" },
grid: { value: "1.8 kW", sublabel: "Exporting" },
battery: { value: "5.8 kW", sublabel: "Charging" },
car: { value: "7.4 kW", sublabel: "Charging" }
}
};
Note: Bidirectional routes (grid, battery, car) are mutually exclusive - enabling one direction automatically disables the opposite.
Labels are merged with existing values, so you can update individual labels without resending all of them.
The route and label keys above are the built-in defaults. With custom entities, the keys are derived from your own entity names instead.
Use msg.reset to clear all stored routes and labels before applying new values:
msg.reset = true; // Any value works, just needs to be defined
msg.payload = {
routes: { solarToInverter: true },
labels: { solar: { value: "5 kW" } }
};
This clears the existing state first, then applies only the values in the current message. Without msg.reset, routes and labels are merged with existing state.
Update widget configuration at runtime using msg.ui_update:
msg.ui_update = {
pulseColor: "#00ff00",
image: "/path/to/custom-house.png"
};
// Example function node to update energy overview
msg.payload = {
routes: {
solarToInverter: true,
inverterToHome: true,
inverterToBattery: true
},
labels: {
solar: { value: "4.8 kW", sublabel: "Peak production" },
home: { value: "1.2 kW", sublabel: "Low usage" },
battery: { value: "72%", sublabel: "+2.1 kW" }
}
};
return msg;
| Property | Description | Default |
|---|---|---|
| Pulse Color | Color of the animated pulses | #4dcbbf |
| Image URL | Custom background image URL | Built-in house image |
| Custom Paths | JSON { entities, energyPaths, labels } defining custom entities and their drawn paths/labels |
(empty, uses defaults) |
By default the widget shows five entities: solar (source), home (sink), and grid, battery, car (bidirectional). Set the Custom Paths field to a JSON object with an entities block to replace that set with your own:
{
"entities": {
"solar": { "direction": "source" },
"home": { "direction": "sink" },
"generator": { "direction": "source" }
},
"energyPaths": { "...": "drawn path geometry" },
"labels": { "...": "label positions" }
}
direction is source (into the inverter), sink (out of the inverter), or both (bidirectional).source → <name>ToInverter, sink → inverterTo<Name>, both → both. So a generator source is driven by msg.payload.routes.generatorToInverter and labelled via msg.payload.labels.generator.entities replaces the defaults entirely; omit it to keep them.Draw the energyPaths and labels geometry with the Path Tracer Tool. For a full worked example, see the node’s built-in help (the editor’s info panel) and examples/energy-overview-generator-example.json.
You can use your own house image. The widget expects the image to have approximately the same layout as the default image (1056x992 pixels reference size). The widget will scale paths automatically based on the actual image dimensions.
To create custom paths for your image, you can use the included energy-path-tracer.html tool, or access it online at:
https://pakerfeldt.github.io/node-red-dashboard-2-energy-overview/energy-path-tracer.html
The Energy Path Tracer is an interactive web-based tool that helps you create custom energy flow paths for your house images. It provides a visual interface where you can:
You can generate custom house images for your energy overview widget using Gemini’s nano banana video generation capabilities. This allows you to create unique, personalized visualizations of your energy system.
Here’s an example prompt that was used to generate the default house image:
A minimalist, hyper-detailed 3D render of a smart energy system, in isometric view.
The scene features a modern, low-angled roof, dark gray building in horizontal wooden
panel, with 8 sleek solar panels with black glass look with slight reflection.
The camera angle should prioritize the front facade as the primary visible surface.
Only the front facing wall is visible and it features a white, wall-mounted inverter
to the left, and without any window between, a wall-mounted, large battery on the right.
The house also features a few large windows with black frames, mild reflection in the
windows. On the left side of the house stands a neutral, modern, dark gray electric
vehicle (EV) without car logo visible that doesn't look exactly like a Tesla. Only
the front of the car is visible as the car enters the image from the left. Its head
lights are off.
Close to the car is a neutral, dark car charger on the wall that blends in with the
house. Low-key, moody studio lighting with a dark, indistinct background. Clean lines,
monochromatic color scheme (dark grays and blacks), product visualization style,
cinematic. The camera focuses on the car, inverter, battery and solar panels.
The camera is positioned such that it leaves roughly 1/7th of the vertical space at
the top and bottom free from the house without hard cropping or cutting the house.
Size 2144 × 1984 pixels
Apache-2.0