Wie iets slimmer met dynamische stroomprijzen wil doen in Homey, heeft meestal niet genoeg aan alleen een losse prijswaarde. Juist de laagste en hoogste momenten van de dag zijn interessant, omdat je daar automatiseringen op kunt baseren.
Dit HomeyScript haalt daarom zowel voor vandaag als voor morgen de stroomprijzen op, zoekt de minimum- en maximumwaarde en zet ook de bijbehorende uren klaar als tags. Daardoor kun je in een flow niet alleen werken met een prijs, maar ook met het moment waarop die prijs geldt.
Wat leer je in deze tutorial?
In deze tutorial leer je hoe je een HomeyScript gebruikt om gegevens van een externe bron op te halen, te verwerken en daarna als tags in Homey beschikbaar te maken. De nadruk ligt op praktische inzet: het script moet niet alleen draaien, maar ook meteen bruikbaar zijn binnen je eigen flows.
- Stroomprijzen verwerken → je leert hoe het script minimum- en maximumprijzen uit de opgehaalde gegevens filtert.
- Tags voor Homey maken → je ziet hoe de uitkomsten worden opgeslagen als tags die je elders in Homey kunt gebruiken.
Daarmee is dit niet alleen een script om te kopiëren, maar ook een goed voorbeeld van hoe je HomeyScript kunt inzetten als brug tussen data ophalen en automatiseren.
Voor wie is deze tutorial?
Deze tutorial is bedoeld voor Homey-gebruikers die al met flows werken en nu een stap verder willen gaan met HomeyScript. Je hoeft geen ervaren programmeur te zijn, maar het helpt wel als je weet waar je in HomeyScript code plaatst en hoe je een script vanuit een flow start.
Wat heb je nodig?
- Een werkende Homey-omgeving met HomeyScript
- Een API-key voor de gebruikte stroomprijsbron
- Een aanbieder-naam die past bij jouw gebruik, bijvoorbeeld
prijsANWB - Een flow of Advanced Flow van waaruit je het script kunt starten
- Basiskennis van Homey-tags en hoe je die in flows gebruikt
Gratis API-sleutel ophalen
Om dit script te laten werken heb je een API-sleutel nodig. Gelukkig is dat eenvoudiger dan het klinkt, en gratis.
- Ga naar www.enever.nl/prijzenfeeds
- Voer je e-mailadres in bij “Token aanmaken”
- Je ontvangt een e-mail met een unieke tekenreeks (je API-sleutel)
- Plaats deze sleutel in de code op de plek waar
API_KEYstaat
Wil je een andere energieaanbieder gebruiken dan in het voorbeeld?
Bekijk dan de legenda met beschikbare aanbieders en pas de waarde van AANBIEDER in de code aan.
Zie de API-sleutel als een toegangssleutel: zonder deze sleutel weet de server niet dat jij de data mag ophalen.
Stap-voor-stap uitleg
1. Vul je instellingen bovenin het script in
Bovenaan het script staan twee instellingen die je zelf moet nalopen: de API-key en de aanbieder. De API-key is nodig om de gegevens op te halen. De aanbieder bepaalt welke prijswaarde uit de ontvangen data wordt gebruikt. In het voorbeeld staat prijsANWB ingevuld.
- Vervang
API_KEY_NUMBERdoor je eigen API-key - Pas
AANBIEDERaan als je een andere prijsbron wilt gebruiken - Laat de rest van de opbouw in eerste instantie ongemoeid
2. Begrijp wat de functie precies doet
De functie getMinMaxTijden(url) vormt het hart van het script. Eerst wordt de JSON opgehaald. Daarna wordt gekeken of in data.data daadwerkelijk een array met uurwaarden staat. Vervolgens loopt het script twee keer door die gegevens heen: eerst om de minimum- en maximumprijs te vinden, daarna om te verzamelen op welke uren die waarden voorkomen.
3. Gebruik het script om prijzen van vandaag en morgen op te halen
Na de functie worden twee URL’s opgebouwd: één voor vandaag en één voor morgen. Het script roept de functie daarna twee keer aan. Dat levert vier kernwaarden op per dag: minimumprijs, maximumprijs, uren van het minimum en uren van het maximum.
// HomeyScript: stroomprijs_vandaag_morgen.js
//
// 1. Vul je eigen API key in bij API_KEY
// 2. Pas eventueel AANBIEDER aan naar jouw energieleverancier
// (bijv. "prijsANWB", "prijsFR", "prijsEE", etc.)
// 3. Start het script vanuit een Flow (of Advanced Flow)
// om de waardes in HomeyScript-tags te zetten.
//
// Script haalt zowel vandaag als morgen op, zoekt de min/max en
// maakt een lijstje van alle uren waar de min of max geldt.
//
// === Instellingen ===
const API_KEY = "API_KEY_NUMBER"; // <--- pas aan
const AANBIEDER = "prijsANWB"; // prijsFR prijsANWB // <--- pas aan
// === Functie om min/max + bijbehorende uren op te halen ===
async function getMinMaxTijden(url) {
// 1) Ophalen JSON
let response = await fetch(url);
if (!response.ok) {
throw new Error(`Fout: ontvangen status ${response.status}`);
}
let data = await response.json();
// 2) Uuritems uitlezen. Meestal in data.data
let arr = data.data;
if (!Array.isArray(arr)) {
throw new Error("JSON bevat geen array in data.data");
}
// 3) Eerste pass om min/max-waarde te vinden
let minVal = Infinity;
let maxVal = -Infinity;
for (let item of arr) {
let val = parseFloat(item[AANBIEDER]);
if (!isNaN(val)) {
if (val < minVal) minVal = val;
if (val > maxVal) maxVal = val;
}
}
// 4) Tweede pass om te verzamelen op welke uren min of max zijn
let minUren = [];
let maxUren = [];
for (let item of arr) {
let val = parseFloat(item[AANBIEDER]);
if (isNaN(val)) continue;
let datumStr = item.datum || "";
let uur = datumStr.substring(11, 13);
if (val === minVal) {
minUren.push(uur);
}
if (val === maxVal) {
maxUren.push(uur);
}
}
// 5) Klaarmaken voor return
let minUrenString = minUren.map(u => `${u}:00`).join(", ");
let maxUrenString = maxUren.map(u => `${u}:00`).join(", ");
return {
minVal,
maxVal,
minUrenString,
maxUrenString
};
}
// === URLs voor 'vandaag' en 'morgen' ===
let urlVandaag = `https://enever.nl/api/stroomprijs_vandaag.php?token=${API_KEY}`;
let urlMorgen = `https://enever.nl/api/stroomprijs_morgen.php?token=${API_KEY}`;
try {
// Ophalen min/max/tijden voor vandaag
let {
minVal: minVandaag,
maxVal: maxVandaag,
minUrenString: minVandaagTijden,
maxUrenString: maxVandaagTijden
} = await getMinMaxTijden(urlVandaag);
// Ophalen min/max/tijden voor morgen
let {
minVal: minMorgen,
maxVal: maxMorgen,
minUrenString: minMorgenTijden,
maxUrenString: maxMorgenTijden
} = await getMinMaxTijden(urlMorgen);
// In HomeyScript-tags zetten
await tag("minVandaag", minVandaag);
await tag("maxVandaag", maxVandaag);
await tag("minVandaagTijden", minVandaagTijden);
await tag("maxVandaagTijden", maxVandaagTijden);
await tag("minMorgen", minMorgen);
await tag("maxMorgen", maxMorgen);
await tag("minMorgenTijden", minMorgenTijden);
await tag("maxMorgenTijden", maxMorgenTijden);
// Eventueel in het script-resultaat een samenvatting teruggeven
return `
============== STROOMPRIJZEN =============
Vandaag:
Min = ${minVandaag} (uren: ${minVandaagTijden})
Max = ${maxVandaag} (uren: ${maxVandaagTijden})
Morgen:
Min = ${minMorgen} (uren: ${minMorgenTijden})
Max = ${maxMorgen} (uren: ${maxMorgenTijden})
===========================================
`;
} catch (err) {
// Foutafhandeling
return "Fout: " + err.message;
}
4. Laat het script de resultaten als tags opslaan
Een belangrijk onderdeel van dit script is dat de uitkomsten niet alleen in de script-uitvoer terechtkomen, maar ook als tags worden opgeslagen. Daardoor kun je ze later in flows opnieuw gebruiken zonder dat je de parsing zelf nog eens hoeft te doen. De tags die worden gezet zijn onder meer minVandaag, maxVandaag, minVandaagTijden en dezelfde varianten voor morgen.
5. Start het script vanuit een flow en gebruik de uitkomsten
De bedoeling van dit script is dat je het laat draaien vanuit een Flow of Advanced Flow. Zodra het script is uitgevoerd, kun je de aangemaakte tags gebruiken in je logica. Denk bijvoorbeeld aan meldingen, beslismomenten of schakelingen op basis van goedkope of dure uren.
Integratie met Homey
Deze tutorial draait volledig om integratie met Homey. De opgehaalde waarden worden niet alleen verwerkt, maar bewust omgezet naar tags die in Homey blijven hangen. Daardoor kun je ze elders in je slimme huis inzetten zonder steeds opnieuw externe data te hoeven ontleden.
Praktische toepassingen binnen Homey zijn bijvoorbeeld:
- Een flow die je waarschuwt wanneer morgen een piekprijs wordt verwacht
- Een flow die juist kijkt naar de goedkoopste uren van vandaag of morgen
- Een Advanced Flow die beslissingen maakt op basis van prijs én tijd
Wat kun je hierna?
Als dit script eenmaal werkt, kun je het verder uitbreiden op een manier die past bij jouw energiegebruik. Je kunt bijvoorbeeld extra tags maken, de uitvoer anders formatteren of het script combineren met andere Homey-logica. De grootste winst zit meestal niet in nóg meer data ophalen, maar in slimmer kiezen wat je met die data doet.
Veelgemaakte fouten en aandachtspunten
- Vergeet niet je eigen API-key in te vullen voordat je het script test.
- Controleer of de gekozen aanbieder overeenkomt met een veld dat in de ontvangen data beschikbaar is.
- Hou er rekening mee dat het script een foutmelding teruggeeft als de JSON-structuur niet overeenkomt met wat het script verwacht.
Conclusie
Dit HomeyScript is een praktische bouwsteen voor iedereen die dynamische stroomprijzen wil vertalen naar bruikbare Homey-logica. Het script haalt niet alleen prijzen op, maar maakt meteen het onderscheid tussen goedkoopste en duurste uren van vandaag en morgen. Juist doordat die uitkomsten als tags beschikbaar komen, wordt het script interessant: niet als losse code, maar als functioneel onderdeel van je automatiseringen.