homebridge-tapo-camera
Version:
Homebridge plugin for TP-Link TAPO security cameras
248 lines (247 loc) • 5.35 kB
TypeScript
import { EventEmitter } from "events";
export type VideoSource = {
framerate: number;
resolution: {
width: number;
height: number;
};
};
export interface Bounds {
$: {
height: number;
width: number;
y: number;
x: number;
};
}
export interface VideoSourceConfiguration {
$: {
token: string;
};
name: string;
useCount: number;
sourceToken: string;
bounds: Bounds;
}
export interface AudioSourceConfiguration {
$: {
token: string;
};
name: string;
useCount: number;
sourceToken: string;
}
export interface Resolution {
width: number;
height: number;
}
export interface RateControl {
frameRateLimit: number;
encodingInterval: number;
bitrateLimit: number;
}
export interface H264 {
govLength: number;
H264Profile: string;
}
export interface Address {
type: string;
IPv4Address: string;
}
export interface Multicast {
address: Address;
port: number;
TTL: number;
autoStart: boolean;
}
export interface VideoEncoderConfiguration {
$: {
token: string;
};
name: string;
useCount: number;
encoding: string;
resolution: Resolution;
quality: number;
rateControl: RateControl;
H264: H264;
multicast: Multicast;
sessionTimeout: string;
}
export interface Address2 {
type: string;
IPv4Address: string;
}
export interface Multicast2 {
address: Address2;
port: number;
TTL: number;
autoStart: boolean;
}
export interface AudioEncoderConfiguration {
$: {
token: string;
};
name: string;
useCount: number;
encoding: string;
bitrate: number;
sampleRate: number;
multicast: Multicast2;
sessionTimeout: string;
}
export interface SimpleItem {
$: {
Value: string | boolean;
Name: string;
};
}
export interface Translate {
$: {
y: number;
x: number;
};
}
export interface Scale {
$: {
y: number;
x: number;
};
}
export interface Transformation {
translate: Translate;
scale: Scale;
}
export interface CellLayout {
$: {
Rows: number;
Columns: number;
};
transformation: Transformation;
}
export interface ElementItem {
$: {
Name: string;
};
cellLayout: CellLayout;
}
export interface Parameters {
simpleItem: SimpleItem[];
elementItem: ElementItem;
}
export interface AnalyticsModule {
parameters: Parameters;
}
export interface AnalyticsEngineConfiguration {
analyticsModule: AnalyticsModule[];
}
export interface Rule {
$: {
Name: string;
Type: string;
};
parameters: any;
}
export interface RuleEngineConfiguration {
rule: Rule[];
}
export interface VideoAnalyticsConfiguration {
$: {
token: string;
};
name: string;
useCount: number;
analyticsEngineConfiguration: AnalyticsEngineConfiguration;
ruleEngineConfiguration: RuleEngineConfiguration;
}
export interface PanTilt {
$: {
space: string;
y: number;
x: number;
};
}
export interface DefaultPTZSpeed {
panTilt: PanTilt;
}
export interface XRange {
min: number;
max: number;
}
export interface YRange {
min: number;
max: number;
}
export interface Range {
URI: string;
XRange: XRange;
YRange: YRange;
}
export interface PanTiltLimits {
range: Range;
}
export interface PTZConfiguration {
$: {
token: string;
};
name: string;
useCount: number;
nodeToken: string;
defaultAbsolutePantTiltPositionSpace: string;
defaultRelativePanTiltTranslationSpace: string;
defaultContinuousPanTiltVelocitySpace: string;
defaultPTZSpeed: DefaultPTZSpeed;
defaultPTZTimeout: string;
panTiltLimits: PanTiltLimits;
}
export interface Profile {
$: {
fixed: boolean;
token: string;
};
name: string;
videoSourceConfiguration: VideoSourceConfiguration;
audioSourceConfiguration: AudioSourceConfiguration;
videoEncoderConfiguration: VideoEncoderConfiguration;
audioEncoderConfiguration: AudioEncoderConfiguration;
videoAnalyticsConfiguration: VideoAnalyticsConfiguration;
PTZConfiguration: PTZConfiguration;
}
export type DeviceInformation = {
manufacturer: string;
model: string;
firmwareVersion: string;
serialNumber: string;
hardwareId: string;
};
export type ConnectionCallback = (error?: Error) => void;
export interface NotificationMessage {
topic: {
_: string;
};
message: {
message: {
$: object;
source: object;
data: {
simpleItem: SimpleItem;
};
};
};
}
export interface CamOptions {
hostname: string;
username?: string;
password?: string;
port?: number;
path?: string;
timeout?: number;
preserveAddress?: boolean;
}
export interface Cam extends EventEmitter {
connect(callback: ConnectionCallback): void;
on(event: "event", listener: (message: NotificationMessage) => void): this;
getDeviceInformation(callback: (error: Error, deviceInformation: DeviceInformation) => void): void;
getProfiles(callback: (error: Error, profiles: Profile[]) => void): void;
videoSources: VideoSource[];
}