Verwachtte zonnige minuten obv weersvoorspelling op jouw locatie

Script hieronder werkt nu, en wel op een Pro 2019 mocht dat van invloed zijn.

Bij de fetch dienen backticks `` gebruikt te worden, ontdekte ik ‘al klooiend’ :stuck_out_tongue:

fetch(`https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&hourly=sunshine_duration`);


Verder krijg ik in de return enkel maar undefined terug, ook als ik de constante vervang door true. Iemand een idee?

(Als je het script te snel na elkaar test, krijg je soms een 500 error van open-meteo. Paar minuten wachten en dan werkt het weer :wink: )

code:

async function calculateExpectedSunshineForNextThreeHours() {
const latitude = 53.1234567;
const longitude = 4.1234567;

// MAX 300 calls per dag
const response = await fetch(`https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&hourly=sunshine_duration`);
//
const data = await response.json();

// Controleer of er zonneschijninformatie beschikbaar is
if (!data.hourly || !data.hourly.sunshine_duration) {
    throw new Error("Geen zonneschijninformatie beschikbaar \nconst latitude = " + latitude
    + "\nconst longitude = " + longitude
    + "\nconst response = " + response + "\nconst data = " + data);
}

const sunshineDuration = data.hourly.sunshine_duration;
const timeStamps = data.hourly.time;

// Controleer of de waarden in seconden zijn (meer dan 60)
const isInSeconds = sunshineDuration.some(duration => duration > 60);
const conversionFactor = isInSeconds ? 60 : 1;

// Bepaal de huidige tijd en de index voor de komende 3 uur
const now = new Date();
const currentHourIndex = timeStamps.findIndex(time => new Date(time).getHours() === now.getHours());

if (currentHourIndex === -1 || currentHourIndex + 3 >= sunshineDuration.length) {
    throw new Error("Onvoldoende gegevens voor de komende 3 uur.");
}

// Bereken de verwachte zonneschijnduur voor de komende 3 uur
let expectedSunshineMinutes = 0;
for (let i = currentHourIndex; i < currentHourIndex + 3; i++) {
    expectedSunshineMinutes += sunshineDuration[i] / conversionFactor;
}
expectedSunshineMinutes = Math.ceil(expectedSunshineMinutes)

console.log("Verwachte zonneschijnduur voor de komende 3 uur:", expectedSunshineMinutes + " minuten."); // er moest nog een + tussen

return expectedSunshineMinutes;
}

async function updateExpectedSunshineVariable() {
const expectedSunshineMinutes = await calculateExpectedSunshineForNextThreeHours();

// Haal alle logica variabelen op
const variables = await Homey.logic.getVariables();

// Zoek naar de variabele met de naam "ExpectedSunshineMinutes"
const expectedSunshineVariable = Object.values(variables).find(variable => variable.name === 'ExpectedSunshineMinutes');

// Update de variabele als deze gevonden is
  if (expectedSunshineVariable) {
      await Homey.logic.updateVariable({
          id: expectedSunshineVariable.id,
          variable: {
              value: expectedSunshineMinutes
          }
      });
      console.log("Variabele 'ExpectedSunshineMinutes' = bijgewerkt.");
     } else {
      console.error("Variabele 'ExpectedSunshineMinutes' niet gevonden.");
    }

}

// Roep de functie aan om de variabele bij te werken
updateExpectedSunshineVariable().catch(console.error);

Screenshot from 2024-06-09 23-29-43

Ben benieuwd wat er overdag uit rolt aan zon uren voorspelling!