Kant-en-klaar Homey Script voor kwartierprijzen stroom Nederlandse energiemaatschappijen

Met enige regelmaat komen de dynamische energieprijzen in Homey of Homey apps laat of helemaal niet binnen. Daarom heb ik een fallback gemaakt en deel dat hier voor iedereen die Nederlandse stroom kwartierprijzen (of uurprijzen, daarvoor eerst het script aanpassen) in flows gebruikt. Het vervangt niet de Homey of Homey app flowkaarten, maar de kwartierprijzen blijven wel beschikbaar.

Procedure:

  • Maak een nieuw Homeyscript aan
  • Plak onderstaand script in een nieuw Homeyscript
  • Ga naar www.epexprijzen.nl en selecteer je energieleverancier + periode (script werkt met 15 min. prijzen). De API is gratis te gebruiken.
  • Kopieer de link (url)
  • Plak de url in de eerste regel van het Homeyscript, zodat er staat const url = ‘https://epexprijzen.nl/api/v1/prices/JOUW-ENERGIELEVERANCIER/quarterly’;
  • Sla het Homeyscript op (naam naar keuze)
  • Maak een flow, waarin ieder kwartier het Homeyscrip wordt geactiveerd. Iets als in bijgaande afbeelding.
  • Het Homeyscript zet iedere keer dat het wordt uitgevoerd (bijv. via een Flow) de actuele kwartierprijs van jouw energieleverancier (totaalprijs incl. BTW, belasting en evt. variabele vergoedingen) in de Logic variabele ‘currentQuarterPrice’

Homeyscript:

const url = 'https://epexprijzen.nl/api/v1/prices/JOUW-ENERGIEMAATSCHAPPIJ/quarterly';

async function getCurrentQuarterPrice() {
    try {
        const response = await fetch(url);

        if (!response.ok) {
            throw new Error(`HTTP fout ${response.status}`);
        }

        const data = await response.json();

        // Combineer vandaag + morgen
        const prices = [
            ...(data.today || []),
            ...(data.tomorrow || [])
        ];

        const now = new Date();

        const current = prices.find((item, index) => {

            const start = new Date(item.t);

            const end = index < prices.length - 1
                ? new Date(prices[index + 1].t)
                : new Date(start.getTime() + 15 * 60 * 1000);

            return now >= start && now < end;
        });

        if (!current) {
            throw new Error('Geen actuele kwartierprijs gevonden');
        }

        // Tags voor gebruik in Flows
        await tag('currentQuarterPrice', current.price);
        await tag('currentQuarterStartUTC', current.t);

        return {
            prijs: current.price,
            startUTC: current.t,
            startAmsterdam: new Date(current.t).toLocaleString(
                'nl-NL',
                { timeZone: 'Europe/Amsterdam' }
            )
        };

    } catch (err) {
        return {
            fout: err.message
        };
    }
}

return await getCurrentQuarterPrice();

Flow basis (voorbeeld):

Tip: het Homeyscript heb ik volledig door ChatGPT laten schrijven op basis van de duidelijke (proces)beschrijving van de gewenste functionaliteit. Ik heb geen kennis van Javascript (Homeyscript), maar binnen 15 minuten werkte het zoals ik wilde. Het huidige script aanpassen aan je wensen kan dus eenvoudig en snel met hulp van ChatGPT.

1 Like