Arduino

Wie alles begann

Wenn man sich mit dem Raspberry Pi beschäftigt, fällt früher oder später der Begriff Arduino. Die erstaunlichsten Dinge kann man damit auf einfache Weise steuern und regeln. Und sich nebenbei spielerisch in die Welt der Digitaltechnik und Elektronik einarbeiten. Das hatte mich schon immer fasziniert. Neugierig geworden habe ich mich im Internet umgesehen und für wenig Geld eine ganze Menge Zeugs in China bei AliExpress bestellt. Nach gut drei Wochen hielt ich ein Paket mit einer Unmenge kleinen Beutelchen in der Hand und es kann losgehen.

Die ersten Gehversuche

Um erst einmal ein Gefühl für die Software zu bekommen, die ich bereits installiert hatte, habe ich mit den mitgelieferten Beispielen experimentiert. War das ein Gefühl, eine simple Leuchtdiode zum blinken zu bringen (Die Leuchtdiode ist auf dem Arduino-Board bereits installiert). Meine Frau dürfte mich für meschugge gehalten haben, weil ich den ganzen Abend gekichert habe. Als nächsten Schritt konnte ich mich bereits „tief“ in die Hardware stürzen: mit einem Widerstand und eine Leuchtdiode habe ich das selbe auf einem Breadboard nachgestellt. Und siehe: Nichts ist explodiert oder verschmort, wie das bei meinen früheren Versuchen immer der Fall gewesen war.

Der Sprung in die Sensorik

Ich hatte ja bei meiner Bestellung das sogenannte 37 in one Kit mitbestellt und so habe ich mir mehr oder weniger wahllos das DHT11-Modul gegriffen und nach einer Anleitung die Temperatur und Luftfeuchte gemessen.

Zusätzlich hatte ich mir ein paar Stück Bodenfeuchtesensor bestellt, die sich im Nachhinein als unbrauchbar erweisen sollten.

Das erste Projekt - Umweltdaten überwachen

Mit meinen kleinen Sensoren (und das werden im Lauf der zeit sicher noch mehr) will ich die gemessenen Daten mit Icinga2 überwachen und visualisieren.

Icinga2

Das Icinga-System existiert ja bereits und überwacht bereit eine ganze Menge Dinge. Klar ist, dass man mit NRPE nicht ohne weiteres direkt auf einen Arduino zugreifen kann. Also habe ich mich dafür entschieden, eine RaspberryPi dazwischen zu schalten.

Anschluss an den Rest der Welt

Wir brauchen eine Grundinstallation mit Perl und NRPE. Letzterer muss selbst kompiliert werden, weil ich mit nrpe-Parametern arbeiten will.

Einige Programme werden in Perl geschrieben, dazu sind einige Module aus dem CPAN erforderlich:

DBI, dbd::mysql, Device::SerialPort, IO::Socket::INET, POSIX qw(strftime), vars qw/ %opt, Getopt::Std, Device::SerialPort::Arduino, Proc::PID::File;

Das Modul Device::SerialPort::Arduino; ist leider nicht bei CPAN zu bekommen. (Siehe Google)

Der kleine Arduino Uno wird per USB seriell an einen USB-Ausgang der Pi angeschlossen und so auch gleich mit Strom versorgt.

Der Arduino funkt!

Um die Welt der Arduinos mit dem RaspberryPi zu verbinden, habe ich die Funkerei entdeckt. Der an der Raspberry Pi angeschlossene Arduino bekommt ein 433MHz-Empfangsmodul, alle anderen bekommen ein 433MHz-Sendemodul

Was anscheinend nicht funktioniert, ist ein richtiger Dialogbetrieb, will heissen, ein Arduino kann offenbar jeweis nur als Sender oder Empfänger fungieren. Das verstehe ich zwar nicht ganz, aber bei meinen Versuchen wollte es um's Verplatzen nicht funktionieren. Und im Internet habe ich auch nichts gefunden, was das Problem löst.

Das Konzept

Wenn man sich vorstellen will, das überall im Haus kleine Arduinos ihrer Arbeit nachgehen und Daten liefern, muss man sich auch überlegen wie das organisiert werden soll. Ich habe mich zu folgendem Konzept entschlossen.

Jeder Arduino codiert seine Daten in folgender Form:

         "Name_Arduino=Name_Sensor=Wert"

Dieser String wird per Funk an einen zentralen Arduino übertragen. Die Zeiten der Übertragung wähle ich so, dass es möglichst selten Überschneidungen gibt. Wenn also ein Arduino alle 60 Sekunden seine Daten überträgt, wird der nächste seine Daten nur alle 70 sekunden übertragen. sie werden also nur relativ selten gleichzeitig zu senden versuchen.

Der Zentrale Arduino empfängt die Strings mit den Messdaten und leitet sie ungeprüft und unverändert per seriellem USB-Kabel an die RaspbreeyPi weiter.

Dort nimmt ein in Perl geschriebenes Annahme-Script die Daten entgegen zerlegt sie in die einzelnen Felder und fügt sie zusammen mit einem „Timestamp-Feld“ in eine MySQL-Datenbank ein.

Um die Daten eines Sensors mit Nagios/Icinga zu visualisieren, muss das ebenfalls in Perl geschriebene Check-Script lediglich den jeweils letzten Datensatz des betreffenden Sensors suchen und die Daten Nagios/Icinga- konform zurückliefern.