This project is a simple wrapper around libcoap's coap-client to allow controlling IKEA's Trådfri smart lighting products through a JSON HTTP API. For this, coap-client is used to communicate with the Trådfri Gateway through COAP over TLS.
- Querying a list of the following items configured in the gateway:
- Devices
- Lamps
- Remote Controls
- Motion Sensors
- Groups
- Moods / Scenes
- Devices
- Querying the status of the items
- On/Off
- Brightness
- Battery level
- Names
- Turning lights and groups on and off
- Setting their brightness
- Activating moods
- IKEA Trådfri Gateway
- PHP7 (with minor adjustments older versions can also be used)
- libcoap (only supports Linux unfortunately)
- Install coap-client with DTLS support. Preferrably, debug output from tinydtls should be disabled (otherwise adjustments in the scripts are required, see inside list.php for details on this). The script install-coap-client.sh from the pytradfri repository automates this.
- Place the scripts in a web server directory accessible to web browsers. Ensure executing processes on the command line is allowed in your PHP installation.
- Provide a configuration file with IP address of the gateway, identity and key ("username and password") to use when communicating with the gateway. Do this manually or guided by calling setup.php in a web browser.
A config.php file with the following example content is required:
<?php
$gw_address = '192.168.1.123';
$gw_user = 'myUserName';
$gw_key = 'password123456789';
This script returns a full list of all supported items on the gateway. No options for filtering or to address a specific item are currently supported.
Example output:
{
"groups": [
{
"id": 159640,
"name": "Bedroom",
"status": 0,
"brightness": 128,
"devices": [
65536,
65537,
65538
],
"scenes": [
{
"id": 216905,
"name": "EVERYDAY",
"status": 0
},
{
"id": 216317,
"name": "RELAX",
"status": 0
},
{
"id": 223383,
"name": "FOCUS",
"status": 1
}
]
},
{
"id": 159641,
"name": "Livingroom",
"status": 0,
"brightness": 128,
"devices": [
65539,
65540
],
"scenes": [
{
"id": 199468,
"name": "EVERYDAY",
"status": 1
},
{
"id": 210921,
"name": "RELAX",
"status": 0
},
{
"id": 212516,
"name": "FOCUS",
"status": 0
}
]
}
],
"devices": [
{
"id": 65536,
"name": "Remote control 1",
"type": "remote_control",
"battery": 74
},
{
"id": 65539,
"name": "Wireless motion sensor 1",
"type": "motion_sensor",
"battery": 87
},
{
"id": 65537,
"name": "Warm white bulb 1",
"status": 0,
"brightness": 254,
"type": "light"
},
{
"id": 65538,
"name": "Warm white bulb 2",
"status": 1,
"brightness": 173,
"type": "light"
},
{
"id": 65540,
"name": "Warm white bulb 3",
"status": 0,
"brightness": 230,
"type": "light"
}
]
}
This script accepts HTTP POST requests with a JSON object in the body to execute a task. Only one task can be specified per request.
Example JSON objects POSTable:
{
"type": "device",
"id": 65537,
"action": "power",
"value": 1
}
{
"type": "group",
"id": 159641,
"action": "power",
"value": 0
}
{
"type": "device",
"id": 65557,
"action": "dim",
"value": 192
}
This syntax is a bit special. "id" is the group ID this scene belongs to and "value" is the ID of the scene itself.
{
"type": "scene",
"id": 147230,
"value": 199468
}
This is a simple example page to show how to use the API or to test it. It's built with AngularJS for quick prototyping of a template and AJAX requests.