From 0545d6352d344c30221d1614af8583e6f7768c79 Mon Sep 17 00:00:00 2001 From: awaescher Date: Mon, 8 Jan 2024 16:37:22 +0100 Subject: [PATCH] Add support for eltako_tf_lux #3 --- src/EltakoLightSensorAccessory.ts | 38 +++++++++++++++++++++++++++++++ src/platform.ts | 11 ++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/EltakoLightSensorAccessory.ts diff --git a/src/EltakoLightSensorAccessory.ts b/src/EltakoLightSensorAccessory.ts new file mode 100644 index 0000000..57910a3 --- /dev/null +++ b/src/EltakoLightSensorAccessory.ts @@ -0,0 +1,38 @@ +import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge'; +import { EltakoMiniSafe2Platform } from './platform'; +import { IUpdatableAccessory } from './IUpdatableAccessory'; + +export class EltakoLightSensorAccessory implements IUpdatableAccessory { + private service: Service; + + constructor( + private readonly platform: EltakoMiniSafe2Platform, + public readonly accessory: PlatformAccessory, + ) { + + this.accessory.getService(this.platform.Service.AccessoryInformation)! + .setCharacteristic(this.platform.Characteristic.Manufacturer, accessory.context.device.info.vendor) + .setCharacteristic(this.platform.Characteristic.Model, accessory.context.device.info.data) + .setCharacteristic(this.platform.Characteristic.SerialNumber, accessory.context.device.info.address); + + // https://developers.homebridge.io/#/service/LightSensor + const serviceType = this.platform.Service.LightSensor; + this.service = this.accessory.getService(serviceType) || this.accessory.addService(serviceType); + + this.service.setCharacteristic(this.platform.Characteristic.Name, accessory.context.device.name); + + this.service.getCharacteristic(this.platform.Characteristic.CurrentAmbientLightLevel) + .onGet(this.getCurrentAmbientLightLevel.bind(this)); + } + + getCurrentAmbientLightLevel(): CharacteristicValue { + const state = this.platform.deviceStateCache.find(s => s.sid === this.accessory.context.device.info.sid); + return state?.state?.illumination ?? 0; + } + + update() { + this.service + .getCharacteristic(this.platform.Characteristic.CurrentAmbientLightLevel) + .updateValue(this.getCurrentAmbientLightLevel()); + } +} diff --git a/src/platform.ts b/src/platform.ts index d267fa6..2c7ea77 100644 --- a/src/platform.ts +++ b/src/platform.ts @@ -1,9 +1,10 @@ import { API, DynamicPlatformPlugin, Logger, PlatformAccessory, PlatformConfig, Service, Characteristic } from 'homebridge'; import { PLATFORM_NAME, PLUGIN_NAME } from './settings'; -import { EltakoSwitchAccessory } from './EltakoSwitchAccessory'; import { EltakoBlindsAccessory } from './EltakoBlindsAccessory'; import { EltakoDimmerAccessory } from './EltakoDimmerAccessory'; +import { EltakoLightSensorAccessory } from './EltakoLightSensorAccessory'; +import { EltakoSwitchAccessory } from './EltakoSwitchAccessory'; import { EltakoTemperatureAndHumiditySensorAccessory } from './EltakoTemperatureAndHumiditySensorAccessory'; import { MiniSafe2Api } from './MiniSafe2Api'; import { Device } from './models'; @@ -184,6 +185,10 @@ export class EltakoMiniSafe2Platform implements DynamicPlatformPlugin { instance = new EltakoDimmerAccessory(this, existingAccessory); break; } + case 'eltako_tf_lux': { + instance = new EltakoLightSensorAccessory(this, existingAccessory); + break; + } } if (instance) { @@ -229,6 +234,10 @@ export class EltakoMiniSafe2Platform implements DynamicPlatformPlugin { instance = new EltakoDimmerAccessory(this, accessory); break; } + case 'eltako_tf_lux': { + instance = new EltakoLightSensorAccessory(this, accessory); + break; + } } if (instance) {