Dank dem Constrained Application Protocol (CoAP) zur Maschine-zu-Maschine-Kommunikation können etwa die Tradfri-Leuchten am Ikea Gateway auch unter GNU/Linux gesteuert werden.
Unter Fedora müssen wir dafür nur libcoap installieren:
sudo dnf install libtool autoconf automake make gcc gcc-c++ kernel-devel
git clone --recursive https://github.com/obgm/libcoap.git
cd libcoap
git checkout dtls
git submodule update --init --recursive
./autogen.sh
./configure --disable-documentation --disable-shared
make
sudo make install
Jetzt noch die IP-Adresse des Ikea Gateways (im Folgenden: GATEIP) und den auf dessen Rückseite stehenden Sicherheitsschlüssel (im Folgenden: SCHLÜSSEL) zusammensuchen.
Dann ins Verzeichnis „/usr/local/bin“ wechseln und einen neuen Benutzer (im Folgenden: BENUTZERNAME) am Gateway anmelden:
./coap-client -m post -u "Client_identity" -k "SCHLÜSSEL" -e '{"9090":"BENUTZERNAME"}' "coaps://GATEIP:5684/15011/9063"
Der Gateway liefert jetzt das Passwort (im Folgenden: PASSWORT) für den BENUTZERNAME in folgender Form zurück (die Gültigkeit des Passworts wird mit jedem gesendeten Befehl wieder auf 6 Wochen gesetzt):
{
"9091": "PASSWORT",
"9029": "FIRMWARE_VERSION_GATEWAY"
}
Ab jetzt können mit BENUTZERNAME und PASSWORT CoAP-Befehle zur Lampensteuerung an den Gateway geschickt werden. So gibt etwa der folgende Befehl alle am Gateway angemeldeten Geräte (Lampen, Dimmer etc.) zurück:
./coap-client -m get -u "BENUTZERNAME" -k "PASSWORT" "coaps://GATEIP:5684/15001"
Die Antwort sieht dann wie folgt aus:
v:1 t:CON c:GET i:aa8a {} [ ]
decrypt_verify(): found 24 bytes cleartext
decrypt_verify(): found 54 bytes cleartext
[65553,65555,65543,65552,65538,65554,65551]
In den eckigen Klammern sind die IDs (im Folgenden DEVICEID) angemeldeten Geräte. Über den folgenden Befehl können die Details zu einem Gerät abgefragt werden:
./coap-client -m get -u "BENUTZERNAME" -k "PASSWORT" "coaps://GATEIP:5684/15001/DEVICEID"
Die Antwort gibt den Typ des Geräts (im Folgenden TYP) (etwa TRADFRI bulb E27 W opal 1000lm) und den über die App zugewiesenen Namen (im Folgenden NAME) zurück, so dass die Zuordnung der IDs möglich ist. Die Antwort sieht etwa so aus:
v:1 t:CON c:GET i:cf08 {} [ ]
decrypt_verify(): found 24 bytes cleartext
decrypt_verify(): found 238 bytes cleartext
{"9001":"NAME","9002":1567074262,"9020":1572159049,"9054":0,"9003":DEVICEID,"5750":2,"9019":1,"3":{"0":"IKEA of Sweden","1":"TYP","2":"","3":"1.2.214","6":1},"3311":[{"5850":1,"5851":177,"9003":0}]}
Diese Lampe könnte jetzt mit dem folgenden Befehl auf 100% Helligkeit (Wert im Befehl zwischen 0 und 254) gestellt werden:
./coap-client -m put -u "BENUTZERNAME" -k "PASSWORT" -e '{ "3311": [{ "5851": 254 }] }' "coaps://GATEIP:5684/15001/DEVICEID"
Damit nicht immer die kryptische Syntax über die bash bedient werden muss, kann ein kleines GUI-Script (smarthome.sh) helfen (wobei zusätzlich zu GATEIP, PASSWORT und BENUTZERNAME noch DEVICEID1/2/3/4 durch die korrekten Device-IDs und RAUM1/2/3/4 durch beliebige Raumnamen ersetzt werden müssen):
#!/bin/sh
# Zugangsdaten des Gateways
IP="coaps://GATEIP:5684/15001/"
KEY="PASSWORT"
USER="BENUTZERNAME"
# Auswahl der zu steuernden Lampe
DEVICE=`zenity --title "Lampenauswahl" --text="Bitte Lampe wählen:" --width 400 --height 400 --list --column Auswahl --column Lampen-ID --column Standort FALSE DEVICEID1 RAUM1 FALSE DEVICEID2 RAUM2 FALSE DEVICEID3 RAUM3 TRUE DEVICEID4 RAUM4 --radiolist`
# Überprüfen, ob eine Lampe ausgewählt und bestätigt oder die Auswahl abgebrochen wurde
if [ "$DEVICE" != "" ]
then
# Auswahl der zu setzenden Helligkeit
HELLIGKEIT=`zenity --scale --title="Helligkeitseinstellung" --text="Helligkeit der Lampe." --value=100`
# Überprüfen, ob eine Helligkeit ausgewählt und bestätigt oder die Auswahl abgebrochen wurde
if [ "$HELLIGKEIT" != "" ]
then
HELLIGKEIT=$(($HELLIGKEIT * 254 / 100))
/usr/local/bin/coap-client -m put -u $USER -k $KEY -e '{ "3311": [{ "5851": '$HELLIGKEIT' }] }' $IP$DEVICE
fi
fi
Nicht vergessen, das Script ausführbar zu machen:
chmod +x smarthome.sh
Jetzt lässt es sich starten:
./smarthome.sh
Weiterführende hilfreiche Links:
- https://pi-buch.info/tradfri-beleuchtungssystem-von-ikea-mit-linux-steuern/
- https://github.com/glenndehaan/ikea-tradfri-coap-docs#get-a-list-of-all-devices
Beitrag interessant? Ich freue mich über einen Kauf bei Amazon*.