# Verwachtte zonnige minuten obv weersvoorspelling op jouw locatie

**URL:** <https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197>\
**Category:** Ideeën & Suggesties\
**Created:** [June 8, 2024, 11:59am UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197 "2024-06-08T11:59:27Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Pietje\_Kuif](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/pietje_kuif/32/79361_2.png) [@Pietje\_Kuif](https://community.homey.app/u/Pietje_Kuif)\
**Post date:** [June 8, 2024, 11:59am UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/1 "2024-06-08T11:59:27Z")

</div>

Dit vind ik wel een leuk script. Misschien kunnen jullie dit ook gebruiken.  
Het bepaalt het voorspelde zonnige minuten op basis van de actuele weersverwachting op jouw locatie. Vul bij lat en lon de coordinaten in van je huis bij AAA en BBB.

> async function calculateExpectedSunshineForNextThreeHours() {  
> const latitude = AAA;  
> const longitude = BBB;  
> const response = await fetch(‘[https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&hourly=sunshine\_duration](https://api.open-meteo.com/v1/forecast?latitude=$%7Blatitude%7D&longitude=$%7Blongitude%7D&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.");
> }
> 
> 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.");
> 
> 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);

---

<div class="post-metadata">

**Author:** ![Peter\_Kawa](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/peter_kawa/32/173848_2.png) [@Peter\_Kawa](https://community.homey.app/u/Peter_Kawa)\
**Post date:** [June 8, 2024, 3:05pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/2 "2024-06-08T15:05:14Z")

</div>

Ga ik zéker eens proberen!

Kun je i.p.v. gedeeltes, even het hele script tussen  
`````

`````

zetten?  
Dat leest wat makkelijker, en het is makkelijker te kopiëren.  
Thx!

---

<div class="post-metadata">

**Author:** ![Pietje\_Kuif](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/pietje_kuif/32/79361_2.png) [@Pietje\_Kuif](https://community.homey.app/u/Pietje_Kuif)\
**Post date:** [June 8, 2024, 5:03pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/3 "2024-06-08T17:03:18Z")

</div>

Done! Veel plezier ermee. Ik moet zelf nog wat ervaring opbouwen met hoe goed voorspellingen zijn en hoeveel zonminuten je echt krijgt.

In combinatie met een gunstige voorspelling kan ik nu mijn vaatwasser aan laten als ik EN stroom heb EN de voorspellingen gunstig zijn…

---

<div class="post-metadata">

**Author:** ![Pietje\_Kuif](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/pietje_kuif/32/79361_2.png) [@Pietje\_Kuif](https://community.homey.app/u/Pietje_Kuif)\
**Post date:** [June 8, 2024, 5:39pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/4 "2024-06-08T17:39:29Z")

</div>

Oh jaa… het aantal calls dat je per dag gratis kunt doen is 300. Ik denk dat je boven 300 calls geen antwoord meer krijgt tenzij je betaald… Heb er zelf een tellertje bij gezet en vraag elke 15 minuten een voorspelling.

---

<div class="post-metadata">

**Author:** ![Wout\_van\_den\_Dool](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/wout_van_den_dool/32/391_2.png) [@Wout\_van\_den\_Dool](https://community.homey.app/u/Wout_van_den_Dool)\
**Post date:** [June 9, 2024, 7:32am UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/5 "2024-06-09T07:32:17Z")

</div>

Ik ben heel benieuwd, krijg nu nog even deze error:

———————————————————  
❌ Script Error  
⚠ Verwachte zonuren.js:4  
const response = await fetch([https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&hourly=sunshine\_duration](https://api.open-meteo.com/v1/forecast?latitude=$%7Blatitude%7D&longitude=$%7Blongitude%7D&hourly=sunshine_duration));  
^^^^^

SyntaxError: missing ) after argument list  
at new Script (node:vm:99:7)  
at HomeyScriptApp.runScript (/app/app.js:352:23)  
at Object.runScript (/app/api.js:30:38)  
at process.processTicksAndRejections (node:internal/process/task\_queues:95:5)

Gebruik dit als Lat Lon:  
52.02458313329773  
5.189171786330936

---

<div class="post-metadata">

**Author:** ![Jeroen\_Tebbens](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/jeroen_tebbens/32/62246_2.png) [@Jeroen\_Tebbens](https://community.homey.app/u/Jeroen_Tebbens)\
**Post date:** [June 9, 2024, 8:35am UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/6 "2024-06-09T08:35:42Z")

</div>

const response = await fetch(‘[https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&hourly=sunshine\_duration’](https://api.open-meteo.com/v1/forecast?latitude=$%7Blatitude%7D&longitude=$%7Blongitude%7D&hourly=sunshine_duration%E2%80%99) );

Er missen ‘ begin en einde url

---

<div class="post-metadata">

**Author:** ![Pietje\_Kuif](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/pietje_kuif/32/79361_2.png) [@Pietje\_Kuif](https://community.homey.app/u/Pietje_Kuif)\
**Post date:** [June 9, 2024, 3:23pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/7 "2024-06-09T15:23:06Z")

</div>

Ach. Die zijn er bij. het posten ‘vanaf gevallen’. Zal ze in mijn post toevoegen!

---

<div class="post-metadata">

**Author:** ![Jeroen\_Tebbens](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/jeroen_tebbens/32/62246_2.png) [@Jeroen\_Tebbens](https://community.homey.app/u/Jeroen_Tebbens)\
**Post date:** [June 9, 2024, 5:01pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/8 "2024-06-09T17:01:16Z")

</div>

Verder lijkt het er op dat niet alle long / lat gebieden een rsultaat geven.

```auto

✅ Script Success
↩️ Returned: undefined
Error: Geen zonneschijninformatie beschikbaar.
    at calculateExpectedSunshineForNextThreeHours (verwachting zon.js:9:11)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async updateExpectedSunshineVariable (verwachting zon.js:40:33)

```

Correctie, hardcoded in de url werkt wel, wellicht niet meer dan 2 decimalen

---

<div class="post-metadata">

**Author:** ![Peter\_van\_Meer](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/peter_van_meer/32/74898_2.png) [@Peter\_van\_Meer](https://community.homey.app/u/Peter_van_Meer)\
**Post date:** [June 9, 2024, 5:58pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/9 "2024-06-09T17:58:53Z")

</div>

He dit is leuk, snap er allemaal niets van maar krijg na knippen en plakken het onderstaande resultaat,

Wat gaat er nog mis?

✅ Script Success  
↩ Returned: undefined  
TypeError: Only absolute URLs are supported  
at getNodeRequestOptions (/app/node\_modules/node-fetch/lib/index.js:1327:9)  
at /app/node\_modules/node-fetch/lib/index.js:1450:19  
at new Promise ()  
at fetch (/app/node\_modules/node-fetch/lib/index.js:1447:9)  
at calculateExpectedSunshineForNextThreeHours (mijn-script.js:5:24)  
at updateExpectedSunshineVariable (mijn-script.js:44:39)  
at mijn-script.js:70:1  
at process.processTicksAndRejections (node:internal/process/task\_queues:95:5)

---

<div class="post-metadata">

**Author:** ![Jeroen\_Tebbens](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/jeroen_tebbens/32/62246_2.png) [@Jeroen\_Tebbens](https://community.homey.app/u/Jeroen_Tebbens)\
**Post date:** [June 9, 2024, 9:27pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/10 "2024-06-09T21:27:56Z")

</div>

Variabele gemaakt in Homey?

```auto
ExpectedSunshineMinutes

```

---

<div class="post-metadata">

**Author:** ![Peter\_Kawa](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/peter_kawa/32/173848_2.png) [@Peter\_Kawa](https://community.homey.app/u/Peter_Kawa)\
**Post date:** [June 9, 2024, 9:47pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/11 "2024-06-09T21:47:58Z")

</div>

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’ 😛

```auto
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:

```auto
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](https://us1.discourse-cdn.com/flex025/uploads/athom/original/3X/a/e/ae18bf056319c54b70ed02369c3012d5c77cbb1f.png)

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

---

<div class="post-metadata">

**Author:** ![Peter\_van\_Meer](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/peter_van_meer/32/74898_2.png) [@Peter\_van\_Meer](https://community.homey.app/u/Peter_van_Meer)\
**Post date:** [June 10, 2024, 8:26am UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/12 "2024-06-10T08:26:15Z")

</div>

bedankt voor de hulp.  
het werkt nu,  
Maar nog steeds geen zon 🙄

✅ Script Success

↩ Returned: undefined

Verwachte zonneschijnduur voor de komende 3 uur: 0 minuten.

Variabele ‘ExpectedSunshineMinutes’ = bijgewerkt.

---

<div class="post-metadata">

**Author:** ![Wout\_van\_den\_Dool](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/wout_van_den_dool/32/391_2.png) [@Wout\_van\_den\_Dool](https://community.homey.app/u/Wout_van_den_Dool)\
**Post date:** [June 10, 2024, 12:20pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/13 "2024-06-10T12:20:44Z")

</div>

> [@Wout\_van\_den\_Dool](#):
>
> 5.189171786330936

En er is ook zon 🙂

——————————————————— ✅ Script Success

↩ Returned: undefined

Verwachte zonneschijnduur voor de komende 3 uur: 83 minuten.

Variabele ‘ExpectedSunshineMinutes’ = bijgewerkt.

Heeft Meteo API ook toevallig de **historische** neerslag in MM per uur of per dag? Dan kan ik mijn beregeningsflow vast klaar maken als de zomer komt…

---

<div class="post-metadata">

**Author:** ![Peter\_van\_Meer](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/peter_van_meer/32/74898_2.png) [@Peter\_van\_Meer](https://community.homey.app/u/Peter_van_Meer)\
**Post date:** [June 10, 2024, 2:17pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/14 "2024-06-10T14:17:15Z")

</div>

Hehe eindelijk zon en niet zo weinig ook 😊

——————————————————— ✅ Script Success

↩ Returned: undefined

Verwachte zonneschijnduur voor de komende 3 uur: 89 minuten.

Variabele ‘ExpectedSunshineMinutes’ = bijgewerkt.

---

<div class="post-metadata">

**Author:** ![Pietje\_Kuif](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/pietje_kuif/32/79361_2.png) [@Pietje\_Kuif](https://community.homey.app/u/Pietje_Kuif)\
**Post date:** [June 10, 2024, 2:28pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/15 "2024-06-10T14:28:48Z")

</div>

Ha! Wat goed! (Sorry voor de ‘verkeerde’ quotes en het weglaten van een stukje uitleg… )  
Hopelijk brengt het je wat 🙂

---

<div class="post-metadata">

**Author:** ![Pietje\_Kuif](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/pietje_kuif/32/79361_2.png) [@Pietje\_Kuif](https://community.homey.app/u/Pietje_Kuif)\
**Post date:** [June 10, 2024, 2:42pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/16 "2024-06-10T14:42:00Z")

</div>

Hoi, ik had mijn lat long even weg gehaald omdat ik nogal op mijn privacy ben gesteld… 😁  
Maar de volgende url doet het gewoon en heeft meer dan 4 decimalen. Dus wel een vreemd…

[https://api.open-meteo.com/v1/forecast?latitude=52.850410&longitude=6.611040&hourly=sunshine\_duration](https://api.open-meteo.com/v1/forecast?latitude=52.850410&longitude=6.611040&hourly=sunshine_duration)

---

<div class="post-metadata">

**Author:** ![Pietje\_Kuif](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/pietje_kuif/32/79361_2.png) [@Pietje\_Kuif](https://community.homey.app/u/Pietje_Kuif)\
**Post date:** [June 10, 2024, 2:43pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/17 "2024-06-10T14:43:05Z")

</div>

Yep… die is er ook : [https://open-meteo.com/en/docs/historical-weather-api](https://open-meteo.com/en/docs/historical-weather-api)

---

<div class="post-metadata">

**Author:** ![Jeroen\_Tebbens](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/jeroen_tebbens/32/62246_2.png) [@Jeroen\_Tebbens](https://community.homey.app/u/Jeroen_Tebbens)\
**Post date:** [June 10, 2024, 2:56pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/18 "2024-06-10T14:56:20Z")

</div>

Ok ik ga wel even kijken als ik er meer tijd voor heb. 👍

---

<div class="post-metadata">

**Author:** ![Wout\_van\_den\_Dool](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/wout_van_den_dool/32/391_2.png) [@Wout\_van\_den\_Dool](https://community.homey.app/u/Wout_van_den_Dool)\
**Post date:** [June 10, 2024, 6:37pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/19 "2024-06-10T18:37:09Z")

</div>

Dankjewel voor die API link naar Meteo. Ik heb die API geprobeerd om regen neerslag te meten, vond de volumes erg laag qua MM regen:

 ![CleanShot 2024-06-10 at 20.29-Safari](https://us1.discourse-cdn.com/flex025/uploads/athom/original/3X/4/9/49fdda7115a331fba3d9f88b1be6a0cc68cf8019.png)

Bijvoorbeeld de 21e was een erg natte dag, 23 MM bij KNMI en 1 MM bij Metro

De lichtblauwe balkjes zijn [METEO](https://open-meteo.com/en/docs/historical-weather-api#start_date=2024-05-01&end_date=2024-05-31&hourly=&daily=rain_sum) en de andere is [KNMI](https://www.knmi.nl/nederland-nu/klimatologie/maand-en-seizoensoverzichten/2024/mei) De Bilt, ligt naast Houten

Suggesties hoe ik dit van KNMI kan aanroepen, gaarne 🙂

---

<div class="post-metadata">

**Author:** ![JPe4619](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/jpe4619/32/9017_2.png) [@JPe4619](https://community.homey.app/u/JPe4619)\
**Post date:** [June 10, 2024, 11:33pm UTC](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197/20 "2024-06-10T23:33:14Z")

</div>

KNMI  
//“[https://weerlive.nl/api/json-data-10min.php?key=caxxxxxbbc&locatie=51.9125,4.6177](https://weerlive.nl/api/json-data-10min.php?key=caxxxxxbbc&locatie=51.9125,4.6177)”

[Next page](https://community.homey.app/t/verwachtte-zonnige-minuten-obv-weersvoorspelling-op-jouw-locatie/111197.md?page=2)
