Skip to content

Commit

Permalink
New: Add brightness support for backlight/ambilight
Browse files Browse the repository at this point in the history
  • Loading branch information
vieira committed Nov 10, 2023
1 parent e39a298 commit ec7ca4f
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
56 changes: 56 additions & 0 deletions bulbs/backlight/brightness.js
Original file line number Diff line number Diff line change
@@ -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;
6 changes: 6 additions & 0 deletions platform.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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);
}
Expand Down

0 comments on commit ec7ca4f

Please sign in to comment.