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’
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 )
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);
Ben benieuwd wat er overdag uit rolt aan zon uren voorspelling!