-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathcolorTemperatureProperty.ts
39 lines (34 loc) · 1.09 KB
/
colorTemperatureProperty.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import { Expos } from '../zigbee2mqtt-adapter';
import { Zigbee2MqttDevice } from '../zigbee2mqtt-device';
import { Zigbee2MqttProperty } from '../zigbee2mqtt-property';
import mqtt from 'mqtt';
function kelvinToMiredd(kelvin: number): number {
return Math.round(1_000_000 / kelvin);
}
function miredToKelvin(mired: number): number {
return Math.round(1_000_000 / mired);
}
export class ColorTemperatureProperty extends Zigbee2MqttProperty<number> {
constructor(
device: Zigbee2MqttDevice,
name: string,
expose: Expos,
client: mqtt.Client,
deviceTopic: string
) {
super(device, name, expose, client, deviceTopic, {
'@type': 'ColorTemperatureProperty',
title: 'Color temperature',
type: 'number',
minimum: miredToKelvin(expose.value_max!),
maximum: miredToKelvin(expose.value_min!),
unit: 'kelvin',
});
}
update(value: number, update: Record<string, unknown>): void {
super.update(miredToKelvin(value), update);
}
protected async sendValue(value: number): Promise<void> {
return super.sendValue(kelvinToMiredd(value));
}
}