SlopScore
00 crowd

1komma5-ha (github.com/mrebbert/1komma5-ha)

Home Assistant integration (HACS) for the 1KOMMA5° / 1komma5 / 1k5 Heartbeat energy platform: dynamischer Stromtarif, PV, battery, Wärmepumpe, EV wallbox, weather forecast, full Energy Dashboard support.
Python · ★ 13 · 1 forks · MIT · paperwork by the Cap'mmostly ai (inferred)light human (inferred)works-on-my-machine (inferred)iot
listed 2 hours ago by mrebbert · last checked 33 minutes ago
The owner didn't write this. This repo never submitted itself. The Cap'm found it on a truffle trawl and wrote its paperwork from what GitHub already shows. Picked by hand by the Cap'm on 2026-09-11: An unofficial Home Assistant integration for the 1KOMMA5° Heartbeat solar, battery and heat-pump platform, "built 100 % vibe-coded with AI assistance". 13 stars; MIT license. The owner did not submit this. Votes count; awards don't until the owner claims it.

I'm not calling your project slop! Geeze, it's a joke... Do you own this repo?

Log in with GitHub as mrebbert. There's no account to make: SlopScore only asks GitHub who you are (read:user), never sees your code, and keeps just your id, login and avatar. Then you can:

  • Keep it, on your terms. Commit your own slopscore.md (spec) and press Refresh. Your paperwork replaces the Cap'm's, and you can submit it for Slop of the Day.
  • Take it down. One click on Remove. It stays gone; the trawl never brings it back.

Log in with GitHub

Can't log in as the owner? Request a takedown. No login needed, and a trawled listing comes down right away.

GitHub says
Home Assistant integration (HACS) for the 1KOMMA5° / 1komma5 / 1k5 Heartbeat energy platform: dynamischer Stromtarif, PV, battery, Wärmepumpe, EV wallbox, weather forecast, full Energy Dashboard support.
topics
1k51komma5battery-storagedynamic-pricingenergyev-chargerhacshacs-integrationheartbeatheat-pumphome-assistanthomeassistantsolarwallbox
created
2026-02-28 · pushed 7 hours ago · 277 commits · 3 contributors
release
v0.1.58 · 2026-09-07
languages
Python 100%
paperwork
code of conductcode of conduct filecontributingpull request templatelicensereadme 100% health
dependencies
✓ 1 deps, none with known advisories · OSV.dev, checked 2 hours ago

Disclosures, inferred by the Cap'm

slopbucket
vibe-coded
category
iot
ai_generated
mostly
human_touch
light
status
works-on-my-machine
language (detected)
python
topic (detected)
1k51komma5battery-storagedynamic-pricingenergyev-chargerhacshacs-integrationheartbeatheat-pumphome-assistanthomeassistantsolarwallbox
license (detected)
mit

The Cap'm's log

The Cap'm wrote this paperwork, not the owner. This repo never submitted itself to SlopScore. The Cap'm picked it by hand: An unofficial Home Assistant integration for the 1KOMMA5° Heartbeat solar, battery and heat-pump platform, "built 100 % vibe-coded with AI assistance". It carries the MIT license. The disclosures above are his best guess from what GitHub shows.

Is this yours? Commit a real slopscore.md and press Refresh to replace this, or remove the listing in one click. There's no account to make: you log in with GitHub.

README (read the rest on GitHub)

1KOMMA5° Home Assistant Integration

1KOMMA5° logo

GitHub Release HACS Validate Tests License: MIT

1KOMMA5° (also written 1komma5, 1k5) runs the Heartbeat energy platform for solar + battery + heat pump + EV wallbox setups. This is the Home Assistant integration for it, distributed via HACS at github.com/mrebbert/1komma5-ha.

Dynamic electricity prices (dynamischer Stromtarif), 30-hour price forecast, AI optimization decisions, per-device cost allocation, cheapest-charging-window scheduling, weather forecast, and cloud push notifications, all as native HA sensors, services and bus events. Works on both 1KOMMA5°-backend accounts (emp_type: "1K5", most newer installs) and legacy GridX-backed accounts (emp_type: "GRIDX").

Highlights

  • 60+ sensors across 7 coordinators covering power, energy, cost, dynamic prices, AI decisions, weather and system health
  • 💶 Dynamic tariff support with 30-hour price forecast, cheapest-window sensors, and per-consumer cost allocation
  • 🤖 AI optimization events — react to Heartbeat's grid-charge / heat-pump-recommend decisions in real time
  • 🔔 Cloud notification bridge (v0.1.52) — drive automations from the same push notifications the 1KOMMA5° mobile app receives
  • 🌍 Seven locales (DE, NL, FI, ES, DK, SE, AU) with per-market currency (EUR, DKK, SEK, AUD)
  • 🏠 Energy Dashboard-ready out of the box; no template sensors, no manual wiring
  • 📥 Available in the HACS Default Store — no custom repository setup needed

Table of Contents


Quick start

1. Install via HACS

This integration is in the HACS Default Store — no custom repository setup required.

  1. Open HACS in Home Assistant
  2. Search for 1KOMMA5°
  3. Click Download
  4. Restart Home Assistant

One-click open:

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Manual installation (without HACS)
  1. Download the latest release (onekommafive.zip)
  2. Extract and copy the onekommafive/ folder to <config>/custom_components/
  3. Restart Home Assistant

2. Add the integration

Add Integration

  1. Settings → Devices & Services → Add Integration
  2. Search for 1KOMMA5°
  3. Enter your 1KOMMA5° account e-mail and password
  4. If your account has multiple systems, pick the one you want

Credentials are stored securely in the Home Assistant config entry. Sensors appear within seconds.


Configuration

Options

Under Settings → Devices & Services → 1KOMMA5° → Configure:

Option Default Description
Feed-in Tariff 0.0803 €/kWh Feed-in tariff used by the Feed-in Revenue sensor. Set to your actual contract rate incl. bonuses.
Charging-window duration 60 min Length of the Cheapest charging window sensors. Multiple of 15, 15–240 min. Raise to 90/120 for longer flexible loads (EV bulk charges, wash cycles); drop to 30 for short loads (boiler, quick dishwasher programme). Mid-day duration changes invalidate the lock-in so the next refresh re-picks.

Updating credentials

Two flows preserve sensor history, restored states and Energy Dashboard configuration:

  • Re-authentication — When 1KOMMA5° rejects auth (e.g. password change), HA shows a Re-authentication required notice. Click it, enter the new password, done.
  • Reconfigure — Proactively via Settings → Devices & Services → 1KOMMA5° → ⋮ menu → Reconfigure.

What you get

Entity names in Home Assistant follow your account language. Tables below use English keys; German (and five other locales) are shipped in the translations.

Live power & battery

Entity Key Unit
PV Power pv_power W
Battery Power battery_power W (± bidirectional)
Battery SoC battery_soc %
Grid Power grid_power W (± bidirectional)
Grid Import Power grid_consumption_power W (≥ 0)
Grid Export Power grid_feed_in_power W (≥ 0)
Total Consumption consumption_power W
Household Consumption household_power W
EV Charger Power ev_chargers_power W
Heat Pump Power heat_pumps_power W
AC Power acs_power W
Self-Sufficiency self_sufficiency %

Update interval: 30 s. All sensors use state_class: measurement, so Long-Term Statistics tracks hourly min/max/mean automatically.

Plotting self-sufficiency trends — drop the entity into a statistics-graph card, or build a Statistics Helper for rolling averages. No integration code needed.

Dynamic electricity pricing

Dynamischer Stromtarif — 15-minute-resolution price data, 30-hour forecast, cheapest-window scheduling.

Entity Key Unit Update
Current Electricity Price current_electricity_price EUR/kWh 15 min
Last Valid Electricity Price stable_electricity_price EUR/kWh 15 min
Average / Lowest / Highest Today average/lowest/highest_electricity_price EUR/kWh 1 h
Average / Lowest / Highest Tomorrow tomorrow_average/lowest/highest_price EUR/kWh 1 h
Negative Price Slots (today / tomorrow) negative_price_slots_today/tomorrow count 1 h
Cheapest Charging Window Today cheapest_charging_window_today timestamp 15 min
Cheapest Charging Window Tomorrow cheapest_charging_window_tomorrow timestamp 15 min

Binary sensors:

Entity ON when
cheap_electricity Current price is below today's average
cheapest_hour_now Current 15-min slot is the cheapest in the next ~30 h

stable_electricity_price is the price source for cost sensors: it survives brief zero/unavailable API responses so cost accumulation doesn't skip. Tomorrow's price sensors are unknown until day-ahead prices are published (typically around 13:00 CET).

Price-forecast attributes & grid-cost decomposition

Current Electricity Price carries these attributes:

Attribute Description
forecast Rolling 24–30 h price list (each entry {start, end, price})
cheapest_future_hour ISO-8601 start of the cheapest upcoming slot
cheapest_future_price EUR/kWh of that slot
spot_price Market/exchange price of the active slot (net, ex grid costs & VAT)
grid_costs Net grid-cost adder (energy tax + purchasing + fixed tariff + dynamic markup + feed-in adjustment)
grid_cost_components Per-component breakdown (all net / ex-VAT)
vat_rate VAT rate applied (e.g. 0.19)
uses_fallback_grid_costs true when grid costs are estimated rather than contract-exact

Decomposition is exact: all_in = (spot_price + grid_costs) × (1 + vat_rate). spot_price varies per 15-min slot; grid-cost components are flat daily constants.

Cheapest-window sensors additionally expose start, end, average_price, duration_minutes, slot_count. The today-sensor locks in the pick (via RestoreSensor) so it doesn't wander mid-slot; the tomorrow-sensor re-picks on each refresh.

Forecast list example (compatible with Tibber / ENTSO-E-style cards like apexcharts-card):

forecast:
  - start: "2026-02-28T14:00:00+00:00"
    end:   "2026-02-28T14:15:00+00:00"
    price: 0.284100
  - start: "2026-02-28T14:15:00+00:00"
    end:   "2026-02-28T14:30:00+00:00"
    price: 0.279300
  ...  # up to 120 slots (15-min resolution, up to 30 h ahead)

cheapest_future_hour: "2026-02-28T22:00:00+00:00"
cheapest_future_price: 0.198400
Ready-to-use apexcharts-card config
type: custom:apexcharts-card
graph_span: 24h
span:
  start: hour
now:
  show: true
  label: Now
header:
  show: true
  title: Electricity Price (24 h)
  show_states: true
  colorize_states: true
yaxis:
  - min: auto
    decimals: 4
series:
  - entity: sensor.SYSTEMNAME_current_electricity_price
    name: Electricity Price
    unit: EUR/kWh
    float_precision: 4
    type: column
    data_generator: |
      return entity.attributes.forecast.map(e => [
        new Date(e.start).getTime(),
        e.price
      ]);
    color_threshold:
      - value: 0
        color: "#4caf50"
      - value: 0.25
        color: "#ff9800"
      - value: 0.35
        color: "#f44336"
    show:
      legend_value: false
      name_in_header: false

Replace SYSTEMNAME with your actual entity ID (find it under Settings → Devices & Services → 1KOMMA5°).

Dynamic-Pulse price guarantee (DP contract only) — sensor.<sys>_dynamic_pulse_price_guarantee exposes the raw price_guarantee_value from your DP subscription in EUR/kWh. The guarantee comes with terms and conditions on the 1KOMMA5° side that this integration doesn't (and can't) model, so treat the value as informational — see the FAQ.

Energy accounting

For every unidirectional power sensor an energy counterpart (kWh) is auto-created via trapezoidal integration of the 30 s power samples. All use state_class: total_increasing — direct Energy Dashboard compatibility.

Category Sensors
Solar pv_power_energy
Grid grid_consumption_power_energy, grid_feed_in_power_energy
Consumption consumption_power_energy, household_power_energy
Devices ev_chargers_power_energy, heat_pumps_power_energy, acs_power_energy
Battery battery_charge_power_energy, battery_discharge_power_energy

Battery Power and Grid Power are bidirectional and therefore excluded from the general energy set. The battery is covered by dedicated Charge / Discharge energy sensors that split the signal into two total_increasing counters — required for the Energy Dashboard battery configuration.

See dashboard/ENERGY_DASHBOARD.md for the slot-to-sensor mapping and the grid-cost / feed-in-revenue wiring steps.

Cost & revenue

Monetary sensors integrating power flow × price. state_class: total, device_class: monetary, per-locale currency.

Entity Key Semantic
Electricity Cost electricity_cost Cumulative grid-import cost = grid import × stable price
Heat Pump Cost heat_pump_cost Allocation to heat pump = heat_pumps_power / consumption_power × grid_consumption_power × stable_price
EV Charger Cost ev_charger_cost Same allocation for EV charger(s)
Household Cost household_cost Same allocation for base household load
AC Cost ac_cost Same allocation for AC unit
Feed-in Revenue feed_in_revenue Grid export × configured feed-in tariff
Daily Savings daily_savings Cloud-computed daily savings (get_energy_today), resets at local midnight

The four per-consumer cost sensors always sum to electricity_cost. When PV/battery cover all consumption the grid bill is zero and all five stop accumulating together.

AI optimization

Heartbeat AI decisions surfaced as sensors and binary sensors, updated every 15 minutes.

Entity Key Description
Optimization Decisions Today optimization_event_count Count of today's decisions; attribute holds the full list
Last Optimization Decision optimization_last_decision Most-recent decision (localized display, underlying enum stays lowercase for automation matching)
AI: Battery grid charging optimization_battery_grid_charge Binary — ON when the active BATTERY decision is BATTERY_CHARGE_FROM_GRID
AI: Heat pump recommended optimization_heat_pump_recommended Binary — ON when the active HEAT_PUMP decision is HEATPUMP_RECOMMEND_ON

Available decision enum values: BATTERY_CHARGE_FROM_GRID, BATTERY_NO_CHARGE, BATTERY_NO_DISCHARGE, EV_CHARGE_FROM_GRID, HEATPUMP_RECOMMEND_ON, HEATPUMP_AUTO. The SDK documents the list as non-exhaustive; unknown values keep the sensor at unknown and log a warning so a new cloud-side variant surfaces without breaking the state.

Note: optimization_total_cost, optimization_energy_bought and optimization_energy_sold exist but stay unknown — the API doesn't populate settlement data yet.

Recommendation, not execution state. These sensors reflect what the 1KOMMA5° Cloud AI recommends. The Heartbeat HEMS can act independently: optimization_heat_pump_recommended may stay off for days while your Wärmepumpe runs on locally-triggered SG-Ready, and optimization_battery_grid_charge follows the same pattern. Don't gate SG-Ready or grid-charge automations on these sensors as if they were live control signals.

Bus event onekommafive_optimization_decision fires per new decision — see Services & bus events.

EV charger / wallbox

One set of entities per vehicle profile registered in the 1KOMMA5° app.

Requires a vehicle profile. These entities model the car (SMART_CHARGE target, SoC, departure time), not the wallbox — they come from the SDK's /v2/sites/{id}/assets/evs endpoint (site-scoped since SDK v0.2.0), which returns the vehicles configured under Settings → Vehicles in the 1KOMMA5° app. Without a vehicle profile the endpoint returns an empty list and no charging-mode / SoC / departure-time entities are created (the wallbox device itself still appears, backed by connectivity + aggregate ev_chargers_power / ev_charger_cost sensors from other endpoints).

Sensors: ev_target_soc (%), ev_charging_mode (mode enum), ev_battery_capacity (kWh), ev_scheduled_departure_soc (%)

Controls:

Entity Type Description
Charging Mode Select SMART_CHARGE / QUICK_CHARGE / SOLAR_CHARGE
Target SoC Number (0–100 %) Desired battery target
Departure Time Time Daily primary departure
Vehicle SoC (Manual) Number (0–100 %) Manual current-SoC report (SMART_CHARGE only)
Automation: sync manual SoC from your car integration

If your EV integration exposes a battery-level sensor (e.g. Volkswagen WeConnect, Tesla), mirror it into 1KOMMA5°:

alias: "EV SoC sync: vehicle sensor → 1KOMMA5°"
trigger:
  - platform: state
    entity_id: sensor.EV_BATTERY_SENSOR
condition:
  - condition: template
    value_template: "{{ states('sensor.EV_BATTERY_SENSOR') | is_number }}"
  - condition: template
    value_template: "{{ not is_state('number.CAR_IDENTIFIER_fahrzeug_akkustand_manuell', 'unavailable') }}"
action:
  - service: number.set_value
    target:
      entity_id: number.CAR_IDENTIFIER_fahrzeug_akkustand_manuell
    data:
      value: "{{ states('sensor.EV_BATTERY_SENSOR') | int }}"
mode: single

Replace EV_BATTERY_SENSOR with your vehicle's battery sensor and CAR_IDENTIFIER with your EV charger prefix. The second condition ensures the automation only runs in SMART_CHARGE mode (the target entity is unavailable otherwise).

Weather

  • Weather entity (weather.<system>) — 48 h hourly forecast, FORECAST_HOURLY compatible
  • Sunshine sensorsweather_sunshine_today, weather_sunshine_tomorrow (minutes)

Device connectivity & feature flags

Binary sensors summarising cloud & asset health:

Entity Description
site_connected Aggregate — ON when the cloud reports the site as CONNECTED
inverter_connected, heat_pump_connected, meter_connected, wallbox_connected Per-asset-type; AND-logic over all assets of the type. Only created when the cloud actually reports an asset of that type.
wallbox_<id>_connected One per physical wallbox (multi-wallbox sites only, since v0.1.58). Reports the connection status of that specific wallbox — pair with the aggregate wallbox_connected to gate on "all healthy" vs. "this one down".
dynamic_tariff_active, time_of_use_active, smart_charging_active Feature-flag Booleans from the customer-features API
energy_trader_active ON when enrolled in 1KOMMA5°'s virtual power plant (energy trading). From SystemDetails.energy_trader_active, captured once at setup.
dynamic_pulse_compatible ON when the site's hardware/contract qualifies for Dynamic Pulse

Plus: active_features sensor (state = count; attributes = feature list) and system_age_days (days since earliest measurement).

Diagnostics

Hidden by default (entity_category: diagnostic) — useful for troubleshooting.

Entity Description
diag_live_update Timestamp of the last successful live data fetch
diag_price_update Timestamp of the last successful price fetch
diag_optimization_update Timestamp of the last optimization fetch
diag_weather_update Timestamp of the last weather fetch
diag_system_status_update Timestamp of the last site-status / asset-inventory fetch
diag_energy_update Timestamp of the last daily-savings fetch
diag_notification_update Timestamp of the last cloud-notifications fetch (v0.1.52)

System Information (Settings → System → Repairs → System Information) reports per-coordinator update status, API reachability, SDK version and resolved currency/country. PII-safe — no customer/system identifiers or addresses. Use this for bug reports instead of the full diagnostics download.

EMS availability by backend. GridX-backend installs (emp_type: "GRIDX") that lack a DeviceGateway keep the EMS fields unavailable and, after several consecutive fetch failures, register a Repair Issue in Settings → Repairs; it auto-resolves the moment EMS data returns. 1K5-backend installs (emp_type: "1K5") do not expose the GridX EMS endpoint at all, so the integration skips the fetch, the Repair Issue and the switch entirely from v0.1.57 on (a stale switch from a prior GRIDX run is cleaned up on the first reload).

EMS auto-mode switch (ems_auto_mode

Scan report · 2026-09-11
  • Prohibited terms or links
  • Repository eligibility
  • slopscore.md paperwork
  • Content policy
  • Risk review

0 comments

log in to comment.

report this listinglog in to report