Aus Raspberry Pi Geek 02/2019

Smarte Leuchtmittel helligkeitsabhängig ansteuern mit dem RasPi (Seite 4)

Im Entwicklerbereich des Herstellers [1] finden Sie eine ausführliche Dokumentation aller Parameter, die Sie verändern dürfen, wie Farbe, Farbtemperatur und so weiter. Um die Seite zu sehen, müssen Sie sich allerdings registrieren.

Um auch die Hue-Leuchten gesammelt steuern zu können, legen Sie wie beim Ikea-System drei Dateien an. In der Textdatei hue.txt stehen die IDs der Leuchtmittel in jeweils einer eigenen Zeile, in unserem Beispiel die Zahlen von 1 bis 3.

Dazu kommen wieder zwei ausführbare Bash-Skripte, eines zur Helligkeitssteuerung (hue.sh, Listing 14) und eines zum Ein- und Ausschalten (hue-on-off.sh, Listing 15). Wie Sie sehen, haben wir die IP-Adresse der Bridge und den Usernamen jeweils in Variablen gepackt, um den Code lesbarer zu halten.

Listing 14

#! /bin/bash
WDIR=/home/pi/shellscripts/lux/
IP="10.0.0.8"
USER="w25-4kqL7dGMAZT85WakD5N3yYFknFVQF7g3M2sf"
for i in $(cat $WDIR/hue.txt); do
  curl --request PUT --data "{\"bri\":$1}" $IP/api/$USER/lights/$i/state
done

Listing 15

#! /bin/bash
WDIR=/home/pi/shellscripts/lux/
IP="10.0.0.8"
USER="w25-4kqL7dGMAZT85WakD5N3yYFknFVQF7g3M2sf"
for i in $(cat $WDIR/hue.txt); do
  curl --request PUT --data "{\"on\":$1}" $IP/api/$USER/lights/$i/state
done

Beide Skripte legen Sie unter /home/pi/shellscripts/lux/ ab, wechseln dorthin und starten dann mit dem Aufruf ./hue.sh 128 einen Testlauf für eine Beleuchtung mit mittlerer Helligkeit. Anschließend schalten Sie mit ./hue-on-off.sh false die Leuchten ganz aus – anders als im Ikea-System heißen die Parameter bei Philips true (ein) und false (aus).

Hell und dunkel

Das Bash-Skript dim.sh aus Listing 16 läuft in einer Endlosschleife. Es liest den Sensor aus und vergleicht den Messwert mit einem Schwellwert, der in der Variable $TRIGGER steht. In unserem Beispiel setzen wir ihn auf 300 Lux, aber je nach der individuellen Lichtsituation sollten Sie diesen Wert anpassen.

Fällt der Messwert unter die definierte Schwelle, schaltet das System die Leuchten ein, zunächst mit sehr niedriger Helligkeit. Je dämmriger es wird, umso heller regelt das Skript die Leuchten, und umgekehrt.

Listing 16

#! /bin/bash
WDIR=/home/pi/shellscripts/lux
TRIGGER=300
TRADFRI=/$WDIR/ikea.sh
TRADFRIONOFF=/$WDIR/ikea-on-off.sh
HUECMD=/$WDIR/hue.sh
HUECMDONOFF=/$WDIR/hue-on-off.sh
STATUS="OFF"
# Dieses Programm wertet einen Lux-Sensor
# des Typs BH1570 aus und steuert Ikea- und
# Hue-Leuchtmittel anhand der Messwerte
while true; do
  # ---------------------------------------------
  # hier bei Bedarf Abbruchbedingung (Listing 17)
  # ---------------------------------------------
  LUX=$($WDIR/lux)
  # gewuenschte Helligkeit in Prozent ausrechnen
  PROZ=$(echo "scale=2;( 100 - ($LUX / $TRIGGER ) * 100)"|bc -l|cut -f1 -d\.);
  # fuer Hue Prozentwert mit 2,54 multiplizieren,
  # denn es erwartet Werte im Bereich 1 bis 254
  HUELIGHT=$(echo "($PROZ * 2.54)"|bc -l|cut -f1 -d\.)
  echo "MESSWERT = $LUX"
  if [ $LUX -lt $TRIGGER ]; then
    echo "Messwert unter $TRIGGER lux"
    if [ "$STATUS" = "OFF" ]; then
      echo "Status bisher: off. Leuchten einschalten.";
      $TRADFRIONOFF "on";
      $HUECMDONOFF "true";
      echo "Leuchten auf $PROZ Prozent"
      $TRADFRI $PROZ
      $HUECMD $HUELIGHT
      STATUS="ON"
    else
      echo "Messwert<Trigger, Status = on. Dimmen."
      echo "$lampe auf $PROZ Prozent";
      $TRADFRI $PROZ
      $HUECMD $HUELIGHT
    fi
  else
    if [ "$STATUS" = "ON" ]; then
      echo "Messwert>Trigger, Status=on; Ausschalten."
      echo "$lampe ausschalten"
      $TRADFRI 1
      $HUECMD 1
      $TRADFRIONOFF "off"
      $HUECMDONOFF "false"
      STATUS="OFF"
    else
      echo "Messwert>Trigger, Status=off. Keine Aktion."
    fi
  fi
  sleep 5
done

Ausblick

Dieses simple Skript funktionierte in unseren Tests gut, eignet sich aber eher als Grundlage für eigene Erweiterungen denn als fertige Lösung: Es gibt einige Punkte, die Sie sicherlich noch anpassen wollen.

So wartet das Skript zwischen zwei Durchläufen nur fünf Sekunden, bevor die nächste Messung startet. Das ist zum Testen genau richtig, führt aber dazu, dass das System bei schnell wechselnden Lichtverhältnissen, etwa bei durchziehenden Wolken, sehr hektisch reagiert. Passen Sie einfach die Anweisung sleep 5 nach der Testphase an.

Außerdem führt die Endlosschleife dazu, dass die Lampen nachts mit voller Helligkeit durchleuchten. Wir bauten deswegen für das System in unserem Wohnzimmer eine Abbruchbedingung ein, die das Licht um 1 Uhr nachts ausschaltet (Listing 17). Auch das lässt sich noch sanfter gestalten, etwa in mehreren Stufen: Lassen Sie Ihre Fantasie spielen und gestalten Sie Ihre individuelle Lichtsteuerung. 

Listing 17

ZEIT=$(date +%H%m);
if [ "$ZEIT" = "0100" ]; then
  $TRADFRIONOFF "off"
  $HUECMDONOFF "false"
  exit
fi

Glossar

ZigBee

Spezifikation für drahtlose Netzwerke mit geringem Datenaufkommen wie beispielsweise Hausautomation, Sensornetzwerke oder Lichttechnik. Der Schwerpunkt liegt in Netzwerken mit kurzen Reichweiten bis 100 Meter.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 8 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben