var Service = require('HAP-NodeJS').Service; var Characteristic = require('HAP-NodeJS').Characteristic; var request = require("request"); module.exports = { accessory: LockitronAccessory } function LockitronAccessory(log, config) { this.log = log; this.name = config["name"]; this.accessToken = config["api_token"]; this.lockID = config["lock_id"]; } LockitronAccessory.prototype.getState = function(callback) { this.log("Getting current state..."); request.get({ url: "https://api.lockitron.com/v2/locks/"+this.lockID, qs: { access_token: this.accessToken } }, function(err, response, body) { if (!err && response.statusCode == 200) { var json = JSON.parse(body); var state = json.state; // "lock" or "unlock" this.log("Lock state is %s", state); var locked = state == "lock" callback(null, locked); // success } else { this.log("Error getting state (status code %s): %s", response.statusCode, err); callback(err); } }.bind(this)); } LockitronAccessory.prototype.setState = function(state, callback) { var lockitronState = (state == 1) ? "lock" : "unlock"; this.log("Set state to %s", lockitronState); request.put({ url: "https://api.lockitron.com/v2/locks/"+this.lockID, qs: { access_token: this.accessToken, state: lockitronState } }, function(err, response, body) { if (!err && response.statusCode == 200) { this.log("State change complete."); callback(null); // success } else { this.log("Error '%s' setting lock state. Response: %s", err, body); callback(err || new Error("Error setting lock state.")); } }.bind(this)); }, LockitronAccessory.prototype.getServices = function() { var service = new Service.LockMechanism(this.name); service .getCharacteristic(Characteristic.LockCurrentState) .on('get', this.getState.bind(this)); service .getCharacteristic(Characteristic.LockTargetState) .on('get', this.getState.bind(this)) .on('set', this.setState.bind(this)); return [service]; }