Gauge Card Pro
Build beautiful Gauge cards using 🌈 gradients and 🛠️ templates!
[!NOTE]
Need help with your configuration? Checkout my official Gauge Card Pro Assistant!
Description
Inspired by the idea to be able to recreate the Home Assistant native Energy Gauge Cards I created Gauge Card Pro. Built on top of the Home Assistant Gauge card, but with many more features and beautiful look-and-feel!
- 🌈 Native gradient support for
segments
- ✌️ Two gauges in one
- 🛠️ Use templates for the majority of the fields
- ↔ Ability to start
severity gauges from the center
- ✨ Additional icon indicators next to the gauge
- 🪛 Several styling options
- 🎨 Every element in the card can have its colour defined. This can be a single colour or two colours for light- or darkmode. Of course, allows templating!
- 👬 Set
value and value_text independently
- 👀 Two labels underneath the gauge
- 🎨 Automatic color interpolation for
severity gauges
- 😶🌫️ Native ability to hide the background
Support This Project
If you find Gauge Card Pro useful, consider supporting its development:

Table of contents
Configuration variables
[!IMPORTANT]
When using the Visual Editor to clear/empty one of the following fields, there is some yaml-code left which prevents the default values from working:
primary
primary_unit
secondary
secondary_unit
Delete the line entirely from your yaml-code to restore the default functionality for these fields
| Name |
Type |
Default |
Description |
Templatable |
type |
string |
|
custom:gauge-card-pro |
|
header |
string |
|
Header of the card |
|
entity |
string |
Optional |
Entity for main-gauge value, templates, actions and features (e.g.: {{ states(entity) }}) |
|
entity2 |
string |
Optional |
Entity for inner-gauge value, and templates (e.g.: {{ states(entity2) }}) |
|
inner |
inner object |
|
Configuration for the inner gauge. Use inner: {} to use all defaults for the inner gauge |
|
attribute |
string |
Optional |
Attribute of entity to use for main-gauge value |
|
min |
number |
0 |
Minimum value for graph |
✔️ (only templatable in code-editor/yaml) |
max |
number |
100 |
Maximum value for graph |
✔️ (only templatable in code-editor/yaml) |
needle |
boolean |
false |
Show the gauge as a needle gauge |
|
needle_color |
string or map5 |
var(--primary-text-color) |
Color of the needle |
✔️ |
segments |
list6 |
Optional |
List of colors and their corresponding start values |
✔️ |
severity_centered |
boolean |
Optional |
Severity gauge (requires disabled needle) start at the center |
|
severity_color_mode |
string |
basic |
Sets the mode to determine/render the color of the value of a severity gauge. |
|
|
|
|
• basic: Color determined based on segments |
|
|
|
|
• interpolation: Color determined based on segments, interpolated between segment positions |
|
|
|
|
• gradient: Show part of the gradient-arc as value |
|
gradient |
boolean |
false |
Shows segments as a gradient (requires needle) |
|
gradient_background |
boolean |
false |
Shows the background as a gradient for severity gauge (requires disabled needle) |
|
gradient_resolution |
string or number |
auto |
Level of detail for the gradient. Must be auto or a number indicating the amount of segments to create |
|
min_indicator |
min/max indicator object |
|
Configuration of the min indicator |
|
max_indicator |
min/max indicator object |
|
Configuration of the max indicator |
|
setpoint |
setpoint object |
|
Configuration for the setpoint needle |
|
round |
string |
off |
Rounds the ends of the gauge. Valid values are off, full, medium and small |
|
titles |
titles object |
|
Configuration for the titles beneath the gauge |
|
value_texts |
value_texts object |
|
Configuration for the value texts inside the gauge |
|
icons |
icons object |
|
Configuration for the icons |
|
hide_background |
boolean |
false |
Hides the background and border of the card |
|
shapes |
shapes object |
|
Configuration of the shapes several elements |
|
value |
template |
state of entity |
Value for graph |
✔️ (only available in code-editor/yaml) |
animation_speed |
string |
normal |
Animation speed of value elements. Valid values are normal, fast and off |
|
entity_id |
string or list |
Optional |
Only reacts to the state changes of these entities. This can be used if the automatic analysis fails to find all relevant entities |
|
| ACTIONS |
|
|
|
|
tap_action |
action |
more-info |
Home assistant action to perform on tap. See official documentation for more info |
|
hold_action |
action |
none |
Home assistant action to perform on hold. See official documentation for more info |
|
double_tap_action |
action |
none |
Home assistant action to perform on double_tap. See official documentation for more info |
|
| FEATURES |
|
|
|
|
feature_entity |
string |
|
Entity used for features and (optional) HVAC icons. If not set entity will be used |
|
features |
features object |
|
Configuration of the additional features |
|
Inner Gauge Configuration variables
| Name |
Type |
Default |
Description |
Templatable |
attribute |
string |
Optional |
Attribute of entity2 to use for inner-gauge value |
|
min |
number |
min of main gauge |
Minimum value for graph |
✔️ (only templatable in code-editor/yaml) |
max |
number |
max of main gauge |
Maximum value for graph |
✔️ (only templatable in code-editor/yaml) |
mode |
string |
severity |
Sets the mode of the inner gauge |
|
|
|
|
• severity: Shows the inner gauge as a rotating single color |
|
|
|
|
• static: Shows all the segments without any further indications |
|
|
|
|
• needle: Shows all the segments with a needle |
|
|
|
|
• on_main: Shows a needle on the main-gauge. min and/or max of the inner-gauge can still be used |
|
needle_color |
string or map5 |
var(--primary-text-color) |
Color of the needle |
✔️ |
segments |
list6 |
Optional |
List of colors and their corresponding start values |
✔️ |
severity_centered |
boolean |
Optional |
Severity gauge (requires disabled needle) start at the center |
|
severity_color_mode |
string |
basic |
Sets the mode to determine/render the color of the value of a severity gauge. |
|
|
|
|
• basic: Color determined based on segments |
|
|
|
|
• interpolation: Color determined based on segments, interpolated between segment positions |
|
|
|
|
• gradient: Show part of the gradient-arc as value |
|
gradient |
boolean |
false |
Shows segments as a gradient |
|
gradient_background |
boolean |
false |
Shows the background as a gradient for severity gauge (requires disabled needle) |
|
gradient_resolution |
string or number |
auto |
Level of detail for the gradient. Must be auto or a number indicating the amount of segments to create |
|
min_indicator |
min/max indicator object |
|
Configuration of the min indicator |
|
max_indicator |
min/max indicator object |
|
Configuration of the max indicator |
|
setpoint |
setpoint object |
|
Configuration for the setpoint needle |
|
value |
template |
state of entity2 |
Value for graph |
✔️ (only available in code-editor/yaml) |
round |
string |
off |
Rounds the ends of the gauge. Valid values are off, full and small |
Min/Max Indicator Configuration variables
| Name |
Type |
Default |
Description |
Templatable |
type |
string |
Required |
attribute, entity, number or template |
|
value |
value corresponding to the type |
Required |
Value of the min or max indicator |
|
|
|
|
• attribute: attribute of entity (main-gauge) or entity2 (inner-gauge) |
|
|
|
|
• entity: Entity_id |
|
|
|
|
• number: Fixed number |
|
|
|
|
• template: Template that returns a number |
✔️ |
color |
string or map5 |
rgb(255, 255, 255) |
Color of the min or max indicator |
|
opacity |
number |
0.8 |
Opacity of the min or max indicator |
|
label |
boolean |
false |
Enables a label indicating the value (main gauge only) |
|
label_color |
string |
#111111 |
Color of the label |
|
precision |
number |
Optional |
Amount of decimals to round the label to |
|
Setpoint Configuration variables
| Name |
Type |
Default |
Description |
Templatable |
type |
string |
Required |
attribute, entity, number or template |
|
value |
value corresponding to the type |
Required |
Value of the needle |
|
|
|
|
• attribute: attribute of entity (main-gauge) or entity2 (inner-gauge) |
|
|
|
|
• entity: Entity_id |
|
|
|
|
• number: Fixed number |
|
|
|
|
• template: Template that returns a number |
✔️ |
color |
string or map5 |
var(--error-color) |
Color of the needle |
✔️ |
label |
boolean |
false |
Enables a label indicating the value (main gauge only) |
|
precision |
number |
Optional |
Amount of decimals to round the label to |
|
Titles Configuration variables
Title Configuration variables
| Name |
Type |
Default |
Description |
Templatable |
value |
string |
Optional |
Text value |
✔️ |
color |
string or map5 |
var(--primary-text-color) |
Color |
✔️ |
font_size |
string |
15px for primary, 14px for secondary |
Font-size |
✔️ |
Value-Texts Configuration variables
Value-Text Configuration variables
| Name |
Type |
Default |
Description |
Templatable |
value |
string |
value or state of entity for primary, inner.value or state of entity2 for secondary |
Text. Use "" to overwrite the default |
✔️ |
color |
string or map5 |
var(--primary-text-color) |
Color |
✔️ |
unit_of_measurement |
string |
unit of measurement of entity for primary or entity2 for secondary |
Unit of measurement. Use "" to overwrite the default |
✔️ |
unit_before_value |
boolean |
false |
Place unit of measurement in front of value |
|
font_size_reduction |
number [0-15] |
0 |
Value by which the value-text is reduced (only for primary) |
✔️ (only templatable in code-editor/yaml) |
tap_action |
Home Assistant Tap action |
|
|
|
hold_action |
Home Assistant Hold action |
|
|
|
double_tap_action |
Home Assistant Double tap action |
|
|
|
[!NOTE]
- Both
primary and secondary value-texts can be an icon. Icons are activated for texts formatted as: icon(...). For example: icon(mdi:gauge). Icons cannot be combined with text.
- Use
primary: "" and/or secondary: "" to overwrite/disable the entire value_text (including unit)
- Use
primary_unit: "" and/or secondary_unit: "" to overwrite/disable the entity unit
- No unit is added for non-numeric value_texts.
Icons Configuration variables
Icon Configuration variables
| Name |
Type |
Default |
Description |
Templatable |
type |
string |
Required |
battery, hvac-mode, swing-mode, or template |
|
value |
string |
Optional/Required |
value corresponding to the type |
|
|
|
|
• battery: Battery entity_id (required) |
✔️ |
|
|
|
• hvac-mode: Climate entity_id (optional, otherwise feature_entity is used) |
|
|
|
|
• swing-mode: Climate entity_id (optional, otherwise feature_entity is used) |
|
|
|
|
• template: Template that returns an Icon Template object (required |
✔️ |
state |
string |
Optional |
Only available for battery: sensor indicating the charging state of the battery (valid states for charging are charging and on) |
|
threshold |
number |
Optional |
Only available for battery: threshold above which the icon is not displayed |
|
hide_label |
boolean |
Optional |
Only available for battery: hides the label |
|
tap_action |
Home Assistant Tap action |
|
|
|
hold_action |
Home Assistant Hold action |
|
|
|
double_tap_action |
Home Assistant Double tap action |
|
|
|
Icon Template object
| Name |
Type |
Default |
Description |
icon |
string |
Required |
Icon |
color |
string |
Optional |
Color of the icon |
label |
string |
Optional |
Label displayed beneath the icon |
Example
icons:
left | right:
type: template
value: |
{{
{
"icon": "mdi:battery",
"color": "blue",
"label": (states('sensor.my_sensor') | int * 100) | string + "%"
}
}}
Features Configuration variables
Climate Overview Feature
| Name |
Type |
Default |
Description |
type |
string |
|
climate-overview |
separate |
boolean |
false |
Shows the overview page on a separate dedicated controls-row |
Temperature Control Feature
| Name |
Type |
Default |
Description |
type |
string |
|
adjust-temperature |
Climate Fan Mode Feature
| Name |
Type |
Default |
Description |
type |
string |
|
climate-fan-modes |
fan_modes |
list |
Optional |
List of Fan Modes available in the card |
Climate HVAC Mode Feature
| Name |
Type |
Default |
Description |
type |
string |
|
climate-hvac-modes |
hvac_modes |
list |
Optional |
List of HVAC Modes available in the card |
Climate Preset Mode Feature
| Name |
Type |
Default |
Description |
type |
string |
|
climate-preset-modes |
preset_modes |
list |
Optional |
List of Preset Modes available in the card |
Climate Swing Mode Feature
| Name |
Type |
Default |
Description |
type |
string |
|
climate-swing-modes |
swing_modes |
list |
Optional |
List of Swing Modes available in the card |
Shapes Configuration variables
[!NOTE]
The value needs to be a valid svg path. You can use an online tool like svg-path-editor to design your own custom needles!
| Name |
Type |
Default |
Description |
Templatable |
main_needle |
string |
M -28 0 L -27.5 -2 L -47.5 0 L -27.5 2.25 z |
Shape of the main gauge needle without inner gauge |
✔️ |
|
string |
M -49 -2 L -40 0 L -49 2 z |
Shape of the main gauge needle with inner gauge |
✔️ |
main_min_indicator |
string |
M-32.5 0A32.5 32.5 0 0 0 32.5 0L47.5 0A-47.5-47.5 0 01-47.5 0L-47.5 0 z |
Shape of the main min-indicator without inner gauge |
✔️ |
|
string |
M-32.5 0A32.5 32.5 0 0 0 32.5 0L47.5 0A-47.5-47.5 0 01-47.5 0L-47.5 0 z |
Shape of the main min-indicator with inner gauge |
✔️ |
main_max_indicator |
string |
M-32.5 0A32.5 32.5 0 0 0 32.5 0L47.5 0A-47.5-47.5 0 01-47.5 0L-47.5 0 z |
Shape of the main max-indicator without inner gauge |
✔️ |
|
string |
M-32.5 0A32.5 32.5 0 0 0 32.5 0L47.5 0A-47.5-47.5 0 01-47.5 0L-47.5 0 z |
Shape of the main max-indicator with inner gauge |
✔️ |
main_setpoint_needle |
string |
M -49 -2 L -40 0 L -49 0 z |
Shape of the setpoint needle of the main gauge |
✔️ |
inner_needle |
string |
M -27.5 -1.5 L -32 0 L -27.5 1.5 z |
Shape of the inner gauge needle |
✔️ |
|
string |
M -30 -1.5 L -34.5 0 L -30 1.5 z |
Shape of the on_main inner gauge needle |
✔️ |
inner_min_indicator |
string |
M-29.5 0A29.5 29.5 0 0 0 29.5 0L34.5 0A-34.5-34.5 0 01-34.5 0L-34.5 0 z |
Shape of the inner min-indicator |
✔️ |
inner_max_indicator |
string |
M-29.5 0A29.5 29.5 0 0 0 29.5 0L34.5 0A-34.5-34.5 0 01-34.5 0L-34.5 0 z |
Shape of the inner max-indicator |
✔️ |
inner_setpoint_needle |
string |
M -27.5 -1.5 L -32 0 L -27.5 0 z |
Shape of the setpoint needle of the inner gauge |
✔️ |
|
string |
M -30 -1.5 L -34.5 0 L -30 0 z |
Shape of the on_main setpoint needle of the inner gauge |
✔️ |
Custom styling options
Several CSS variables are available for advanced customization of some of the card elements. There is no native support to apply these variables, however card-mod can be used like so:
card_mod | uix:
style: |
* {
--main-needle-stroke-width: 1px;
--main-needle-stroke-color: white;
}
| CSS variable |
Description |
--main-base-color |
Background color of solid base layer behind severity gauge |
--main-severity-marker |
Color of main severity gauge marker |
--main-needle-stroke-color |
Stroke color of main needle |
--main-needle-stroke-width |
Stroke width of main needle |
--main-min-indicator-stroke-color |
Stroke color of main min indicator |
--main-min-indicator-stroke-width |
Stroke width of main min indicator |
--main-max-indicator-stroke-color |
Stroke color of main max indicator |
--main-max-indicator-stroke-width |
Stroke width of main max indicator |
--main-setpoint-text-color |
Text color of main setpoint label |
--main-setpoint-bg-color |
Background color of main setpoint label |
--main-setpoint-needle-stroke-color |
Stroke color of main setpoint needle |
--main-setpoint-needle-stroke-width |
Stroke width of main setpoint needle |
--inner-base-color |
Background color of solid base layer behind severity gradient background |
--inner-needle-stroke-color |
Stroke color of inner needle |
--inner-needle-stroke-width |
Stroke width of inner needle |
--inner-min-indicator-stroke-color |
Stroke color of inner min indicator |
--inner-min-indicator-stroke-width |
Stroke width of inner min indicator |
--inner-max-indicator-stroke-color |
Stroke color of inner max indicator |
--inner-max-indicator-stroke-width |
Stroke width of inner max indicator |
--inner-setpoint-needle-stroke-color |
Stroke color of inner setpoint needle |
--inner-setpoint-needle-stroke-width |
Stroke width of inner setpoint needle |
YAML structure - Showing is as possible and/or typical usage
type: custom:gauge-card-pro
entity: sensor.sensor
entity2: sensor.sensor
min: 0 | template
max: 100 | template
needle: true | false
needle_color: "#aaa" | template | light-dark-mode object
segments:
- from: 0
color: red
- from: 25
color: "#FFA500"
- from: 50
color: rgb(255, 255, 0)
- from: 100
color: var(--green-color)
gradient: true | false
gradient_background: true | false
gradient_resolution: auto | very_low | low | medium
value: "{{ value_template }}"
inner:
min: 0 | template
max: 100 | template
mode: severity | static | needle | on_main
needle_color: "#aaa" | template | light-dark-mode object
segments:
- from: 0
color: red
- from: 25
color: "#FFA500"
- from: 50
color: rgb(255, 255, 0)
- from: 100
color: var(--green-color)
gradient: true | false
gradient_background: true | false
gradient_resolution: auto | very_low | low | medium
value: "{{ value_template }}"
round: "off" | "full" | "small"
min_indicator:
type: entity | number | template
value: sensor.min_today
color: "#aaa" | template | light-dark-mode object
max_indicator:
type: entity | number | template
value: sensor.max_today
color: "#aaa" | template | light-dark-mode object
marker: true | false
min_indicator:
type: entity | number | template
value: sensor.min_today
color: "#aaa" | template | light-dark-mode object
label: true | false
label_color: "#aaa" | template | light-dark-mode object
precision: 1;
max_indicator:
type: entity | number | template
value: sensor.max_today
color: "#aaa" | template | light-dark-mode object
label: true | false
label_color: "#aaa" | template | light-dark-mode object
precision: 1;
setpoint:
type: entity | number | template
value: sensor.main_setpoint
color: "#aaa" | template | light-dark-mode object
label: true | false
label_color: "#aaa" | template | light-dark-mode object
precision: 1;
round: "off" | "full" | "medium" | "small"
titles:
primary:
value: Primary Title | template
color: "#aaa" | template
font_size: 15px | template
secondary:
value: Secondary Title | template
color: "#aaa" | template
font_size: 14px | template
value_texts:
primary:
value: "{{ states(entity) }}"
color: "#aaa"
unit_of_measurement: mm
unit_before_value: true | false
font_size_reduction: 15
tap_action:
action: more-info
entity: sensor.sensor
hold_action:
action: more-info
double_tap_action:
action: more-info
secondary:
value: "{{ states(entity2) }}"
color: "#aaa"
unit_of_measurement: mm
unit_before_value: true | false
tap_action:
action: more-info
entity: sensor.sensor
hold_action:
action: more-info
double_tap_action:
action: more-info
icons:
left:
type: battery | hvac-mode | swing-mode | template
value: sensor.battery
tap_action:
action: more-info
entity: sensor.sensor
hold_action:
action: more-info
double_tap_action:
action: more-info
right:
type: battery | hvac-mode | swing-mode | template
value: climate.thermostat
tap_action:
action: more-info
entity: sensor.sensor
hold_action:
action: more-info
double_tap_action:
action: more-info
hide_background: true | false
shapes:
main_min_indicator: M -40 0 m 3.75 0 a 3.75 3.75 90 1 0 -7.5 0 a 3.75 3.75 90 1 0 7.5 0
main_max_indicator: M 40 0 m 3.75 0 a 3.75 3.75 90 1 0 -7.5 0 a 3.75 3.75 90 1 0 7.5 0
tap_action:
action: more-info
entity: sensor.sensor
hold_action:
action: more-info
double_tap_action:
action: more-info
feature_entity: climate.ac
features:
- type: climate-overview
- type: adjust-temperature
- type: climate-hvac-modes
hvac_modes:
- cool
- dry
- fan_only
- "off"
- heat_cool
- heat
- type: climate-fan-modes
fan_modes:
- auto
- low
- medium
- high
- type: climate-swing-modes
swing_modes:
- "off"
- H
- V
- C
- H+V
card_mod | uix:
style: |
* {
--main-needle-stroke-width: 1px;
--main-needle-stroke-color: white;
}
1 Color examples
Fixed single value
primary_color: var(--info-color)
Single template value
primary_color: "{{ 'var(--info-color)' }}"
Light/Dark Mode fixed values
primary_color:
light_mode: "#FF00FF"
dark_mode: "#00FF00"
Light/Dark Mode template values
primary_color: |-
{{
{
"light_mode": "#FF00FF",
"dark_mode": "#00FF00"
}
}}
2 segments examples
Segments can be defined in two ways. Either using from: or pos:. For gradient gauges, the two behave differently. For more information checkout this wiki.
from and pos can be a number or a percentage (e.g. "50%")
Fixed list with from
segments:
- from: 0
color: "#4caf50"
- from: 25
color: "#8bc34a"
- from: 50
color: "#ffeb3b"
- from: 75
color: "#ff9800"
- from: 100
color: "#f44336"
- from: 125
color: "#926bc7"
- from: 150
color: "#795548"
Fixed list with pos
segments:
- pos: -1
color: var(--error-color)
- pos: -0.25
color: var(--warning-color)
- pos: 0.5
color: var(--success-color)
Template list
segments: |-
{% set max = states('sensor.max_sensor') | float %}
{{
[
{ "from": 0, "color": "#4caf50" },
{ "from": 25, "color": "#8bc34a" },
{ "from": 50, "color": "#ffeb3b" },
{ "from": 75, "color": "#ff9800" },
{ "from": 100, "color": "#f44336" },
{ "from": 125, "color": "#926bc7" },
{ "from": max, "color":"#795548" }
]
}}
Difference between from and pos segments
For from-segments, the colour that you configure is rendered/calculated at the midpoint with the next segment (or max). Checkout the image below that illustrates this change (segment values are the same for all images)

Installation
Install via HACS (recommended)

Manual
- Download
gauge-card-pro.js file from the [latest release][release-url].
- Put
gauge-card-pro.js file into your config/www folder.
- Add reference to
gauge-card-pro.js in Dashboard. There's two way to do that:
Translations
If you want to help translating Gauge Card Pro, feel free to create an issue or fork this repo and create an pull-request.
Credits
This card uses some functionality from Mushroom
This card uses some functionality from Calendar Card Pro
Gradient are generated using my up-to-date version of Gradient Path.