homebridge-smartsystem
Version:
SmartServer (Proxy TCP sockets to the cloud, Smappee MQTT, Duotecno IP Nodes, Homekit interface)
84 lines • 3.23 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Dimmer = void 0;
const accessory_1 = require("./accessory");
const logger_1 = require("../duotecno/logger");
// Johan Coppieters Jan 2019
//
// Dimmer
// - a LightBulb to homekit, so a "light"
//
class Dimmer extends accessory_1.Accessory {
constructor(homebridge, unit) {
super(homebridge, unit);
this.currValue = 0;
this.preventSetPower = false;
this.waitingSetPower = false;
}
getAccessoryServices() {
const lightbulbService = this.makeService(this.homebridge.Service.Lightbulb);
lightbulbService
.getCharacteristic(this.homebridge.Characteristic.On)
.on('get', this.getState.bind(this))
.on('set', this.setPower.bind(this));
lightbulbService
.getCharacteristic(this.homebridge.Characteristic.Brightness)
.on('get', this.getBrightness.bind(this))
.on('set', this.setBrightness.bind(this));
return [lightbulbService];
}
getBrightness(next) {
if (this.unit) {
this.unit.reqState(unit => {
try {
if (!unit) {
return next(new Error("Unit state not available"));
}
next(null, unit.value);
(0, logger_1.log)("accessory", "getBrightness was called for " + this.unit.node.getName() + " - " + this.unit.getName() + " -> " + this.unit.value);
}
catch (err) {
next(err);
}
}).catch(err => next(err));
}
else {
next(new Error("accessory - getBrightness needs to be overridden if no unit is provided."));
}
}
setPower(powerOn, next) {
this.waitingSetPower = true;
(0, logger_1.log)("accessory", "setPower: *** waiting *** " + powerOn);
setTimeout(() => {
if (!this.preventSetPower) {
(0, logger_1.log)("accessory", "setPower: " + powerOn);
this.unit.setState(powerOn)
.then(() => next())
.catch(err => next(err));
}
else {
this.preventSetPower = false;
next();
}
this.waitingSetPower = false;
}, 900);
}
setBrightness(value, next) {
this.currValue = value;
// crush set on/off requests, bug in homekit / homebridge
if (this.waitingSetPower) {
this.preventSetPower = true;
(0, logger_1.log)("accessory", "setBrightness -> setPower: *** cancelled ***");
}
(0, logger_1.log)("accessory", "setBrightness " + value);
this.unit.setState(value)
.then(() => next())
.catch(err => next(err));
}
updateState() {
this.me.getCharacteristic(this.homebridge.Characteristic.Brightness).updateValue(this.unit.value);
(0, logger_1.log)("accessory", "Received status change -> update accessory -> " + this.unit.getName() + " -> Brightness = " + this.unit.value);
}
}
exports.Dimmer = Dimmer;
//# sourceMappingURL=dimmer.js.map