diff --git a/src/lib/exposes.ts b/src/lib/exposes.ts index c545330ee296c..198e3e198e928 100644 --- a/src/lib/exposes.ts +++ b/src/lib/exposes.ts @@ -1,6 +1,6 @@ import assert from 'assert'; -import {Access, Range} from './types'; +import {Access, LevelConfigFeatures, Range} from './types'; import {getLabelFromName} from './utils'; export type Feature = Numeric | Binary | Enum | Composite | List | Text; @@ -376,7 +376,7 @@ export class Light extends Base { return this; } - withLevelConfig(disableFeatures: string[] = []) { + withLevelConfig(disableFeatures: LevelConfigFeatures = []) { let levelConfig = new Composite('level_config', 'level_config', access.ALL); if (!disableFeatures.includes('on_off_transition_time')) { levelConfig = levelConfig.withFeature( diff --git a/src/lib/ikea.ts b/src/lib/ikea.ts index 68e48924eca3b..78f15328eb4d1 100644 --- a/src/lib/ikea.ts +++ b/src/lib/ikea.ts @@ -8,7 +8,7 @@ import {access, options, presets} from '../lib/exposes'; import * as m from '../lib/modernExtend'; import * as reporting from '../lib/reporting'; import * as globalStore from '../lib/store'; -import {Configure, Expose, Fz, KeyValue, KeyValueAny, ModernExtend, OnEvent, Range, Tz} from '../lib/types'; +import {Configure, Expose, Fz, KeyValue, KeyValueAny, LevelConfigFeatures, ModernExtend, OnEvent, Range, Tz} from '../lib/types'; import { assertString, configureSetPowerSourceWhenUnknown, @@ -80,7 +80,7 @@ const bulbOnEvent: OnEvent = async (type, data, device, options, state: KeyValue export function ikeaLight(args?: Omit & {colorTemp?: true | {range: Range; viaColor: true}}) { const colorTemp: {range: Range} = args?.colorTemp ? (args.colorTemp === true ? {range: [250, 454]} : args.colorTemp) : undefined; - const levelConfig: {disabledFeatures?: string[]} = args?.levelConfig + const levelConfig: {disabledFeatures?: LevelConfigFeatures} = args?.levelConfig ? args.levelConfig : {disabledFeatures: ['on_off_transition_time', 'on_transition_time', 'off_transition_time', 'on_level']}; const result = m.light({...args, colorTemp, levelConfig}); diff --git a/src/lib/modernExtend.ts b/src/lib/modernExtend.ts index e9ccb62dae4de..792c56468cbe0 100644 --- a/src/lib/modernExtend.ts +++ b/src/lib/modernExtend.ts @@ -20,6 +20,7 @@ import { KeyValue, KeyValueAny, KeyValueString, + LevelConfigFeatures, ModernExtend, OnEvent, Range, @@ -981,7 +982,7 @@ export interface LightArgs { configureReporting?: boolean; endpointNames?: string[]; ota?: ModernExtend['ota']; - levelConfig?: {disabledFeatures?: string[]}; + levelConfig?: {disabledFeatures?: LevelConfigFeatures}; } export function light(args?: LightArgs): ModernExtend { args = {effect: true, powerOnBehavior: true, configureReporting: false, ...args}; diff --git a/src/lib/types.ts b/src/lib/types.ts index 0bdd6a3b96163..cc7233273d3c9 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -443,6 +443,7 @@ export namespace Ota { suppressElementImageParseFailure?: boolean; }; } + export namespace Reporting { export interface Override { min?: number; @@ -450,3 +451,12 @@ export namespace Reporting { change?: number; } } + +export type LevelConfigFeatures = ( + | 'on_off_transition_time' + | 'on_transition_time' + | 'off_transition_time' + | 'execute_if_off' + | 'on_level' + | 'current_level_startup' +)[];