Weerstation  Huizen

Het weer in Huizen

De Meteobridge.

Op het Weerstation Huizen wordt voor het verwerken van de meteo data gebruik gemaakt van de Meteobridge. De Meteobridge is een kleine uploadserver die in verbinding staat met het internet. De Meteobridge ontvangt zijn data van het Davis Vantage Pro2 weerstation. (hieronder staat een afbeelding van de Meteobridge)

  • meteobridge_PRO
    meteobridge_PRO

De Meteobridge is een vernuftig apparaatje met veel mogelijkheden. Als je meer van de Meteobridge wilt weten dan kan de volgende link nuttig zijn. Meteobridge

Ik wil hieronder wat ervaringen delen die ik heb opgedaan met de Meteobridge.

Als basis wilde ik de actuele weergegevens van mijn weerstation op regelmatige tijden (interval van 1 minuut) gaan uploaden naar mijn internet website. In principe is de MeteoBridge uitgerust met een ftp functie waarmee dat zou moeten kunnen. Als internet provider gebruik ik Strato. Strato biedt alleen de sftp service. (Secure File Transfer Protocol)  Dit protocol geeft simpel gezegd meer beveiliging dan het gewone ftp protocol.

Op zich is dit sftp protocol geen probleem aangezien de Meteobridge dit protocol ook ondersteund. Om de verbinding met de internet provider eerst te testen heb ik gebruik gemaakt van een ftp-client programma: FileZilla Client. Hiermee kon ik, na wat instellingen te hebben gedaan, een verbinding opzetten naar mijn internet provider en een test-file in de privé directory van mijn website zetten d.m.v. het sftp protocol. FileZilla ondersteund dat ook. Dit alles lijkt te werken. De volgende stap was de instelgegevens voor een sftp verbinding in de Meteobridge programmeren. Zo gezegd zo gedaan, maar wat ik ook heb geprobeerd, geen enkele instelling wilde werken.

Gewoon ftp werkt prima op de Meteobridge maar sftp wil gewoon niet. 

Mijn volgende stap was om de data vanaf de Meteobride met een tussenstap te versturen naar mijn internet provider. Aangezien ik in mijn netwerk thuis ook een NAS (Network-Attached Storage) device heb staan waarop ik toch al van plan was om mijn meteo data te gaan bewaren, was het plan om de op de MeteoBridge gemeten data via het gewone ftp protocol naar de NAS te sturen. Deze stap werkt inderdaad prima. De volgende uitdaging was om de gegevens weer met een vast interval te uploaden naar mijn internet provider. De NAS heeft o.a. een functie waarmee op voorgeprogrammeerde tijden een bepaalde taak uitgevoerd kan worden. De Taakplanner. De taakplanner kan een hele reeks voorgeprogrammerde functies uitvoeren. Maar voor datgene wat ik wil was er geen directe functie beschikbaar. De (makkelijkste) oplossing was, leek mij om gebruik te maken van een script. Dit script kan dan op regelmatige tijden op de NAS gestart worden. 

Als script-taal heb in gekozen voor php formaat. php scripts worden heel veel gebruikt voor de besturing van o.a. een website. Maar in principe kunnen de scripts overal voor gebruikt worden. De NAS die ik heb kan verschillende versies van php ondersteunen. De volgende stap is een script maken waarmee een file vanuit een lokale directory van de NAS naar een remote directory bij de internet provider (Strato) gezet kan worden. Internet biedt hier weer uitkomst aangezien er ontzettend veel te vinden is, ook over dit onderwerp. Dat is dan ook meteen weer het volgende probleem. Wat werkt er wel en wat niet. Een bijkomend, niet onbelangrijk probleem was ook nog dat de sftp functie niet in de standaard functies van php voorkomt. Na wat gezocht te hebben op internet blijkt dat er een SSH2 functie nodig is. Op internet is deze functie in de vorm van een reeks files te vinden. De files heb ik gekopieerd en na veel proberen heb ik de SSH2 functie toch aan de praat gekregen.

Het resultaat is dat de Meteobridge de data naar mijn NAS stuurt en deze vervolgens met een interval van 5 minuten van de NAS naar de internet provider stuurt waarna het dus zichtbaar is op mijn website. 

Het koste even wat moeite maar uiteindelijk werkt het.

Achteraf ben ik toch wel blij met deze oplossing aangezien ik nu met nog te maken scripts mijn meteo data kan manipuleren om andere tabellen of weergave vormen te maken voor mijn website. In principe kan dat ook met de MeteoBridge. Ook daar kunnen tabellen e.d. worden gemaakt d.m.v. templates.

Grafiek generator.

In januari 2021 ben ik gestart met waarnemingen wat betreft fijnstof. Hiervoor heb in een meetmodule van DAVIS gekocht n.l. de AirLink. Deze meetmodule kan eenvoudig geïntegreerd worden in de MeteoBridge omgeving. In principe behoeft alleen de AirLink als tweede weerstation te worden geselecteerd onder de tab. Station / Primary Station.

  • Station setting
    Station setting

Onder de tab. Mapping moeten dan de sensors van de AirLink worden geselecteerd. Dat zijn de sensors: 

  • air1!0pm  PM10
  • air1!1pm  PM2.5
  • air!12pm  PM1.0

Na deze selectie zijn de sensoren beschikbaar in het systeem.

Op zich is dat al een goede stap om b.v. de data in de tabel met actuele gegevens op te kunnen nemen die bij mij om de 5 minuten naar de website wordt gestuurd. Een volgende stap is natuurlijk om de meetgegevens ook in een grafiek te kunnen weergeven. Ik was eerst van plan om een bestaand script van een grafiek om te bouwen en geschikt te maken voor de fijnstof sensoren. Maar dat is best wel wat werk en je moet goed opletten wat je wijzigt anders loopt het geheel helemaal in de soep. Toevallig zat ik hiervoor te kijken op de website van MeteoBridge en zag tot mijn verbazing dat er die dag ( 7 jan 2021) ook net een update was voor de MeteoBridge waarbij er een grafiek generator was geïmplementeerd in de software. Je moet hiervoor de versie: Meteobridge 5.1 (jan 7 2021, build 14244) hebben. 

Onder de tab: Grafieken was een nieuwe tab geplaatst met de naam: Define Chart. Dat was precies wat in nodig had.

  • Define Chart
    Define Chart

Hierboven staan de instellingen die ik gebruikt heb voor mijn fijnstof module. Na het indrukken van de button "bewaar" komt deze nieuwe grafiek beschikbaar onderaan de lijst Meta Charts. Dit is werkelijk een prachtige toevoeging op de MeteoBridge waarmee je in een paar minuten een nieuwe grafiek hebt gedefinieerd.  Hieronder is het resultaat hiervan te zien.

  • Voorbeeld grafiek
    Voorbeeld grafiek


Opvragen van gegevens uit de MeteoBridge.

Ik werk nu al weer een tijd met de MeteoBridge en dat bevalt ontzettend goed. Het is een heel veelzijdig apparaat met erg veel mogelijkheden. Door de vele mogelijkheden is het soms ook wel lastig om het één en ander voor elkaar te krijgen. De laatste tijd ben ik bezig geweest om gegevens uit de MeteoBridge te halen met behulp van scripts. Deze scripts draaien, of op mijn NAS of op een kleine weerserver die ik pas het aangeschaft. De weerserver is een kleine desktop computer van het merk MEDION. Het is een compleet WINDOWS 10 systeem met een SSD van 256 GB en een CORE I3 processor. Ik heb niet direct een beeldscherm op deze computer aangesloten. Als ik iets wil bekijken of aanpassen dan ga ik gewoon met de verkenner van WINDOWS via mijn lokale netwerk naar deze computer. Met behulp van de Taakplanner start ik het script wat ik wil gebruiken op met een interval van 5 minuten. Je kan voor elk script een taak maken maar wat makkelijker  is, het maken van een .bat file waarin de commando's staan en die dan vanuit de taakplannen opstarten.

De scripts die ik maak schrijf ik in PHP. Als werkomgeving gebruik ik Rapid PHP 2020. Hiermee kan ik zowel in PHP, java als ook in HTML schrijven. Ik vind PHP een leuke taal waarin je erg goed met netwerken en file handling om kunt gaan. Het nadeel (en niet van PHP) is dat PHP-scripts niet op de MeteoBridge kunnen draaien. Dus daarom het gebruik van mijn weerserver. Deze gebruik ik alleen maar voor het periodiek starten van een aantal scripts en het opslaan van de data. Deze scripts moeten dus data kunnen opvragen via het lokale netwerk uit de MeteoBridge. 

Ik wil hieronder een voorbeeld geven hoe dat zou kunnen. Voor de één een open deur en voor de ander mogelijk nuttige informatie.

Allereerst moet je kunnen inloggen vanuit een script op de MeteoBridge, de data opvragen en weer uitloggen. In principe zou dat gewoon met een webbrowser zoals EDGE van Windows moeten kunnen. Je voert het commando op de command line in en dan een return. Maar uieraard wilde ik dat vanuit een script doen die dat dan ook periodiek aanroept.

Hoe dat commando eruit zien staat allemaal beschreven op de site van MeteoBridge.

https://www.meteobridge.com/wiki/index.php/Templates

Ondanks de vele informatie is het soms toch lastig uit te vinden hoe het precies werkt dus van daar dit voorbeeld..

Zoals gezegd is het voorbeeld in de script taal PHP.

Waar ik mee begonnen ben is een definitie maken van het commando die ik wil gebruiken. In dit voorbeeld om op te vragen of het dag of nacht is aan de MeteoBridge.

$TemplateDayLight  = 'http://<loginnaam>:<wachtwoord>@<local IP address>/cgi-bin/template.cgi?template=[mbsystem-isday:--]';

Voor <loginnaam> vul je je eigen loginnaam voor je MeteoBridge in.

Voor <wachtwoord> vul je je eigen wachtwoord voor je MeteoBridge in.

Voor <local IP address> vul je je eigen IP-adres van  je MeteoBridge in. 

 Wat wel handig is, is om je MeteoBridge een statisch IP-adres te geven en dat ook in je router op MAC-adres in te stellen. Je loopt dan niet het risico dat, wanneer je het hele systeem een keertje opnieuw start, de MeteoBridge een ander IP-adres krijgt dan dat je in je script het opgegeven en je dus je script opnieuw moet wijzigen.

Het bovenstaande commando kan je gemakkelijk op de command line van je browser testen. Na het geven van dit commando krijg je een 1 of een 0 terug afhankelijk of het dag of nacht is. 

Nu volgt de code waarmee je automatisch inlogt op de MeteoBridge en de betreffende data opvraagt.

$handle_DayLight_MB = fopen($TemplateDayLight, "rb");
stream_set_timeout($handle_DayLight_MB, 5);
$DagLichtVlag = stream_get_contents($handle_DayLight_MB, -1);
fclose($handle_DayLight_MB);
if ($DagLichtVlag == 1)   { .......};

Als eerste open je een stream. Een stream of een file is in PHP nagenoeg hetzelfde. Met $TemplateDayLight open je de stream naar de MeteoBridge.

$handle_DayLight_MB = fopen($TemplateDayLight, "rb");

Om het systeem niet te laten hangen als er geen data terugkomt van de MeteoBridge geef je een timeout op. ( 5 seconde)

stream_set_timeout($handle_DayLight_MB, 5);

Nu wordt de data die terugkomt van de MeteoBridge in de variabele $DagLichtVlag gelezen.

$DagLichtVlag = stream_get_contents($handle_DayLight_MB, -1);

Nu wordt de stream gesloten.

fclose($handle_DayLight_MB);

Vervolgens kan er wat gedaan worden met de waarde van $DagLichtVlag.

if ($DagLichtVlag == 1)   { .......};

Op deze manier kun je gemakkelijk data uit de MeteoBridge lezen. Er kan voor elk op te vragen data een aparte templete gemaakt worden en die dan met bovenstaande code aanroepen. Uiteraard kan er nog het één en ander aan Error handling omheen gebouwd worden maar in essentie gaat het om de bovenstaande code.

Ik hoop dat dit wat extra informatie is bij het opvragen van data vanuit de MeteoBridge in een script.


Wordt vervolgt.