dirigera
Version:
A TypeScript client for IKEA's DIRIGERA smart home hub
118 lines (117 loc) • 3.82 kB
TypeScript
import type { Device } from './device/Device.ts';
interface CommonSceneTriggerProperties {
id?: string;
type: 'time' | 'sunriseSunset' | 'motionSensor' | 'controller' | 'app' | 'duration' | 'event' | 'other';
triggeredAt?: string;
disabled?: boolean;
endTrigger?: SceneEndTrigger;
endTriggerEvent?: SceneEndTrigger;
}
type SceneEndTrigger = {
type: 'duration';
trigger: {
duration: number;
};
} | {
type: 'time';
trigger: {
time: string;
};
} | {
type: 'sunriseSunset';
trigger: {
type: 'sunrise' | 'sunset';
offset: number;
};
nextTriggerAt?: string | null;
};
type TimeSceneTrigger = CommonSceneTriggerProperties & {
type: 'time';
trigger: {
days?: string[];
time: string;
};
nextTriggerAt?: string;
};
type SunriseSunsetSceneTrigger = CommonSceneTriggerProperties & {
type: 'sunriseSunset';
trigger: {
days: string[];
type: 'sunrise' | 'sunset';
offset: number;
};
nextTriggerAt?: string;
};
type ControllerSceneTrigger = CommonSceneTriggerProperties & {
type: 'controller';
trigger: {
days: string[];
controllerType: 'shortcutController';
clickPattern: 'singlePress' | 'doublePress' | 'longPress';
buttonIndex: 0;
deviceId: string;
};
};
type AppSceneTrigger = CommonSceneTriggerProperties & {
type: 'app';
};
type EventSceneTrigger = CommonSceneTriggerProperties & {
type: 'event';
trigger: {
days: string[];
deviceId: string;
undo?: boolean;
filter: {
attribute: Partial<Device['attributes']>;
};
notifications?: {
type: 'opened' | 'closed';
}[];
};
};
type SceneTrigger = TimeSceneTrigger | SunriseSunsetSceneTrigger | ControllerSceneTrigger | AppSceneTrigger | EventSceneTrigger;
export interface Scene {
id: string;
info: {
name: string;
icon: 'scenes_arrive_home' | 'scenes_book' | 'scenes_briefcase' | 'scenes_brightness_up' | 'scenes_broom' | 'scenes_cake' | 'scenes_clapper' | 'scenes_clean_sparkles' | 'scenes_cutlery' | 'scenes_disco_ball' | 'scenes_game_pad' | 'scenes_gift_bag' | 'scenes_gift_box' | 'scenes_headphones' | 'scenes_heart' | 'scenes_home_filled' | 'scenes_hot_drink' | 'scenes_ladle' | 'scenes_leaf' | 'scenes_leave_home' | 'scenes_moon' | 'scenes_music_note' | 'scenes_painting' | 'scenes_popcorn' | 'scenes_pot_with_lid' | 'scenes_speaker_generic' | 'scenes_spray_bottle' | 'scenes_suitcase' | 'scenes_suitcase_2' | 'scenes_sun_horizon' | 'scenes_tree' | 'scenes_trophy' | 'scenes_wake_up' | 'scenes_weights' | 'scenes_yoga';
};
type: 'userScene' | 'customScene' | 'playlistScene' | 'wakeUpScene';
triggers?: SceneTrigger[];
actions: {
id?: string;
type: 'device' | 'deviceSet';
enabled?: boolean;
deviceId?: string;
attributes: Partial<Device['attributes']>;
}[];
commands: {
id: string;
type: 'device';
enabled?: boolean;
commands: ({
type: 'playAudioClipByName';
playAudioClipName: 'ikea://notify/03_device_open' | 'ikea://notify/04_device_close';
volume: number;
} | {
type: 'transitionLight';
duration: number;
startState: {
lightLevel: number;
colorTemperature: number;
isOn: boolean;
};
endState: {
lightLevel: number;
colorTemperature: number;
isOn: boolean;
};
})[];
}[];
createdAt: string;
lastCompleted?: string;
lastTriggered?: string;
undoAllowedDuration: number;
lastUndo?: string;
}
export {};