homebridge-nukiio
Version:
Homebridge plugin for Nuki: http://nuki.io
77 lines (66 loc) • 3.75 kB
JavaScript
const Constants = require('../Constants');
var NukiBridgeMaintainanceSwitchAccessory = require('./NukiBridgeMaintainanceSwitchAccessory');
var NukiOpenerAccessory = require('./NukiOpenerAccessory');
var NukiLockAccessory = require('./NukiLockAccessory');
var NukiBridge = require('../nuki/NukiBridge');
var Service, Characteristic;
function NukiBridgePlatform(log, config, homebridge) {
Service = homebridge.hap.Service;
Characteristic = homebridge.hap.Characteristic;
this.log = log;
var bridge_url = config["bridge_url"];
var api_token = config["api_token"];
var api_token_hashed = config["api_token_hashed"] || false;
if(!bridge_url || bridge_url === "" || !api_token || api_token === "") {
this.log("Nuki platform config is incomplete. You need to set 'bridge_url' and 'api_token'.");
return;
}
this.lockactionMaxtries = config["lockaction_maxtries"];
this.lockactionRetryDelay = config["lockaction_retrydelay"];
if (this.lockactionMaxtries == null || this.lockactionMaxtries == "" || this.lockactionMaxtries < 0) {
this.lockactionMaxtries = Constants.DEFAULT_MAX_TRIES_FOR_LOCK_ACTIONS;
}
if (this.lockactionRetryDelay == null || this.lockactionRetryDelay == "" || this.lockactionRetryDelay < 500) {
this.lockactionRetryDelay = Constants.DEFAULT_DELAY_FOR_RETRY;
}
this.nukiBridge = new NukiBridge(homebridge, this.log, bridge_url, api_token, api_token_hashed, config["request_timeout_lockstate"], config["request_timeout_lockaction"], config["request_timeout_other"], config["cache_directory"], config["lock_state_mode"], config["webhook_server_ip_or_name"], config["webhook_port"], this.lockactionMaxtries, this.lockactionRetryDelay);
this.locks = config["locks"] || [];
this.openers = config["openers"] || [];
this.addMaintainanceButtons = config["add_maintainance_buttons"] || false;
};
NukiBridgePlatform.prototype.accessories = function(callback) {
var accessories = [];
var nukiLocks = [];
if(this.locks) {
for (var i = 0; i < this.locks.length; i++) {
var lockConfig = this.locks[i];
if(!lockConfig["id"] || lockConfig["id"] === "" || !lockConfig["name"] || lockConfig["name"] === "") {
this.log("Lock config '%s' is incomplete. You need to set 'id' and 'name'.", i);
continue;
}
var lock = new NukiLockAccessory(Service, Characteristic, this.log, lockConfig, this.nukiBridge, this);
accessories.push(lock);
nukiLocks.push(lock);
}
}
var nukiOpeners = [];
if(this.openers) {
for (var j = 0; j < this.openers.length; j++) {
var openerConfig = this.openers[j];
if(!openerConfig["id"] || openerConfig["id"] === "" || !openerConfig["name"] || openerConfig["name"] === "") {
this.log("Opener config '%s' is incomplete. You need to set 'id' and 'name'.", j);
continue;
}
var opener = new NukiOpenerAccessory(Service, Characteristic, this.log, openerConfig, this.nukiBridge, this);
accessories.push(opener);
nukiOpeners.push(opener);
}
}
if (this.addMaintainanceButtons) {
accessories.push(new NukiBridgeMaintainanceSwitchAccessory(Service, Characteristic, this.log, "maintainance-switch-reboot", "Nuki Bridge Reboot", this.nukiBridge, nukiLocks, nukiOpeners));
accessories.push(new NukiBridgeMaintainanceSwitchAccessory(Service, Characteristic, this.log, "maintainance-switch-fwupdate", "Nuki Bridge Firmware Update", this.nukiBridge, nukiLocks, nukiOpeners));
accessories.push(new NukiBridgeMaintainanceSwitchAccessory(Service, Characteristic, this.log, "maintainance-switch-refreshall", "Nuki Bridge Refresh All", this.nukiBridge, nukiLocks, nukiOpeners));
}
callback(accessories);
};
module.exports = NukiBridgePlatform;