Dashboard Visualisatie in Home Assistant: Kleuren voor Energieprijzen

Dashboard Visualisatie in Home Assistant: Kleuren voor Energieprijzen

Als je net als ik bent, wil je je huis zo slim en efficiënt mogelijk maken. Dat betekent niet alleen de lichten automatisch aan- en uitzetten, maar ook slim omgaan met je energieverbruik. In een vorig artikel hebben we template sensoren gecreëerd om real-time energieprijsinformatie te verzamelen. Nu gaan we een stap verder en integreren we deze gegevens op een slimme manier in ons Home Assistant dashboard. En dat doen we met stijl - letterlijk!

Kleurcodering voor Energiekosten

Eerst willen we de prijsinformatie visualiseren zodat het gemakkelijk te begrijpen is. Het idee is simpel: we gebruiken verschillende kleuren om lage, gemiddelde en hoge prijzen aan te duiden.

  • Groen: Lage prijs, ideaal om energie-intensieve taken uit te voeren.

  • Geel: Gemiddelde prijs, wees bewust van je verbruik.

  • Rood: Hoge prijs, vermijd energieverbruik indien mogelijk.

Niet alleen bespaar je geld door energie te gebruiken wanneer de prijzen laag zijn, maar het helpt ook om het energienet te stabiliseren.

Tools: type: attribute en Card Mod Add-on

Type: Attribute

De type: attribute entiteit stelt ons in staat om specifieke attributen van een sensor weer te geven. Normaal gesproken toont Home Assistant de belangrijkste state van een sensor, maar soms willen we meer zien, zoals min, max of current_price.

Card Mod Add-on

Card Mod is een add-on voor Home Assistant die extra stylingmogelijkheden toevoegt. Dit is perfect voor ons doel omdat we kleuren willen veranderen op basis van de energieprijs.

Installatie

  1. Ga naar HACS (Home Assistant Community Store).

  2. Zoek naar "Card Mod" en installeer de add-on.

  3. Voeg de volgende regel toe aan je ui-lovelace.yaml of via de UI in de "Raw Config Editor":

     resources:
       - url: /hacsfiles/card-mod/card-mod.js
         type: module
    

Uitleg Code

Nu is het tijd om de code uit te leggen.

type: entities
title: Stroom inkoop vandaag

Dit deel is vrij eenvoudig; we maken een entiteitenkaart met de titel "Stroom inkoop vandaag".

Vervolgens gebruiken we een Jinja2 template in de Card Mod style attribuut om de kleur dynamisch te veranderen op basis van de huidige prijs. We hebben hetzelfde gedaan voor de "Volgend uur prijs", "Laagste prijs" en "Hoogste prijs" met dezelfde logica maar verschillende sensoren en attributen.

{% set price = state_attr('sensor.nordpool_kwh_nl_eur_5_10_0', 'current_price')|float %}
{% set min_price = state_attr('sensor.nordpool_kwh_nl_eur_5_10_0', 'min')|float %}
{% set max_price = state_attr('sensor.nordpool_kwh_nl_eur_5_10_0', 'max') %}
{% set fifth = (max_price - min_price) / 5 %}

Hier berekenen we enkele variabelen die we later in onze if-else logica gebruiken om de kleur te bepalen.

{% if price <= min_price + fifth %}
  :host { 
    --paper-item-icon-color: #006400;
    }
...

Dit is waar de magie gebeurt. Afhankelijk van de prijs (die we in de price variabele hebben opgeslagen), veranderen we de kleur van het icoon. We gebruiken hier de CSS-variabele --paper-item-icon-color.

Complete code

type: entities
title: Stroom inkoop vandaag
entities:
  - type: attribute
    entity: sensor.nordpool_kwh_nl_eur_5_10_0
    attribute: current_price
    icon: mdi:lightbulb-on
    name: Huidige prijs
    prefix: 
    suffix: / kWh
    card_mod:
      style: >
        {% set price = state_attr('sensor.nordpool_kwh_nl_eur_5_10_0',
        'current_price')|float %} {% set min_price =
        state_attr('sensor.nordpool_kwh_nl_eur_5_10_0', 'min')|float %} {% set
        max_price = state_attr('sensor.nordpool_kwh_nl_eur_5_10_0', 'max') %} {%
        set fifth = (max_price - min_price) / 5 %} {% if price <= min_price +
        fifth %}
          :host { 
            --paper-item-icon-color: #006400;
            }
        {% elif price <= min_price + 2 * fifth %}
          :host { 
            --paper-item-icon-color: #32CD32;
            }
        {% elif price <= min_price + 3 * fifth %}
          :host { 
            --paper-item-icon-color: #FFFF00;
            }
        {% elif price <= min_price + 4 * fifth %}
          :host { 
            --paper-item-icon-color: #FFA500;
            }
        {% else %}
          :host { 
            --paper-item-icon-color: #FF0000;
            }
        {% endif %}
  - type: divider
  - type: attribute
    entity: sensor.volgend_uur_stroom_prijs_inkoop
    icon: mdi:clock-plus
    attribute: price
    name: Volgend uur prijs
    prefix: 
    suffix: / kWh
    card_mod:
      style: >
        {% set price = state_attr('sensor.volgend_uur_stroom_prijs_inkoop',
        'price')|float %} {% set min_price =
        state_attr('sensor.nordpool_kwh_nl_eur_5_10_0', 'min')|float %} {% set
        max_price = state_attr('sensor.nordpool_kwh_nl_eur_5_10_0', 'max') %} {%
        set fifth = (max_price - min_price) / 5 %} {% if price <= min_price +
        fifth %}
          :host { 
            --paper-item-icon-color: #006400;
            }
        {% elif price <= min_price + 2 * fifth %}
          :host { 
            --paper-item-icon-color: #32CD32;
            }
        {% elif price <= min_price + 3 * fifth %}
          :host { 
            --paper-item-icon-color: #FFFF00;
            }
        {% elif price <= min_price + 4 * fifth %}
          :host { 
            --paper-item-icon-color: #FFA500;
            }
        {% else %}
          :host { 
            --paper-item-icon-color: #FF0000;
            }
        {% endif %}    
  - type: divider
  - type: attribute
    entity: sensor.nordpool_kwh_nl_eur_5_10_0
    attribute: min
    prefix: 
    suffix: / kWh
    icon: mdi:lightbulb-cfl
    name: Laagste prijs
    card_mod:
      style: |
        :host { 
          --paper-item-icon-color: #32CD32;
          }  
  - type: divider
  - type: attribute
    entity: sensor.nordpool_kwh_nl_eur_5_10_0
    attribute: max
    prefix: 
    suffix: / kWh
    icon: mdi:lightbulb-alert
    name: Hoogste prijs
    card_mod:
      style: |
        :host { 
          --paper-item-icon-color: #FF0000;
          }
view_layout:
  position: sidebar

Om deze code toe te passen, kopieer je het in je "Manual Card Configuration" in de UI of voeg je het toe aan je ui-lovelace.yaml bestand. En dat is het! Je hebt nu een dynamisch, kleurrijk dashboard dat je in realtime informeert over de beste tijden om energie te gebruiken.

Nu je deze tutorial hebt gevolgd, ben je niet alleen energiebewuster, maar ook een Home Assistant power user! Happy automating!

Did you find this article valuable?

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