'use strict'; // // HomeSeer Platform Shim for HomeBridge by Jean-Michel Joudrier - (stipus at stipus dot com) // V0.1 - 2015/10/07 // - Initial version // V0.2 - 2015/10/10 // - Occupancy sensor fix // V0.3 - 2015/10/11 // - Added TemperatureUnit=F|C option to temperature sensors // - Added negative temperature support to temperature sensors // V0.4 - 2015/10/12 // - Added thermostat support // V0.5 - 2015/10/12 // - Added Humidity sensor support // V0.6 - 2015/10/12 // - Added Battery support // - Added low battery support for all sensors // - Added HomeSeer event support (using HomeKit switches...) // V0.7 - 2015/10/13 // - You can add multiple HomeKit devices for the same HomeSeer device reference // - Added CarbonMonoxide sensor // - Added CarbonDioxide sensor // - Added onValues option to all binary sensors // V0.8 - 2015/10/14 // - Added uuid_base parameter to all accessories // V0.9 - 2015/10/16 // - Smoke sensor battery fix // - Added offEventGroup && offEventName to events (turn on launches one HS event. turn off can launch another HS event) // - Added GarageDoorOpener support // - Added Lock support // // // Remember to add platform to config.json. // // You can get HomeSeer Device References by clicking a HomeSeer device name, then // choosing the Advanced Tab. // // Example: // "platforms": [ // { // "platform": "HomeSeer", // Required // "name": "HomeSeer", // Required // "host": "http://192.168.3.4:81", // Required - If you did setup HomeSeer authentication, use "http://user:password@ip_address:port" // // "events":[ // Optional - List of Events - Currently they are imported into HomeKit as switches // { // "eventGroup":"My Group", // Required - The HomeSeer event group // "eventName":"My On Event", // Required - The HomeSeer event name // "offEventGroup":"My Group", // Optional - The HomeSeer event group for turn-off // "offEventName":"My Off Event", // Optional - The HomeSeer event name for turn-off // "name":"Test", // Optional - HomeSeer event name is the default // "uuid_base":"SomeUniqueId" // Optional - HomeKit identifier will be derived from this parameter instead of the name // } // ], // // "accessories":[ // Required - List of Accessories // { // "ref":8, // Required - HomeSeer Device Reference (To get it, select the HS Device - then Advanced Tab) // "type":"Lightbulb", // Optional - Lightbulb is the default // "name":"My Light", // Optional - HomeSeer device name is the default // "offValue":"0", // Optional - 0 is the default // "onValue":"100", // Optional - 100 is the default // "can_dim":true, // Optional - true is the default - false for a non dimmable lightbulb // "uuid_base":"SomeUniqueId2" // Optional - HomeKit identifier will be derived from this parameter instead of the name. You SHOULD add this parameter to all accessories ! // }, // { // "ref":9 // This is a dimmable Lightbulb by default // }, // { // "ref":58, // This is a controllable outlet // "type":"Outlet" // }, // { // "ref":111, // Required - HomeSeer Device Reference for your sensor // "type":"TemperatureSensor", // Required for a temperature sensor // "temperatureUnit":"F", // Optional - C is the default // "name":"Bedroom temp", // Optional - HomeSeer device name is the default // "batteryRef":112, // Optional - HomeSeer device reference for the sensor battery level // "batteryThreshold":15 // Optional - If sensor battery level is below this value, the HomeKit LowBattery characteristic is set to 1. Default is 10 // }, // { // "ref":34, // Required - HomeSeer Device Reference for your sensor // "type":"SmokeSensor", // Required for a smoke sensor // "name":"Kichen smoke detector", // Optional - HomeSeer device name is the default // "batteryRef":35, // Optional - HomeSeer device reference for the sensor battery level // "batteryThreshold":15, // Optional - If sensor battery level is below this value, the HomeKit LowBattery characteristic is set to 1. Default is 10 // "onValues":[1,1.255] // Optional - List of all HomeSeer values triggering a "ON" sensor state - Default is any value different than 0 // }, // { // "ref":34, // Required - HomeSeer Device Reference for your sensor (Here it's the same device as the SmokeSensor above) // "type":"CarbonMonoxideSensor", // Required for a carbon monoxide sensor // "name":"Kichen CO detector", // Optional - HomeSeer device name is the default // "batteryRef":35, // Optional - HomeSeer device reference for the sensor battery level // "batteryThreshold":15, // Optional - If sensor battery level is below this value, the HomeKit LowBattery characteristic is set to 1. Default is 10 // "onValues":[2,2.255] // Optional - List of all HomeSeer values triggering a "ON" sensor state - Default is any value different than 0 // }, // { // "ref":113, // Required - HomeSeer Device Reference of the Current Temperature Device // "type":"Thermostat", // Required for a Thermostat // "name":"Température Salon", // Optional - HomeSeer device name is the default // "temperatureUnit":"C", // Optional - F for Fahrenheit, C for Celsius, C is the default // "setPointRef":167, // Required - HomeSeer device reference for your thermostat Set Point. // "setPointReadOnly":true, // Optional - Set to false if your SetPoint is read/write. true is the default // "stateRef":166, // Required - HomeSeer device reference for your thermostat current state // "stateOffValues":[0,4,5], // Required - List of the HomeSeer device values for a HomeKit state=OFF // "stateHeatValues":[1], // Required - List of the HomeSeer device values for a HomeKit state=HEAT // "stateCoolValues":[2], // Required - List of the HomeSeer device values for a HomeKit state=COOL // "stateAutoValues":[3], // Required - List of the HomeSeer device values for a HomeKit state=AUTO // "controlRef":168, // Required - HomeSeer device reference for your thermostat mode control (It can be the same as stateRef for some thermostats) // "controlOffValue":0, // Required - HomeSeer device control value for OFF // "controlHeatValue":1, // Required - HomeSeer device control value for HEAT // "controlCoolValue":2, // Required - HomeSeer device control value for COOL // "controlAutoValue":3, // Required - HomeSeer device control value for AUTO // "coolingThresholdRef":169, // Optional - Not-implemented-yet - HomeSeer device reference for your thermostat cooling threshold // "heatingThresholdRef":170 // Optional - Not-implemented-yet - HomeSeer device reference for your thermostat heating threshold // }, // { // "ref":200, // Required - HomeSeer Device Reference of a garage door opener // "type":"GarageDoorOpener", // Required for a Garage Door Opener // "name":"Garage Door", // Optional - HomeSeer device name is the default // "stateRef":201, // Required - HomeSeer device reference for your garage door opener current state (can be the same as ref) // "stateOpenValues":[0], // Required - List of the HomeSeer device values for a HomeKit state=OPEN // "stateClosedValues":[1], // Required - List of the HomeSeer device values for a HomeKit state=CLOSED // "stateOpeningValues":[2], // Optional - List of the HomeSeer device values for a HomeKit state=OPENING // "stateClosingValues":[3], // Optional - List of the HomeSeer device values for a HomeKit state=CLOSING // "stateStoppedValues":[4], // Optional - List of the HomeSeer device values for a HomeKit state=STOPPED // "controlRef":201, // Required - HomeSeer device reference for your garage door opener control (can be the same as ref and stateRef) // "controlOpenValue":0, // Required - HomeSeer device control value for OPEN // "controlCloseValue":1, // Required - HomeSeer device control value for CLOSE // "obstructionRef":201, // Optional - HomeSeer device reference for your garage door opener obstruction state (can be the same as ref) // "obstructionValues":[5], // Optional - List of the HomeSeer device values for a HomeKit obstruction state=OBSTRUCTION // "lockRef":202, // Optional - HomeSeer device reference for your garage door lock (can be the same as ref) // "lockUnsecuredValues":[0], // Optional - List of the HomeSeer device values for a HomeKit lock state=UNSECURED // "lockSecuredValues":[1], // Optional - List of the HomeSeer device values for a HomeKit lock state=SECURED // "lockJammedValues":[2], // Optional - List of the HomeSeer device values for a HomeKit lock state=JAMMED // "unlockValue":0, // Optional - HomeSeer device control value to unlock the garage door opener // "lockValue":1 // Optional - HomeSeer device control value to lock the garage door opener // }, // { // "ref":210, // Required - HomeSeer Device Reference of a Lock // "type":"Lock", // Required for a Lock // "name":"Main Door Lock", // Optional - HomeSeer device name is the default // "lockUnsecuredValues":[0], // Required - List of the HomeSeer device values for a HomeKit lock state=UNSECURED // "lockSecuredValues":[1], // Required - List of the HomeSeer device values for a HomeKit lock state=SECURED // "lockJammedValues":[2], // Optional - List of the HomeSeer device values for a HomeKit lock state=JAMMED // "unlockValue":0, // Required - HomeSeer device control value to unlock // "lockValue":1 // Required - HomeSeer device control value to lock // }, // { // "ref":115, // Required - HomeSeer Device Reference for a device holding battery level (0-100) // "type":"Battery", // Required for a Battery // "name":"Roomba battery", // Optional - HomeSeer device name is the default // "batteryThreshold":15 // Optional - If the level is below this value, the HomeKit LowBattery characteristic is set to 1. Default is 10 // } // ] // } // ], // // // SUPORTED TYPES: // - Lightbulb (can_dim, onValue, offValue options) // - Fan (onValue, offValue options) // - Switch (onValue, offValue options) // - Outlet (onValue, offValue options) // - Thermostat (temperatureUnit, setPoint, state, control options) // - TemperatureSensor (temperatureUnit=C|F) // - HumiditySensor (HomeSeer device value in % - batteryRef, batteryThreshold options) // - LightSensor (HomeSeer device value in Lux - batteryRef, batteryThreshold options) // - ContactSensor (onValues, batteryRef, batteryThreshold options) // - MotionSensor (onValues, batteryRef, batteryThreshold options) // - LeakSensor (onValues, batteryRef, batteryThreshold options) // - OccupancySensor (onValues, batteryRef, batteryThreshold options) // - SmokeSensor (onValues, batteryRef, batteryThreshold options) // - CarbonMonoxideSensor (onValues, batteryRef, batteryThreshold options) // - CarbonDioxideSensor (onValues, batteryRef, batteryThreshold options) // - Battery (batteryThreshold option) // - GarageDoorOpener (state, control, obstruction, lock options) // - Lock (unsecured, secured, jammed options) // - Door var Service = require("hap-nodejs").Service; var Characteristic = require("hap-nodejs").Characteristic; var request = require("request"); function httpRequest(url, method, callback) { request({ url: url, method: method }, function (error, response, body) { callback(error, response, body) }) } function HomeSeerPlatform(log, config){ this.log = log; this.config = config; } HomeSeerPlatform.prototype = { accessories: function(callback) { var that = this; var foundAccessories = []; if( this.config.events ) { this.log("Creating HomeSeer events."); for( var i=0; i