| Projectje
: temperatuurmeting & archivering
Er werd mij gevraagd om een temperatuurlogging te doen van een bepaalde ruimte. De temperatuur mocht er een bepaalde waarde niet overschrijden. Indien dat wel het geval zou zijn, moest er een alarm afgaan. In verband met tracebility moesten de gegevens bewaard worden. En het zou ook nog mooi zijn als dit ook in een grafiek gepresenteerd werd. Ik
zal hier beschrijven hoe ik dit oploste (als proefproject wordt de temperatuur
van mijn bureau gemeten). Het is misschien niet de mooiste oplossing,
zeer waarschijnlijk zijn er betere. In ieder geval zijn er proffesionele
oplossingen met tags of buttons die het temperatuursverloop registreren. Lieven. |
| 1.
Meting
Het
probleem van de meting met een alarmkontakt was snel op te lossen met een
red
lion controls PAX temperatuurmeter. Deze heeft meerdere set-points
en bijhorende
uitgangen. Op die manier kan er ter plaaste al een pre-alarm (temperatuur
bijna te hoog) en een alarm (temperatuur te hoog) geactiveerd worden.
(inhoud)
2.
Archivering
Dank
zij de seriële interface kunnen de gegevens van de meter uitgelezen
worden. Setpoints kunnen, indien gewenst, gewijzigd worden. Minimum en
maximum kunnen gereset worden.
(inhoud)
2.1
seriële communicatie
Mijn broer's principe Alles bestaat al (maar je moet het vinden) indachtig,
levert wat zoekwerk het programma sjinn
op, dat voor de seriële communicatie kan zorgen. De meter reageert
op het kommando P*
met een antwoord dat via de setup vooraf geconfigureerd werd. In mijn geval
: actuele temperatuur, cumulatie, huidig minimum en huidig maximum.
sjinn -d /dev/ttyS0 -b9600 -s "P*" -r56 -n -w1krijgen we als antwoord bv 26.3Het zou mooi zijn als we deze gegevens regelmatig meten (bv om de minuut) en per dag in een bestand zouden steken ... (inhoud)
2.2
archivering
Mijn
broer's principe indachtig, levert wat zoekwerk ook een passend
script op.
2001.06.02 16:21.05, 26.3, 27.3, 22.9Voilà. Ik ben er. Nu enkel de optie 'grafische weergave' nog ... (inhoud)
3.
Grafieken
Vermits
de komputer zelf niets ander te doen heeft, kunnen we hem gerust zelf nog
de grafieken laten genereren en presenteren.
(inhoud)
3.1
Grafieken genereren
Mijn
broer's principe indachtig, levert wat zoekwerk een programma op :
Nu
enkel nog de grafiek beschikbaar maken voor 'iedereen'.
(inhoud)
3.2
Aanbieden
Het
door velen verguisde dselect
weet me te zeggen dat boa
een lichte http server is. Even installeren, nog een HTML-letje brouwen
(voornamelijk voor een automatische refresh van de pagina) en klaar is
kees.
Spartaans, maar in principe voldoende. Mooiere grafieken zouden eigenlijk wel welkom zijn. MRTG kan dat, maar maakt wel gemiddelden van de aangevoerde gegevens. Dit is echter geen bezwaar, omdat we voor de 'exacte' waarden toch al bovenstaande grafiek en de bestanden hebben. Dan moet ik wel MRTG nog bij op deze komputer installeren. Of ... Op
een andere komputer draait MRTG al om de trafiek van onze routers &
servers in het oog te houden. Het zou toch mooi zijn, indien ik daar de
temperatuurgegevens ook kan visualiseren.
(inhoud)
4.
De temperatuur'server'
Hoe
krijg ik op een betrouwbare manier de temperatuurgegevens op de 'MRTG komputer'
?
(inhoud)
4.1
De gegevens aanbieden
De temperatuurgegevens worden regelmatig aangevuld in het 'datum-van-vandaag-bestand'. Daar zouden we ze kunnen uithalen. We kunnen ook, elke keer dat het temperatuurbestand aangevuld wordt, een tweede bestand, bv /usr/local/templog/temperatuur, schrijven met daarin enkel de laatste gegevens. Dan kan dit eventueel apart van het logbestand geformatteerd worden. Vervolgens passen we /etc/services aan : voeg volgende regel toe : temperatuur 2000/tcpEn ook in /etc/inetd.conf voegen we een regel toe (opgelet : dit is één regel maar in je brouwservenster is hij mogelijk in stukken gebroken) : temperatuur stream tcp nowait root /usr/sbin/tcpd cat /usr/local/templog/temperatuurVoilà, een connect op poort 2000 (de 'temperatuur' service) start een programma dat enkel de inhoud van het opgegeven bestand laat zien. even testen : # telnet 192.168.100.5 2000 (inhoud)
4.2
De gegevens ophalen
Nu moeten we op de MRTG komputer enkel iets in de zin van /usr/bin/telnet 192.168.1.25 2000 2>/dev/nulldoen, de gegevens uitfilteren en we hebben wat we willen. Dacht ik. Maar helaas. Hoewel dit wel werkt wanneer het manueel uitgevoerd wordt, is dat niet zo wanneer dit script door MRTG (via een cron jobke) wordt aangeroepen. Dan krijgen we enkel Trying 192.168.100.5...En op stderr Connection closed by foreign host.Waar is de lijn met de temperatuurgegevens naartoe ??? 101 dingen proberen leveren niets op. Het gaat niet. &$ù#@$! Voor al uw problemen: slechts één adres : de nieuwsgroepen. Dezelfde dag van mijn vraag in de nieuwsgroep had ik al een antwoord: telnet is een lastige klant om door scripts te laten gebruiken, en zeker wanneer ze via cron lopen. Kan telnet er echt niet toe gebracht worden om de gegevens in een bestand op te slaan ? De door Mark Jonckheere aangebrachte tip i.v.m. telnet leverde helaas geen oplossing op. De TERM variabele zetten en ook COLUMNS en LINES zetten halen niets uit. Enfin, dan maar over een andere boeg gooien. Er is immers nog mijn broer's principe ... Helaas,
deze keer geen pasklaar programma gevonden. Misschien niet goed genoeg
gezocht ? of niet lang genoeg gewacht op verdere nieuwsgroepantwoorden
? of ... niet aandachtig genoeg gelezen zoals verder zal blijken ...
Na veel geknutsel, geblader en gelees kwam ik dan tot een perl script dat het gewenste doet. Even proberen : #./leesDat is al OK. Na test via cron (met redirect van de uitvoer naar een bestand) blijkt alles ook naar wens te functioneren. (inhoud)
4.3
De gegevens ophalen - betere versie
Mijn
broer's principe blijft echter gelden. In de nieuwsgroepen verschijnt
ook nog een berichtje van Geert Uytterhoeven
waarin de eenvoudige oplossing wordt voorgesteld : netcat.
Na
installatie ervan blijkt het inderdaad dé oplossing te zijn.
#nc 192.168.100.5 2000
(inhoud)
4.4
De gegevens klaarmaken voor MRTG
In het geval van het perl script van 4.2, moeten we nog een klein beetje prutsen en de output is #./leesKlaar voor MRTG. In
het geval van optie 4.3 (dat de voorkeur geniet) is het ook eenvoudig :
#nc 192.168.100.5 2000 | awk -F, '{print $2; print 0; print 0; print "TempLog"}'
(inhoud)
|