UNPKG

homebridge-plugin-lares4

Version:

a homebridge plugin to expose Ksenia Lares 4 home automation systems on the Apple ecosystem

51 lines 2.32 kB
import { switchOn, switchOff, dimmerTo } from 'lares4-ts'; export class Lares4PlatformLight { platform; accessory; service; constructor(platform, accessory) { this.platform = platform; this.accessory = accessory; this.accessory.getService(this.platform.Service.AccessoryInformation) .setCharacteristic(this.platform.Characteristic.Manufacturer, 'Ksenia') .setCharacteristic(this.platform.Characteristic.Model, 'Lares4') .setCharacteristic(this.platform.Characteristic.SerialNumber, '12345678'); this.service = this.accessory.getService(this.platform.Service.Lightbulb) || this.accessory.addService(this.platform.Service.Lightbulb); this.service.setCharacteristic(this.platform.Characteristic.Name, accessory.context.details.DES); this.service.getCharacteristic(this.platform.Characteristic.On) .onSet(this.setOn.bind(this)) .onGet(this.getOn.bind(this)); if (platform.lares4?.status.outputs?.[accessory.context.id]?.POS) { this.service.getCharacteristic(this.platform.Characteristic.Brightness) .onSet(this.setLevel.bind(this)); } this.platform.lares4?.outputs_status_emitter.subscribe((output_status) => { if (output_status.id === this.accessory.context.id) { this.setStatus(output_status.status); } }); } setStatus(accessoryStatus) { const state = accessoryStatus.STA ?? 'OFF'; const level = accessoryStatus.POS ?? undefined; this.service.updateCharacteristic(this.platform.Characteristic.On, state === 'ON'); if (level) { this.service.updateCharacteristic(this.platform.Characteristic.Brightness, level); } } setOn(value) { if (value) { switchOn(this.platform.lares4, this.accessory.context.details.ID); } else { switchOff(this.platform.lares4, this.accessory.context.details.ID); } } getOn() { return this.platform.lares4.status.outputs?.[this.accessory.context.id]?.STA === 'ON'; } setLevel(value) { dimmerTo(this.platform.lares4, this.accessory.context.details.ID, Number(value)); } } //# sourceMappingURL=Lares4PlatformLight.js.map