Ikea Tradfri Lampen steuern

Ich möchte Ikea Glühbirnen die mit einem Gateway verbunden sind von einem RaspberryPi aus steuern. Aus den vielen Beschreibungen konnte ich aus dieser zusammen mit diesem GitRepository eine Weg für mich finden.

Ikea Tradfri Lampen


Ein Paar Voraussetzungen

sudo apt install libtool autoconf automake buid-essential python-pip
pip install tqdm

Dann eine Bibliothek mit der die Lampen angesprochen werden können

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

Um mit den Geräten sprechen zu können muss man sich zuerst eine Art Nutzer mit Kennwort auf dem Gateway erstellen. Dazu braucht man den Security Key der unten auf dem Gateway steht.

coap-client -m post -u "Client_identity" -k "P4mxxxxxxxxxxxl" -e '{"9090":"dein_nutzer"}' "coaps://ip.adresse.de:5684/15011/9063"
v:1 t:CON c:POST i:eb16 {} [ ]
decrypt_verify(): found 24 bytes cleartext
decrypt_verify(): found 50 bytes cleartext
{"9091":"UAM8za4o88mAO9kA","9029":"1.9.0027"}

Jetzt haben wir einen Nutzer und ein Kennwort und können jetzt “Fragen” und Befehle an das Gateway senden

Gateway: Welche Geräte kennst Du?

coap-client -m get -u dein_nutzer -k "UAM8za4o88mAO9kA" "coaps://ip.adresse.de:5684/15001/"
v:1 t:CON c:GET i:bc25 {} [ ]
decrypt_verify(): found 24 bytes cleartext
decrypt_verify(): found 36 bytes cleartext
[65536,65538,65537,65539]

Gatway: Was ist die Nummer 65536?

coap-client -m get -u dein_nutzer -k "UAM8za4o88mAO9kA" "coaps://ip.adresse.de:5684/15001/65536"
v:1 t:CON c:GET i:0c21 {} [ ]
decrypt_verify(): found 24 bytes cleartext
decrypt_verify(): found 231 bytes cleartext
{"9001":"TRADFRI remote control","9002":1575434297,"9020":1575460830,"9003":65536,"9054":1,"9019":1,"15009":[{"9003":0}],"3":{"0":"IKEA of Sweden","1":"TRADFRI remote control","2":"","3":"2.3.014","6":3,"9":87},"5750":0}
  

Ah, die Fernbedienung. Und was steckt hinter 65537?

coap-client -m get -u dein_nutzer -k "UAM8za4o88mAO9kA" -e '{ "3311: [{"5850" : 0 }] }' "coaps://ip.adresse.de:5684/15001/65537"
v:1 t:CON c:GET i:eb16 {} [ ]
decrypt_verify(): found 24 bytes cleartext
decrypt_verify(): found 235 bytes cleartext
{"9001":"TRADFRI bulb","9002":1575434367,"9020":1576729192,"9003":65537,"9054":0,"9019":1,"3":{"0":"IKEA of Sweden","1":"TRADFRI bulb E27 WW 806lm","2":"","3":"2.1.022","6":1},"3311":[{"5850":0,"5851":43,"9003":0}],"5750":2}
 

Ah, eine Lampe.

Gateway: Lampe ein- und ausschalten

coap-client -m put -u dein_nutzer -k "UAM8za4o88mAO9kA" -e '{ "3311": [{"5850" : 1 }] }' "coaps://ip.adresse.de:5684/15001/65537"
v:1 t:CON c:PUT i:33a1 {} [ ]
decrypt_verify(): found 24 bytes cleartext
decrypt_verify(): found 4 bytes cleartext
root@alex:~# coap-client -m put -u alex -k "UAM8za4o88mAO9kA" -e '{ "3311": [{"5850" : 0 }] }' "coaps://ip.adresse.de:5684/15001/65537"
v:1 t:CON c:PUT i:dfb1 {} [ ]
decrypt_verify(): found 24 bytes cleartext
decrypt_verify(): found 4 bytes cleartext

Das ganze braucht jetzt noch eine Rest API damit ich das über http ansteuern kann.