Aus Linux-Magazin 07/2020

Aus dem Alltag eines Sysadmin: JSON lesbar formatieren

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).

Unlesbar: JSON in Reinform.

Unlesbar: JSON in Reinform.

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

  1. Einführung: Charly Kühnast, “Mehr Licht!”, LM 11/2018, S. 49, https://www.lm-online.de/41487
  2. Jq: https://stedolan.github.io/jq/
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 1 HeftseitePreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben