Ontwerp Meteo Station Haaksbergen

Inleiding
Meteostation Haaksbergen is een automatisch weerstation. Het stelt weersgegevens, de tijd, en daarvan afgeleide waarden beschikbaar via internet. Het weerstation Oregon Scientific WMR-928N meet de basisgegevens. Het is aangesloten op de meteo tijd server, die met behulp van een 'gewone' webserver de gegevens in diverse vormen ter beschikking stelt.

overzichtsfiguur
Meteo Station: Een overzicht
Functionaliteit
Werking Het weerstation bevat sensoren voor weersgegevens en tijd, en stuurt ontvangen meetwaarden naar de Meteo Tijd Server (MTS). Deze server voegt hieraan afgeleide gegevens toe, en stelt ze via Internet beschikbaar. Daarnaast worden er statistische gegevens verzameld en opgeslagen, onder andere van bezoekers die via internet binnenkomen. Op bepaalde tijden kunnen 'externe' commando's geinitieerd worden. Zo kan de Meteo Tijd Server ook zelfstandig gegevens distribueren (dus zonder dat hier een Client via Internet om vraagt), zoals voor het versturen van de daggegevens naar de Webserver, die er weergrafieken van kan maken.
Gegevens Beheer De Meteo Tijd Server beheert niet alleen meteo en tijd gegevens, maar leidt daar ook andere informatie van af.

Meetwaarden

De Meteo en Tijd Server slaat gegevens op zoals die binnenkomen van de sensoren van het weerstation:
  • wind
  • regenval
  • temperatuur, en relatieve vochtigheid van buitenshuis
  • temperatuur, relatieve vochtigheid binnen en luchtdruk van binnenshuis
  • tijd

Afgeleide Gegevens

Van de sensorgegevens wordt informatie afgeleid die betrekking heeft op:
  • het weer, zoals:
    • gevoelstemperatuur volgens diverse berekeningssystemen
    • gemiddelden, minima, maxima
    • windsnelheid in Beaufort
    • trends in het weer, etc.
  • de tijd, zoals:
    • opkomst en ondergang van zon en maan
    • begin van de seizoenen
    • zomer- en wintertijd
    • begin en einde van schemering
    • zonnetijd, utc, etc.
    • afstand tot zon en maan
    • tijd in andere culturen

Daggegevens

Informatie van vandaag en gisteren komt van:
  • metingen: voor diverse sensor- en afgeleide gegevens wordt het verloop van de laatste 24 uur bijgehouden (standaard iedere 10 minuten), zoals bijvoorbeeld voor temperatuur, windsnelheid, windrichting etc.
  • statistiek: voor temperatuur (minimum/maximum/gemiddelde), vochtigheid en zonneschijn wordt een gemiddelde voor de huidige dag berekend aan de hand van decade (10 daagse) gemiddelden die over een 30 jarige periode bepaald werden.

Adminstratieve Gegevens

Adminstratieve gegevens, die worden opgeslagen hebben betrekking op:
  • techniek, zoals:
    • het aantal keren dat bepaalde sensorgegevens binnenkwamen, de verwerkingstijd ervan (gemiddelde, minima, maxima en gemiddelde afwijking)
    • het aantal keren dat via internet een webaanvraag binnenkwam
    • diverse interne tellers etc.
  • client administratie: van bezoekende web-clienten worden wat gegevens bijgehouden:
    • ip adres en ip-host naam, het aantal keren dat de site bezocht is, en het eerste en laatste tijdstip
    • het gebruikte bladerprogramma (webbrowser)
    • de referrer (via welke webpagina men bij 'onze' server terecht kwam)
    • de proxyserver (als men via een tussenliggende computer bij ons terecht kwam)
    • het aantal keren dat een bepaalde pagina opgevraagd is
  • instellingen:
    • portnummers
    • plaats en tijdzone informatie
    • logging settings
Clienten De gegevens die door de Meteo Tijd Server beheerd worden, zijn beschikbaar om naar clienten gestuurd te worden. Dit kan:
  • direct (de datapakketjes die van het weerstation ontvangen zijn, worden direct doorgestuurd naar de client wanneer die een verbinding met de betreffende port geopend heeft). Dit kan in de volgende vormen:
    • binair, zodat hiermee eventueel een tweede Meteo en Tijd Server van datapakketjes voorzien kan worden
    • hexadecimaal, om de binnenkomende pakketjes zo snel mogelijk te kunnen inspecteren
    • textueel, om de betekenis van de binnenkomende data direct te controleren
  • op verzoek van de client als:
    • status rapport: een overzicht van de gegevens van het moment van aanvragen
    • xml, zodat de gegevens door de ontvanger weer verder verwerkt kunnen worden
    • textuele pagina's, op te vragen via http die met behulp van Dhp voorzien kunnen worden van actuele gegevens, en in diverse vormen:
      • html formaat (voor webpagina's)
      • wml: voor het wap dat gebruikt wordt voor draagbare telefoons
      • rss: een vorm om gegevens als nieuwsflits te ontvangen
      • voor pda's, met goede weergave op kleine schermen
      • platte text
    • als grafiek, bijvoorbeeld de temperatuur en relatieve vochtigheid van de laatste 24 uur.
  • als zelfstandige update: een extern commando (executeerbaar programma, bijvoorbeeld een shell-script) wordt uitgevoerd op bepaalde tijdstippen. Er zijn 2 soorten updates:
    • history update: wordt een aantal keren per uur uitgevoerd. Er wordt een bestand met de daggegevens aangemaakt, en daarna wordt een extern commando uitgevoerd, dat bijvoorbeeld deze daggegevens kan versturen. Met dit commando kunnen ook andere activiteiten gestart worden.
    • tijd update: wordt 1 keer per dag uitgevoerd, en kan gebruikt worden om een externe klok op tijd te zetten. Ook kunnen hiermee andere activiteiten uitgevoerd worden.
Dhp biedt de mogelijkheid om de tekst-pagina's die via http door clienten aangevraagd worden, te genereren afhankelijk van de waarden die op dat moment in de Meteo en Tijd Server opgeslagen zijn. De waarden kunnen tussen de teksten weergegeven worden. Ook kan conditioneel bepaalde tekstgedeeltes vertoond of juist weggelaten worden. Verder kunnen teksten vertaald worden in andere teksten.
Nauwkeurigheid De nauwkeurigheid van de gegevens wordt in de eerste plaats bepaald door de opstelling en de precisie van de sensoren van het weerstation. Deze sensoren zijn gecalibreerd om maximale nauwkeurigheid te bereiken.

Direct nadat het weerstation de sensorgegevens naar de MTS verstuurd heeft, worden deze samen met de afgeleide waarden beschikbaar gesteld. De nauwkeurigheid van de brongegevens bepaalt ook de nauwkeurigheid van de afgeleide waarden.

Gegevens die van de tijd afgeleid zijn, worden ieder uur berekend. Van de tijd afgeleide gegevens, die snel kunnen veranderen (zoals de positie van de zon) worden elke minuut berekend.
WeersverwachtingHet weerbericht bevat een weersverwachting met een geldigheid van één dag, omdat deze uitsluitend gebaseerd wordt op de gegevens die van het weerstation ontvangen zijn (het gebruikt een 'enkel roosterpunt weersverwachtingsmodel', dit in tegenstelling tot bijv. het HIRLAM model). Weersveranderingen die op grote afstand te detecteren zijn worden dus niet meegenomen.

Het weerstation levert de regenkans en het weertype voor de korte termijn: 'vandaag' en 'morgen'. Deze zijn gebaseerd op de huidige barometrische luchtdruk, en de verwachte luchtdruk voor morgen. Statistisch zijn aan de luchtdrukwaarden regenkansen en weertype beschrijvingen te koppelen.

Daarnaast worden er ook temperatuur verwachtingen berekend, en wel op twee manieren:
  • via een model, dat zich baseert op de aanname dat het temperatuurverloop over de dag een grote mate van gelijkvormigheid heeft met het verloop van de dag ervoor, zodat de temperatuurtrend (temperatuurverschil tussen gisteren 'om deze tijd' en 'nu') te bepalen is, en dit gebruikt kan worden om de extremen te extrapoleren.
  • via 'kunstmatig intelligentie': hierbij wordt aan een neuraal netwerk de volgende gegevens doorgegeven:
    • tijdstip in het jaar,
    • temperatuur van gisteren: gemiddelde, minimum en maximum,
    • momentele temperatuur trend,
    • luchtdruk van gisteren,
    • momentele luchtdruk trend
    en hieruit worden de minimum en maximum temperaturen voor vandaag en morgen bepaald.
    Het netwerk is getraind met de daggegevens die het KNMI de afgelopen 35 jaar op vliegveld Twenthe gemeten heeft. Maar training met andere gegevens is natuurlijk ook mogelijk.
Ontwerpoverzicht
In onderstaand figuur is een overzicht van Meteo Haaksbergen weergegeven als blokdiagram.

het ontwerp overzicht
Meteo Station Haaksbergen: Ontwerp Overzicht


De MTS (waar dit documentje in hoofdzaak over gaat) is via een seriele lijn verbonden met de wmr928n (het weerstation), verwerkt de ontvangen gegevens, maakt de 'afgeleide' gegevens, distribueert ze naar www.vanharten.info, en naar webclients die ze met een webbrowser kunnen opvragen. Omdat de MTS geen php ondersteunt, worden grafieken etc. door de 'www.vanharten.info' webserver aangemaakt. De kracht van de MTS ligt in het flexibel weergeven van de tekstuele representatie van de meteo en tijd gegevens.

Naast de normale html pagina's worden ook gegevens in RSS, WAP, en XML formaat afgeleverd. Ook is het mogelijk om gegevens 'op verandering' aangeleverd te krijgen, dus op het moment dat ze via de seriele lijn ontvangen worden van het weerstation. Dit kan in binaire (handig om er een tweede MTS op aan te sluiten, bijvoorbeeld voor testdoeleinden), hexadecimale, textuele en xml vorm.

De distributie van de gegevens naar de bestandsopslag (file store) voor de kabelkrant van Sternet, de lokale omroep van Haaksbergen, is weergegeven als een 'push' verbinding met de betreffende computer.
Weerstation WMR-928n
Het gaat wat te ver om een volledige beschrijving van het wmr-928n weerstation te geven, maar interessant zijn:
  • de sensoren
    • meteo: er zijn een aantal draadloze sensoren:
      • windsensor (meet windrichting en -snelheid)
      • regensensor (meet neerslag)
      • buitensensor (meet buitentemperatuur en de relatieve vochtigheid buiten)
      • binnensensor (meet de binnentemperatuur, de relatieve vochtigheid binnen, en de luchtdruk)
    • tijd: DCF77 tijd ontvanger
  • de seriele interface: via een rs-232 verbinding worden de sensor gegevens afgegeven (in 1 richting: van weerstation naar computer; de computer kan het weerstation niet besturen). Wanneer een sensor zijn gegevens naar het weerstation stuurt, stuurt het weerstation dit door naar de computer, soms aangevuld met wat afgeleide gegevens. De tijd wordt doorgestuurd op het moment dat een nieuwe minuut begint. De hele datum en het uur wordt doorgestuurd op het moment dat een nieuw uur begint (datum/uur wordt soms vaker gestuurd, het nut hiervan ontgaat me op dit moment).
  • net en batterij voeding: het toestel wordt via een netvoeding van spanning voorzien, en voor het geval de stroom uitvalt is de batterij als backup aanwezig (sommige instellingen worden zodoende bewaard, zoals het verschil tussen de 'luchtdruk' en de 'luchtdruk op zeeniveau' en de 'neerslag tot en met nu')
  • het lcd met touch screen: alle gegevens zijn op een lcd scherm te zien, dat met een higlow achtergrond verlichting ook in het donker goed af te lezen is. Verschillende modes en instellingen kunnen via het touch screen ingesteld worden.
overzicht van de wmr928 hardware
Basis Station en Sensoren van de wmr-928-n
Meteo Tijd Server
Functionaliteit De Meteo Tijd Server is het hart van Meteo Haaksbergen. De gegevens van het weerstation worden ingelezen, verwerkt, en beschikbaar gesteld. Deze weer en tijdgegevens kunnen door clients opgevraagd worden (o.a. door web browsers), maar worden ook zelfstandig verstuurd naar clienten die de updates nodig hebben. Teksten kunnen 'gemengd' worden met tijd en weersgegevens via de dhp processor. Op grond van de meetgegevens en langjarige statistische gegevens wordt een weersverwachting samengesteld. Een aardigheidje is het licentiemechanisme, dat selectief uitdelen van de functionaliteit mogelijk maakt.

Raspberry Pi, de computer waarop de MTS tot leven komt
Raspberry Pi, de computer waarop MTS draait
Ontwerp De interne structuur van de MTS kan op diverse manieren weergegeven worden. Om een goed beeld te krijgen van de afhandeling van de data van het weerstation, en van de verzoeken van de diverse clienten via het internet protocol, is er een dataflow beschrijving. Om het ontwerp in de vorm van pakketten en modulen goed weer te geven is er een control flow beschrijving.

Data Flow

De gegevens die door de MTS lopen worden vanuit een aantal gebeurtenissen geinitieerd:
  • het opstarten van de MTS (initialisatie gegevens worden uit een resource bestand gelezen)
  • het aanleveren van gegevens door het weerstation
  • verzoeken van de clienten
Een figuur met daarin de dataflow, de interne data opslag, en de functionele bewerkingen van deze gegevens als gevolg van het aanleveren van data, of verzoeken om data is weergegeven Data Flow Diagram MTS.

data flow van de Meteo en Tijd Server
Data flow diagram van de Meteo en Tijd Server


Een korte beschrijving:
  • Bij opstarten van de MTS worden initialisatie gegevens gelezen uit een resource bestand. Hierin staan de calibratie gegevens van de sensoren (om niet-lineariteiten op te heffen).
    Verder kunnen de ingebouwde standaard waarden (defaults) van de MTS aangepast worden. Dit betreft dan vooral 'vaste' informatie, zoals plaatsgegevens van het Meteo Station en bedrijfsinstellingen zoals portnummers.
    De langjarige daggemiddelden worden ook vanuit dit resource bestand ingelezen.
  • Als het weerstation gegevens van een van de sensoren binnenkrijgt, stuurt het die gegevens door naar de computer. Deze worden gedecodeerd, eventueel volgens calibratie aangepast, en in de dataopslag gezet. De gegevens worden in binaire, textuele en hexadecimale vorm naar clienten gestuurd als die er om gevraagd hebben via de internet port.
    Op grond van tijdgegevens, zoals die binnenkomen via de seriële lijn, worden diverse acties uitgevoerd:
    • wanneer een nieuwe dag begint worden de daggemiddelden voor deze dag berekend in dataopslag gezet
    • eenmaal per dag (op het uur volgens de resource instelling) wordt een extern commando uitgevoerd, waarmee een externe klok op tijd gezet kan worden (of andere 'eens per dag' acties uitgevoerd kunnen worden)
    • regelmatig (normaal om de 10 minuten) wordt een history bestand aangemaakt (een php-data definitie, die samengesteld is uit data van de afgelopen 24 uur), en wordt een extern commando uitgevoerd, dat deze data kan versturen, bijvoorbeeld voor grafiek generatie
  • Verzoeken van de clienten
    • binaire gegevens worden direct vanuit de input van de MTS doorgestuurd. Dit kan handig zijn als er een tweede MTS dezelfde gegevens wil ontvangen (bijvoorbeeld voor testdoeleinden)
    • hexadecimale gegevens kunnen gebruikt worden om te zien welke datapakketjes over de seriële lijn gaan
    • text gegevens worden gestuurd naar clienten die een minimale omzetting van de binnenkomende gegevens willen
    • status informatie komt op verzoek, eenmalig
    • xml informatie wordt eenmalig op verzoek van de client verstuurd, en presenteert dan alle van belang zijnde informatie in een xml vorm
    • de http poort is de meest nuttige: hier worden textuele outputs volgens het http protocol verstuurd. De inhoud kan html zijn, maar ook gewone text, rss, wml, xml, etcetera. Er zijn interne pagina's, die direct door het programma gegenereerd worden, en ook externe pagina's waarvan de inhoud uit en bestand gehaald wordt (met vaste teksten of op het moment van opvragen samengesteld door de dhp processor).

Control Flow

Het MTS programma bestaat uit een groot aantal programma regels, die ondergebracht zijn in modulen. Voor de Control flow structuur, die in Control Flow Diagram weergegeven is, worden module-groepen als packages weergegeven. Packages die belangrijke gegevens beheren zijn weergegeven met een dikkere rand, en eventueel wordt daarbij in schuinschrift de betreffende gegevens aangegeven.

control flow van de Meteo en Tijd Server
Control Flow diagram van de Meteo en Tijd Server


Via control wordt de Meteo en Tijd Server opgestart. Resources leest het resource bestand, en distribueert diverse settings, waaronder de systeem instellingen, die in data gezet worden.
Device opent de verbinding met het weerstation, en leest de gegevens wanneer die binnenkomen. Deze sensorgegevens worden direct in data gezet. Daarna wordt device proc aangestuurd om er gegevens van af te leiden (met behulp van formules uit algorithm en presentatievormen uit presentation). Die worden vervolgens ook in data gezet.
Wanneer de tijd binnenkomt stuurt device tijdgerelateerde processing aan, zoals het verwerken van de daggegevens via history. History verzamelt gegevens, bewaart deze een dag, en maakt het history bestand, dat gebruikt kan worden om er weergrafieken van te laten maken.
Wanneer device gegevens binnenkrijgt waarop een client zich geabonneerd heeft, wordt dit via client afgeleverd. Dit kan in binaire, hexadecimale, en textuele vorm. Op verzoek kan client ook status informatie en xml afleveren.
Via HTTP kunnen verzoeken voor tekstuele (waaronder html, en eventueel van de gewenste Dhp presentatie voorzien door presentation) en grafische bestanden gehonoreerd worden. De client laat diverse aspecten van clientverzoeken administreren door web_log1. Deze loggingen, de 'request' en 'error' loggingen vanuit web_log2, en statistische gegevens die van verschillende kanten bij statistics binnenkomen, worden via HTTP beschikbaar gesteld.
Package support biedt diverse kleinschalige ondersteunende functionaliteit, waaronder logging. De logging van een webrequest, of van een error wordt doorgestuurd naar web_log2.

Package Relaties

Zie bijlage.

Packages

Zie bijlage.

Modules

Zie bijlage.
Uitvoer De MTS kan externe pagina's en interne pagina's aan clienten afleveren. Externe pagina's bevinden zich als tekstbestanden op de computer, en worden zonodig van actuele gegevens voorzien door de Dhp processor. Een aantal voorbeelden van deze pagina's zijn: Daarnaast zijn er 'interne' pagina's die opgevraagd kunnen worden, en dan gegenereerd kunnen worden zonder gebruik te maken van externe bestanden. Deze zijn interessant voor testen en voor voorgedefinieerde overzichten. De interne pagina's zijn:
  • LIST: een lijst met meteo en tijdgegevens, processors enzovoort
  • TABLE: de tabel met meteo en tijd gegevens
  • STATUS: de toestand van de Meteo en Tijd Server
  • XML: de tabel met meteo en tijd gegevens in xml vorm
  • LOG: een log van de laatste 100 HTTP verbindingen
  • favicon.ico: icon voor gebruik in het url-veld van de browser
  • en daarnaast nog enkele voor interne administratie
DHP

Inleiding

DHP (het recursieve acroniem voor DHP Hypertext Preprocessor) wordt door de MTS ondersteund om teksten te genereren afhankelijk van de waarde van de data op het moment van opvragen van die tekst. De teksten die gegenereerd worden kunnen html, rss enzovoort zijn, afhankelijk van het dhp-bestand dat als bron gebruikt wordt.

DHP Bestand

Een dhp-bestand bestaat uit de te genereren tekst, met daarin aanwijzingen hoe er (conditioneel) tekst gegenereerd moet worden afhankelijk van de waarde van de meteo-tijd-gegevens, zoals meteo, time, derived, status, settings en statistics (maar niet: calibration data, history, web_log data).

DHP Directieven

De aanwijzingen binnen een dhp-bestand bestaan uit:
  • een dhp indicatie die aangeeft dat een tekstbestand een dhp-bestand is
  • gegevens en bewerkingen ervan (zoals vertalingen en formattering kunnen in 'serie' gezet worden via een 'pipe' symbool)
  • conditionele text besturing ('if', 'else', 'endif', waarin de waarde van data vergeleken kan worden met constanten, of andere data)
  • een processing vorm ('processor') die vooraf gedefinieerd kan worden.
  • een variabelen definitie ('variable'), die later gebruikt kan worden in conditionele tekst aanwijzingen of voor vertaling naar tekst in gewenste uitvoer.
  • een 'include' mogelijkheid om vanuit een dhp-bestand andere bestanden 'aan te roepen', waardoor standaard teksten die vanuit meerdere dhp-bestanden gewenst zijn, slechts in 1 bestand gedefinieerd hoeven te worden ('variable' en 'processor' waarden worden daarbij doorgegeven aan het aangeroepen bestand).
  • voor de volledigheid is er ook een kommentaar mogelijkheid opgenomen, een assert functie, die een melding geeft als bepaalde variabelen niet gedefinieerd zijn, en een mogelijkheid om spaties te besturen

DHP Voorbeeld

Een voorbeeld van een DHP, met daarbij de definitie van een vertaal 'processor', een formatteer 'processor', een 'variable' definitie, een conditionele 'if' 'else' 'endif' gebruik.
<?--dhp[]>
a<pre>Voorbeeld...
b[PROCESSOR PZ:0=zondag,6=zaterdag,*=werkdag]
c[PROCESSOR PY:<0=vriest %d graden,*=is %d graden]
d
e[VARIABLE VZ:outside_temp|%d|PY]
f  [jd|(ymdhms)]
g  [outside_temp]
h[IF day_of_week|PZ EQUAL werkdag]
i  Geen weekend vandaag.
j  Het [VZ].
k[ELSE]
l  Het is weekend.
m[ENDIF]
n<pre>
geeft de volgende output:

DHP Syntax

Naast een formele syntax definitie, is er ook een beschrijving.

DHP Overzichten

De MTS kan een overzicht genereren van alle interne meteo en tijd gegevens (naam, momentele waarde en omschrijving), en van conversies (tekst, integer en floating point) die dhp ondersteunt. Er is hiervan ook een compact overzicht dat door de MTS zelfstandig gegenereerd kan worden.
Licentiemechanisme De MTS bevat functionele opties, die met een licentiemechanisme vrijgegeven worden. Dit mechanisme werkt lokaal, waarbij een licentiesleutel de functies vrijgeeft als de MTS binnen de gelicenseerde omgeving (qua machine identificatie en geldigheidsduur) werkt.

Het licentiemechanisme bestaat uit:
  • een 'coder' die de 'aanvraaggegevens' (opties, geldigheidsduur en machine identificatie) omzet in een licentiesleutel,
  • een 'decoder', die aangeeft of er een geldige combinatie van 'aanvraaggegevens' en licentiesleutel is, en
  • een 'licentie activator' die binnen de MTS de gewenste functie vrijgeeft bij een geldige licentiesleutel. De geldigheid van de licentie wordt elk uur opnieuw vastgesteld, en gebruikt daarvoor de tijd die van het weerstation komt. Daarbij wordt gecontroleerd of er overeenstemming is tussen de 'aanvraaggegevens' en de omgeving waarbinnen de MTS draait (huidige tijd, gebruikte machine en licentiesleutel).
Het mechanisme gebruikt het 'blowfish' encryptie algorithme, een efficiente en veilige vorm van versleuteling die in het publiek domein aanwezig is.

De ondersteunde opties zijn:
  • d: dhp ondersteuning
  • h: berekening van gegevens die van de tijd afgeleid worden
  • i: index pagina (hoofdpagina van de MTS) weergave
  • l: /LOG pagina
  • s: zetten van meteo en tijd gegevens via http
  • t: /TABLE weergave
  • x: /XML weergave
Een voorbeeld van het gebruik van de coder en decoder:
   linux> decoder localhost
   hostid: 00000050-da3c0e63
   linux> coder localhost 2005-01-01,2019-12-31 0-stxlidh
   hostid:  00000050-da3c0e63
   time:    2005-01-01,2019-12-31
   options: 0-stxlidh
   key:     5101a3f1-f7f2171f
   linux> decoder 00000050-da3c0e63 2005-01-01,2019-12-31 0-stxlidh 5101a3f1-f7f2171f
   result: OK
Afmetingen Zie bijlage, en gerelateerd aan complexiteit en de dekking van de testen.
Snelheid De snelheid van de Meteo en Tijd Server hangt af van diverse factoren, waaronder de snelheid van de processor waar het op draait, en (bij client verzoeken) hoe snel de verbinding naar die client is.
De LOG pagina laat de snelheid van processing zien. De uitvoer ziet er bijvoorbeeld als volgt uit:
Wed Sep 30 09:40:32 2009     7.6 (4.9)       GET /LIST                          192.168.1.37
Wed Sep 30 09:40:35 2009    41.7 (41.2)      GET /design/pasen.html             192.168.1.37
Wed Sep 30 09:40:38 2009    29.3 (24.2)      GET /TABLE                         192.168.1.37
Wed Sep 30 09:40:41 2009    20.8 (16.2)      GET /STATUS                        192.168.1.37
Nadat er eerst een tijdstempel weergegeven wordt, komt daarna de tijdsduur in milli seconden van het genereren en versturen van een pagina naar de client (tussen haakjes de tijd voor het genereren). Dit wordt gevolgd door de HTTP method (zoals hier de GET) en de pagina die opgehaald is. Daarna komt het ip adres van de aanvragende computer (met eventueel de naam van deze computer). Hoewel bovenstaand overzicht al wel een aardige indruk geeft kun je dit overzicht ook zelf genereren, door achtereenvolgens de volgende pagina's aan te vragen (en daarna met ⇦ weer terug te gaan naar deze pagina):
  • LIST geeft een referentielijst
  • pasen.html de data waarop Pasen gevierd wordt tussen 1900 en 2400
  • TABLE met de meeste meteo en tijd informatie
  • STATUS hierin kan de tijdsduur van client-data verwerking bekeken worden
  • LOG: kijk nu onder in dit document voor de log van de laatste requests
Implementatie Details De MTS is geschreven in de taal C, voor een Linux operating system (maar is eenvoudig geschikt te maken voor bijvoorbeeld Irix en Solaris).

Het distribueren van gegevens gebeurt buiten dit C-programma, via unix-scripts die door het programma aangeroepen worden. Hierdoor bevat het MTS programma geen kennis van de netwerktopologie. In plaats van de namen 'www.hetweer.nu' en 'www.vanharten.info' kunnen ook andere server namen in de scripts opgenomen worden (of kan het netwerk aangepast worden).

De kwaliteit van het programma wordt gewaarborgd door het ontwerp met zowel off-line als run-time diagnostische controles en rapportages. Hiermee kunnen foutdetectie en foutanalyse snel worden uitgevoerd. Belangrijke onderdelen hiervan zijn:
Webserver
Functionaliteit De webserver is aanvullend aan de Meteo en Tijd Server, en zorgt voor een grafische weergave van de meteo en tijd gegevens (bijvoorbeeld een grafiek van de temperatuur van de laatste 24 uur). De webserver wordt gevoed met gegevens die door de Meteo en Tijd Server opgestuurd worden.
De webserver wordt gehost door een professionele organisatie, en de verwachting is dat deze daarom een hogere beschikbaarheid heeft.
Ontwerp Ontwerp is een wat groot woord voor de gekozen webserver: het is een standaard Apache webserver, voor de afhandeling van:
  • 'normale' webrequests (zoals html, zip, en gif-bestanden), en
  • specifieke webrequests waarbij de grafische capaciteiten van deze server gebruikt worden. Dit loopt via:
    • PHP met o.a. de GD library, waardoor JpGraph, een PHP en GD gebaseerd grafisch pakket gebruikt kan worden, en
    • Macromedia Flash animaties
Invoer: Data Van MTS naar Webserver De meteo- en tijdgegevens waarmee de Webserver o.a. grafieken genereert, krijgt het van de Meteo en Tijd Server met grote regelmaat (standaard elke 10 minuten). Dit bestand bevat variabelen en array's met waarden, en wordt als data via een 'include' in het PHP scripts ingevoegd. Deze PHP scripts gebruiken de gegevens om de grafische uitvoer te maken.
Een voorbeeld van het data script:
<?php
$time_of_creation      = "23:50 25-6-2005";
$updates_per_hour      = "6";
$cur_time              = "50";
$cur_outside_temp      = "14.7";
$cur_outside_chill     = "15";
en de array's:
$the_time              = array("0", "", "", "", "", "", "1", "", "", "", "", "", "2",  enzovoort
$the_outside_temp      = array(18.8, 18.8, 18.7, 18.6, 18.7, 19.0, 19.1, 19.2, 19.2,  enzovoort
$the_gust_speed_filt_1 = array( 1.650, 1.619, 1.465, 1.800, 2.477, 1.791, 1.691, enzovoort
?>
Uitvoer: Pagina's Met Grafieken Zonder volledig te willen zijn, volgt hieronder een lijstje met php scripts: en de Flash animaties:
  • clock voor een klok met de juiste tijd
  • baro voor een kwik-barometer met de luchtdruk
  • thermo voor een thermometer met de temperatuur
Voor deze flash animatie is er ook beperkte documentatie.
Referenties
Bij het maken van de Meteo en Tijd Server heb nuttig gebruik kunnen maken van gegevens van:
  • John Stanley die mij geinspireerd heeft tot het maken van dit weerstation met zijn light-weight wmr918d. Dit is een programma dat onder unix draait, en de gegevens van het weerstation beschikbaar maakt via internet (o.a. telnet)
  • John Walker vanwege de source code van zijn moontool, een programma dat in 1987 voor SUN computers ontwikkeld is ("the moon on the SUN"). Dit is gebruikt voor de maanfase berekeningen, de lunation, en afstanden van de aarde tot de maan en de zon.
    Verder heeft hij ook de oorspronkelijke versie van calender converter gemaakt, waar diverse algorithmes aan ontleend zijn
  • Het KNMI dat begrippen in het weer beschreven heeft, de langjarige decade (10 dagen) gemiddelden beschikbaar had, en de daggegevens van het weer in Nederland
  • De Gnu Calendar Gcal, waarin accurate algorithmes te vinden zijn met betrekking tot maan en zon standen. De aanpassingen die voor het meteo station gebruikt worden kun je downloaden
  • Paul Schlyter vanwege formules en voorbeelden voor het berekenen van planeet posities.
  • Oscar van Vlijmen's informatie voor het berekenen van gevoelstemperatuur (windchill), warmte index (heat index), warmte verliezen (en de risico-klassificatie daarvan), humidex en de net effective temperature
  • Keith Burnett's formules en een implementatie van de opkomst en ondergangstijden van de zon en maan, en van de schemeringstijden
  • Jean Meeus astronoom en schrijver van Astronomical Algorithms (djvu,pdf), met daarin astronomische rekenvoorschriften die in deze server gebruikt worden
  • P. Bretagnon en G. Francou, die in VSOP87 (Variations Sèculaires des Orbites Planètaires) de beweging van planeten, o.a. de aarde, ten opzichte van de zon hebben vastgelegd in tabellen met constanten zodat ze in eenvoudige formules gebruikt kunnen worden. Zie ook hun publicatie over dit onderwerp
  • Wikipedia, met artikelen op het gebied van meteorologie, tijd, en astronomie
En verder van:
Raspberry Debian - Het universele Besturingssysteem Valid XHTML 1.0! vim pspad Gnu C Compiler damn small linux logo Knoppix INX Ubuntu