htreu / OpenHAB-HomeKit-Bridge

Bridging OpenHAB items to the HomeKit Accessory Protocol
Apache License 2.0
171 stars 32 forks source link

Build Status Coverage Status Codacy Badge

OpenHAB HomeKit Bridge

OpenHAB HomeKit Bridge bridges openHAB items to Apple´s HomeKit Accessory Protocol. It is based on hap-nodejs.

Watch the demo video here and Siri controlling roller shutters here.

Prerequisites
Install the OpenHAB HomeKit Bridge:

The following mapping of openHAB items and HomeKit items apply:

openHAB item sitemap item HomeKit item Functions
Switch Switch Lightbulb On/Off
Dimmer Slider Lightbulb On/Off, Brightness
Color Colorpicker Lightbulb On/Off, Brightness, Hue, Saturation
Rollershutter Switch  Rollershutter  Opening state 0% - 100%
Number  Text  Temperature temp in °C
Switch Frame* + Switch Outlet On/Off

* The Frame must be tagged with label=outlet and/or icon=outlet to let the bridge pick up its Switch items as outlets.

Run OpenHAB HomeKit Bridge

This connects to OpenHAB at 192.168.0.99 on port 8080 and loads all items from a sitemap named 'demo.sitemap':

npm start -- --name "myOpenHAB-Bridge" --server 192.1.0.99:8080 --sitemap demo

Command line options:
-n, --name
The name of the bridge as shown in the HomeKit database. _This option is mandatory._
-s, --server
The network address and port of the OpenHAB server as ```ip:port```. Defaults to 127.0.0.1:8080
-p, --pincode
The pincode used for the bridge accessory. Defaults to 031-45-154.
-m, --sitemap
The name of the sitemap to load all items from. Items must not be nested in frames or groups. Defaults to 'homekit'.

To access the bridge from an iOS device (9.0+) use Apples HomeKit Catalog 2.0 demo application or a vendor app like elgato´s eve (see Prerequisites). Use the predefined pin code 031-45-154 to add the bridge as an accessory.

You may use the start.sh.template to create your own simple start up script. This gives you at least simple logging output and debugging possibilities in case the bridge runs in the background.

Running Tests

To execute unit tests run

npm test

To produce test coverage output run

npm run-script coverage

Known issues
Backlog/ToDo