Homey Community Forum

Weerlive.nl

Op basis van informatie van @Rocodamelsheki ben ik gaan stoeien met weerlive.nl. Ik kan op dit moment de actuele weersgegevens opvragen bij weerlive.nl, deze in een variabele zetten en gebruiken.

Nu heeft weerlive.nl ook een interessante api voor de weersverwachtingen per uur. Deze informatie jan ik ook opvragen, alleen weet ik niet hoe ik die data kan verwerken. Bij de actuele weersgegevens heb je een unieke code(d0tmax, d0tmin en d0neerslag),maar die zie ik niet bij de weersverwachting. Iemand een idee?

Ik dacht dat er wel ergens een “verw” stond in de originele link. Kan hem nu ff niet checken helaas.

Dat zou kunnen. Maar het probleem dat ik heb is dat ik meedere dagen krijg. Steeds zie ik temp staan voor ieder uur en dag. Hoe krijg ik nu bijvoorbeeld de temp van morgen 11:00 binnen en van overmorgen 11:00? Althans in een variabele

@Rocodamelsheki In bovenstaande schermafdruk worden in één flow 3 aanroepen gedaan naar de weerlive API. Zelf heb ik ook een soortgelijke constructie (omdat ik nog niet beter weet), maar als je dat echt elke 10 minuten zou opvragen dan heb je dus 3 x 6 x 24 = meer dan de 300 aanvragen die je op een dag mag doen met de gratis API.

Is het met BL ook mogelijk om de hele JSON respons op te slaan in 1 aanroep en deze vervolgens binnen een tweede flow verder uit te splitsen naar de gewenste waarden elk in hun eigen variabele?

Ik zou zeggen dat GET JSONpath triggerwaarde iets zou moeten kunnen doen, maar ik krijg het niet uitgevogeld…

Edit: inmiddels zelf uitgevogeld hoe het werkt. Voor iedereen met dezelfde vraag hier mijn oplossing:

Maak eerst een flow die alle gegevens in 1x ophaalt en de totale JSON string doorgeeft aan een tweede flow:
image

Dan de tweede flow welke alle gegevens die nodig zijn verwerkt en in aparte BL variabelen zet:
image

De eerste flow kan zo vaak als nodig is aangeroepen worden (maar let op de max. van 300x per dag voor de API key). De tweede flow wordt vervolgens automatisch door de eerste aangeroepen omdat ze dezelfde triggernaam hebben (in mijn voorbeeld WeerUpdate).

Het is dus nodig om hiervoor zowel de Better Logic als de HTTP app geïnstalleerd te hebben.

2 Likes

Mooi voorbeeld. Ik tracht de 14 daagse weersverwachting nog steeds in variabelen te krijgen. Hetgeen ik nog niet begrijp is $.liveweer[0].d0tMax.
Dollarteken zal een standaard aanroep zijn
Liveweer zal denk ik de naam van de Json file zijn
[0] geen enkel idee waar dit vandaan komt
d0tMax De variabele in de jsonfile

image
Kan iemand dit in ‘mensentaal’ uitleggen? Ik heb het werkend voor weerlive door die code erbij in te typen, maar wellicht kan het mij op weg helpen voor de 14-daagse verwachting

Probeer eens met [1] of [2] aangezien de door jou gewenste variabelen er vaker in staan zal je die specifieker moeten specificeren.
0 zal mogelijk de 1e instance zijn, 1 de 2e, enz.
Zeker weten doe ik het niet, maar het is het proberen waard.
liveweer is de naam van de set die terug komt uit de JSON aanroep.

  • $ representeert het (JSON) object dat teruggestuurd wordt door de server
  • liveweer is de naam van een “key” in dat object; de waarde die bij de key hoort is een array van waarden (elke waarde is weer een object, dus $.liveweer is een array-van-objecten);
  • [0] is het eerste element van dat array; als je het tweede element wilt, moet je [1] gebruiken (enz);
  • d0tmax is de naam van een key in het (in dit geval) eerste element van de liveweer array

De expressie is een JSONPath expressie. Je kunt hier in realtime zulke expressies uitproberen: plak het JSON resultaat van de weerlive server in het “JSON” veld, vul bovenin de JSONPath expressie in, en rechts zie je het resultaat.

@robertklep stel dat ik onderstaande jsonfile heb, is dan plaatsnaam de key van het object? En de variabele “temp” op tijdstip 14:00 is dat dan het tweede element?

Om die variabele dan aan te roepen: $plaatsnaam[1].temp. ?

Dit is wel ff andere koek zeg:nerd_face:

Welke onderstaande JSON file? :wink:

Zo te zien moet je dan $.data[1].temp hebben.

1 Like

Fantastisch @robertklep, dat is hem. Werkt geweldig. Nu kan ik verder met ‘mijn’ volautomatische tuin🤗

Ik wil hwt antwoord op ‘solution’ zetten, kan ik dat doen en hoe?

Op die 3 puntjes onder zijn bericht klikken

image

En dan?:nerd_face:

Dan niks haha! Ik zie hem hier niet bij staan. Eens even vragen of iemand iets is vergeten met het maken van de extra categorieën.

@Marcel_Ubels ^^
Is gefixed, check again!
Emile heeft het aangepast.

1 Like

Hoi @ArnoP ,

ik ben ook bezig met het 1 malig uitlezen om vervolgens de data te analyseren.
Nu heb ik een JSON object gemaakt met als trigger Weerupdate.

Moet je deze Trigger ook aan maken in better logics?
ik krijg bij de 2e flow namelijk geen gegevens binnen (Value not found)

nog een vraagje voor iedereen:
Ik wil een flow maken dat ik een berichtje krijg als het snachts gaat vriezen.
Dit zo dat ik weet of ik de zilver folie deken over de ruit van mijn auto moet legen tegen het aanvriezen op de voorruit. :grin:

Maar zo ver ik weet kijkt hij alleen naar de Min temperatuur van 00:00 tot 23:59 uur dus als het snachts na 1 uur gaat vriezen geeft hij dat niet weer. iemand een oplossing hier voor? buiten het kijken naar 2 dagen natuurlijk.

Nee de trigger is geen variabele in better logic. Wellicht ff je flows hier delen?
Met openweather app kun je ook naar de voorspelling van de temperatuur kijken. Zelf heb ik een 24 uurs voorspelling van de temperatuur via de api. Deze schuift steeds een uur op. Probleem is daarmee getackeld

ik kan mijn flow delen maar ik denk dat dat weinig nut heeft. mijn flow werkt niet omdat ik het nog niet doorgrond.

ik kan wel 1 variabel oproepen. en dat werkt prima.

wat ik wil is de complete array op slaan (dus alle variabelen in 1 api oproep)
om het vervolgens op de homey weer via een flow te splitsen in losse waardes. (Het gene wat ArnoP doet)
alleen waar sla ik dit op?

{ “liveweer”: [{“plaats”: “Waddinxveen”, “temp”: “3.2”, “gtemp”: “-2.2”, “samenv”: “Geheel bewolkt”, “lv”: “99”, “windr”: “ZZW”, “windms”: “8”, “winds”: “5”, “windk”: “15.6”, “windkmh”: “28.8”, “luchtd”: “1016.3”, “ldmmhg”: “762”, “dauwp”: “3”, “zicht”: “1”, “verw”: “Bewolkt en lokaal mist. Morgen regen”, “sup”: “08:31”, “sunder”: “16:34”, “image”: “wolkennacht”, “d0weer”: “regen”, “d0tmax”: “10”, “d0tmin”: “5”, “d0windk”: “5”, “d0windknp”: “17”, “d0windms”: “9”, “d0windkmh”: “31”, “d0windr”: “NO”, “d0neerslag”: “63”, “d0zon”: “7”, “d1weer”: “regen”, “d1tmax”: “8”, “d1tmin”: “5”, “d1windk”: “3”, “d1windknp”: “8”, “d1windms”: “4”, “d1windkmh”: “15”, “d1windr”: “ZW”, “d1neerslag”: “90”, “d1zon”: “10”, “d2weer”: “halfbewolkt”, “d2tmax”: “9”, “d2tmin”: “8”, “d2windk”: “3”, “d2windknp”: “8”, “d2windms”: “4”, “d2windkmh”: “15”, “d2windr”: “W”, “d2neerslag”: “40”, “d2zon”: “10”, “alarm”: “0”}]}

De losse waarde kan ik oproepen met http://weerlive.nl/api/json-data-10min.php?key=XXX&locatie=XXX $.liveweer[0].d0tmin en die sla ik op in Tempmin


De eerste afbeelding reageert op de aanroep. De tweede afbeelding haalt de variabelen op. In jou geval vul je dus bijv $data[0].plaats en als variabele bijv plaats welke je aanmaakt in better logic, de tweede $data[0].temp en als variabele bijv temperatuur etc etc
De derde afbeelding geeft de aanroep weer.

Bedankt dankzij jouw post is het nu gelukt! ik zie wel dat jij .data gebruikt en ik gebruik .liveweer
heeft dat te maken met dat jij openweathermap gebruikt en ik de api van weerlive?

ik zie trouwens wel dat temp bij mij nu 4.8 is en mintemp 5… dat vind ik nog wel vreemd.

{ “liveweer”: [{“plaats”: “Waddinxveen”, “temp”: “4.8”, “gtemp”: “-0.1”, “samenv”: “Geheel bewolkt”, “lv”: “97”, “windr”: “ZZW”, “windms”: “8”, “winds”: “5”, “windk”: “15.6”, “windkmh”: “28.8”, “luchtd”: “1015.2”, “ldmmhg”: “761”, “dauwp”: “4”, “zicht”: “4”, “verw”: “Bewolkt en lokaal mist. Morgen regen”, “sup”: “08:31”, “sunder”: “16:34”, “image”: “wolkennacht”, “d0weer”: “regen”, “d0tmax”: “10”, “d0tmin”: “5”, “d0windk”: “5”, “d0windknp”: “17”, “d0windms”: “9”, “d0windkmh”: “31”, “d0windr”: “NO”, “d0neerslag”: “63”, “d0zon”: “7”, “d1weer”: “regen”, “d1tmax”: “8”, “d1tmin”: “5”, “d1windk”: “3”, “d1windknp”: “8”, “d1windms”: “4”, “d1windkmh”: “15”, “d1windr”: “ZW”, “d1neerslag”: “90”, “d1zon”: “10”, “d2weer”: “halfbewolkt”, “d2tmax”: “9”, “d2tmin”: “8”, “d2windk”: “3”, “d2windknp”: “8”, “d2windms”: “4”, “d2windkmh”: “15”, “d2windr”: “W”, “d2neerslag”: “40”, “d2zon”: “10”, “alarm”: “0”}]}