Maak van je Raspberry Pi een weerstation

Gestart door Joost, 26 oktober 2019, 09:14:57

Vorige topic - Volgende topic

Nvbgm

@Joost
Ik ben bezig om het script wat aan te passen naar mijn behoeften en kan 1 ding niet duidelijk vinden waar dat bepaald word.

Aan het begin van het script geef je "Locall weerstation = 26" (voor mij 26) aan.
Deze variabele word volgens mij alleen gebruikt voor het bepalen van het station ID in de data van buienradar.
De Darksky data word bepaald door de lat/long uit Domoticz.

Als mijn redenering juist is dan zit er een klein foutje in het script.
Zo niet dan vraag ik mij af waar de station bepaling vandaan komt om de juiste data uit de json van buienradar te halen ...

Kun je daar iets over zeggen ??


Joost

De data van Buienradar wordt inderdaad bepaald door het gekozen weerstation en de data van DarkSky a.d.h.v. de GPS-coördinaten in Domoticz.

Kun je aangeven wat het kleine foutje is?

Nvbgm

Oke Joost ik zal je uitleggen waar ik tegen aan liep/loop
Mijn data vergelijk ik met de xml/json file die ik in een ander programma hier ook uit buienradar haal.
Wat mij opviel dat ik in dit script andere waarden zag dan in de andere twee.
Als voorbeeld heb ik mijn eigen regio genomen n.l 26 en als ik die in het andere prg invoer dan pas komen de data overeen.
In het andere programma selecteer ik het station op ID en dan is het voor Leeuwarden ID 29 of ID 6270.
Ik kon hier niets anders vinden dan 26 waaruit ik heb opgemaakt dat ik hier een verkeerd ID gebruik.
Maar misschien zit ik verkeerd.

Nvbgm

Citaat van: Nvbgm op 10 januari 2020, 11:51:09
Oke Joost ik zal je uitleggen waar ik tegen aan liep/loop
Mijn data vergelijk ik met de xml/json file die ik in een ander programma hier ook uit buienradar haal.
Wat mij opviel dat ik in dit script andere waarden zag dan in de andere twee.
Als voorbeeld heb ik mijn eigen regio genomen n.l 26 en als ik die in het andere prg invoer dan pas komen de data overeen.
In het andere programma selecteer ik het station op ID en dan is het voor Leeuwarden ID 29 of ID 6270.
Ik kon hier niets anders vinden dan 26 waaruit ik heb opgemaakt dat ik hier een verkeerd ID gebruik.
Maar misschien zit ik verkeerd.

Heb inmiddels de verschillen en foutjes zoals hierboven aangegeven gevonden en opgelost.
Het blijkt dat de waarden die Darksky presenteerde toch iets anders zijn dan die van buienradar.
Zo word de plaatselijke Temp uit de data ven Darksky gehaald en niet uit de stadiongegevens van buienradar.
Darksky gebruik hier vaak de locatie Amsterdam voor terwijl buienradar de locatie van het meetstation aangeeft.
Vandaar dat ik verschil had in sommige waarden. Ik heb het script aangepast zodat ik dus ook b.v. de Temperatuur uit buienradar haal.
Ik ga kijken of ik dat ook doen kan met andere waarden die verschillen.

Nvbgm

@Joost

Ik ben er nog steeds niet achter hoe jij in het script bepaald welk station je moet halen uit de json van buienradar.
Je geeft als variabele 'Weerstation' = xx op maar dat is niet het ID van het weerstation zo te zien.
Kun je aangeven hoe je dan het juiste station uit de json haalt ??


Joost

Citaat van: Nvbgm op 10 januari 2020, 18:14:31
Heb inmiddels de verschillen en foutjes zoals hierboven aangegeven gevonden en opgelost.
Het blijkt dat de waarden die Darksky presenteerde toch iets anders zijn dan die van buienradar.
Zo word de plaatselijke Temp uit de data ven Darksky gehaald en niet uit de stadiongegevens van buienradar.

Dat is geen foutje, maar een bewuste keuze  ;). Ik vind sommige waarden van DarkSky beter dan die van Buitenradar.

Citaat van: Nvbgm op 11 januari 2020, 11:56:03
@Joost

Ik ben er nog steeds niet achter hoe jij in het script bepaald welk station je moet halen uit de json van buienradar.
Je geeft als variabele 'Weerstation' = xx op maar dat is niet het ID van het weerstation zo te zien.
Kun je aangeven hoe je dan het juiste station uit de json haalt ??

Als je de json van Buienradar bekijken dan zie je iets als onderstaande.
Block 0 (onder stationsmeasurements) is weerstation 1, block 1 is weerstation 2, etc.

Nvbgm

Aha en die zie ik dus niet in mijn JSON   rara


Joost

Citaat van: Nvbgm op 12 januari 2020, 08:53:14
Aha en die zie ik dus niet in mijn JSON   rara

Even openen in Firefox (of een plugin/add-on installeren voor de browser die je gebruikt).

Nvbgm

Joost,

Ik gebruik chrome met een extensie genaamd json formater maar ook dan zie ik ze niet.
Maar dat terzijde. Heb nog wel een andere vraag.
Soms krijg ik de volgende error melding:

2020-01-26 13:05:01.500 Error: EventSystem: in 2-WeerData: [string "-- LUA TIME Weerdata script ..."]:293: attempt to perform arithmetic on field 'visibility' (a nil value)

Deze ontstaat doordat op sommige momenten de data niet verstrekt word door het buienradar station. Waarom dat zo is geen idee. Maar als ik de json data check van buienradar dan is hij er soms wel en soms niet.

Ook op de grafieken site :  https://www.buienradar.nl/nederland/weerbericht/weergrafieken
zie dat hij leeg is.

Nu mijn vraag. Is het script op die waarde zo aan te passen dat wanneer deze nwaarde ontbreekt er een "0" waarde aan wordt gegeven zodat je dan niet telkens die error krijgt maar dat je zichtmeter gewoon op "0" komt te staan.
Iets van if .... then  ...... is "0"

Ik heb dit alleen bij de visibility parameter..

Zou dit een oplossing kunnen zijn voor dit probleem ??
Nieuwe functie toegevoegd:
--function isempty
local function isempty(s)
  return s == nil or s == ''
end

en dan

if isempty(val_Visibility) then val_Visibility = "0" end

Joost

Heb je alleen bij visibility soms deze foutmelding? Zo ja, dan kun je onderstaande regel:

if jsonData ~= nil then  -- dit gebeurt soms rond

wijzigen in:

if jsonData.jsonData.currently.visibility ~= nil then

Door deze wijziging, mits je visibility van DarkSky haalt, loopt een deel van het script alleen als visibility een waarde heeft.


Jouw bedachte functie zou je ook kunnen proberen. Ik krijg nooit foutmeldingen, dus kan 'm niet eenvoudig voor je testen.

Nvbgm

Joost dank voor jou uitleg ik ga dit proberen.
Ik maak trouwens gebruik van de visibility waarde van buienrader daar ik in de data van Darksky soms grote verschillen zie met de data die ik hier van het naburige weerstation bekijk.
(vliegbasis leeuwarden) Die van buienradar komen daarbij bijuna altijd overeen. Weet niet of anderen die ervaring ook hebben maar soms heb ik in temperatuur b.v. wel 4 graden verschil.
En dat is mij toch een trui teveel :-)
Ik ga kijken wat jou code doet en anders zolang zet ik hem weer terug naar Darksky zolang de waarden er weer is.

dmAnne

Citaat van: Joost op 26 oktober 2019, 09:14:57
Onderstaand LUA-script maakt van je Raspberry Pi een weerstation.
Voorbereidingen:

       
  • Installeer PHP op je Raspberry Pi (bij voorkeur versie 7.3)
  • Installeer nl_NL-UTF-8 op je Raspiberry Pi met commando raspi-config
  • Download Meteo Alarm Weather Warnings en upload alle .php and .json bestanden in de map meteo-alarm-weather-warnings/src naar de map /var/www/html/meteo-alarm-weather-warnings-1.1/src/ op de Raspberry Pi. Wijzig vervolgens de naam van het warnings.json bestand naar warnings.php (je hebt nu dus 2 bestanden met dezelfde naam, 1x beginnend met een kleine letter en 1x beginnend met een hoofdletter). Open nu het bestand Period.php (in de subfolder /src). Op regel 31 wijzig je 'from' naar 'starttime' en wijzig je 'until' naar 'endtime'. Vergeet niet om de wijziging op te slaan!
  • Onder Settings vul je jouw gegevens in.
  • Op regel 406 zie je 013 staan. Dit cijfer is Noord-Brabant voor weer-waarschuwingen. Het cijfer kun je wijzigen naar jouw eigen provincie/kustgebied.
  • Op regel 556 moet je het getal 25 vervangen door het IDX van device "Waarschuwing vandaag".
  • Maak in Domoticz virtuele devices aan met de namen, zoals ze op regel 32 t/m 54 staan

Om het e.e.a onder Windows aan de praat te krijgen moet je een paar andere stappen nemen.

  • Installeer PHP en een webserver zoals Apache. Om het je makkelijk te maken kun je ook XAMPP https://www.apachefriends.org/index.html gebruiken.

  • Download de Meteo Alarm Weather Warnings bestanden en zet ze in in plaats van de /var/www/html folder in de htdocs folder van apache

  • Windows maakt geen odnerscheid tussen grote en kleine letters.
    Het Warning.php bestand kun je het beste Warning.class.php noemen en warning.json Warning.php.
    Pas ook de regel met requrie_once("Warning.php") aan naar Warning.class.php.
    Let op: er is ook een Warmings.php, dat is een ander bestand.

  • Pas de code in Period.php aan zodat er

                'starttime' => $this->from,
                'endtime' => $this->until

    staat

  • Je kunt het script dan testen door in een browser de URL aan te roepen:
    http://localhost/meteo-alarm-weather-warnings-1.1/src/warnings.php?country=NL&region=013&time_zone=Europe/Amsterdam

  • Pas de code op de genoemde regels aan
    Voor mij waren het niet precies dezelfde regel nummers
    Daarnaast heb ik gebruik gemaakt van variabelen die ik boven in het script definieer:

    local regioAlert       = "013"                                -- Kies je regio naar keuze

    en dan:

    &region=' .. regioAlert .. '&time_zone=Europe/Amsterdam

    en

    local dev_AlertTodayIdx             = 25   -- Alert sensor index nummer

    en dan:

          local config=assert(io.popen('curl "http://'..domo_ip..'/json.htm?type=devices&rid=' .. dev_AlertTodayIdx .. '"'))


  • Pas de referenties naar /home/pi/domoticz aan zodat die verwijst naar waar je domoticz staat.
    Ik heb zelf domoticz in /home/domoticz staan onder Windows (wat hetzelfde is als c:\home\domoticz in mijn geval)

  • Nu zou het moeten werken.  8)


Grappig genoeg bedacht ik toen ik klaar was dat ik destijds het script heb gebruikt om de buitentemperatuur te krijgen voor de berekening van graaddagen https://ehoco.nl/gasverbruik-per-graaddag-tonen-in-domoticz/.
Maar ik heb nu temperatuur sensoren op mijn eigen dak, dus deze is eigenlijk niet meer nodig  8)

Hoe dan ook een goede oefening :)

Nvbgm

Hallo dmAnne

Volgens mij zit er toch een klein foutje in. Je geeft aan om een paar files te renamen o.a.

Citeeren warning.json Warning.php.


In onderstaande lijst (zoals je hem download van GITHUB) vind ik geen warning.json. Een s vergeten ?

Awareness.php
AwarenessLevel.php
AwarenessType.php
Config.php
Description.php
Period.php
Region.php
Result.php
Warning.php
warnings.json
Warnings.php

Wallgarden

Hallo Joost,

Een werkelijk heel mooi script, hartelijk dank.
Alles werkte de eerste keer bijna meteen, echter de alarm meldingen "Waarschuwing vandaag" en "Waarschuwing morgen" werkt niet bij mij.
Ik kan niet vinden waar het fout gaat, krijg ook geen error meldingen. Debug heb ik op 5 gezet.
Kun je me wat op weg helpen dit op te lossen?

Ik gebruik een PI 3.B  met Buster en Domoticz V4.10717



Nvbgm

Citaat van: Wallgarden op 16 februari 2020, 14:04:05
Hallo Joost,

Een werkelijk heel mooi script, hartelijk dank.
Alles werkte de eerste keer bijna meteen, echter de alarm meldingen "Waarschuwing vandaag" en "Waarschuwing morgen" werkt niet bij mij.
Ik kan niet vinden waar het fout gaat, krijg ook geen error meldingen. Debug heb ik op 5 gezet.
Kun je me wat op weg helpen dit op te lossen?

Ik gebruik een PI 3.B  met Buster en Domoticz V4.10717


Ik heb zelf ook dagenlang gezocht maar heb het nu voor elkaar.
Kijk eens in de error log van apache of je daar ook een foutmelding krijgt.
En heb je ook geprobeerd om het script vanuit je browser aan te spreken ???

Als je eerst het volgende probeert in je browser:

IP-ADRES/meteoalarm/warnings.json (meteoalarm veranderen in jou path)

Je zou nu een melding moeten krijgen dat je nog een Country parameter in moet geven.

{"error":"GET parameter country is required"}

Als je dan het volgende ingeeft:

IP-ADRES/meteoalarm/warnings.php?country=NL

Zou je een heel scherm met data moeten krijgen. Of een error 500 melding.
Ben benieuwd