Update, 2026: Apple’s Home architecture has changed significantly since 2018. Homebridge still exists and still works, but the setup has evolved. Check homebridge.io for current instructions. The rest of this post reflects how it worked in 2018.
“Hey Siri, turn on the bedroom lights!” I want that. Here’s how I did it:
- I bought a bunch of Sonoff devices (5€ each, 10€ for a light switch).
- I bought a raspberry pi (33€).
- I installed an MQTT broker and homebridge on the pi.
1. Set up the pi
=> See How to setup a Raspberry Pi 3 headless, without monitor, mouse or keyboard
2. Install mosquitto and homebridge
…and everything else you need:
$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install mosquitto
$ sudo apt-get install make
$ sudo apt-get install nodejs
$ sudo apt-get install libavahi-compat-libdnssd-dev
$ sudo apt-get install npm
$ sudo npm install -g homebridge
$ sudo npm install -g homebridge-mqtt-switch-tasmota # for sonoff devices
3. Configure mosquitto
The default for mosquitto is to run without any security. Let’s not do this. This creates a user “home” with a password:
$ sudo mosquitto_passwd -c /etc/mosquitto/passwd home
Password: yourpassword
Reenter password: yourpassword
This will create a password file. You can look at it with
$ cat /etc/mosquitto/passwd
home:$6$yjSnOc95804YRW/E$lokE/zzg4XwKj1BJPOxXDq4njkeovnecAvtYCOmNYgn5v/c8sHP08LnH7rDP0uU59hzmV/5iTXsudDrO6RMWPl+A==
Now we need to tell mosquitto to use this password file:
$ sudo nano /etc/mosquitto/mosquitto.conf
Add the lines
password_file /etc/mosquitto/passwd
allow_anonymous false
Exit with ctrl + x, y and enter.
Now restart the daemon:
$ sudo systemctl restart mosquitto
You can check the status with
$ sudo /etc/init.d/mosquitto status
4. Configure homebridge
First we’ll create a config file for homebridge and open it:
$ mkdir ~/.homebridge
$ touch ~/.homebridge/config.json
$ nano ~/.homebridge/config.json

Your config should look something like this:
{
"bridge": {
"name": "Raspberry Pi",
"username": "XX:XX:XX:XX:XX:XX",
"port": 51826,
"pin": "XXX-XX-XXX"
},
"platforms": [],
"accessories": [{
"accessory": "mqtt-switch-tasmota",
"name": "My Smart Device",
"url": "mqtt://127.0.0.1",
"username": "home",
"password": "your password from step 3",
"topics": {
"statusGet": "stat/topic_for_this_device/POWER",
"statusSet": "cmnd/topic_for_this_device/POWER",
"stateGet": "tele/topic_for_this_device/STATE"
}
},
{}
]
}
For more information have a look at the config.json sample or the page of the plugin you’re using (mqtt-switch-tasmota in my case).
If you don’t like nano you can also copy the file to your computer, edit it there and then copy it back:
$ scp pi@192.168.31.231:.homebridge/config.json ~/Downloads/homebridge.json
config.json 100% 1830 149.2KB/s 00:00
# edit
$ scp ~/Downloads/homebridge.json pi@192.168.31.231:.homebridge/config.json
homebridge.json 100% 1457 268.4KB/s 00:00
But beware: Do not edit the file in TextEdit, as it changes the format.
You should now be able to start the homebridge app:
$ homebridge

5. Start homebridge on startup
Great! Now all that’s left is to create a user and a service to run homebridge on startup. For this I followed this guide:
- Create a file for default parameters
$ sudo nano /etc/default/homebridge
and paste HOMEBRIDGE_OPTS=-U /var/homebridge into the file. Quit with ctrl + x, y, enter.
- Create a service in
systemd
$ sudo nano /etc/systemd/system/homebridge.service
and paste
[Unit]
Description=Node.js HomeKit Server
After=syslog.target network-online.target
#
[Service]
Type=simple
User=homebridge
EnvironmentFile=/etc/default/homebridge
ExecStart=/usr/local/bin/homebridge $HOMEBRIDGE_OPTS
Restart=on-failure
RestartSec=10
KillMode=process
#
[Install]
WantedBy=multi-user.target
- Create a user
homebridge
$ sudo useradd --system homebridge
- Create a directory for the config
$ sudo mkdir /var/homebridge
$ sudo cp ~/.homebridge/config.json /var/homebridge/
$ sudo cp -r ~/.homebridge/persist /var/homebridge
- Start the service
$ sudo chmod -R 0777 /var/homebridge
$ sudo systemctl daemon-reload
$ sudo systemctl enable homebridge
$ sudo systemctl start homebridge
$ systemctl status homebridge
Notice that the config.json is now copied to a different folder, so if you change the one in ~/.homebridge/ you need to copy it to /var/homebridge/ afterwards!
$ sudo cp ~/.homebridge/config.json /var/homebridge/
$ sudo systemctl restart homebridge
6. Add smart devices
You now have control center for you smart devices! Here is a guide on how to connect them!