Server status stoplicht met Arduino

Door ThinkPad op maandag 29 april 2013 22:13 - Reacties (8)
Categorie: Electronica, Views: 5.061

Inleiding
Ik heb al een tijdje het pakket "PRTG" draaien. Dit is een handig pakket om diverse apparaten mee te monitoren. Ik heb het programma ingesteld naar wens, en een notificatie ingesteld zodat ik een mailtje krijgt als er iets mis is.

Voor elk apparaat dat je monitored kun je triggers instellen, zo heb ik bijv. een trigger ingesteld dat er een waarschuwing moet worden geven als een bepaalde SMB share van m'n fileserver offline is (anders kan de rest van het gezin geen film kijken haha :+ ). Of een trigger die continu naar poort 1723 van m'n VPN virtuele machine luistert, om te kijken of m'n VPN verbinding nog online is. Of een trigger die kijkt of de Crashplan service op een bepaalde VM nog draait, en indien dat niet zo is; automatisch herstart. Mocht het dan nog niet werken > alarm.

Het leuke van PRTG is dat de mogelijkheden eindeloos zijn. Je kunt op heel veel manieren informatie opvragen, en mocht jouw functionaliteit er niet tussen zitten dan zou je zelf een PHP scriptje o.i.d. kunnen maken, en dmv een HTTP sensor de informatie daarvan opvragen.
Oke, maar je had het over Arduino? Hoe/wat dan?
Terug naar het project: Notificaties kreeg ik dus al via de mail. Ik ben sindskort echter ook wat beginnen te spelen met Arduino, en het leek mij wel leuk om in één oogopslag te kunnen zien hoe mijn apparatuur er voor staat. PRTG kent van zichzelf al 3 categorien: OK, Warning, Critical. Dit valt natuurlijk prima te vertalen naar een stoplicht! (Groen, Oranje, Rood). Ik heb eventjes op Marktplaats gekeken voor een echt stoplicht, maar dan praat je over een unit van een meter hoog, dat werd mij toch iets te gek :D

Vandaar dat ik dit heb gemaakt, dit komt in een hoek van m'n kamer te hangen, en zo kan ik ook zonder een PC scherm voor m'n neus te hebben, zien hoe m'n apparatuur er voor staat.
De hardware
De hardware is eigenlijk best simpel:
  • 1x een Arduino Nano
  • 3x TIP120 NPN transistor
  • 1x ENC28J60 Ethernet shield
  • 3x LED Indicator Pilot Signal Light Lamp 12V
  • 1x voeding voor het geheel
  • 1x Lasdoos om het geheel netjes in weg te werken
  • 3x 100-220 Ohm weerstanden om tussen Arduino en transistoren te plaatsen
Meeste komt vanuit China via eBay, voor een habbekrats.

Het hardware verhaal is niet heel interessant om te vertellen, het is eigenlijk gewoon dit schema: https://learn.adafruit.com/assets/2693 maar dan met een losse voeding voor de LEDs. De grijze draad naar de Arduino gebruik ik dus niet, deze komt rechtstreeks vanaf mijn voeding. Denk erom dat je de GND van de voeding ook aan de GND van de Arduino aansluit, anders werkt het niet.
Werking van het geheel
Het idee is dat PRTG een bepaalde URL aanroept op de Arduino met een bepaalde GET parameter. De Arduino zal vervolgens actie ondernemen, en de desbetreffende LED inschakelen. Bij het opstarten van de Arduino laat hij 1 voor 1 alle lampen even branden zodat je weet dat ze alle 3 nog werken ;) Daarna springt hij standaard op groen, totdat hij een verzoek binnenkrijgt.
Instellen van de triggers/notificaties
Het aanmaken van een trigger in PRTG is simpel, ga hiervoor naar "Setup" > "Account instellingen " > "Notificaties"

Daar maken we voor elke 'state' een notificatie aan:

Naam notificatieGebruikte URL
Arduino stoplicht state=criticalhttp://<arduino_ip>/?state=critical
Arduino stoplicht state=warninghttp://<arduino_ip>/?state=warning
Arduino stoplicht state=okhttp://<arduino_ip>/?state=ok


Daarna kunnen we voor een apparaat, of een hele groep de notificaties instellen, ik heb dit als volgt gedaan voor de groep waar al mijn apparaten zich in bevinden:
  • Als sensor is Fout voor 60 seconden, voer uit Arduino stoplicht state=critical
  • Als conditie blijft bestaan voor 300 seconden, voer uit Arduino stoplicht state=critical en herhaal elke 1 minuten
  • Als conditie verdwijnt, voer uit Arduino stoplicht state=ok
Hierna maak je nog een trigger, ditmaal voor 'warning', maar uiteraard stel je dan in de bovenste 2 regels 'warning' in, ipv 'critical' ;) Ik heb er voor gekozen om de trigger elke minuut te herhalen, mocht de Arduino z'n voeding kwijtraken dan springt hij binnen een minuut weer op de juiste status (anders zou hij op groen blijven staan)

Je kunt bij het aanmaken van de notificaties ook gelijk een test doen, probeer dit even, anders heb je nog niks aan dit hele verhaal :+
Eindresultaat
Arduino stoplicht
Klik voor groter


Arduino stoplicht
Klik voor groter

Totale kosten waren rond de 19 euro. Arduino rond de 10 euro, lampjes 5 euro, netwerkmodule 4 euro. En dan nog wat klein spul zoals bedrading, lasdoos etc.
To-do list/wish list
  • Op dit moment schakel ik de stroom gewoon uit 's avonds, misschien dat ik daar nog wat anders op ga verzinnen, al werkt het voor nu prima. Geen idee of het kwaad kan voor de Arduino namelijk
  • Het script werkt nu nog maar een kant op, het werkt alleen als de PRTG server impulsen blijft sturen. Ik wil het nog zo maken dat de Arduino de PRTG server ook om de minuut een ping stuurt, en als dat niet lukt > rode lamp aan
Arduino CODE: http://pastebin.com/QNY4Sxib
Mijn dank gaat uit naar foekie01 voor het meedenken: http://gathering.tweakers...message/40168331#40168331

Je hebt ook de ENC28J60 library nodig, die kun je hier vinden: http://jeelabs.net/projects/ethercard/wiki