EDVler-Blog.de: IT in der Praxis

Icinga und Nagios Netzwerk Ampel (traffic light) mit Arduino

Hier eine Zusammenfassung meiner fertigen Icinga und Nagios Netzwerk Ampel (traffic light) mit Arduino.

Die Ampel ist bereits im Testbetrieb und funktioniert einwandfrei!

 

Funktionen der Ampel:

  • Die Ampel wird per Netzwerk angesteuert. Dazu werden Befehle entweder üer HTTP oder per UDP an die Ampel gesendet werden. Somit ist es möglich die Ampel „standalone“ zu betreiben. Alles was man braucht ist ein Netzwerkanschluss!
  • Die Ampel gibt eine Melodie aus, wenn sich die Signale ändern!
  • Die Ampel verfügt über mehrere Signalreihen. Jedes einzelne Signal (rot, gelb, grün auf jeder Signalreihe) kann einzeln und unabhängig geschalten werden. Mit jeder Signalreihe kann dann ein anderer Status visualisiert werden (z.B. der Servicestatus auf Signalreihe 1 und der Hoststatus auf Signalreihe 2).
  • Die Steuerung der Ampel erfolgt mit einem Arduino. Der Quellcode des Arduino soll dabei NUR die Aufgabe des aus- und einschalten der einzelnen Signale übernehmen.
  • Die Steuerbefehle werden per Perl-Script vom einem Linux-Server aus über Netzwerk an den Arduino geschickt.
Die fertige Ampel. Es ist nur das Netzteil und ein Netzwerkkabel zu sehen.

Die fertige Ampel. Es ist nur das Netzteil und ein Netzwerkkabel zu sehen.

 

Einige Worte zur Projektumsetzung und zur Motivation hinter dem Projekt:

Einige von euch kennen sicher Icinga (https://www.icinga.org) und Nagios (http://www.nagios.org). Beide Softwareprojekte dienen zur Überwachung einer IT-Umgebung. Einen Überblick kann man sich auf der jeweiligen Seiten verschaffen.

Jeder der sich etwas mit den beiden Projekten beschäftigt wird feststellen, dass durch die Farben rot, orange und grün dargestellt wird, ob ein Host oder ein Service ordnungsgemäß funktioniert oder nicht.

–> PERFEKT UM DEN STATUS AUF EINER AMPEL DARZUSTELLEN 😎

Im Internet findet man bereits einige Nagios- oder Icinga-Ampeln. Diese haben aber alle einen, wie ich finde, großen Nachteil. Die Ansteuerung erfolgt meist mit seriellem Kabel oder per USB. Entweder wird dann zur Steuerung der Ampel ein eigener Rechner bereitgestellt, oder die Ampel ist am lokalen Arbeitsplatz angeschlossen.

Ein weiterer Nachteil ist, dass meist nur eine Signalreihe vorhanden ist. Mit mehreren Ampeln wäre es möglich z.B. den Host- und Servicestatus getrennt zu signalisieren.

Nach einiger suche habe ich nichts passendes gefunden. Daher habe ich mich selbst an einer Lösung versucht!

 

Hardware

Überblick über die Bauteile:

Der elektronische Aufbau (mit Fritzing.org):

Der Arduino steuert mit den Ausgängen 22 bis 31 jeweils einen Transistor. Wird der Arduino-Port auf HIGH gesetzt, so schaltet der Transistor und die LED leuchtet.

Um eine einfache Stromversorgung zu erreichen, ist sowohl die Transistorschaltung als auch der Arduino an einem zentralen Stromstecker angeschlossen.

Aufbau der Ampel veranschaulicht. Es handelt sich um einfache Transistorschaltung.

Aufbau der Ampel veranschaulicht.
Es handelt sich um einfache Transistorschaltung.

 

Der Umbau der Ampel nimmt einige Zeit in anspruch. Für das entfernen der Glühbirnchen und das einlöten der helleren LED’s ist mit etwas Übung ca. eine Stunde notwendig.

Der Aufbau der Transistorschaltung ist wegen der kleinen Platine sehr aufwändig und dafür habe ich ca. 1,5 Stunden benötigt.

Alles in allem ist ca. ein halber Tag vergangen bis die Lötarbeiten beendet und alle Komponenten einsatzbereit waren.

 

Hier noch ein paar Bilder der Platine und des Zuammenbaus:

 

Software

Die Programmierung erfolgt in C++ für den Arduino Part und in Perl für den Linux Part.

Das GitHub Repository ist unter https://github.com/edvler/Icinga_Nagios_Traffic_Light zu finden!

 

Im ersten Schritt muss die Arduino IDE und der Treiber für die Arduino-Hardware installiert werden.

Siehe: http://www.edvler-blog.de/arduino-software-installieren/

 

Ist dies erledigt so kann hier der aktuelle Quellcode downgeloadet werden. Das .zip File anschließend entpacken.

 

Arduino programmieren:

Mit der Arduino-IDE über Datei –> öffnen im entpacken Ordner die Datei Arduino_code\Icinga_Nagios_Traffic_Light\Icinga_Nagios_Traffic_Light.ino öffnen.

Den Code dann auf den Arduino uploaden!

 

Upload des Arduino Codes starten!

Upload des Arduino Codes starten!

 

Nach dem Upload ist das Webinterface für die Netzwerkeinstellungen erreichbar über http://192.168.0.111 (Standard-IP).

Der Laptop oder Computer muss sich natürlich im richtigen Subnetz befinden. Im Webinterface können dann die Netzwerkparameter angepasst werden. Weiter Infos zum Webinterface sind unter folgendem Link zu finden: http://www.edvler-blog.de/arduino_networksetup_webinterface_with_eeprom/

 

Perl-Script

Zur Steuerung der Ampel kann das Perl-Script control_traffic_light.pl verwendet werden, welches im entpackten Ordner im Unterordner „Linux_code“ zu finden ist.

Am Anfang des Script müssen alle nötigen Parameter ggf. angepasst werden! Weitere Anweisungen zum Setup sind dort zu finden.

 

Header des Perl-Script Codes. Hier müssen die Parameter angepasst werden welche mit den roten Pfeilen hervorgehoben werden!

Header des Perl-Script Codes. Hier müssen die Parameter angepasst werden welche mit den roten Pfeilen hervorgehoben werden!

Der HTTP Modus:

Einfach einen Browser öffnen und dort dann wahlweise folgende URL’s eintippen:

http://<arduino_ip>/tl.html?tl2=greenOn – Turn on the green sign of traffic light TWO
http://<arduino_ip>/tl.html?tl2=greenOff – Turn off the green sign of traffic light TWO

http://<arduino_ip>/tl.html?tl1=redOn – Turn on the red sign of traffic light ONE
http://<arduino_ip>/tl.html?tl1=redOff – Turn off the red sign of traffic light ONE
….

Die commandos haben zwei entscheidende Parameter. Zum einen den parametername. Hier ist dieser tl2 bzw. tl1. Möglich ist hier noch tl3 und tl4. Mit dem Parametername wird die Signalreihe gewählt, welche geschaltet werden soll.

Hinter dem = Zeichen wird das commando platziert. Die Commandos sind selbsterklärenend.

 

Das Script kann im UDP Modues in zwei verschiedenen Varianten eingesetzt werden:

Möglichkeit EINS:

Variante eins besteht aus daraus, dem Script per Kommandozeile bestimmte Parameter zu übergeben. Für diesen Zweck muss nur die Variable $arduino_ip und $arduino_port angepasst werden.

Ein Aufruf lautet dann z.B.

./control_traffic_light.pl 1redOff

./control_traffic_light.pl 1redOn

Mit dem ersten Befehl wird das rote Signal der Ampel 1 ausgeschaltet. Mit dem zweiten Befehl wird das rote Signal der Ampel 1 wieder eingeschaltet.

Die Syntax ist nochmals genau im control_traffic_light.pl beschrieben.

ACHTUNG: ALLE BEFEHLE SIND CASE SENSITIVE!

 

Möglichkeit ZWEI:

Die zweite Möglichkeit besteht darin, das Script ohne Parameter aufzurufen. In diesem Fall verbindet sich das Script mit der IDOutils bzw. ndoutils Datenbank und liest den aktuellen status per SQL aus.

Damit dies klappt muss auch der SQL-Bereich des control_traffic_light.pl Scripts angepasst werden.

Je nach Ergebnis sendet es dann gleich die richtigen Befehle an die Ampel.

Benötigt wird dazu natürlich eine nodutils bzw idoutils Installation.

 

Lizenz

Creative Commons Lizenzvertrag
Icinga / Nagios Traffic Light von Matthias Maderer steht unter einer Creative Commons Namensnennung – Nicht-kommerziell – Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

You can follow any responses to this entry through the RSS 2.0 feed.