Netzwerk & IP

Philips-Hue-Geräte monitoren

Philips Hue in Checkmk - nicht nur hübsch bunt, sondern auch übersichtlich und nützlich

Wenn Ihr ganze Häuser oder gar Firmen, Schulen oder ähnliches mit Hue-Leuchten, Hue-Steckdosen, Hue-Sensoren und sonstigen Geräten ausstattet, wird die App schnell unübersichtlich - freundlich gesagt. Dafür braucht es dann eine professionelle Monitoring-Lösung wie die Open-Source-Software Checkmk. Weiterer Vorteil: Ihr könnt Euch auch benachrichtigen lassen, wenn zum Beispiel mitten in der Nacht eine Lampe eingeschaltet wird, obwohl eigentlich gar keiner da sein sollte ...

Hue und Checkmk

Hue-Leuchten laufen im Netzwerk über die Hue-Bridge, ein simples Netzwerkgerät, das auch eine API hat, über die Informationen zu Leuchten abgerufen werden können, also zum Beispiel ID, Name und natürlich der Status. Und alles was im Netzwerk herumkraucht, lässt sich mit Checkmk überwachen.

Checkmk ist ein professionelles Monitoring-System, erhältich als Open-Source-Version und in diversen proprietären Varianten. Das Hue-Monitoring funktioniert in allen Varianten. Für daheim gibt es mittlerweile übrigens auch eine zwar proprietäre, aber dennoch kostenlose Version: Die Checkmk Free Edition hat alle Features der großen Versionen (außer verteiltem Monitoring), kann aber nur 25 Hosts überwachen - für daheim sollte das oft reichen.

So schön Checkmk auch in Kombination mit Hue ist: Wenn Ihr weder Checkmk kennt, noch Monitoring-Erfahrung habt, noch IT-Nerd seid, dann ist Checkmk zu viel des Guten - die Software ist wahnsinnig leistungsfähig, aber ziemlich komplex und unintuitiv.

Hue-Leuchten mit Checkmk überwachen

Das Prozedere ist im Grunde recht simpel und umfasst folgende Schritte:

  1. Hue-API-Key besorgen --> hier unsere Anleitung dazu!
  2. Local-Check-Skript für Checkmk schreiben
  3. In Checkmk Host und Checks für die Ausgabe des Skripts erstellen
  4. Optional: Hue-Dashboard anlegen

Das Skript liest die gewünschten Hue-Daten aus und bereitet sie so auf, dass Checkmk sie interpretieren kann. Der Checkmk-Agent transportiert die Ergebnisse zum Checkmk-Server. Da sich auf der Hue-Bridge natürlich kein Agent einrichten lässt, läuft der Hue-Check einfach auf dem Checkmk-Server selbst - im Monitoring wird es dann einen separaten, virtuellen Hue-Host geben.

Den API-Schlüssel habt Ihr nun also, weiter geht es mit dem Skript.

Local Check anlegen

Mehr Informationen zu lokalen Checks findet Ihr in unserem Artikel, unserem Video und dem offiziellen Checkmk-Handbuch. Die Kurzfassung: Ein beliebiges Skript, das im Unterordner local des Checkmk-Agenten liegt und Ausgaben produziert, die von Checkmk als Services interpretiert werden können. Checkmk benötigt die Ausgabe nach folgendem Muster:

STATUS Servicename - Beschreibung

Also beispielsweise:

0 meinservice - Meine Beschreibung bla bla bla.

So würde also in Checkmk ein Service meinservice auftauchen und den Status 0 haben, also OK.

Hier nun zunächst das Skript für die Abfrage der Hue-Bridge (mit der IP 192.168.178.28):

#!/bin/bash

# Hue-API-Key angeben.
# Ausführliche Anleitung: www.tutonaut.de/anleitung-hue-api-ansprechen-aka-nutzer-anlegen/
hue_api_key=ABCDEFG12345678

for i in {1..12}
do
rawstuff=$(curl 192.168.178.28/api/$hue_api_key/lights/$i)
state=$(grep '\"on\":true' <<< $rawstuff | wc -l)
name=$(perl -ne '/\"name\":\"(.*?)\"/ && print "$1\n"' <<< $rawstuff)
if [ -z "$name" ]; then name=FEHLT; fi
if [ $state = 1 ]
 then
        echo 0 \"Hue-Gerät $name\" - $name ist an \(ID $i\).
elif [ $state = 0 ]
 then
        echo 1 \"Hue-Gerät $name\" - $name ist aus \(ID $i\).
else
        echo 3 \"Hue-Gerät $name\" - Irgendwas ist kaputt mit $name \(ID $i\).
fi
done

Der Reihe nach:

  • hue_api_key: API-Schlüssel wird übergeben.
  • for i in ...: Hartkodierte Übergabe der Anzahl der Hue-Geräte/-IDs.
  • rawstuff: curl holt die Infos zu jeder Lampe mit den IDs 1 bis 12 nacheinander und speichert sie in rawstuff.
  • state: grep prüft in rawstuff, ob der Status der Lampe gleich true ist - falls ja, bekommt state den Wert 1.
  • name: perl zieht den zur aktuellen ID gehörenden Namen aus rawstuff (ging nicht mit grep).
  • if [ -z "$name" ]: Wenn es zu einer ID keinen Namen gibt, wird dieser auf FEHLT gesetzt.
  • if [ $state = 1 ]: Prüft, ob der Status 1, also die Lampe an ist.
  • then echo 0 ...: Gibt den Checkmk-Status 0 (OK) plus Service-Name und -Beschreibung aus.
  • elif then echo 1 ...: Checkmk-Status 1 heißt WARN.
  • else echo 3 ...: Checkmk-Status 3 heißt CRIT.

Achtung: Der Zustand der Lampe kann hier natürlich nur true/an oder false/aus sein - eine dritte Variante, die hier auf CRIT gehen soll, gibt es natürlich nicht. Es würde also auch ein If-Then-Else-Statement genügen. Aber mit dieser If-Then-Elif-Then-Else-Variante habt Ihr schon mal passende Syntax für eigene Projekte und Umsetzungen - vermutlich wird kaum jemand mein Skript 1:1 übernehmen. (Generell gäbe es da noch Dinge zum Optimieren, etwa nur perl statt perl und grep, Anzahl der Durchläufe dynamisch statt statisch ... aber es funzt.)

Nun müsst Ihr das Skript noch in den passenden Ordner werfen. Packt es auf dem Checkmk-Server in das Local-Check-Verzeichnis und macht es ausführbar:

chmod +x meinskript.sh
cp meinskript.sh /usr/lib/check_mk_agent/local/

Ihr könnt es auch auf einen beliebigen anderen Rechner in das Verzeichnis kopieren und dort laufen lassen, aber sinnvoll ist eigentlich nur der Checkmk-Server, da dieser immer läuft, wenn Checkmk läuft ...

27% sparen
(* = Affiliate-Link / Bildquelle: Amazon-Partnerprogramm)
×
Produktpreise und -verfügbarkeit sind zum angegebenen Datum / Uhrzeit korrekt und können sich ändern. Alle Preis- und Verfügbarkeitsinformationen auf https://www.amazon.de/ zum Zeitpunkt des Kaufs gelten für den Kauf dieses Produkts.

Checks in Checkmk einrichten

In Checkmk ist nun alles ganz einfach: Erstellt zunächst einen neuen Host namens beispielsweise Mein Hue-Host mit der IP-Adresse des Checkmk-Servers! Oft entsprechen Hosts zwar physischen Servern/Rechnern/Geräten, aber das müssen sie natürlich nicht.

checkmk-konfiguration für hosts.
Ein virtueller Host für die Hue-Überwachung, mit der IP des Checkmk-Servers

In der Servicekonfiguration findet Ihr nun für jedes Hue-Light einen eigenen Service, den Ihr ins Monitoring übernehmen könnt:

services in checkmk.
Diese Services produziert das Skript

Und sobald die Services im Monitoring sind, könnt Ihr freilich auch andere Checkmk-Features nutzen, beispielsweise Benachrichtigungen: Ihr wollt eine Mail, eine Mitteilung oder eine SMS bekommen, wenn eine Lampe mitten in der Nacht aus- oder eingeschaltet wird? Kein Problem.

Hue-Dashboard einrichten

Da die Hue-Leuchten tendenziell nicht so ganz zu Eurem sonstigen Monitoring passen dürften, bietet sich ein separates Dashboard mit drei Elementen (so genannten Dashlets) an:

  • Service Statistics: Zeigt hier als Hue Lights die Übersicht der Status.
  • Host Statistics: Zeigt hier als Hue Bridge den Status der Bridge.
  • View: Die Liste rechts ist eine eigens erstellte View/Ansicht mit der kompletten Skriptausgabe.
dashboard mit hue-infos.
Ein kleines Philips-Hue-Dashboard in Checkmk

Die Konfiguration ist extrem simpel: Beim Dashboard selbst könnt Ihr beim Anlegen schon einen Filter auf Euren virtuellen Hue-Host setzen, dann müsst Ihr nicht noch in den Dashlets selbst filtern. Im Element Service Statistics müsst Ihr dann gar nichts konfigurieren.

Im Element Host Statistics gebt Ihr nur die IP-Adresse der Hue-Bridge ein.

Für die Liste wählt Ihr Add/Views/New View und filtert in den Einstellungen zunächst auf Services, die mit hue anfangen - oder wie auch immer Eure Skriptausgabe lautet. Sofern Ihr nur und auschließlich solche Hue-Services des virtuellen Hue-Hosts ins Monitoring aufgenommen habt, könnt Ihr Euch das natürlich sparen - aber so ist es sicherer, falls Ihr den Host später für andere Dinge nutzt. Dann müsst Ihr noch drei Spalten hinzufügen:

  • Services: Service description
  • Services: Summary
  • Services: Service State
view-optionen in checkmk für hue.
Eine View mit allen Skriptausgaben fürs Dashboard

Und schon habt Ihr ein hübsches kleines Dashboard für die Philips-Smarthome-Beleuchtung.

Mehr zu Hue und mehr zu Checkmk.

(* = Affiliate-Link / Bildquelle: Amazon-Partnerprogramm)
×
Produktpreise und -verfügbarkeit sind zum angegebenen Datum / Uhrzeit korrekt und können sich ändern. Alle Preis- und Verfügbarkeitsinformationen auf https://www.amazon.de/ zum Zeitpunkt des Kaufs gelten für den Kauf dieses Produkts.

Mirco Lang

Freier Journalist, Exil-Sauerländer, (ziemlich alter) Skateboarder, Dipl.-Inf.-Wirt, Einzelhandelskaufmann, Open-Source-Nerd, Checkmk-Handbuchschreiber. Ex-Saturn'ler, Ex-Data-Becker'ler, Ex-BSI'ler. Computer-Erstkontakt: ca. 1982 - der C64 des großen Bruders eines Freunds. Wenn Ihr hier mehr über Open Source, Linux und Bastelkram lesen und Tutonaut unterstützen möchtet: Über Kaffeesponsoring via Paypal.freue ich mich immer. Schon mal im Voraus: Danke! Nicht verpassen: cli.help und VoltAmpereWatt.de. Neu: Mastodon

6 Kommentare

  1. Es fehlte beim API Key eine Ziffer, nun steht in der Servicekonfiguration Invalid performance data: u’FEHLT“‚. Output is: – FEHLT ist aus (ID 1).UNKN

    Mir ein aufgefallen, dass bei Dir die IDs 1-12 vorhanden sind, bei mir 1-40, jedochj gibt es da große Lücken… 1,3,10,14 usw.

    1. Invalid Performance data deutet darauf hin, dass der Output des Skripts nicht Checkmk-konform ist. Die Ausgabe kann nämlich auch Performance-Daten enthalten, also etwa CPU-Auslastung oder dergleichen. Vermutlich stimmt irgendwas mit den Anführungszeichen nicht.

      Nachtrag: Die Ausgabe ist ja „Status Name Performance-Daten Beschreibung“. Wenn der Name mehrere Wörter enthält, muss der Part in Anführungszeichen – die wiederum müssen escaped werden, also etwa \“Hue-Gerät $name\“. Ohne die escapeten Anführungszeichen würde Checkmk das erste Wort als Namen erkennen, das zweite aber als Performance-Daten, was natürlich nicht geht.

      Warum bei Dir IDs nicht gefunden werden, weiß ich aber gerade auch nicht.

  2. Wenn ich das Script ausführe, bekomme ich: 12:09:45 checkmk: /usr/lib/check_mk_agent/local# ./hue.sh 1 „Hue-Gerät FEHLT“ – FEHLT ist aus (ID 1).

  3. Hallo Mirco, ich versuche es gerade nachzubauen, bin jedoch auf Probleme gestossen:

    In „Anleitung: Philips-Hue-API ansprechen, aka Nutzer anlegen“ steht: {„devicetype“:“my_hue_app#iphone peter“} muss aber sein: {„devicetype“:“my_hue_app#iphone peter“} sonst erhält man: body contains invalid json Das Verzeichnis ist /usr/lib/check_mk_agent/local/ und nicht /usr/lib/check_mk/local/, oder?

    Nun habe ich alle Schritte ausgeführt und in Checkmk einen neuen Host angelegt. Leider findet Checkmk in der Servicekonfiguration nichts, was irgendwie Hue betrifft, sondern lediglich die Checkmk eigenen Services.

    Vielleich kannst Du mir einen Tipp geben, wo ich was vergessen habe? Ich nutze die Checkmk Raw Edition Version 1.6.0p27

    Viele Grüße Mario

    1. Also mit dem Pfad hast Du schon recht, habe ich im Text korrigiert.

      Zum Testen, ob das lokale Skript überhaupt funktioniert, bietet sich etwas Statisches an, etwa:

       echo "0 MeinTest - Meine Beschreibung" 
      

      Wenn das funktioniert ist der Checkmk-Teil betriebsbereit.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Schaltfläche "Zurück zum Anfang"