Connecting IKEA TRÅDFRI to an MQTT Broker

  ·   3 min read

As the Internet of Things (IoT) begins to populate our homes with an increasing number of smart devices, many developers and hobbyists look for ways to integrate these devices into a cohesive environment. One such popular device is the IKEA TRÅDFRI lighting system, which offers wireless and user-friendly smart lighting solutions. In this article, I’ll walk you through the steps to connect IKEA TRÅDFRI lights to an MQTT broker, enabling you to control them programmatically and integrate them with other IoT devices.

Prerequisites

  1. IKEA TRÅDFRI Gateway: Ensure you have the TRÅDFRI gateway set up and accessible on your local network.
  2. MQTT Broker: You’ll need an MQTT broker. For demonstration purposes, you can use Mosquitto, which is an open-source MQTT broker that you can install locally.
  3. Node.js: This guide will use Node.js for communication with the TRÅDFRI API.
  4. npm Packages: Install the required npm packages using:
    npm install node-tradfri-client mqtt
    

Step 1: Accessing the TRÅDFRI Gateway

To interact with the TRÅDFRI system, you will need to authenticate with the gateway. The node-tradfri-client library allows us to easily connect and communicate with the TRÅDFRI gateway.

Here’s how to do it:

  1. Retrieve the security code: Find the security code located on the back of your TRÅDFRI gateway.
  2. Connect to the Gateway: Use the following code snippet to connect.
const { TradfriClient } = require('node-tradfri-client');
const client = new TradfriClient('YOUR_GATEWAY_IP');

(async () => {
    const endpoint = await client.connect('YOUR_SECURITY_CODE');
    console.log('Connected to TRÅDFRI Gateway:', endpoint);
})();

Step 2: Setting Up the MQTT Broker

Install Mosquitto by following the official documentation available here. Once installed, you can start the broker by simply running:

mosquitto

Your broker should now be running on localhost:1883 by default.

Step 3: Building the Integration

With both the TRÅDFRI client and MQTT broker set up, we can now create an integration. Below is an example of a Node.js app that listens for changes from TRÅDFRI devices and publishes their states to MQTT.

const mqtt = require('mqtt');
const {
    TradfriClient
} = require('node-tradfri-client');

const mqttClient = mqtt.connect('mqtt://localhost:1883');
const tradfriClient = new TradfriClient('YOUR_GATEWAY_IP');

(async () => {
    const endpoint = await tradfriClient.connect('YOUR_SECURITY_CODE');
    
    tradfriClient.on('update', (device) => {
        const topic = `tradfri/device/${device.id}/state`;
        const message = JSON.stringify({
            id: device.id,
            name: device.name,
            state: device.state
        });

        mqttClient.publish(topic, message, { retain: true }, (err) => {
            if (err) {
                console.error('MQTT Publish Error:', err);
            }
        });
    });

    console.log('Listening for device updates...');
})();

Step 4: Testing the Integration

  1. Start the Node.js application and your MQTT broker.
  2. Use an MQTT client (like MQTT.fx or Mosquitto_pub) to subscribe to the topic.
    mosquitto_sub -h localhost -t 'tradfri/device/#' -v
    
  3. Adjust the TRÅDFRI device settings through the IKEA app, and observe the published messages in your MQTT client.

Conclusion

By following these steps, you can successfully connect IKEA TRÅDFRI lights to an MQTT broker, allowing for advanced automation and integration scenarios. This capability empowers developers to create custom solutions and seamlessly control their smart environment.

Further Reading

This integration provides a foundation for creating sophisticated home automation solutions, and with the script provided, you can easily extend functionalities according to your project requirements. Happy coding!