HomeBridge – Relays & Lights

Well after a long time I’ve picked up where I left my HomeBridge project. Its time to go to the next level; accessories! The first logical step is in my opinion switching a light ( or relay )  on and off though the HomeBridge with Siri. First, you must install HomeBridge on a Raspberry Pi, and configure it as a HomeKit bridge device.How to do that, you can read all about it here.

Installing the Plugin on your HomeBridge

When you have installed the HomeBridge you need to install the homebridge-http package in order to let the HomeBridge communicate with your ESP8266 over HTTP.

sudo npm install -g homebridge-http --unsafe-perm

Edit the HomeBridge /var/homebridge/config.json file on the Raspberry Pi HomeBridge. the file may alternatively be in /home/.homebridge or /root/home/./homebridge.

sudo nano ~/.homebridge/config.json

Add this code to the config.json file. Mind the last comma, you may or may not need it if you have other accessories, or Homebridge is crashing on load.

{
    "bridge": {
        "name": "Homebridge",
        "username": "CC:22:3D:E3:CE:30",
        "port": 51826,
        "pin": "031-45-154"
    },

    "description": "This is an example configuration file with all supported devices. You can use this as a template for creating your own configuration file containing devices you actually own.",

    "platforms": [
        
    ],

    "accessories": [
        {    "accessory": "Http",
            "name": "PowerTail",
            "on_url": "http://192.168.1.110/gpio/1",
            "off_url": "http://192.168.1.110/gpio/0",
            "http_method": "GET"
        },
       
    ]
}



The Hardware

Once you have HomeKit / HomeBridge working on your Pi and your iPhone, we can build a wireless power switch that can be controlled by Siri and the HomeKit app. At first we need to setup the FTDI programmer to program the ESP8266 with the Arduino IDE.

The Code

The we can upload the program below to your ESP8266.

/*
    Project name: Apple Homebridge - Relays & Lights
    Project URI:  https://www.studiopieters.nl/apple-homebridge-relays-lights/
    Description: Apple Homebridge - Relays & Lights
    Version: Apple homebridge - Relays & Lights 3.2.3
    License: GNU General Public License V2 or later
*/

#include <ESP8266WiFi.h>

const char* ssid = "your-ssid";
const char* password = "your-password";

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);

  // prepare GPIO2
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);

  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Start the server
  server.begin();
  Serial.println("Server started");

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Wait until the client sends some data
  Serial.println("new client");
  while (!client.available()) {
    delay(1);
  }

  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();

  // Match the request
  int val;
  if (req.indexOf("/gpio/0") != -1)
    val = 0;
  else if (req.indexOf("/gpio/1") != -1)
    val = 1;
  else {
    Serial.println("invalid request");
    client.stop();
    return;
  }

  // Set GPIO2 according to the request
  digitalWrite(2, val);

  client.flush();

  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
  s += (val) ? "high" : "low";
  s += "</html>\n";

  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");

  // The client will actually be disconnected
  // when the function returns and 'client' object is destroyed
}

Now we can modify our setup so we can see if everything is working. In the fritzing digram below you can see that now I have added a LED and keeping the RX and TX connected so we can see in the monitor from the Arduino IDE if everything is working as we want to.

Now we have to connect our iPhone to the home bridge and add the new accesoires.

it works!

Now you can remove the FTDI programmer and you have a stand alone Apple HomeKit accesoirs.

To switch a high power (230V) Light you need to replace the LED with a Relay module.

 

 

 

Download all Files for this project on github.

Do you have any questions? Leave a comment down here.

 

 

Reference

Nick Farina (Nov 14 2017), Homebridge, Homebridge is a lightweight NodeJS server you can run on your home network that emulates the iOS HomeKit API., https://github.com/nfarina/homebridge Adrian Rudman (Jun 27 2017) ,homebridge-http,  Supports https devices on the HomeBridge Platform and provides a readable callback for getting the “On” and brightness level characteristics to Homekit. https://github.com/rudders/homebridge-http

Scroll to Top