Home Assistant: EVCC-Daten zu dynamischen Strompreisen auslesen, visualisieren und damit rechnen


Home Assistant: EVCC-Daten zu dynamischen Strompreisen auslesen, visualisieren und damit rechnen

In diesem Tutorial erkläre ich dir, wie du die Daten deines dynamischen Strompreises aus dem EVCC Add-On in Home Assistant bereitstellst.
Das tolle daran, egal welchen Anbieter du verwendest, die Umsetzung bleibt immer identisch. Die Daten werden in EVCC verarbeitet und im gleichen Übergabeformat an Home Assistant bereitgestellt. Egal ob du Tibber oder einen anderen Anbieter nutzt.

Als Bonus gibt es noch die Visualisierung der Daten mit Forecast auf dem Dashboard.

5 „Gefällt mir“

Die Verknüpfung der Tibber-Daten von EVCC mit HA ist eine raffinierte Lösung. Zur Zeit nutze ich das Tibber-Addon von HA, werde mich aber mit deinem Video mal genauer auseinandersetzen.

Danke für die Tipps!

2 „Gefällt mir“

Die Intention dahinter war, dass ich durch EVCC unabhängig bin vom jeweiligen Anbieter etc.. Ändert sich z.B. der Anbieter, so muss ich z.B. im Code nichts ändern. Entwickler suchen ja bekanntlich immer nach pragmatischen Lösungen, oder wollen halt wenig Änderungen haben :slight_smile:

1 „Gefällt mir“

Hallo,

ist das noch aktuell, der letzte Beitrag ist über ein Jahr her. :slight_smile:

Grundsätzlich ja, es haben sich ein paar Entitätsnamen geändert.

Hier eine aktualisierte Version des Apex Charts Code

type: custom:apexcharts-card
apex_config:
  chart:
    height: 268px
all_series_config:
  float_precision: 3
header:
  title: EVCC Tibber Forecast
  show: true
  standard_format: true
  show_states: true
  colorize_states: true
graph_span: 2d
span:
  start: day
now:
  show: true
  label: Jetzt
yaxis:
  - id: price
    min: 0
    apex_config:
      tickAmount: 5
      labels:
        formatter: |
          EVAL:function (val) { return (Number(val)||0).toFixed(2) + ' €'; }
  - id: header
    show: false
series:
  - entity: sensor.evcc_tariff_api_grid
    yaxis_id: price
    type: area
    name: Forecast heute
    color: green
    stroke_width: 4
    extend_to: false
    show:
      legend_value: false
      in_header: false
    data_generator: >
      const attrs = (entity && entity.attributes) ? entity.attributes : {};
      const rates = Array.isArray(attrs.rates) ? attrs.rates : []; const nowSec
      = Math.floor(Date.now() / 1000); const out = []; for (const r of rates) {
        if (!r) continue;
        const s = Number(r.start_utc);
        const v = Number(r.value);
        if (!Number.isFinite(s) || !Number.isFinite(v)) continue;
        if (s <= nowSec) out.push([s * 1000, v]);
      } out.sort((a,b) => a[0]-b[0]); return out;
  - entity: sensor.evcc_tariff_api_grid
    yaxis_id: price
    type: area
    name: Forecast (nach Jetzt)
    color: yellow
    stroke_width: 4
    extend_to: false
    show:
      legend_value: false
      in_header: false
    data_generator: >
      const attrs = (entity && entity.attributes) ? entity.attributes : {};
      const rates = Array.isArray(attrs.rates) ? attrs.rates : []; const nowSec
      = Math.floor(Date.now() / 1000); const out = []; for (const r of rates) {
        if (!r) continue;
        const s = Number(r.start_utc);
        const v = Number(r.value);
        if (!Number.isFinite(s) || !Number.isFinite(v)) continue;
        if (s > nowSec) out.push([s * 1000, v]);
      } out.sort((a,b) => a[0]-b[0]); return out;
  - entity: sensor.evcc_tariff_grid
    yaxis_id: header
    name: Aktueller Preis
    unit: " € "
    float_precision: 3
    color: green
    show:
      legend_value: true
      in_header: true
      in_chart: false
```

Ansonsten einfach nach dem Video vorgehen.