Sno Station
Sno Station is your agents' workstation: open-source software that turns the AI agents you already run into one squad on your own machine. Two heads are better than one, and they get better with every
1KOMMA5 Heartbeat Home Assistant Integration (HACS)
Translation pending
PluginsPython · ShellGitHub @BirknerAlexOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Loading the full README. The saved excerpt is shown below.
This is a HACS integration for Home Assistant to integrate 1KOMMA5GRAD
into your Home Assistant instance.
This integration is not related to 1KOMMA5GRAD and not officially supported by them.
This integration is for the latest 1KOMMA5GRAD Heartbeat API.
Warning: The new API is not available for all regions yet. The new API is required to use this integration with Home Assistant.
To check if you are using the latest generation of the Heartbeat API, check if you can log in to the
1KOMMA5° Heartbeat app (iOS,
Android).
Currently supported regions for the new API are (as of December 2025):Read the full README ↗This is a HACS integration for Home Assistant to integrate 1KOMMA5GRAD into your Home Assistant instance.
This integration is not related to 1KOMMA5GRAD and not officially supported by them.
Requires Home Assistant 2024.11 or newer.
This integration is for the latest 1KOMMA5GRAD Heartbeat API.
Warning: The new API is not available for all regions yet. The new API is required to use this integration with Home Assistant.
To check if you are using the latest generation of the Heartbeat API, check if you can log in to the 1KOMMA5° Heartbeat app (iOS, Android).
Currently supported regions for the new API are (as of December 2025):
You can check this also by going to https://gaia-charge.github.io/app-not-available/ and enter 6455889609 as App ID.
This checks if the latest iOS App is available in your region, which also uses the new API.
If you are still using https://my.1komma5.io/ for login (or the old app), you are still using the old API and please use this https://github.com/derlangemarkus/1komma5grad_ha to integrate 1KOMMA5GRAD into Home Assistant instead.
During setup you enter the e-mail address and password of your 1KOMMA5° Heartbeat account. Under Settings → Devices & services → 1KOMMA5GRAD → Configure you can change:
If the password is rejected (e.g. after you changed it), Home Assistant asks you to re-authenticate the integration.
The integration creates the following entities per system:
| Entity | Description |
|---|---|
| Electricity Price | Current electricity price (incl. grid costs and VAT). Includes forecast attributes (see below). |
| Grid Feed In Power | Power currently imported from the grid (W) |
| Grid Feed Out Power | Power currently exported to the grid (W) |
| Grid Feed Power | Net grid power flow (W) |
| Consumption Power | Total household consumption (W) |
| Solar Production Power | Current solar panel output (W) |
| EV Chargers Aggregated Power | Combined power of all EV chargers (W) |
| Heat Pumps Aggregated Power | Combined power of all heat pumps (W) |
| Battery State of Charge | Battery charge level (%) |
| Battery In Power | Power flowing into the battery (W) |
| Battery Out Power | Power flowing out of the battery (W) |
| Battery Optimization Decision | Battery decision Heartbeat AI currently has planned, e.g. BATTERY_NO_DISCHARGE, or NONE. Window, price and upcoming windows as attributes. See Battery decisions |
| Heat Pump Optimization Decision | Decision Heartbeat AI currently has planned for the heat pump, e.g. HEATPUMP_AUTO, or NONE. Only created if the system has a heat pump. See Heat pump decisions |
| Spot Price | Current spot price (EUR/kWh, incl. VAT, without grid costs). price_without_vat attribute |
| Grid Costs | Current grid costs (EUR/kWh, incl. VAT). price_without_vat attribute |
| Grid Supply Cost Today | Cost of the energy drawn from the grid today (EUR, incl. grid costs and VAT). Other variants as attributes |
| Feed-in Earnings Today | Earnings from energy fed into the grid today (EUR) |
| Heartbeat Price | Your effective price per kWh today (EUR/kWh). week, , and attributes |
The last five sensors are refreshed once per hour; they stay unknown if your contract does not include the feature (e.g. Energy Trader).
Energy sensors (kWh) are also created for grid in/out, solar production, EV chargers, heat pumps, and battery in/out to enable the HA Energy Dashboard.
They integrate the power readings over time. For each of them a second ... Energy ... Today sensor reads the daily total
measured by 1KOMMA5GRAD, which matches the dashboard of the app and resets at midnight. These daily sensors are disabled by default.
If your system has more than one EV charger or more than one heat pump, a power sensor is created for each of them
(EV Charger <name> Power, Heat Pump <name> Power) in addition to the aggregated one.
| Entity | Description |
|---|---|
| Battery No Discharge Active | On while Heartbeat AI keeps the battery from discharging (BATTERY_NO_DISCHARGE) or charges it from the grid (BATTERY_CHARGE_FROM_GRID). See Battery decisions |
| Entity | Description |
|---|---|
| Battery Plan | The battery windows planned by Heartbeat AI as calendar events. See Battery decisions |
| Heat Pump Plan | The heat pump windows planned by Heartbeat AI as calendar events. Only created if the system has a heat pump. See Heat pump decisions |
| Entity | Description |
|---|---|
| Heartbeat Automatic Mode | Toggle the Energy Management System (EMS) automatic mode on/off |
| Entity | Description |
|---|---|
| EV Charging Mode | Select charging mode per EV (e.g. SMART_CHARGE, SOLAR_CHARGE, QUICK_CHARGE) |
| Entity | Description |
|---|---|
| EV Current State of Charge | Current EV battery charge level (0-100%). Can be set manually while the EV is in SMART_CHARGE mode. |
| EV Target State of Charge | Charge level (0-100%) the EV should reach by its departure time |
| Entity | Description |
|---|---|
| EV Departure Time | Time by which the EV should have reached its target state of charge |
Heartbeat AI plans when the home battery is held back or charged from the grid. Three entities expose this plan:
| Entity | Use it for |
|---|---|
binary_sensor.battery_no_discharge_active_YOUR_SYSTEM_ID | On while the battery is held back (BATTERY_NO_DISCHARGE) or charged from the grid (BATTERY_CHARGE_FROM_GRID). The simplest trigger for automations |
sensor.battery_optimization_decision_YOUR_SYSTEM_ID | The current decision as state, as sent by the API (so decisions this integration does not know yet show up as they are), NONE if nothing is planned for the battery |
calendar.battery_plan_YOUR_SYSTEM_ID | The planned windows as events (e.g. for the calendar card or a trigger "when the next window begins"). The calendar is on while any battery window is active |
This is useful for loads that Heartbeat does not control, e.g. a third-party wallbox: they are covered from the home battery as regular household load, unless you only start them while Heartbeat holds the battery anyway, so they are supplied from the grid at the cheap price.
The plan is read every 15 minutes and the states switch exactly when a 15 minute slot starts or ends. The entities are unavailable until the plan could be fetched once.
The binary sensor has all of these, the decision sensor everything except decision (that is its state).
| Attribute | Description |
|---|---|
decision | Current battery decision of Heartbeat AI (also decisions not known to the integration), null if there is none |
window_start / window_end | Start and end (ISO, UTC) of the current window. Adjacent 15 minute slots with the same decision are merged |
market_price | Market price of the current 15 minute slot in EUR/kWh |
upcoming | Planned battery windows as {decision, from, to, market_price} objects, market_price is the average of the window |
The plan usually only reaches a few hours ahead (the calendar also shows the last 12 hours), so upcoming and the calendar can be short or empty.
Calendar events are titled by decision (Battery: no discharge, Battery: charge from grid) and carry the decision and the average market price in
the description.
Charge a wallbox that Heartbeat cannot control only while the battery is held back:
alias: "Charge wallbox while Heartbeat holds the battery"
triggers:
- trigger: state
entity_id: binary_sensor.battery_no_discharge_active_YOUR_SYSTEM_ID
to:
- "on"
- "off"
actions:
- action: "switch.turn_{{ trigger.to_state.state }}"
target:
entity_id: switch.my_wallbox
The same plan contains the decisions for the heat pump. If your system has a heat pump, there is a second set of entities with the same behaviour, attributes and update times as the battery ones:
| Entity | Description |
|---|---|
sensor.heat_pump_optimization_decision_YOUR_SYSTEM_ID | The current heat pump decision as sent by the API (so far only HEATPUMP_AUTO has been seen), NONE if nothing is planned. Attributes: window_start, window_end, market_price, upcoming |
calendar.heat_pump_plan_YOUR_SYSTEM_ID | The planned heat pump windows as events, titled Heat pump: auto. On while a window is active |
There is no binary sensor for the heat pump, as the known decision does not hold anything back.
The electricity price sensor exposes future prices (in 15 minute steps) as extra state attributes. This allows you to build automations based on upcoming prices (e.g. run appliances during the cheapest hours).
Prices for the current day are always available. Next-day prices are typically published around 14:00 CET.
| Attribute | Description |
|---|---|
forecast | List of future 15 minute prices as {datetime, price} objects (datetime is the start of the slot, in UTC) |
price_today_min | Lowest price of the current day |
price_today_max | Highest price of the current day |
price_today_avg | Average price of the current day |
cheapest_upcoming_hour | ISO datetime of the cheapest future full hour (average of its four 15 minute prices) |
cheapest_upcoming_price | Average price of the cheapest future hour |
forecast_hours_available | Number of future 15 minute prices in forecast (despite the name, not hours; 96 per full day, indicates if next-day prices are published) |
You can use these in Developer Tools > Templates or in automations:
# Current price
{{ states('sensor.electricity_price_YOUR_SYSTEM_ID') }}
# Forecast list
{{ state_attr('sensor.electricity_price_YOUR_SYSTEM_ID', 'forecast') }}
# Cheapest upcoming hour
{{ state_attr('sensor.electricity_price_YOUR_SYSTEM_ID', 'cheapest_upcoming_hour') }}
# Average price today
{{ state_attr('sensor.electricity_price_YOUR_SYSTEM_ID', 'price_today_avg') }}
Start a device when the cheapest upcoming hour begins:
alias: "Run dishwasher at cheapest hour"
trigger:
- platform: template
value_template: >
{{ now().isoformat()[:13] ==
state_attr('sensor.electricity_price_YOUR_SYSTEM_ID', 'cheapest_upcoming_hour')[:13] }}
action:
- service: switch.turn_on
target:
entity_id: switch.dishwasher
If your EV integration exposes a battery level sensor (e.g. Tesla, Hyundai/Kia, BMW, or any other), you can sync the EV's state of charge to the EV charger so it always has an accurate SoC for smart charging decisions. The example below uses Tesla, but simply replace the sensor entity with your EV's battery level sensor:
alias: Sync EV SoC to 1KOMMA5GRAD EV Charger
description: ""
triggers:
- entity_id: sensor.my_tesla_battery_level
trigger: state
conditions:
- condition: template
value_template: |
{{ states('sensor.my_tesla_battery_level') | int(0) > 0 and
states('sensor.my_tesla_battery_level') | int(0) != states('number.ev_current_state_of_charge_YOUR_SYSTEM_ID') | int(0)
}}
actions:
- target:
entity_id: number.ev_current_state_of_charge_YOUR_SYSTEM_ID
data:
value: "{{ states('sensor.my_tesla_battery_level') | int(0) }}"
action: number.set_value
- delay: "00:10:00"
mode: single
Replace sensor.my_tesla_battery_level with your EV's battery level sensor entity and number.ev_current_state_of_charge_YOUR_SYSTEM_ID with your EV charger SoC entity.
The integration can send diagnostics to the developer so that errors and changes of the 1KOMMA5GRAD API can be found and fixed quickly. This is disabled by default; enable it under Settings → Devices & services → 1KOMMA5GRAD → Configure → Send diagnostics.
When enabled, the following is sent to a GlitchTip instance (Sentry compatible) operated by the developer:
Your credentials, name, email address and host information are never sent. The integration uses its own Sentry client, separate from Home Assistant's own Sentry integration and from other integrations.
This integration is fully community driven and not officially supported by 1KOMMA5GRAD. Use at your own risk. We are not responsible for any damage or issues caused by using this integration.
This integration is not affiliated with or endorsed by 1KOMMA5GRAD.
This integration is regularly tested against the following Heartbeat components:
Other components like heat pumps are not tested due to lack of hardware availability.
The Heartbeat API calls observed in the official app are documented as an unofficial OpenAPI spec: Heartbeat API on Swagger UI (JSON). It is reverse-engineered, contains no personal data and may lag behind the real API.
If you want to contribute to this project, please have a look at the CONTRIBUTE.md file.
monthhalf_yearyear| Comparison Price | Reference tariff your savings are compared against (EUR/kWh) |
| Heartbeat Savings 30 Days | Savings over the last 30 days (EUR) |
| Energy Trader Savings | Lifetime Energy Trader savings (EUR). green_energy_savings and status attributes |
| Energy Trader Average Monthly Savings | Average monthly Energy Trader savings (EUR) |