Entities
You can expect these entities, although names will vary based on your home name (here "Home"), installed devices (in this example "aroTHERM plus" and "Hydraulic Station"), or the naming of your heating zones (in this case "Zone 1"):
Sample Entities
| Entity | Unit | Class | Sample |
|---|---|---|---|
| Home Trouble Codes | problem | off | |
| Home Online Status | connectivity | on | |
| Home Firmware Update Required | update | off | |
| Home Firmware Update Enabled | on | ||
| Home EEBUS Enabled | on | ||
| Home EEBUS Capable | on | ||
| Home Circuit 0 Cooling Allowed | on | ||
| Home Zone 1 (Circuit 0) Manual Cooling Active | off | ||
| Home Zone 1 (Circuit 0) | on | ||
| Home Zone 1 (Circuit 0) | on | ||
| Home Domestic Hot Water 0 | on | ||
| Circulating Water in Home Domestic Hot Water 0 | off | ||
| Home Zone 1 (Circuit 0) Climate | auto | ||
| Home Away Mode Start Date | unknown | ||
| Home Away Mode End Date | unknown | ||
| Home Manual Cooling Start Date | unknown | ||
| Home Manual Cooling End Date | unknown | ||
| Home Holiday Duration Remaining | d | 0 | |
| Home Manual Cooling Duration | d | 0 | |
| Home Zone 1 (Circuit 0) Quick Veto Duration | h | 2 | |
| Home Circuit 0 Heating Curve | 1.2733452 | ||
| Home Circuit 0 Heat Demand Limited by Outside Temperature | °C | 18.0 | |
| Home Circuit 0 Min Flow Temperature Setpoint | °C | 32.0 | |
| Vaillant API Request Count | 51 | ||
| Home Outdoor Temperature | °C | temperature | 17.3 |
| Home System Water Pressure | bar | pressure | 1.5 |
| Home Firmware Version | 0357.40.35 | ||
| Home Zone 1 (Circuit 0) Desired Temperature | °C | temperature | 0.0 |
| Home Zone 1 (Circuit 0) Desired Heating Temperature | °C | temperature | 0.0 |
| Home Zone 1 (Circuit 0) Desired Cooling Temperature | °C | temperature | 25.0 |
| Home Zone 1 (Circuit 0) Current Temperature | °C | temperature | 21.5 |
| Home Zone 1 (Circuit 0) Humidity | % | humidity | 62.0 |
| Home Zone 1 (Circuit 0) Heating Operating Mode | Time Controlled | ||
| Home Zone 1 (Circuit 0) Heating State | Idle | ||
| Home Zone 1 (Circuit 0) Current Special Function | Quick Veto | ||
| Home Circuit 0 State | STANDBY | ||
| Home Circuit 0 Current Flow Temperature | °C | temperature | 41.0 |
| Home Circuit 0 Heating Curve | 1.27 | ||
| Home Domestic Hot Water 0 Tank Temperature | °C | temperature | 51.5 |
| Home Domestic Hot Water 0 Setpoint | °C | temperature | 52.0 |
| Home Domestic Hot Water 0 Operation Mode | Time Controlled | ||
| Home Domestic Hot Water 0 Current Special Function | Regular | ||
| Home Heating Energy Efficiency | 4.9 | ||
| Home Device 0 aroTHERM plus Heating Energy Efficiency | 4.9 | ||
| Home Device 0 aroTHERM plus Consumed Electrical Energy Cooling | Wh | energy | 0.0 |
| Home Device 0 aroTHERM plus Consumed Electrical Energy Domestic Hot Water | Wh | energy | 3000.0 |
| Home Device 0 aroTHERM plus Consumed Electrical Energy Heating | Wh | energy | 4000.0 |
| Home Device 0 aroTHERM plus Earned Environment Energy Cooling | Wh | energy | 0.0 |
| Home Device 0 aroTHERM plus Earned Environment Energy Domestic Hot Water | Wh | energy | 9000.0 |
| Home Device 0 aroTHERM plus Earned Environment Energy Heating | Wh | energy | 18000.0 |
| Home Device 0 aroTHERM plus Heat Generated Heating | Wh | energy | 22000.0 |
| Home Device 0 aroTHERM plus Heat Generated Domestic Hot Water | Wh | energy | 12000.0 |
| Home Device 0 aroTHERM plus Heat Generated Cooling | Wh | energy | 0.0 |
| Home Device 1 Hydraulic Station Heating Energy Efficiency | unknown | ||
| Home Device 1 Hydraulic Station Consumed Electrical Energy Domestic Hot Water | Wh | energy | 0.0 |
| Home Device 1 Hydraulic Station Consumed Electrical Energy Heating | Wh | energy | 0.0 |
| Home Away Mode | off | ||
| Home EEBUS | on | ||
| Home Manual Cooling | off | ||
| Home Domestic Hot Water 0 Boost | off | ||
| Home Zone 1 (Circuit 0) Ventilation Boost | off | ||
| Home Domestic Hot Water 0 | Time Controlled |
Climate Entities
Home Assistant's built-in climate modes differ from Vaillant's. The following table shows the mapping for zones:
| Home Assistant Mode | Home Assistant Preset | Vaillant Mode |
|---|---|---|
| Off | No Preset | Off |
| Auto | No Preset | Time Controlled Mode |
| Auto | Eco Preset | Eco mode |
| Heat / Cool | No Preset | Manual Mode |
| Auto Heat / Cool |
Away Preset | Away Mode |
| Auto Heat / Cool |
Boost Preset | Quick Veto Mode |
| Auto Heat / Cool |
Sleep Preset | Off |
| Home Assistant Mode | Home Assistant Preset | Vaillant Mode |
|---|---|---|
| Off | No Preset | Off |
| Auto | No Preset | Auto Mode |
| Auto | Home Preset | Day Mode |
| Auto | Eco Preset | Night Mode |
Ambisense Room Thermostats
There are separate climate entities for Ambisense room thermostats (only supported on VRC700 controllers):
| Home Assistant Mode | Home Assistant Preset | Vaillant Mode |
|---|---|---|
| Off | No Preset | Off |
| Auto | No Preset | Auto Mode |
| Heat / Cool | No Preset | Manual Mode |
| Auto Heat / Cool |
Boost Preset | Quick Veto Mode |
Calendar Entities
Each zone and water heater has a calendar for changing the heating schedule. Water heaters also have a calendar for the circulation pump.
In each calendar, you can:
- Create new time slots (set a target temperature as the event summary)
- Update existing time slots by changing start time, end time, weekdays, or the target temperature in the event summary
- Delete time slots on a specific weekday
Note
Make sure to select weekly repetition whenever you create, update, or delete events.
Individual events can't be edited, only the whole weekly schedule.
Extra State Attributes
Some entities come with extra state attributes for debugging and advanced usage. Your attributes may be different, depending on your devices.
Home Sensor
migration_finished_at: redacted
online_state: ONLINE
cooling_start_temperature: 15
continuous_heating_start_setpoint: -26
alternative_point: -21
heating_circuit_bivalence_point: -10
dhw_bivalence_point: -7
automatic_cooling_on_off: false
adaptive_heating_curve: true
dhw_maximum_loading_time: 60
dhw_hysteresis: 5
dhw_flow_setpoint_offset: 25
continuous_heating_room_setpoint: 20
hybrid_control_strategy: BIVALENCE_POINT
max_flow_setpoint_hp_error: 25
dhw_maximum_temperature: 80
maximum_preheating_time: 0
paralell_tank_loading_allowed: false
outdoor_temperature: 20.097656
outdoor_temperature_average24h: 20.464844
system_water_pressure: 1.7
energy_manager_state: STANDBY
system_off: false
controller_type: VRC720
system_scheme: 8
backup_heater_type: CONDENSING
backup_heater_allowed_for: DHW_AND_HEATING
temporary_allow_backup_heater: DISABLED
module_configuration_v_r71: 3
energy_provide_power_cut_behavior: DISABLE_HEATPUMP_AND_BACKUP_HEATER
smart_photovoltaic_buffer_offset: 10
external_energy_management_activation: false
energy_management:
energy_manager:
available: false
compatible: false
energy_management_status:
thermal_storage:
domestic_hot_water:
available: false
selected: false
heating_buffer_cylinder:
available: false
selected: true
eebus:
ski: redacted
brand: Vaillant
type: Gateway
model: VR921
spine_enabled: false
spine_enabled_status: DETERMINED
pine_capable: true
Control Error Binary Sensor
diagnostic_trouble_codes:
- serial_number:
article_number: '0020260962'
codes: [ ]
- serial_number:
article_number: '0010021118'
codes: [ ]
- serial_number:
article_number: '0010023609'
codes: [ ]
- serial_number:
article_number: '0020260914'
codes: [ ]
Climate Entity
hvac_modes: off, heat_cool, auto
min_temp: 7
max_temp: 35
preset_modes: boost, none, away, sleep
current_temperature: 21.5
temperature: 0
current_humidity: 53
preset_mode: none
time_program_heating:
extra_fields: { }
monday:
- extra_fields: { }
start_time: 420
end_time: 1290
setpoint: 21
tuesday:
- extra_fields: { }
start_time: 420
end_time: 1290
setpoint: 21
wednesday:
- extra_fields: { }
start_time: 420
end_time: 1290
setpoint: 21
thursday:
- extra_fields: { }
start_time: 420
end_time: 1290
setpoint: 21
friday:
- extra_fields: { }
start_time: 420
end_time: 1290
setpoint: 21
saturday:
- extra_fields: { }
start_time: 420
end_time: 1290
setpoint: 21
sunday:
- extra_fields: { }
start_time: 420
end_time: 1290
setpoint: 21
meta_info:
min_slots_per_day: 0
max_slots_per_day: 12
setpoint_required_per_slot: true
quick_veto_start_date_time: null
quick_veto_end_date_time: null
Circuit State Sensor
room_temperature_control_mode: THERMOSTAT_FUNCTION
cooling_flow_temperature_minimum_setpoint: 20
heating_circuit_type: DIRECT_HEATING_CIRCUIT
heating_circuit_flow_setpoint: 0
heating_circuit_flow_setpoint_excess_offset: 0
heat_demand_limited_by_outside_temperature: 19
Domestic Hot Water Entity
min_temp: 35
max_temp: 70
operation_list: Manual, Time Controlled, Off, Cylinder Boost
current_temperature: 44
temperature: 50
target_temp_high: null
target_temp_low: null
operation_mode: Time Controlled
time_program_dhw:
extra_fields: { }
monday:
- extra_fields: { }
start_time: 330
end_time: 1260
tuesday:
- extra_fields: { }
start_time: 330
end_time: 1260
wednesday:
- extra_fields: { }
start_time: 330
end_time: 1260
thursday:
- extra_fields: { }
start_time: 330
end_time: 1260
friday:
- extra_fields: { }
start_time: 330
end_time: 1260
saturday:
- extra_fields: { }
start_time: 450
end_time: 1260
sunday:
- extra_fields: { }
start_time: 450
end_time: 1260
meta_info:
min_slots_per_day: 0
max_slots_per_day: 3
setpoint_required_per_slot: false
time_program_circulation_pump:
extra_fields: { }
monday: [ ]
tuesday: [ ]
wednesday: [ ]
thursday: [ ]
friday: [ ]
saturday: [ ]
sunday: [ ]
meta_info:
min_slots_per_day: 0
max_slots_per_day: 3
setpoint_required_per_slot: false
Energy Statistics
In addition to the energy sensors listed above (which show today's running total for each device and operation mode), the integration imports the myVAILLANT hourly energy data into Home Assistant's long-term statistics. This is what powers correct per-hour attribution in the Energy Dashboard. Each hour's heat-pump consumption is recorded against the hour it actually happened, not the time it was retrieved.
These statistics appear under external IDs of the form
mypyllant:mypyllant_<system>_<device>_<operation>_<index> (Developer Tools → Statistics), one
per energy sensor (e.g. Consumed Electrical Energy Domestic Hot Water, ... Heating).
How it works
- On each refresh, the daily-data coordinator fetches two days of hourly buckets (yesterday + today) from the myVAILLANT API and writes them as external statistics.
sumis cumulative and monotonically increasing (it carries the previous day's running total forward), so the Energy Dashboard never shows a negative spike at midnight.stateandlast_resetreset at the start of each day, mirroring how other energy integrations (e.g.octopus_energy) model day-cumulative statistics.
Why two days are fetched
The myVAILLANT API only returns a value for completed hours: the hour currently in
progress comes back as null. That includes the final hour of the day (23:00–00:00): at
23:55 it is still in progress, so it cannot be captured before midnight. Because the coordinator
re-fetches yesterday as well as today, a refresh shortly after midnight backfills that
final hour once it has finalised. Re-writing yesterday is idempotent (identical sum values),
so the only new row added is the previously-missing hour.
Keeping the data up to date
important
To avoid hitting the myVAILLANT API quota, the daily energy data is not refreshed automatically: it is only fetched once when the integration loads. You therefore need to trigger a refresh yourself to keep the hourly statistics current. There are two recommended approaches depending on whether you have hourly electricity metering in Home Assistant.
A refresh is triggered by calling homeassistant.update_entity on any of the integration's
energy / efficiency sensors (e.g. sensor.home_device_0_arotherm_plus_heating_energy_efficiency).
You can also set the "Seconds between energy data updates" option (update_interval_daily,
left empty by default) to poll on a fixed interval, but an automation gives you more control over
timing and quota.
Note that the myVAILLANT API finalises a completed hour a few minutes after it ends, so trigger
the refresh a little past the hour (:15 works well) rather than exactly on the hour.
Option A: hourly electricity metering (recommended)
If Home Assistant knows your grid consumption (e.g. from a smart-meter / DNO integration), only poll myVAILLANT when the heat pump has actually drawn power in the previous hour. This keeps API usage low while capturing every active hour within ~1 hour.
First create a helper that reports your grid consumption over a rolling ~hour, using the
built-in statistics platform. Point
it at an accumulative (monotonically increasing) consumption sensor in kWh:
# configuration.yaml
sensor:
- platform: statistics
name: "Grid consumption rolling hour"
unique_id: grid_consumption_rolling_hour
entity_id: sensor.electricity_meter_accumulative_consumption # your smart-meter kWh total
state_characteristic: change # net change over the buffered window
max_age:
minutes: 55
sampling_size: 250
Note
If your consumption sensor resets at midnight, change may briefly read negative around the
reset; the above: 1 condition below simply won't fire then, which is harmless. The 00:30
snapshot covers that boundary.
Then add an automation that refreshes at :15 when the previous hour's consumption exceeded a
threshold (1 kWh works well: high enough to ignore base load, low enough to catch any
real heat-pump cycle), plus an unconditional 00:30 snapshot that backfills the previous day
in full:
# automations.yaml
- id: mypyllant_energy_refresh
alias: myVAILLANT - Refresh energy data
description: >
Refresh hourly energy at :15 when the previous hour's grid usage exceeded 1 kWh (so we
only poll when the heat pump likely ran), plus an unconditional 00:30 daily snapshot that
backfills the previous day's final hour.
triggers:
- trigger: time_pattern
minutes: "15"
id: hourly
- trigger: time
at: "00:30:00"
id: snapshot
conditions:
- condition: or
conditions:
- condition: numeric_state
entity_id: sensor.grid_consumption_rolling_hour
above: 1
- condition: trigger
id: snapshot
actions:
- action: homeassistant.update_entity
target:
entity_id: sensor.home_device_0_arotherm_plus_heating_energy_efficiency
mode: single
Because the daily snapshot reprocesses the whole previous day, any hour missed intraday (for example a short cycle that didn't cross the 1 kWh threshold) is recovered automatically by the next morning. Daily totals are always correct.
Option B: no hourly metering
If you don't have an hourly grid-consumption sensor to gate on, simply refresh once per day at 00:30. Thanks to the two-day fetch, this pulls the entire previous day (now complete, including its final hour) plus the current day so far. You get accurate per-hour data one day in arrears:
# automations.yaml
- id: mypyllant_energy_daily_refresh
alias: myVAILLANT - Daily energy refresh
description: Pull the full previous day's hourly energy at 00:30 (data lands one day in arrears).
triggers:
- trigger: time
at: "00:30:00"
actions:
- action: homeassistant.update_entity
target:
entity_id: sensor.home_device_0_arotherm_plus_heating_energy_efficiency
mode: single
Visualising with Plotly Graph
The long-term statistics can be displayed as hourly bar charts using the Plotly Graph Card.
Why not ApexCharts?
The popular ApexCharts card requires a standard entity ID for every
series. It cannot query external statistics directly, which means you cannot mix a
mypyllant: statistic (energy bars) with a normal temperature sensor in the same chart. Plotly
Graph Card supports both in a single card via its statistic: option.
Because the statistics are external, each energy series must use statistic: sum with
period: hour and a delta filter to convert the cumulative sum into per-hour consumption
values. Find your statistic ID in Developer Tools → Statistics (filter by mypyllant:).
Temperature sensors (tank, zone, outdoor) are also recorded as long-term statistics by HA's
recorder. Using statistic: mean with period: hour on temperature series aligns them to the
same hourly bucket as the energy bars, which gives accurate correlation across 7- and 14-day
views.
Example: Domestic Hot Water energy vs tank temperature
type: custom:plotly-graph
title: Hot Water ℃ vs Energy Usage
hours_to_show: 24
refresh_interval: auto
autorange_after_scroll: true # (7)
entities:
- entity: sensor.home_domestic_hot_water_0_tank_temperature
name: Tank Temperature
statistic: mean # (1)
period: hour
line:
color: "#e74c3c"
width: 2
- entity: mypyllant:mypyllant_<your_statistic_id>
name: DHW Energy (Wh/h)
unit_of_measurement: Wh # (5)
statistic: sum # (2)
period: hour
type: bar
yaxis: y2
marker:
color: rgba(52, 152, 219, 0.6)
filters:
- delta # (3)
- map_y_numbers: Math.max(0, y) # (4)
layout:
xaxis:
rangeselector: # (8)
y: 1.1
buttons:
- count: 1
step: day
label: 1 Day
- count: 7
step: day
label: 7 Days
- count: 14
step: day
label: 14 Days
yaxis:
title: Temperature (°C)
yaxis2:
title: Energy (Wh)
overlaying: y
side: right
rangemode: tozero
hoverformat: .0f # (6)
- Reads the hourly mean from HA's recorder statistics, aligning the temperature line to the same hourly buckets as the energy bars.
- Reads from the external long-term statistics written by this integration, not entity state history.
- Converts the monotonically increasing
suminto per-hour consumption values. - Suppresses the rare small negative value that can appear at day boundaries while the baseline is being established.
- Required for the correct unit in the hover tooltip — external statistics don't expose their unit automatically to the card.
- Displays whole-number Wh values in the tooltip.
- Keeps axes scaled correctly when switching between time ranges.
- Adds 1 Day / 7 Days / 14 Days quick-select buttons above the chart.