Sonoff
I bought two of those cheap wifi remote controlled switches called Sonoff.
These switches allow you to turn them on and off with an app on your phone.
https://www.itead.cc/sonoff-wifi-wireless-switch.html
Inside these switches are a ESP8266 , which means that we can flash the chip with our own custom firmware.
And with the help of a Raspberry pi we can enable homekit.
Firstly I reflashed the sonoff with my custom firmware, using the Arduino IDE. (Google how to flash ESP8266)
(This disables the use of the official sonoff app)
https://github.com/kim82/sonoff
Remember to change the hostname, if you have multiple sonoff.
#define HOSTNAME "sonoff_00"
Raspberry Pi – Homebridge
Download and install Raspbian on the Raspberry Pi.
https://www.raspberrypi.org/downloads/raspbian/
When this is done we can install Homebridge, which is the service that sits between your apple devices and the sonoff switch.
The full install guide can be found here:
https://github.com/nfarina/homebridge/wiki/Running-HomeBridge-on-a-Raspberry-Pi
TLDR; (Raspberry Pi 3)
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git make
sudo apt-get install g++
#install node
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
#install Avahi and other dependencies
sudo apt-get install libavahi-compat-libdnssd-dev
Script2
Next we need to install Script2, which is a homebridge plugin that allows you to run bash-scripts though the homebridge
npm install -g homebridge-script2
Start at bootup
Lastly we need to start Homebridge whenever the Raspberry pi boots up.
And the following method was found here:
https://gist.github.com/johannrichard/0ad0de1feb6adb9eb61a/
We need to create the following two files.
/etc/default/homebridge
# Defaults / Configuration options for homebridge
# The following settings tells homebridge where to find the config.json file and where to persist the data (i.e. pairing and others)
HOMEBRIDGE_OPTS=-U /var/lib/homebridge
/etc/systemd/system/homebridge.service
[Unit]
Description=Node.js HomeKit Server
After=syslog.target network-online.target
[Service]
Type=simple
User=homebridge
#could be /usr/local/bin/homebridge - check where the homebridge folder exists
EnvironmentFile=/etc/default/homebridge
ExecStart=/usr/bin/homebridge $HOMEBRIDGE_OPTS
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
And to enable the newly created service. (first time only)
sudo systemctl daemon-reload
sudo systemctl enable homebridge
sudo systemctl start homebridge
We also need to create a new user and the folder for the config.json file
#create a new user
sudo useradd -M --system homebridge
#creates a new folder
sudo mkdir /var/lib/homebridge
#changes the owner of the folder to new homebridge-user
sudo chown homebridge:homebridge /var/lib/homebridge
Configuration
To configure the script2, we need to create a config.json file in the /var/lib/homebridge folder.
Mine looks like this:
{
"bridge": {
"name": "Sonoff",
"username": "AA:BB:CC:DD:EE:FF", (THIS NEEDS TO BE CHANGED)
"port": 40500,
"pin": "XXX-XX-XXX" (THIS NEEDS TO BE CHANGED - WITH NUMBERS)
},
"description": "Sonoff Homebridge",
"accessories": [
{
"accessory": "Script2",
"name": "Bedroom lamp",
"on": "curl http://sonoff_00.local/on",
"off": "curl http://sonoff_00.local/off",
"state": "curl --max-time 1 http://sonoff_00.local",
"fileState": "",
"on_value": "on"
},
{
"accessory": "Script2",
"name": "Living room lamp",
"on": "curl http://sonoff_01.local/on",
"off": "curl http://sonoff_01.local/off",
"state": "curl --max-time 1 http://sonoff_01.local",
"fileState": "",
"on_value": "on"
}
],
"platforms": []
}
Restart the homebridge service
sudo systemctl restart homebridge
Now you should be able to add the sonoff homebridge to your Home-app on the iphone/ipad, and control the switches.