From c2920dbb3a80d7f46bc968864987cf12587d546b Mon Sep 17 00:00:00 2001 From: lonkaars Date: Thu, 5 Aug 2021 17:42:06 +0200 Subject: less jankyness --- lamp.ts | 7 ++++++- plugin.ts | 30 ++++++++++++++++++++---------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/lamp.ts b/lamp.ts index 2584192..fc4e7af 100644 --- a/lamp.ts +++ b/lamp.ts @@ -7,6 +7,7 @@ export type LampColor = [number, number, number, number]; export default class Lamp { #color: LampColor; private subpr: ChildProcess; + private last: string; constructor(public addr: string, public log: Logger) { this.subpr = spawn(join(__dirname, '/venv/bin/python3'), [join(__dirname, './main.py'), addr]); @@ -18,7 +19,11 @@ export default class Lamp { set color(newColor: LampColor) { this.#color = newColor.map(c => Math.floor(c)) as LampColor; - this.subpr.stdin.write(this.colorToString() + '\n'); + var message = this.colorToString(); + if (this.last == message) return; // prevent duplicate messages + this.log.info(message); + this.subpr.stdin.write(message + '\n'); + this.last = message; } get color() { diff --git a/plugin.ts b/plugin.ts index 318d56c..65abe0d 100644 --- a/plugin.ts +++ b/plugin.ts @@ -34,12 +34,12 @@ export default class BekenBridge implements AccessoryPlugin { this.whiteState = { on: false, - brt: 0, + brt: 100, }; this.rgbState = { on: false, - brt: 0, + brt: 100, sat: 0, hue: 0, }; @@ -56,48 +56,58 @@ export default class BekenBridge implements AccessoryPlugin { } registerWhiteBulbServices() { + var setOn = (on: boolean) => { + this.whiteState.on = on; + if (this.rgbState.on) { + this.RGBBulbService.getCharacteristic(this.api.hap.Characteristic.On).setValue(false); + } + }; this.whiteBulbService.getCharacteristic(this.api.hap.Characteristic.On) .onGet(() => this.whiteState.on) .onSet((on: boolean) => { - this.whiteState.on = on; - if (this.rgbState.on) { - this.RGBBulbService.getCharacteristic(this.api.hap.Characteristic.On).setValue(false); - } + setOn(on); this.updateLamp(); }); this.whiteBulbService.getCharacteristic(this.api.hap.Characteristic.Brightness) .onGet(() => this.whiteState.brt) .onSet((brt: number) => { + setOn(true); this.whiteState.brt = brt; this.updateLamp(); }); } registerRGBBulbServices() { + var setOn = (on: boolean) => { + this.rgbState.on = on; + if (this.whiteState.on) { + this.whiteBulbService.getCharacteristic(this.api.hap.Characteristic.On).setValue(false); + } + }; this.RGBBulbService.getCharacteristic(this.api.hap.Characteristic.On) .onGet(() => this.rgbState.on) .onSet((on: boolean) => { - this.rgbState.on = on; - if (this.whiteState.on) { - this.whiteBulbService.getCharacteristic(this.api.hap.Characteristic.On).setValue(false); - } + setOn(on); this.updateLamp(); }); this.RGBBulbService.getCharacteristic(this.api.hap.Characteristic.Brightness) .onGet(() => this.rgbState.brt) .onSet((brt: number) => { + setOn(true); this.rgbState.brt = brt; this.updateLamp(); }); this.RGBBulbService.getCharacteristic(this.api.hap.Characteristic.Hue) .onGet(() => this.rgbState.hue) .onSet((hue: number) => { + setOn(true); this.rgbState.hue = hue; this.updateLamp(); }); this.RGBBulbService.getCharacteristic(this.api.hap.Characteristic.Saturation) .onGet(() => this.rgbState.sat) .onSet((sat: number) => { + setOn(true); this.rgbState.sat = sat; this.updateLamp(); }); -- cgit v1.2.3