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.

  1. Ga naar www.enever.nl/prijzenfeeds
  2. Voer je e-mailadres in bij “Token aanmaken”
  3. Je ontvangt een e-mail met een unieke tekenreeks (je API-sleutel)
  4. Plaats deze sleutel in de code op de plek waar API_KEY staat

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_NUMBER door je eigen API-key
  • Pas AANBIEDER aan als je een andere prijsbron wilt gebruiken
  • Laat de rest van de opbouw in eerste instantie ongemoeid
De instellingen bovenin het HomeyScript voor stroomprijzen
Bovenin het script pas je vooral je API-key en de gebruikte aanbieder aan.

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.

Homey-tags met minimum en maximum stroomprijs van vandaag en morgen
Zodra de tags beschikbaar zijn, kun je ze opnemen in gewone flows of complexere Advanced Flows.

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
Gebruik van stroomprijs-tags in een Homey flow
Ontvang bijvoorbeeld dagelijks een bericht met de goedkoopste en duurste uren van de dag, zodat je weet wanneer je slimme apparaten het beste aan of uit kunt zetten.

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.

Samenvatting van de stroomprijzen voor vandaag en morgen in HomeyScript
Het script geeft ook een leesbare samenvatting terug, zodat je meteen ziet of de data goed is opgehaald.

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.