I det här inlägget tar vi en titt på hur jag gjorde för att hitta de 2 timmarna med lägst elpris för att kunna starta diskmaskinen när priset är som lägst.
Vi har timpris på elen via Tibber (min Tibber-recension) vilket gör att vi försöker optimera och använda hushållets apparater när elpriset är lågt.
Eftersom att vi nyligen skaffat en diskmaskin med wifi-uppkoppling så kan vi styra diskmaskinen via Home Assistant. Om man är intresserad av att se hur jag fick in vår diskmaskin (Bosch) i min hemautomatisering så kan man läsa inlägget där jag förklarar hur man styr Home Connect från Home Assistant.
Vad som behövs
- Home Assistant
- NordPool-integration
För att kunna hitta de billigaste elpriserna (i detta fall) behöver man Home Assistant (för att styra allt) och tillgång till dagens elpriser (jag använder NordPool-integrationen).
Målet
- Hitta de 2 billigaste sammanhängande timmarna
Mitt mål med detta var att kunna hitta de 2 billigaste sammanhängande timmarna över en angiven period och visa upp vilken tid det är i HA (Home Assistant).
Anledningen till att jag vill hitta en 2h-period är för att ett diskprogram tar 2 timmar att köra. Jag behöver därför slå ihop priset för varje 2h-period istället för att bara hitta den billigaste timmen.
Dessutom vill jag endast köra diskmaskinen när någon är hemma eller vaken. Därför har jag avgränsat min period till 07:00-23:00. Dvs. vill jag tidigast köra igång diskmaskinen 07:00 och jag vill att den senast ska vara klar 23:00 (dvs. starta senast 21:00).
Sensorer
För att åstadkomma detta så skapar jag en sensor i HA:
Inställningar – Enheter och tjänster – Hjälpare – Skapa hjälpare
Välj Template – Mall för en sensor
Under Mall för tillstånd* fyller jag i min template:
{# Start hour #}
{% set firstHour = 7 %}
{# End hour #}
{% set lastHour = 23 %}
{# Hours of each period #}
{% set numberOfSequentialHours = 2 %}
{# Set variabels #}
{%- set ns = namespace(
periodCost=0,
list=[],
cheapestHour=today_at("00:00"),
cheapestPrice=9999.00
) -%}
{# Loop all available hours #}
{%- for i in range(firstHour, lastHour-numberOfSequentialHours + 1) -%}
{%- set ns.periodCost = 0.0 -%}
{%- for j in range(i, i+numberOfSequentialHours) -%}
{# Set cost for current period #}
{%- set ns.periodCost = ns.periodCost + state_attr('sensor.nordpool_kwh_se3_sek_3_10_025', 'today')[j] -%}
{%- endfor -%}
{# Insert cost into the list #}
{%- set ns.list = ns.list + [ns.periodCost] -%}
{# Check if the current cost is lower than previous costs #}
{%- if ns.periodCost < ns.cheapestPrice -%}
{%- set ns.cheapestPrice = ns.periodCost -%}
{%- set ns.cheapestHour = today_at("00:00") + timedelta( hours = (i)) -%}
{%- endif -%}
{%- endfor -%}
{{ ns.cheapestHour.strftime('%H:%M') }}
sensor.nordpool_kwh_se3_sek_3_10_025
är namnet på min sensor för elpriser från NordPool-integrationen. Denna behöver bytas ut mot namnet på sin egen sensor.
Efter att jag fyllt i ovanstående så väljer jag ett namn för min nya sensor. Jag skriver in Lägsta elpriser 2h (07:00-23:00). Därefter klickar jag på:
Spara
Förklaring av templaten
Som man kan se i koden så går templaten igenom alla timmar mellan 07:00 (firstHour
) och 21:00 (lastHour
– numberOfSequentialHours
). Sedan kontrolleras priset för de kommande 2 timmarna och så sparas det billigaste elpriset ner som cheapestPrice
och tillhörande timme sparas som cheapestHour
.
Visa sensorn i Home Assistant
Jag har nu en sensor som visar vilken 2h-timmars period på dagen mellan 07:00-23:00 som har det lägsta elpriset. Vill jag visa det i ett kort i HA så kan jag gå in på:
Översikt – Lägg till kort – Entiteter
Sedan väljer jag den nya sensorn: sensor.lagsta_elpriser_2h_07_00_23_00
.
Automationer
Med den nya sensorn kan jag nu skapa automationer. Exempelvis kan jag lägga in en automation som startar diskmaskinen baserat på tiden från den nya sensorn.
Detta gör att jag nu kan ladda diskmaskinen med en disktablett på morgonen (eller på kvällen) och sedan låter jag Home Assistant starta diskmaskinen när elpriset är som lägst.
Konfigurationer
Koden i mitt fall går enkelt att ändra om så att det kan passa för andra apparater eller andra förhållanden. Har man exempelvis en torktumlare som kör i 3 timmar så kan man ändra antalet sammanhängande timmar. Vill man inte begränsa sig av några särskilda tider så kan man ändra starttid och sluttid så att dygnets alla timmar räknas med.
Sammanhängande timmar
Givetvis går det att ändra om min template så att man exempelvis har en annan längd på perioden istället för 2 timmar. Då ändrar man bara numberOfSequentialHours
till antalet timmar som man vill ha.
Tillgängliga timmar
Önskar man hitta lägsta elpriser andra tider än 07:00-23:00 så kan man ändra starttiden (firstHour
) och sluttiden (lastHour
).