Mit Json.tool und Jq bereitet Charly die von seiner Philips-Hue-Bridge gelieferten JSON-Daten so auf, dass auch ein Mensch damit etwas anfangen kann. Das hilft der Bedienbarkeit der Heimautomation auf die Sprünge.
“Spuck’s aus, ich sortier’s” war einer der Lieblingssätze meines Englischlehrers, wenn eine Antwort nicht wie aus der Pistole geschossen kam. (Andere Klassiker waren: “Einer von uns beiden lügt, und ich bin’s nicht” und “Wenn ich Buchstabensuppe esse, kommt aus meinem Hintern besserer Satzbau als aus deinem Mund”). Man musste ihn einfach lieben.
Vor einer Weile [1] habe ich schon einmal kurz beschrieben, wie ich ein Hue-Beleuchtungssystem anhand der Messwerte eines Lux-Sensors steuern lasse. Nach einer Renovierung des Hausflurs kamen einige Leuchten dazu, andere verschwanden. Ich hatte die IDs der Leuchtmittel nicht mehr im Kopf und bat die Hue-Bridge um einen Dump der Konfiguration. Was ich bekam, war ausführliches JSON – aber nicht in menschenlesbarer Form (Abbildung 1).
Werkzeuge, um einen solchen JSON-Wust lesbar zu machen, gibt es reichlich. Ich nehme zunächst, was eh schon da ist: das »json.tool«, das mir die Python-Installation auf die Platte geschwemmt hat. Dessen sauber formatierte Ausgabe schreibe ich in eine Datei unter »/tmp«, um sie weiterzuverarbeiten (Listing 1).
Listing 1
JSON-Abfrage
$ curl --request GET 10.0.0.10/api/w25-4kqL7d|python -m json.tool > /tmp/hue.all
Ich benötige die Daten aber nicht in Python, sondern möchte sie in einem kleinen Bash-Skript benutzen. Deshalb mache ich mit »jq« weiter [2]. Das Tool wirbt damit, eine Art Sed, Awk und Grep für JSON zu sein. Ich möchte damit ermitteln, wie die IDs meiner Leuchtmittel nun lauten, und auch deren Klartextnamen herausfinden. Dank Jq reicht dafür ein winziges Skript (Listing 2). Lasse ich es laufen, produziert es die in Listing 3 gezeigte Ausgabe.
Listing 2
Leuchtmittel-Skript
#! /bin/bash
WDIR=/usr/local/shellscripts/lux
TMPDIR=/tmp
HUEBRIDGE=10.0.0.10
USER=w25-4kqL7d
for i in $(seq 1 20); do
echo "trying light $i";
LAMPTEST=$(jq -r -M ".lights.\"$i\".name" /$TMPDIR/hue.all);
if [ "$LAMPTEST" != "null" ]; then
echo "Light $i exists: $LAMPTEST"
fi
done
Listing 3
Skript-Ausgabe
Light 4 exists: WZ_Decke_Schreibtisch Light 5 exists: WZ_Decke_Sofa Light 6 exists: ColorWall1 Light 7 exists: Flur_EG Light 8 exists: Flur_OG Light 9 exists: Flur_DG Light 10 exists: WZBastelecke
Dass die IDs 1 bis 3 nicht existieren, liegt daran, dass ich die Lampen demontiert und aus der Hue-App entfernt habe. Für die Bridge ist das kein Grund, die verbliebenen IDs neu zu sortieren – zum Glück, denn das würde bei jedem Wechsel eines Leuchtmittels ein mittleres Chaos auslösen. Jq bestätigt wieder einmal: Je kürzer der Name eines Tools, um so wichtiger und mächtiger ist es. Licht an! (jlu)
Infos
- Einführung: Charly Kühnast, “Mehr Licht!”, LM 11/2018, S. 49, https://www.lm-online.de/41487
- Jq: https://stedolan.github.io/jq/






