diff --git a/bulbs/backlight/brightness.js b/bulbs/backlight/brightness.js new file mode 100644 index 0000000..bfa02eb --- /dev/null +++ b/bulbs/backlight/brightness.js @@ -0,0 +1,56 @@ +const BacklightBrightness = (Device) => + class extends Device { + constructor(props, platform) { + super(props, platform); + this.backlightBright = props['bg_bright']; + + const { Brightness } = global.Characteristic; + + ( + this.backlightService.getCharacteristic(Brightness) || + this.backlightService.addCharacteristic(Brightness) + ) + .on('set', async (value, callback) => { + try { + await this.setBacklightBrightness(value); + callback(null); + } catch (err) { + callback(err); + } + }) + .updateValue(this.backlightBright); + } + + get backlightBright() { + return this._backlightBright; + } + + set backlightBright(brightness) { + this._backlightBright = Number(brightness); + } + + async setBacklightBrightness(brightness) { + const { brightness: transition = 400 } = this.config.transitions || {}; + await this.setBacklightPower(true); + const req = { + method: 'bg_set_bright', + params: [Math.max(brightness, 1), 'smooth', transition], + }; + return this.sendCmd(req).then(() => { + this._backlightBright = brightness; + }); + } + + updateStateFromProp(prop, value) { + if (prop === 'bg_bright') { + this.backlightBright = value; + this.backlightService + .getCharacteristic(global.Characteristic.Brightness) + .updateValue(this.backlightBright); + return; + } + super.updateStateFromProp(prop, value); + } + }; + +module.exports = BacklightBrightness; diff --git a/platform.js b/platform.js index 306697b..164032b 100644 --- a/platform.js +++ b/platform.js @@ -6,6 +6,7 @@ const MoonlightMode = require('./bulbs/moonlight'); const Color = require('./bulbs/color'); const Temperature = require('./bulbs/temperature'); const Backlight = require('./bulbs/backlight/bulb'); +const BacklightBrightness = require('./bulbs/backlight/brightness'); const { getDeviceId, getName, blacklist, sleep, pipe } = require('./utils'); class YeePlatform { @@ -152,6 +153,11 @@ class YeePlatform { mixins.push(Backlight); } + if (features.includes('bg_set_bright')) { + this.log(`Device ${name} supports backlight brightness`); + mixins.push(BacklightBrightness); + } + const Bulb = class extends pipe(...mixins)(YeeBulb) {}; return new Bulb({ id, model, endpoint, accessory, limits, ...props }, this); }