Waschmaschinen mit Nagios / Icinga überwachen: check_gpio_pir

Winterzeit ist Bastelzeit! Ich habe die letzten Tage damit verbracht, mich verstärkt mit dem Raspberry Pi und PIR-Sensoren (Passive Infrared) zu beschäftigen. Mithilfe dieser Sensoren lassen sich Bewegungen erkennen - in Kombination mit GPIO-APIs lassen sich damit nützliche Anwendungen entwickeln.

Ein konkreter Einsatzzweck hat sich schnell gefunden - die Überwachung der im Keller stehenden Waschmaschine, die ich als Mensch mit wenig Zeit leider immer wieder vergesse. Mir kam die Idee, die blinkenden LEDs an der Gerätefront zu überwachen und automatisiert E-Mails bei Statusänderungen zu versenden. Da ich ohnehin Nagios bzw. Icinga zur Überwachung meines Netzwerkes verwende, bot sich hier die Entwicklung eines entsprechenden Plugins förmlich an. 🙂

Aufbau und Funktionsweise

Mein Aufbau besteht derzeit aus folgenden Bestandteilen:

  • Raspberry Pi B+ mit installiertem CRUX-ARM Linux
  • TP-Link AV500 Powerline Adapter Starter-Kit (TL-PA 4010P), da in meinem Keller kein WLAN-Signal empfangen werden kann
  • 5V PIR-Sensor (über eBay bestellt)
  • Standard-LED zur Anzeige registrierter Bewegungen
  • Breadboard und flexible Steckbrücken

Schaltung

Die Netzwerkverbindung zwischen meiner Wohnung und dem Keller habe ich mit Port Security abgesichert, um ungewollte Netzwerkteilnehmer zu vermeiden.

Die Schaltung sieht wie folgt aus:

  • GPIO #2 => VCC PIR (5 Volt)
  • GPIO #7 => OUT PIR (GPIO4)
  • GPIO #6 => GND PIR + LED (wird geteilt)
  • GPIO #11 => VCC LED (GPIO17)

Der PIR-Sensor wird mittels provisorischer Halterung an der Gehäusefront der Waschmaschine angebracht, um dort die Zeitanzeige zu überwachen. Leider verfügt meine Waschmaschine über keine LED, die eine abgeschlossene Reinigung anzeigt. Ich muss also demnach schauen, ob die Zeitanzeige noch blinkt - falls nicht, wartet die Wäsche darauf aufgehängt zu werden. Das bedeutet aber auch, dass ich derzeit das Monitoring explizit anschalten muss, da die Zeitanzeige ja nicht leuchtet, wenn die Waschmaschine ausgeschaltet ist. Hier muss ich mir noch etwas kreativeres einfallen lassen. 🙂

Sensor-Kalibrierung

PIR-Sensor

Die meisten auf eBay angebotenen PIR-Sensoren verfügen über zwei Potentiometer, die das Verhalten des Sensors maßgeblich steuern.

Der erste Potentiometer regelt die Empfindlichkeit des Sensors, während der zweite die Zeitspanne, in welcher der Sensor ausgelöst wird, festlegt.

Standardmäßig sollten beide Potentiometer auf ca. 50% (mittig) eingestellt sein. Es empfiehlt sich die Empfindlichkeit auf den eigenen Aufbau abzustimmen. Mein Plugin verfügt über eine Debugging-Funktion (Parameter -d / --debug), bei welcher erkannte Bewegungen in der Konsole angezeigt werden. Alternativ können diese Beweungen auch über eine angeschlossene LED (Parameter -l / --enable-led) visualisiert werden falls keine Konsole zur Hand ist.

Voraussetzungen und Plugin

Python 2.x muss auf dem Raspberry Pi zur Verfügung stehen. Darüber hinaus benötigt mein Plugin das Python-Modul RPi.GPIO, welches kostenlos heruntergeladen werden kann. Das eigentliche Plugin kann von GitHub bezogen werden:

1# wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.8.tar.gz
2# tar xfz RPi.GPIO-0.5.8.tar.gz
3# cd RPi.GPIO-0.5.8
4# python setup.py install
5# cd
6# wget https://github.com/stdevel/check_gpio_pir/archive/master.zip
7# unzip master.zip
8# cd check_gpio_pir-master

Das Verhalten des Plugins kann über verschiedene Konfigurationsparameter gesteuert werden - eine Auswahl:

Parameter Beschreibung
-t / --seconds Zeitspanne, in der der Sensor überprüft wird
-c / --motion-threshold Schwellwert erkannter Bewegungen zur Auslösung einer Warnung
-v / --invert-match Invertierung, fehlende Bewegungen erzeugt Warnung

Beispiel: Überwachung mit vorgegebenen Werten (3 Bewegungen lösen Warnung aus, 15 Sekunden-Überwachung):

1# ./check_gpio_pir.py
2OK: motion counter (0) beyond threshold (3)

Die vollständige Dokumentation inklusive zahlreicher Beispiele kann auf GitHub eingesehen werden.

Nagios-/Icinga-Konfiguration

Um das Plugin in Nagios bzw. Icinga zu integrieren muss es in das entsprechende Plugin-Verzeichnis kopiert werden. Anschließend muss ein Kommando erstellt werden:

1icinga# vi commands.cfg
2...
3define command{
4        command_name check_local_pir
5        command_line $USER2$/check_gpio_pir.py
6}
7
8ESC ZZ

Sollen Remote-Hosts überwacht werden, muss ein entsprechendes NRPE-Kommando auf dem Icinga-System und dem Remote-Host definiert werden:

 1icinga# vi commands.cfg
 2...
 3define command{
 4        command_name check_nrpe_pir
 5        command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -t 60 -c check_gpio_pir
 6}
 7
 8ESC ZZ
 9
10remote# vi nrpe.cfg
11...
12command[check_gpio_pir]=/usr/lib/nagios/plugins/check_gpio_pir.py -v
13
14ESC ZZ

Anschließend lässt sich der Sensor komfortabel überwachen! 🙂

Fotos

Anbei einige Fotos des Aufbaus:

Übersetzungen: