A different take on the thermostat card for Home Assistant Lovelace UI. The aim is to provide a card with simpler interactions that are easier to use and take up less space, as well as provide more modularity to tweak the card. For example the abiltity to embed sensor values that are relevant to your thermostat (like humidity, energy usage, hours on +++).
Hide everything but sensors and temperature control:
type: custom:simple-thermostat
entity: climate.living_room
step_layout: row
name: false
icon: false
control: falseHome Assistant 0.84 or higher
- Download the
simple-thermostat.jsfrom the latest release and store it in yourconfiguration/wwwfolder. Previously you could download the source file from Github but starting from the 0.14 release that is no longer possible. If you try to do so it will crash - Configure Lovelace to load the card:
resources:
- url: /local/simple-thermostat.js?v=1
type: moduleentitystring: The thermostat entity id requiredtoggle_entitystring: An entity id to create a toggle in the header for. This gives the option to control a separate entity which can be related to the thermostat entity (like a switch, or input_boolean)namestring|false: Override the card name, or disable showing a name at all. Default is to use the friendly_name of the thermostat provideddecimalsnumber: Specify number of decimals to use: 1 or 0fallbackstring: Specify a text to display if a valid set point can't be determined. Defaults toN/Aiconstring|object: Show an icon next to the card name. You can also pass an object to specify state-specific icons. Defaults state-specific icons radiator/radiator-disabled/snowflakeidle: string: Use this icon for state idleheating: string Use this icon for state heatingcool: string Use this icon for state cool
step_sizenumber: Override the default 0.5 step size for increasing/decreasing the temperaturestep_layoutstring:roworcolumn(default). Usingrowwill make the card more compactlabelobject: Override untranslated labelstemperature: string Override Temperature labelstate: string Override State label
hideobject: Control specifically information fields to show. Defaults to showing everythingtemperature: bool (Default tofalse)state: bool (Default tofalse)
controlobject|array (From 0.27)_namesbool: Show mode names or not. Defaults to true_iconsbool: Show mode icons or not. Defaults to true_headingsbool: Show a heading for each mode button row. Defaults to true{type}object|bool: The key of the mode type (hvac, preset, fan, swing)_namestring: Override the name of the mode type_hide_when_offbool: Hides the mode type selection row when the entity is off. Defaults to false shown{mode}string: Name of mode type to conttrolnamestring|bool: Specify a custom name or set tofalseto show only the iconiconstring|bool: Specify a custom icon or set tofalseto not show icon
sensorsarray|falseentitystring: A sensor value entity idnamestring: Specify a sensor name to use instead of the default friendly_nameiconstring: Specify an icon to use instead of a nameattributestring: The key for an attribute to use instead of state. If this sensor has no entity it will use the main entity's attributesunitstring: When specifying an attribute you can manually set the unit to display
In 0.27, in order to both support changes in the climate domain and to support controlling all modes like hvac, preset, fan and swing modes the old modes configuration have been removed and replaced with a control config.
The control config is most easily explained using a few examples as it supports both a simplified definition using just an array to list the types of modes to control. By default, with no config, it will show hvac and preset (if the entity supports it). You can replicate the default manually like this:
control:
- hvac
- presetThis will list all modes for both types. You can get more fine grained control by switching to an object format and taking control of specific modes:
control:
preset:
away: true
none:
name: Not setWhat is worth noticing is that there is no merging of the default any more, so with this config you will not get hvac_mode displayed. If you still want it to display like default you need to set:
control:
preset:
away: true
none:
name: Not set
hvac: trueAs previously you can define both name and icon on the individual modes, including setting them to false. What is new is that if you want to only show icons you can hide the names on all modes for the card (or vice versa for only showing names)
control:
_names: falsePlease note that you need to quote off/on mode keys to not have them interprented as true/false.
control:
hvac:
off: will not work
"off": workscards:
- type: 'custom:simple-thermostat'
entity: climate.my_room
step_size: 1
sensors:
- entity: sensor.fibaro_system_fgwpef_wall_plug_gen5_energy
- entity: sensor.fibaro_system_fgwpef_wall_plug_gen5_power
name: Energy today
- attribute: min_temp
name: Min temp
control:
hvac:
some_mode: false
another_mode: false
'off':
name: Make it cold
icon: false
'on':
name: false
icon: mdi:whitewalkerThe card uses the following CSS variables:
| Var name | Default value | Usage |
|---|---|---|
| --st-font-size-xl | var(--paper-font-display3_-_font-size) | Used for target temperature |
| --st-font-size-l | var(--paper-font-display2_-_font-size) | Unused at the moment |
| --st-font-size-m | var(--paper-font-title_-_font-size) | Used for target temperature unit |
| --st-font-size-title | var(--ha-card-header-font-size, 24 | Font size for card heading |
| --st-font-size-sensors | var(--paper-font-subhead_-_font-size) | Font size for sensors |
| --st-spacing | 4px | Base unit for spacing. Used in multiples many places |
| --st-mode-active-background | var(--primary-color) | Background color for active mode button |
| --st-mode-active-color | var(--text-primary-color, #fff) | Text color for active mode button |
| --st-mode-background | #dff4fd | Background color for inactive mode button |
These variables can be changed globally in the current theme or on each card via card-mod.
Example that makes everything smaller and more compact except sensors that gets blown up completely.
example-theme:
st-font-size-xl: 24px
st-font-size-m: 20px
st-font-size-title: 20px
st-font-size-sensors: 30px
st-spacing: 2pxSame example as above, but will only apply to a single card.
type: 'custom:simple-thermostat'
style: |
ha-card {
--st-font-size-xl: 24px;
--st-font-size-m: 20px;
--st-font-size-title: 20px;
--st-font-size-sensors: 30px;
--st-spacing: 2px;
}
...
