HomeyScript: Find automatisk den billige strøm

De fleste har nok bemærket, at prisen på strøm er steget kraftigt på det seneste. Derfor kan det, i endnu højere grad end tidligere, betale sig at holde øje med hvornår på dagen, at strømmen er billigst.

Man kan ikke længere regne med, at strømmen er billigere om natten end om dagen. Derfor er det efterhånden blevet en del af den daglige rutine at holde sig opdateret med priserne via hjemmeside eller app – og ud fra det planlægge hvornår de strømslugende apparater skal startes.

Ville det ikke være skønt, hvis Homey holdt øje med det for dig og f.eks. selv fandt de billigste 3 timer og startede apparatet der? Eller at du kunne spørge Google Assistenten hvordan strømpriserne ser ud nu og hvornår strømmen bliver billig.

Jeg har i sommers haft en pool med sandfilterpumpe og klorgenerator-anlæg, som skal køre 6-8 timer hver dag og tilsammen bruger ca. 500W. Det fik mig til at udvikle et HomeyScript, som kan gennemgå priserne på strøm, time for time, og udregne hvornår de billigste timer er og herefter tænde/slukke hver af apparaterne via en Shelly Plug S. Samme ide kan bruges til varmtvandsbeholderen, vaskemaskine, EL-bil osv.

Download af HomeyScriptet

Nyeste version er: 1.0.4 (d. 14-05-2023) som kan downloades her. (Versionsnummeret står i toppen af HomeyScriptet.)

HomeyScriptet er testet hen over sommeren af Sepp fra GeekNetWork og jeg selv, men der kan godt være fejl i det alligevel. Jeg opdaterer scriptet, hvis der findes fejl.

Homey har ikke et tag, som fortæller hvad den aktuelle time er (kl. 14:20 er den aktuelle time ”14”). Det kan løses med dette lille hjælpe HomeyScript: GetCurrentHour.js

Hjælpe-HomeyScriptet kan både bruges inline, hvor det vil retunere den aktuelle time i et lokalt tag, til brug i det videre flow – men det opdaterer også et globalt tag (Curret_Hour tag’et). Man kan derfor med fordel køre HomeyScriptet for sig selv hver time og på den måde altid have et opdateret tag til rådighed.

Ideer til flows

HomeyScriptet udfører ingen actions i sig selv. Det opretter/opdaterer kun en masse tags, som kan bruges til at bygge flows omkring. Her er en liste med ideer til de flows, som kan laves med tags’ne fra HomeyScriptet. Kommentér gerne med flere ideer, så tilføjer jeg dem til listen.

  • Start apparater i X antal timer når strømmen er billigst
    – Hvis det ikke er et smart-apparat, så husk at mange ting kan kontrolleres med Shelly Plug S, Shelly Plus 1 eller SwitchBot
  • Spørg Google Assistenten om hvordan strømpriserne er nu og få at vide hvornår strømmen er billigst (ELpris_Speak_GenerelRapport tag’et).
  • Spørg Google Assistenten om hvornår de 4 billigste timer er inden for de næste 12 timer (ELpris_Speak_FundneTimerRapport tag’et).
  • Få en statusbesked over de kommende timer om morgenen (ELpris_Speak_GenerelRapport tag’et), hvis strømmen er specielt billig i løbet af dagen.

Eksempler på flows

Jeg har svært ved at finde tiden til at skrive en lang artikel med eksempler på hvordan man benytter HomeyScriptet i praktisk. Derfor har lavet et samarbejde med Sepp fra GeekNetWork, som har lavet denne video, hvor han viser hvordan man kan bruge HomeyScriptet.

Dokumentation af ELpris HomeyScriptet

HomeyScriptet udfører ingen actions i sig selv. Det opretter/opdaterer kun en masse tags, som kan bruges til at bygge flows omkring.

Når HomeyScriptet bliver afviklet, så opdaterer det ALLE tags. Man kan ikke vælge, kun at få opdateret udvalgte tags.

I HomeyScriptet er der 2 + 24 konstanter, som du skal kontrollere og evt. ændre, før du tager det i brug:
const PriceArea = "DK2" // DK1 = Vestdanmark, DK2 = Østdanmark
const BilligPrisMinForskel = 20; // øre inkl. Moms - når der søges efter en billig periode, så skal den næste fundne periode mindst være dette antal øre billigere, for at den nye periode vælges i stedet. F.eks. Hvis 3 timers perioden fra kl. 10 til kl. 13 koster 120 øre + 231 øre + 195 øre, så skal perioden kl. 12 til 15 være dette antal øre billigere, før den periode vælges i stedet. Der regnes efter at afgifter er lagt til.

ElAfgifter[0] = 1.04 + 0.3754; // AFGIFT + TRANSPORT INKL. MOMS FRA 00:00 TIL 01:00, SOM LÆGGES OVEN I EL-PRISEN
ElAfgifter[1] = 1.04 + 0.3754; // AFGIFT + TRANSPORT INKL. MOMS FRA 01:00 TIL 02:00, SOM LÆGGES OVEN I EL-PRISEN


HomeyScriptet kan kaldes med 2 argumenter i formatet: ANTALTIMER,TIMESPAN – f.eks.: 2,14
ANTALTIMER er det antal billige timer, som du søger.
TIMESPAN er de antal timer frem fra nu, som skal undersøges. Max 24 timer.
Er klokken mere end 20 minutter inde i timen, så flyttes startpunktet 1 time frem. Er klokken f.eks. 22:15, så er periodens 14 timer fra kl. 22:00 til kl. 12:00. Er klokken senere end 22:20, så rykker perioden frem til kl. 23:00 til kl. 13:00.

Der bliver arbejdet med 2 forskellige tidsperioder i tags’ne:

  • Dagen, som er døgnet i dag, altså fra kl. 0:00 til kl. 23.59.
  • Periode, som ikke er begrænset af døgnet. Perioden tæller ”fra nu” og det ønsket antal timer frem. I perioden er også den fundne billige periode, så sørg for at læse beskrivelsen af tags’ne herunder.

Priser: Alle priser er udregnet inkl. moms og afgifter, som du indstiller i scriptet.

Beskrivelse af tags

ELpris_Opdateret_KL
Format: Text  (F.eks. ”31.8.2022 07.30.00”)
Det præcise tidspunkt, hvor HomeyScriptet blev kørt sidst.

ELpris_Dagen_Pris_Nu_KR
Format: Number decimal (F.eks. ”4.72”)
Prisen for strømmen i den time, hvor HomeyScriptet blev kørt.

ELpris_Dagen_Gennemsnitspris_KR
Format: Number decimal  (F.eks. ”4.25”)
Den gennemsnitlige pris for strømmen for hele dagen, for den dag hvor HomeyScriptet blev kørt.

ELpris_Dagen_StromBilligTil_KL
Format: Number heltal (F.eks. ”15”)
Hvis strømmen er billigere end dagens gennemsnit, i den time hvor HomeyScriptet er blevet kørt, så fortæller dette tag, hvilken time på dagen strømmen er billig til (hvornår strømmen er dyrere end dagens gennemsnit igen). Er værdien ”15”, så er strømmen billig indtil kl. 15:00.
Værdien er ”-1”, hvis nuværende time ikke er billigere end gennemsnittet.

ELpris_Dagen_StromBilligNext_KL
Format: Number heltal (F.eks. ”16”)
Hvis strømmen er dyrere end dagens gennemsnit, i den time hvor HomeyScriptet er blevet kørt, så fortæller dette tag, hvilken time på dagen strømmen bliver billig. (hvornår strømmen bliver billigere end dagens gennemsnit). Er værdien ”16”, så bliver strømmen billig kl. 16:00.
Værdien er ”-1”, hvis der ikke kommer en billigere periode senere.

ELpris_Dagen_StromBilligNext_KR
Format: Number decimal (F.eks. ”3.98”)
Hører til ELpris_Dagen_StromBilligNext_KL. Her får du oplyst hvad prisen er i den første billige time.
Værdien er ”-1”, hvis der ikke kommer en billigere periode senere.

ELpris_Dagen_StromBilligAllerBilligstNext_KL
Format: Number heltal (F.eks. ”10”)
Hører til ELpris_Dagen_StromBilligNext_KL. Her får du oplyst, hvad den billigste time er, i den kommende billige periode.
Værdien er ”-1”, hvis der ikke kommer en billigere periode senere.

ELpris_Dagen_StromBilligAllerBilligstNext_KR
Format: Number heltal (F.eks. ”10”)
Hører til ELpris_Dagen_StromBilligNext_KL. Her får du oplyst hvad prisen er i den billigste time.

ELpris_Dagen_DyresteTime_KL
Format: Number heltal  (F.eks. ”17”)
Den dyreste time på dagen

ELpris_Dagen_DyresteTime_KR
Format: Number decimal (F.eks. ”6.42”)
Prisen for den dyreste time på dagen

ELpris_Dagen_BilligsteTime_KL
Format: Number heltal (F.eks. ”12”)
Den billigste time på dagen

ELpris_Dagen_BilligsteTime_KR
Format: Number decimal (F.eks. ”5.21”)
Prisen for den billigste time på dagen.

ELpris_Periode_Undersoegt_TIMER
Format: Number heltal (F.eks. ”8”)
Det antal timer, som der er blevet undersøgt. Selvom du har bedt om at få undersøgt 14 timer, har der måske kun været data til 8 timer.

ELpris_Periode_Start_KL
Format: Number heltal (F.eks. ”6”)
Det timetal (kl. 6:00), at den billigste periode begynder

ELpris_Periode_Laengde_TIMER
Format: Number heltal (F.eks. ”8”)
Længden på den billige periode. Det tal vil altid svare til det første argument, som du har kaldt HomeyScriptet med.

ELpris_Periode_Billigste_Time_KL
Format: Number heltal (F.eks. ”13”)
Det timetal (kl. 13:00), at den billigste periode har den allerbilligste pris.

ELpris_Periode_Billigste_Time_KR
Format: Number heltal (F.eks. ”3.54”)
Hører til ELpris_Periode_Billigste_Time_KL. Prisen for den allerbilligste time i den billigste periode.

ELpris_Periode_Dyreste_Time_KL
Format: Number heltal (F.eks. ”15”)
Det timetal (kl. 15:00), at den billigste periode har den dyreste pris.

ELpris_Periode_Billigste_Time_KR
Format: Number decimal (F.eks. ”3.92”)
Hører til ELpris_Periode_Dyreste_Time_KL. Prisen for den dyreste time i den billigste periode.

ELpris_Periode_Billigste_Timer_Gennemsnitspris_KR
Format: Number decimal (F.eks. ”3.11”)
Den gennemsnitlige kWh pris for den fundne billigste periode.

ELpris_Periode_Timer_Fra_Nu_Gennemsnitspris_KR
Format: Number decimal (F.eks. ”4.56”)
Den gennemsnitlige kWh pris fra nu og de ønsket antal timer frem. Det regnes fra det minut klokken er i nu.
Er godt til at sammenligne besparelsen ved at vente til når det er billigst.

ELpris_Periode_Gennemsnitspris_KR
Format: Number decimal (F.eks. ”4.22”)
Den gennemsnitlige pris for hele den undersøgte periode – ikke kun den periode, som er valgt som den billigste. Altså perioden fra ”nu” og ”ELpris_Periode_Undersoegt_TIMER” frem.

ELpris_Speak_GenerelRapport
Format: Text (F.eks. ”Strømmen koster lige nu 7 kroner og 18 øre, og er 40 øre dyrere end dagens gennemsnit på 6 kroner og 78 øre. Dagens priser varierer fra 5 kroner og 93 øre til 8 kroner og 26 øre. Strømmen bliver billigere end gennemsnittet kl. 10, men er allerbilligst kl. 13, hvor den koster 6 kroner og 4 øre”)
Tekst som f.eks. kan bruges til Google Assistent speak eller statusrapport. Teksten udformning varierer afhængig af om det lige nu er en dyrere/billigere end gennemsnitlig time på dagen vi er i og om der kommer en dyr/billig periode senere på dagen.

ELpris_Speak_FundneTimerRapport
Format: Text (F.eks. ”Jeg har undersøgt de næste 14 timer og fundet de billigste 6 timer. Tiden starter kl. 10 og har en pris mellem 6 kroner og 4 øre, og 6 kroner og 75 øre. Strømmen koster lige nu 6 kroner og 75 øre, og er 13 øre billigere end periodens gennemsnit på 6 kroner og 88 øre.”)
Tekst som f.eks. kan bruges til Google Assistent speak eller statusrapport. Teksten udformning varierer afhængig af om det lige nu er en dyrere/billigere end gennemsnitlig time på dagen.

8 thoughts on “HomeyScript: Find automatisk den billige strøm

  • Hej Brian, Super script. Kan det udvides til at tage højde for de variable tariffer, da strømmen samlet set godt kan være dyrere på tidspunkter hvor selve elprisen er lav?

  • Hej Brian.
    Fantastisk indlæg.

    Jeg savner dog en lille ting. Gennemsnitsprisen på strømmen de sidste 3 timer…….

    Jeg laver en aflæsning når vaskemaskine, tørretumbler, opvaskemaskine er færdig. Så kunne det være fedt at jeg kunne regne prisen på den ud fra hvad strømmen har kostet.

    Håber det giver mening.

    • Hej Filip

      Det er vist et meget specifikt formål du har der – og jeg synes at det ligger uden for mit tiltænkte formål. Men koden ligger jo frit tilgængelig, så du kan rimeligt nemt udvide den med et tag med gennemsnitsprisen for de sidste 3 timer 🙂

      Personligt havde jeg nok løst det med power-by-the-hour app’en og sætte den til at måle strømforbruget på de 3 enheder live.

  • Hej Brian,
    Super arbejde 🙂

    Jeg ved ikke hvordan det er generelt, men med Konstant som el-leveranddør er der forskel på tariffer om det er sommer eller vinter.

    Jeg antager at jeg selv amå sætte en reminder om at jeg skal ind og ændre i scriptet ved sæson-skifte? 🙂

    • Hej Casper

      Hos mig er tarifferne blevet ændret mange gange i år, så må holde øje med dem hver måned.

      Det er nok en god ide, at gennemgå dem ved sæsonskifte. De stiger nok lidt år efter år alligevel. Ellers er alternativet at udbygge scriptet, så det indeholder 2 sæt priser. En simpel if, then, else ting, som kigger på datoen 🙂

  • Hej,
    Super script, men lige lidt spørgsmål 🙂

    Hvis jeg kigger i WATTS app, så er der forskellig priser / % på transport, ligner afgift fast er 1,01kr. Hvordan får jeg det til at virker i scriptet?

Skriv en kommentar

Skriv et svar til Brian Kristjansen Annuller svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.