mirror of
https://github.com/mtan93/homebridge.git
synced 2026-03-08 05:31:55 +00:00
74 lines
2.0 KiB
JavaScript
74 lines
2.0 KiB
JavaScript
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];
|
|
}
|