Integratie van Nordpool Energieprijzen in Home Assistant met Template Sensoren

Integratie van Nordpool Energieprijzen in Home Assistant met Template Sensoren

De wereldwijde verschuiving richting duurzaamheid heeft geleid tot een grotere focus op energieverbruik. Als iemand die diep gepassioneerd is over technologie en duurzaamheid, betrap ik mezelf er vaak op dat ik met Home Assistant aan het knutselen ben om mijn thuisautomatiseringssysteem te verbeteren. Een van de coolste dingen die ik recentelijk heb uitgewerkt, is het integreren van real-time Nordpool energieprijzen in mijn Home Assistant-dashboard. Dit helpt me om weloverwogen beslissingen te nemen over wanneer ik mijn energie-intensieve apparaten gebruik, waardoor ik geld bespaar en mijn ecologische voetafdruk verklein.

In deze gids neem ik je mee door het hele proces, van het instellen van de YAML-configuratie tot het maken van template sensoren voor het weergeven van Nordpool energieprijzen. Pak een kop koffie, want dit wordt een gedetailleerde duik!


Voorwaarden

  • Een werkende Home Assistant-setup

  • Basisbegrip van YAML en Jinja-templating

  • De sensor.nordpool_kwh_nl_eur_5_10_0 geïntegreerd in Home Assistant


Configuratie

Voordat we ingaan op template sensoren, moet je je configuration.yml bestand bijwerken met enkele aanvullende instellingen. Hier is het eerste stukje YAML-code om toe te voegen:

input_number:
  stroom_btw:
    name: stroom_btw
    initial: 1.21
    min: 0
    max: 100000
  stroom_energie_belasting:
    name: stroom_energie_belasting
    initial: 0.12599
    min: 0
    max: 100000
  stroom_energie_opslag:
    name: stroom_energie_opslag
    initial: 0.0175
    min: 0
    max: 100000

Uitleg van de Configuratie

  • input_number: Dit is het hoofdobject dat een aantal inputvelden definieert.

    • stroom_btw: Dit veld bevat de btw op elektriciteit, geïnitialiseerd op 1.21.

    • stroom_energie_belasting: Hier slaan we de energiebelasting op, geïnitialiseerd op 0.12599.

    • stroom_energie_opslag: Dit is voor de energieopslagheffing, geïnitialiseerd op 0.0175.

Nu je dit hebt ingesteld, gaan we verder met het tweede deel van de code.


Template Sensoren

Dit is waar het echt spannend wordt. We gaan een paar sensoren maken die gebruik maken van de gegevens van Nordpool. Voeg de volgende code toe aan je configuration.yml onder het kopje templates:

- sensor:
  - name: "Volgend uur stroom prijs inkoop"
    unit_of_measurement: "€/kWh"
    state: "{{ states('sensor.nordpool_kwh_nl_eur_5_10_0') }}"
    attributes:
      price: >
        {% set data = namespace(prices=[]) %}
        {% set next_timestamp = now().timestamp() + 3600 %}
        {% set next_iso_time = (next_timestamp|timestamp_custom("%Y-%m-%d %H:00:00+01:00", True)) %}
        {% set raw_today = state_attr('sensor.nordpool_kwh_nl_eur_5_10_0', 'raw_today') %}
        {% set price = None %}

        {% for entry in raw_today %}
          {% set entry_start = entry.start | string  %}
          {% if entry_start == next_iso_time %}
            {% set data.prices = data.prices + [entry.value] %}
            {% break %}
          {% endif %}
        {% endfor %}
        {% if data.prices %}
          {{ data.prices[0] }}
        {% else %}
          No data for today
        {% endif %}
- sensor:
  - name: "Volgend uur stroom prijs All-in"
    unit_of_measurement: "€/kWh"
    state: "{{ states('sensor.volgend_uur_stroom_prijs_inkoop') }}"
    attributes:
      price: >
        {% set price = state_attr('sensor.volgend_uur_stroom_prijs_inkoop', 'price') %}
        {% set stroom_btw = states('input_number.stroom_btw') | float %}
        {% set stroom_energie_belasting = states('input_number.stroom_energie_belasting') | float %}
        {% set stroom_energie_opslag = states('input_number.stroom_energie_opslag') | float %}
        {{ (( price+stroom_energie_belasting+stroom_energie_opslag) * stroom_btw) | round(5) }}
- sensor:
  - name: "Huidige stroom prijs all-in"
    unit_of_measurement: "€/kWh"
    state: "{{ states('sensor.nordpool_kwh_nl_eur_5_10_0') }}"
    attributes:
      price: >
        {% set price = state_attr('sensor.nordpool_kwh_nl_eur_5_10_0', 'current_price') %}
        {% set stroom_btw = states('input_number.stroom_btw') | float %}
        {% set stroom_energie_belasting = states('input_number.stroom_energie_belasting') | float %}
        {% set stroom_energie_opslag = states('input_number.stroom_energie_opslag') | float %}
        {{ (( price+stroom_energie_belasting+stroom_energie_opslag) * stroom_btw) | round(5) }}
- sensor:
  - name: "Laagste stroom prijs all-in"
    unit_of_measurement: "€/kWh"
    state: "{{ states('sensor.nordpool_kwh_nl_eur_5_10_0') }}"
    attributes:
      price: >
        {% set price = state_attr('sensor.nordpool_kwh_nl_eur_5_10_0', 'min') %}
        {% set stroom_btw = states('input_number.stroom_btw') | float %}
        {% set stroom_energie_belasting = states('input_number.stroom_energie_belasting') | float %}
        {% set stroom_energie_opslag = states('input_number.stroom_energie_opslag') | float %}
        {{ (( price+stroom_energie_belasting+stroom_energie_opslag) * stroom_btw) | round(5) }}
- sensor:
  - name: "Hoogste stroom prijs all-in"
    unit_of_measurement: "€/kWh"
    state: "{{ states('sensor.nordpool_kwh_nl_eur_5_10_0') }}"
    attributes:
      price: >
        {% set price = state_attr('sensor.nordpool_kwh_nl_eur_5_10_0', 'max') %}
        {% set stroom_btw = states('input_number.stroom_btw') | float %}
        {% set stroom_energie_belasting = states('input_number.stroom_energie_belasting') | float %}
        {% set stroom_energie_opslag = states('input_number.stroom_energie_opslag') | float %}
        {{ (( price+stroom_energie_belasting+stroom_energie_opslag) * stroom_btw) | round(5) }}

Uitleg van de Template Sensor Code

Ik zal niet de hele code hier herhalen, maar laten we enkele kernpunten doorlopen.

  1. Volgend uur stroom prijs inkoop: Deze sensor toont de prijs van het volgende uur. Het maakt gebruik van Jinja-templating om de 'raw_today'-attribuut van de sensor.nordpool_kwh_nl_eur_5_10_0 sensor te doorlopen en de juiste prijs te vinden.

  2. Volgend uur stroom prijs All-in: Deze sensor bouwt voort op de vorige sensor en voegt belastingen en heffingen toe aan de prijs.

  3. Huidige stroom prijs all-in: Dit toont de huidige all-in prijs, inclusief alle belastingen en heffingen.

  4. Laagste en hoogste stroom prijs all-in: Deze sensoren tonen respectievelijk de laagste en hoogste prijzen voor de dag, inclusief alle extra kosten.

Elke sensor gebruikt Jinja-templating om te berekenen en te formatteren hoe de prijs moet worden weergegeven, met behulp van de attributen van de Nordpool-sensor en de eerder ingestelde inputvelden.

Attributen

Het gebruik van attributen in je sensoren heeft een specifiek voordeel als je deze waarden wilt tonen in je Home Assistant-dashboard met behulp van de type: attribute configuratie. Attributen stellen je in staat om aanvullende metadata of berekeningen aan een bestaande sensor toe te voegen zonder een hele nieuwe sensor te moeten creëren. Dit houdt je configuratie schoon en overzichtelijk. Daarnaast is het gebruik van het type: attribute in je dashboard-configuratie een efficiënte manier om direct toegang te krijgen tot deze extra informatie. Zo kun je meerdere stukken informatie verkrijgen uit een enkele sensor, wat je dashboard zowel compact als informatief maakt.


Conclusie

Door deze template sensoren te gebruiken, kun je jouw Home Assistant-dashboard echt naar een hoger niveau tillen. Niet alleen krijg je real-time inzicht in energieprijzen, maar je kunt nu ook weloverwogen beslissingen nemen over je energieverbruik.

In een volgend artikel ga ik in hoe je deze sensoren kan gebruiken.

Bedankt voor het lezen, en veel plezier met het verder optimaliseren van je Home Assistant setup!

Did you find this article valuable?

Support Theo van der Sluijs Blog by becoming a sponsor. Any amount is appreciated!