IKEA lampa i Easyhome

Moderators: hekj, Telldus

Post Reply
fingalo
Posts: 53
Joined: Thu Jan 18, 2018 11:08 am

IKEA lampa i Easyhome

Post by fingalo » Fri Feb 09, 2018 3:05 pm

Hej,
jag har integrerat en dimbar IKEA lampa i min nexahome och det fungerar bra.
För att göra det behöver man en IKEA gateway och fjärrkontroll med lampa, lite mek i raspberry plus script.
Så här gjorde jag:

0. Installera och få igång lampan med fjärrkontroll och gateway plus android eller ios app.

1. Installera coap i raspberryn.
https://learn.pimoroni.com/tutorial/san ... om-your-pi
Öppna ett terminalfönster och bara följ instruktionerna (tar lite tid).
På sidan finns också exempel på grundläggande kommando för att styra lampan.
OBS. Denna sida saknar info om shared key vilket tillkommit senare, se nedan.
Så istället för att i dessa kommando använda koden som står på lådan ska man istället använd en shared key.

Installationen fungerade med en gång hos mig, inga problem.

2. Ta reda på IP adressen till gatewayn, kolla i din router.

3. På denna sida hittar man instruktioner för att hämta shared key som sen ska användas i kommandona för att styra lampan.
https://github.com/ggravlingen/pytradfri/issues/90

Använd terminalfönstret och skriv följande kommando med din SECURITY_CODE (står på lådan), din IP_ADDRESS samt IDENTITY (som du kan välja själv vad du vill ha).

Code: Select all

coap-client -m post -u "Client_identity" -k "SECURITY_CODE" -e '{"9090":"IDENTITY"}' coaps://IP_ADDRESS:5684/15011/9063"
Du ska nu få tillbaka en räcka med info som bla innehåller en ny kod (lika lång som security koden).
KOM IHÅG DENNA KOD, spara den nånstans.
(Det verkar som man endast kan hämta ut shared_key en gång per IDENTITY).
Går det ej, så byta IDENTITY mot nåt annat, det gjorde jag, var lite fram och tillbaka innan jag fick en kod med min egen identity.

4. Om det gick bra, så kan du skriva kommandot (byt ut IDENTITY, shared_key och IP_ADDRESS mot dina egna):

Code: Select all

coap-client -m get -u "IDENTITY" -k "shared_key"  "coaps://IP_ADDRESS:5684/15001"
och ska få tillbaka nånting sånt här:

v:1 t:CON c:GET i:fbcf {} [ ]
decrypt_verify(): found 24 bytes cleartext
decrypt_verify(): found 24 bytes cleartext
[65536,65537]

I detta faller är 65537 min lampa, 65536 tror jag är id till min ikea fjärrkontroll.

6. Har du kommit så här långt, kan du börja tända / släcka med kommandon i terminalfönstret.

Code: Select all

tänd:
coap-client -m put -u "IDENTITY" -k "shared_key" -e '{ "3311": [{ "5850": 1 }] }' "coaps://IP_ADDRESS:5684/15001/65537"

Släck:
coap-client -m put -u "IDENTITY" -k "shared_key" -e '{ "3311": [{ "5850": 0 }] }' "coaps://IP_ADDRESS:5684/15001/65537"

dimma 0 - 254: (127 är halv)
coap-client -m put -u "IDENTITY" -k "shared_key" -e '{ "3311": [{ "5851": 127 }] }' "coaps://IP_ADDRESS:5684/15001/65537"
7. Integrera i NEXA/EASYHOME.

Jag har tillsvidare hårdkodat shared_key och ip_adress i mina script, går nog att göra mycket bättre.

Jag skapade en dimmer (device nr 19) med dummy=yes.
Skapa två scriptfiler.

Script kod på min device skickar dimvärdet från devicen och IKEA lampid till ett sh script, på så sätt kan samma sh-script sen användas till alla lampor.
19.bsh (dimmar lampa 65537):

Code: Select all

process = Runtime.getRuntime().exec(new String[] { "/home/pi/nexahome/coap_dim.sh", Integer.toString(Integer.parseInt(getDeviceLevel("19"))*254/100), "65537"});	
int exitVal = process.waitFor();
Sh scriptet som anropas
coap_dim.sh (Glöm ej göra den exekverbar)

Code: Select all

#!/bin/bash
 coap-client -m put -u "IDENTITY" -k "shared_key" -e '{ "3311": [{ "5851": '$1' }] }'  "coaps://IP_ADDRESS:5684/15001/$2"
Har inte lagt in färgbyte på lamporna än, men borde gå att göra med en ytterliggare dimmer device som då styr färgkoden.

Tips:
- Gör ett steg i taget och få kommandon att fungera.
- Ger man ett coap kommando som är felaktig, men som behandlas, så får man en fel kod på slutet typ 4.01.

Hoppas det kan vara till nytta, jag tycker själv det är riktigt användbart att ha lamporna integrerade i Easyhome.
Instruktionen ser besvärlig ut men tar man ett steg i taget så kommer man till slut fram.
Last edited by fingalo on Mon Feb 19, 2018 12:54 pm, edited 1 time in total.

fingalo
Posts: 53
Joined: Thu Jan 18, 2018 11:08 am

Re: IKEA lampa i Easyhome

Post by fingalo » Sat Feb 10, 2018 11:19 pm

Hej,
har införskaffat en IKEA lampa till. Den har endast 3 moder, cold, normal, warm.
Fick ändra mina skript då de kunde hänga sig, mina Linux kunskaper är nog inte i topp...
För att kunna ställa färger använder jag ytterliggare en dimningsdevice i Easyhome. Så varje lampa har två devicer,
Easyhome id 25,26 styr IKEA lampa ID 65538 och Easyhome id 27, 28 styr IKEA lampa ID 65537.

25.bsh skriptet för att dimma en lampa med id 25 i Easyhome och IKEA id 65538:

Code: Select all

execFile("/home/pi/nexahome/coap_dim.sh");
execParam(Integer.toString(Integer.parseInt(getDeviceLevel("25"))*254/100));
execParam("65538");
hideOutput();
coap_dim.sh skriptet:

Code: Select all

#!/bin/bash
 coap-client -m put -u "IDENTITY" -k "SHARED_KEY" -e '{ "3311": [{ "5851": '$1' }] }'  "coaps://IP_ADDRESS:5684/15001/$2"
26.bsh skriptet för att välja färg på IKEA RGB? lampa med Easyhome id 26 och IKEA id 65538.
Koden skalar dimningsvärdet så att man skickar ner en av 9 färgkoder till lampan. Jag har valt de färger som IKEA's fjärrkontroll kan ställa in.

Code: Select all

String[] color = { "f1e0bf", "f5faf6", "efd275", "ebb63e", "e78834", "da5d41", "d9337c", "c984bb", "6c83ba"};
execFile("/home/pi/nexahome/coap_color.sh");
execParam(color[Integer.parseInt(getDeviceLevel("26"))*8/100]);
execParam("65538");
hideOutput();
28.bsh skriptet för att välja färg på IKEA lampa, 3 färger, med Easyhome id 28 och IKEA id 65537
Endast de 3 första färgkoderna kan skickas till lampan.

Code: Select all

[code]String[] color = { "f1e0bf", "f5faf6", "efd275", "ebb63e", "e78834", "da5d41", "d9337c", "c984bb", "6c83ba"};
execFile("/home/pi/nexahome/coap_color.sh");
execParam(color[Integer.parseInt(getDeviceLevel("26"))*2/100]);
execParam("65537");
hideOutput();
coap-color.sh skript:

Code: Select all

#!/bin/bash
  coap-client -m put -u "IDENTITY" -k "SHARED_KEY" -e '{ "3311": [{ "5706": '"\"$1\""' }] }'  "coaps://IP_ADDRESS:5684/15001/$2"
Som jag nämnde kunde de förra scripten hänga sig, mest om man gjorde många tryck på devicen. Nu verkar det vara stabilt.

Post Reply