homebridge-kef-speaker
Version:
Homebridge plugin for KEF wireless speakers (LS50 Wireless II, LSX II, LS60)
107 lines (106 loc) • 2.63 kB
TypeScript
import type { Logger } from 'homebridge';
/**
* KEF Speaker states and interfaces
*/
export interface SpeakerStatus {
power: 'powerOn' | 'standby';
source: string;
volume: number;
muted: boolean;
isPlaying: boolean;
songInfo?: {
title?: string;
artist?: string;
album?: string;
coverUrl?: string;
};
songLength?: number;
songProgress?: number;
}
export interface SpeakerChange {
power?: 'powerOn' | 'standby';
source?: string;
volume?: number;
muted?: boolean;
isPlaying?: boolean;
songInfo?: {
title?: string;
artist?: string;
album?: string;
coverUrl?: string;
};
songLength?: number;
songProgress?: number;
}
/**
* KEF Speaker Connector
* Based on pykefcontrol Python library
*/
export declare class KefConnector {
private readonly host;
private readonly log;
private readonly baseUrl;
constructor(host: string, log: Logger);
/**
* Power control
*/
powerOn(): Promise<void>;
shutdown(): Promise<void>;
/**
* Volume control
*/
getVolume(): Promise<number>;
setVolume(volume: number): Promise<void>;
mute(): Promise<void>;
unmute(previousVolume: number): Promise<void>;
/**
* Source control
*/
getSource(): Promise<string>;
setSource(source: string): Promise<void>;
/**
* Status control
*/
getStatus(): Promise<'powerOn' | 'standby'>;
setStatus(status: 'powerOn' | 'standby'): Promise<void>;
/**
* Playback control
*/
togglePlayPause(): Promise<void>;
nextTrack(): Promise<void>;
previousTrack(): Promise<void>;
private trackControl;
/**
* Media information
*/
getPlayerData(): Promise<any>;
getSongInformation(): Promise<{
title?: string;
artist?: string;
album?: string;
coverUrl?: string;
}>;
isPlaying(): Promise<boolean>;
getSongLength(): Promise<number | undefined>;
getSongProgress(): Promise<number>;
/**
* Speaker information
*/
getSpeakerName(): Promise<string>;
getMacAddress(): Promise<string>;
getSpeakerModel(): Promise<string>;
getFirmwareVersion(): Promise<string>;
private extractSongInfo;
/**
* Get complete speaker status for periodic checking
*/
getCompleteStatus(): Promise<SpeakerStatus>;
/**
* Check if speaker status has changed since last check
*/
checkForChanges(lastStatus: SpeakerStatus): Promise<SpeakerChange>;
/**
* API request helper
*/
private apiRequest;
}