unifi-protect
Version:
A complete implementation of the UniFi Protect API.
1,158 lines (1,157 loc) • 32.4 kB
TypeScript
/**
* A semi-complete description of all the object types used by the UniFi Protect API.
*
* The UniFi Protect API is largely undocumented - these interfaces and types have been gleaned through a lot of experimentation and observation. Protect is always
* evolving and U will attempt to keep up with the changes over time.
*
* We use types instead of interfaces because we have a need to provide two versions of each interface: one that represents the interface and one that is recursively
* partial, for patching the configuration objects and receiving event updates related to them.
*
* - We append **Config** to the primary version of a device configuration object.
* - We append **Payload** to the version of a device configuration object that can have partial components of the object in it, used for patching or updates.
*
* @module ProtectTypes
*/
/** @ignore */
export type DeepPartial<T> = {
[P in keyof T]?: T[P] extends Array<infer I> ? Array<DeepPartial<I>> : DeepPartial<T[P]>;
};
/** @ignore */
export type Nullable<T> = T | null;
/**
* An semi-complete description of the UniFi Protect NVR bootstrap JSON.
*
*/
export interface ProtectNvrBootstrapInterface {
accessKey: string;
authUserId: string;
bridges: unknown[];
cameras: ProtectCameraConfig[];
chimes: ProtectChimeConfig[];
cloudPortalUrl: string;
groups: unknown[];
lastUpdateId: string;
lights: ProtectLightConfig[];
liveviews: ProtectNvrLiveviewConfig[];
nvr: ProtectNvrConfig;
ringtones: ProtectRingtoneConfigInterface[];
sensors: ProtectSensorConfig[];
users: ProtectNvrUserConfig[];
viewers: ProtectViewerConfig[];
[key: string]: ProtectCameraConfig[] | ProtectChimeConfig[] | ProtectLightConfig[] | ProtectNvrConfig | ProtectNvrLiveviewConfig[] | ProtectNvrUserConfig[] | ProtectSensorConfig[] | ProtectViewerConfig[] | string | unknown[];
}
/**
* A semi-complete description of the UniFi Protect NVR configuration JSON.
*/
export interface ProtectNvrConfigInterface {
analyticsData: string;
anonymouseDeviceId: string;
availableUpdate: string;
avgMotions: number[];
cameraCapacity: {
qualities: {
count: number;
fraction: number;
type: string;
}[];
state: string;
};
cameraUtilization: number;
canAutoUpdate: boolean;
consoleEnv: string;
corruptionState: string;
countryCode: string;
deviceFirmwareSettings: {
configuredBy: string;
isAutoUpdateEnabled: boolean;
schedule: {
hour: number;
};
};
disableAudio: boolean;
disableAutoLink: boolean;
doorbellSettings: {
allMessages: {
text: string;
type: string;
}[];
customImages: string[];
customMessages: string[];
defaultMessageResetTimeoutMs: number;
defaultMessageText: string;
};
enableAutomaticBackups: boolean;
enableBridgeAutoAdoption: boolean;
enableCrashReporting: boolean;
enableStatsReporting: boolean;
errorCode: Nullable<string>;
featureFlags: {
beta: boolean;
detectionLabels: boolean;
dev: boolean;
hasTwoWayAudioMediaStreams: boolean;
homekitPaired: boolean;
notificationsV2: boolean;
ulpRoleManagement: boolean;
};
firmwareVersion: string;
hardwareId: string;
hardwarePlatform: string;
hardwareRevision: string;
hasGateway: boolean;
host: string;
hostShortname: string;
hostType: string;
hosts: string[];
id: string;
isAway: boolean;
isHardware: boolean;
isInsightsEnabled: boolean;
isNetworkInstalled: boolean;
isPrimary: boolean;
isProtectUpdatable: boolean;
isRecordingDisabled: boolean;
isRecordingMotionOnly: boolean;
isRecycling: boolean;
isSetup: boolean;
isSshEnabled: boolean;
isStacked: boolean;
isStation: boolean;
isStatsGatheringEnabled: boolean;
isUCoreSetup: boolean;
isUCoreStacked: boolean;
isUcoreUpdatable: boolean;
isUpdating: boolean;
isWirelessUplinkEnabled: boolean;
lastSeen: number;
lastUpdateAt: Nullable<number>;
locationSettings: {
isAway: boolean;
isGeofencingEnabled: boolean;
latitude: number;
longitude: number;
radius: number;
};
mac: string;
marketName: string;
maxCameraCapacity: Record<string, number>;
modelKey: string;
name: string;
network: string;
ports: {
aiFeatureConsole: number;
cameraEvents: number;
cameraHttps: number;
cameraTcp: number;
devicesWss: number;
discoveryClient: number;
emsCLI: number;
emsJsonCLI: number;
emsLiveFLV: number;
http: number;
https: number;
liveWs: number;
liveWss: number;
piongw: number;
playback: number;
rtmp: number;
rtsp: number;
rtsps: number;
stacking: number;
tcpBridge: number;
tcpStreams: number;
ucore: number;
ump: number;
};
publicIp: string;
recordingRetentionDurationMs: string;
releaseChannel: string;
skipFirmwareUpdate: boolean;
smartDetectAgreement: {
lastUpdateAt: Nullable<number>;
status: string;
};
smartDetection: {
enable: boolean;
faceRecognition: boolean;
licensePlateRecognition: boolean;
};
ssoChannel: Nullable<string>;
storageStats: {
capacity: number;
recordingSpace: {
available: number;
total: number;
used: number;
};
remainingCapacity: number;
storageDistribution: {
recordingTypeDistributions: {
percentage: number;
recordingType: string;
size: number;
}[];
resolutionDistributions: {
percentage: number;
recordingType: string;
size: number;
}[];
};
utilization: number;
};
streamSharingAvailable: boolean;
systemInfo: ProtectNvrSystemInfoInterface;
temperatureUnit: string;
timeFormat: string;
timezone: string;
type: string;
ucoreVersion: string;
uiVersion: string;
upSince: number;
uptime: number;
version: string;
wanIp: string;
wifiSettings: {
password: Nullable<string>;
ssid: Nullable<string>;
useThirdPartyWifi: boolean;
};
}
/**
* A semi-complete description of the UniFi Protect NVR system information configuration JSON.
*/
export interface ProtectNvrSystemInfoInterface {
cpu: {
averageLoad: number;
temperature: number;
};
memory: {
available: number;
free: number;
total: number;
};
storage: {
available: number;
devices: {
healthy: boolean;
model: string;
size: number;
}[];
isRecycling: boolean;
size: number;
type: string;
used: number;
};
tmpfs: {
available: number;
path: string;
total: number;
used: number;
};
}
/**
* A semi-complete description of the UniFi Protect camera JSON.
*/
export interface ProtectCameraConfigInterface {
apMac: string;
apRssi: string;
audioBitrate: number;
canManage: boolean;
channels: ProtectCameraChannelConfigInterface[];
chimeDuration: number;
connectedSince: number;
connectionHost: string;
currentResolution: string;
displayName: string;
elementInfo: null;
enableNfc: boolean;
featureFlags: {
audio: string[];
audioCodecs: string[];
audioStyle: string[];
canAdjustIrLedLevel: boolean;
canMagicZoom: boolean;
canOpticalZoom: boolean;
canTouchFocus: boolean;
hasAccelerometer: boolean;
hasAec: boolean;
hasAutoICROnly: boolean;
hasBattery: boolean;
hasBluetooth: boolean;
hasChime: boolean;
hasColorLcdScreen: boolean;
hasExternalIr: boolean;
hasFingerprintSensor: boolean;
hasFlash: boolean;
hasHdr: boolean;
hasIcrSensitivity: boolean;
hasInfrared: boolean;
hasLcdScreen: boolean;
hasLdc: boolean;
hasLedIr: boolean;
hasLedStatus: boolean;
hasLineCrossing: boolean;
hasLineCrossingCounting: boolean;
hasLineIn: boolean;
hasLiveviewTracking: boolean;
hasLuxCheck: boolean;
hasMic: boolean;
hasMotionZones: boolean;
hasNewMotionAlgorithm: boolean;
hasPackageCamera: boolean;
hasPrivacyMask: boolean;
hasRtc: boolean;
hasSdCard: boolean;
hasSmartDetect: boolean;
hasSpeaker: boolean;
hasSquareEventThumbnail: boolean;
hasVerticalFlip: boolean;
hasWifi: boolean;
isDoorbell: boolean;
isPtz: boolean;
maxScaleDownLevel: number;
motionAlgorithms: string[];
privacyMaskCapability: {
maxMasks: number;
rectangleOnly: boolean;
};
smartDetectAudioTypes: string[];
smartDetectTypes: string[];
supportDoorAccessConfig: boolean;
supportLpDetectionWithoutVehicle: boolean;
supportNfc: boolean;
videoCodecs: string[];
videoModeMaxFps: number[];
videoModes: string[];
};
fingerprintSettings: {
enable: boolean;
enablePrintLatency: boolean;
mode: string;
reportCaptureComplete: boolean;
reportFingerTouch: boolean;
};
fingerprintState: {
fingerprintId: string;
free: number;
progress: string;
status: string;
total: number;
};
firmwareBuild: string;
firmwareVersion: string;
fwUpdateState: string;
guid: string;
hardwareRevision: string;
hasRecordings: boolean;
hasSpeaker: boolean;
hasWifi: boolean;
hdrMode: boolean;
homekitSettings: {
microphoneMuted: boolean;
speakerMuted: boolean;
streamInProgress: boolean;
talkbackSettingsActive: boolean;
};
host: string;
hubMac: string;
id: string;
is2K: boolean;
is4K: boolean;
isAdopted: boolean;
isAdoptedByOther: boolean;
isAdopting: boolean;
isAttemptingToConnect: boolean;
isConnected: boolean;
isDark: boolean;
isDeleting: boolean;
isDownloadingFW: boolean;
isExtenderInstalledEver: boolean;
isHidden: boolean;
isLiveHeatmapEnabled: boolean;
isManaged: boolean;
isMicEnabled: boolean;
isMissingRecordingDetected: boolean;
isMotionDetected: boolean;
isPairedWithAiPort: boolean;
isPoorNetwork: boolean;
isProbingForWifi: boolean;
isProvisioned: boolean;
isRebooting: boolean;
isRecording: boolean;
isRestoring: boolean;
isSmartDetected: boolean;
isSshEnabled: boolean;
isThirdPartyCamera: boolean;
isUpdating: boolean;
isWaterproofCaseAttached: boolean;
isWirelessUplinkEnabled: boolean;
ispSettings: {
aeMode: string;
brightness: number;
contrast: number;
dZoomCenterX: number;
dZoomCenterY: number;
dZoomScale: number;
dZoomStreamId: number;
denoise: number;
focusMode: string;
focusPosition: number;
hue: number;
hotplug: {
audio: Nullable<string>;
extender: {
flashRange: number;
hasFlash: boolean;
hasIR: boolean;
hasRadar: boolean;
isAttached: boolean;
radarRangeMax: number;
radarRangeMin: number;
};
standaloneAdoption: boolean;
video: Nullable<string>;
};
icrCustomValue: number;
icrSensitivity: number;
irLedLevel: number;
irLedMode: string;
is3dnrEnabled: boolean;
isAggressiveAntiFlickerEnabled: boolean;
isAutoRotateEnabled: boolean;
isExternalIrEnabled: boolean;
isFlippedHorizontal: boolean;
isFlippedVertical: boolean;
isLdcEnabled: boolean;
isPauseMotionEnabled: boolean;
saturation: number;
sharpness: number;
touchFocusX: number;
touchFocusY: number;
wdr: number;
zoomPosition: number;
};
lastMotion: number;
lastRing: Nullable<number>;
lastSeen: number;
latestFirmwareVersion: string;
lcdMessage: ProtectCameraLcdMessageConfigInterface;
ledSettings: {
blinkRate: number;
isEnabled: boolean;
};
lenses: {
id: number;
video: {
recordingEnd: Nullable<number>;
recordingEndLQ: Nullable<number>;
recordingStart: Nullable<number>;
recordingStartLQ: Nullable<number>;
timelapseEnd: Nullable<number>;
timelapseEndLQ: Nullable<number>;
timelapseStart: Nullable<number>;
timelapseStartLQ: Nullable<number>;
};
}[];
mac: string;
marketName: string;
micVolume: number;
modelKey: string;
name: string;
nfcSettings: {
enableNfc: boolean;
supportThirdPartyCard: boolean;
};
nfcState: {
cardId: string;
isUACard: boolean;
lastSeen: number;
mode: string;
};
nvrMac: string;
osdSettings: {
isDateEnabled: boolean;
isDebugEnabled: boolean;
isLogoEnabled: boolean;
isNameEnabled: boolean;
};
phyRate: number;
pirSettings: {
pirMotionClipLength: number;
pirSensitivity: number;
timelapseFrameInterval: number;
timelapseTransferInterval: number;
};
platform: string;
recordingSchedule: null;
recordingSettings: {
enablePirTimelapse: boolean;
endMotionEventDelay: number;
geofencing: string;
minMotionEventTrigger: number;
mode: string;
postPaddingSecs: number;
prePaddingSecs: number;
retentionDurationMs: Nullable<number>;
suppressIlluminationSurge: boolean;
useNewMotionAlgorithm: boolean;
};
smartDetectLines: [];
smartDetectSettings: {
audioTypes: string[];
autoTrackingObjectTypes: string[];
detectionRange: [max: number, min: number];
objectTypes: string[];
};
smartDetectZones: {
color: string;
name: string;
objectTypes: string[];
points: [number, number][];
sensitivity: number;
}[];
speakerSettings: {
areSystemSoundsEnabled: boolean;
isEnabled: boolean;
volume: number;
};
state: string;
stats: {
battery: {
isCharging: boolean;
percentage: Nullable<number>;
sleepState: string;
};
rxBytes: number;
storage: {
rate: number;
used: number;
};
txBytes: number;
video: {
recordingEnd: number;
recordingEndLQ: number;
recordingStart: number;
recordingStartLQ: number;
timelapseEnd: number;
timelapseEndLQ: number;
timelapseStart: number;
timelapseStartLQ: number;
};
wifi: {
channel: Nullable<number>;
frequency: Nullable<number>;
linkSpeedMbps: Nullable<number>;
signalQuality: number;
signalStrength: number;
};
wifiQuality: number;
wifiStrength: number;
};
streamSharing: {
enabled: boolean;
token: Nullable<string>;
shareLink: Nullable<string>;
expires: Nullable<number>;
sharedByUserId: Nullable<string>;
sharedByUser: Nullable<string>;
maxStreams: Nullable<number>;
};
supportedScalingResolutions: string[];
talkbackSettings: {
bindAddr: string;
bindPort: number;
bitsPerSample: number;
channels: number;
filterAddr: string;
filterPort: number;
typeFmt: string;
typeIn: string;
quality: number;
samplingRate: number;
};
thirdPartyCameraInfo: {
port: number;
rtspUrl: string;
rtspUrlLQ: string;
snapshotUrl: string;
};
tiltLimitsOfPrivacyZones: {
limit: number;
side: string;
};
type: string;
upSince: number;
uptime: number;
useGlobal: boolean;
videoCodec: string;
videoCodecState: number;
videoCodecSwitchingSince: number;
videoMode: string;
videoReconfigurationInProgress: boolean;
voltage: number;
wifiConnectionState: {
channel: number;
frequency: number;
phyRate: number;
signalQuality: number;
signalStrength: number;
};
wiredConnectionState: {
phyRate: number;
};
}
/**
* A semi-complete description of the UniFi Protect camera channel JSON.
*/
export interface ProtectCameraChannelConfigInterface {
bitrate: number;
enabled: boolean;
fps: number;
fpsValues: number[];
height: number;
id: number;
idrInterval: number;
isRtspEnabled: boolean;
maxBitrate: number;
minBitrate: number;
minClientAdaptiveBitRate: number;
minMotionAdaptiveBitRate: number;
name: string;
rtspAlias: string;
videoId: string;
width: number;
}
/**
* A semi-complete description of the UniFi Protect LCD message JSON.
*/
export interface ProtectCameraLcdMessageConfigInterface {
duration: number;
resetAt: Nullable<number>;
text: string;
type: string;
}
/**
* A semi-complete description of the UniFi Protect chime JSON.
*/
export interface ProtectChimeConfigInterface {
apMac: string;
apMgmtIp: string;
apRssi: string;
cameraIds: string[];
canAdopt: boolean;
connectedSince: number;
connectionHost: string;
elementInfo: string;
featureFlags: {
hasHttpsClientOTA: boolean;
hasWifi: boolean;
supportCustomRingtone: boolean;
};
firmwareBuild: string;
firmwareVersion: string;
fwUpdateState: string;
hardwareRevision: string;
host: string;
id: string;
isAdopted: boolean;
isAdoptedByOther: boolean;
isAdopting: boolean;
isAttemptingToConnect: boolean;
isConnected: boolean;
isDownloadingFW: boolean;
isProbingForWifi: boolean;
isProvisioned: boolean;
isRebooting: boolean;
isSshEnabled: boolean;
isUpdating: boolean;
isWirelessUplinkEnabled: boolean;
lastRing: number;
lastSeen: number;
latestFirmwareVersion: string;
mac: string;
marketName: string;
modelKey: string;
name: string;
nvrMac: string;
platform: string;
repeatTimes: number;
ringSettings: {
cameraId: string;
repeatTimes: number;
ringtoneId: string;
volume: number;
}[];
speakerTrackList: {
md5: string;
name: string;
size: number;
state: string;
track_no: number;
volume: number;
}[];
state: string;
sysId: string;
type: string;
upSince: number;
uptime: number;
userConfiguredAp: boolean;
volume: number;
wifiConnectionState: {
apName: Nullable<string>;
bssid: Nullable<string>;
channel: Nullable<string>;
connectivity: string;
experience: null;
frequency: null;
phyRate: number;
signalQuality: number;
signalStrength: number;
ssid: Nullable<string>;
txRate: null;
};
wiredConnectionState: {
phyRate: number;
};
}
/**
* A semi-complete description of the UniFi Protect light JSON.
*/
export interface ProtectLightConfigInterface {
camera: string;
canAdopt: boolean;
connectedSince: number;
connectionHost: string;
firmwareBuild: string;
firmwareVersion: string;
hardwareRevision: string;
host: string;
id: string;
isAdopted: boolean;
isAdoptedByOther: boolean;
isAdopting: boolean;
isAttemptingToConnect: boolean;
isCameraPaired: boolean;
isConnected: boolean;
isDark: boolean;
isLightOn: boolean;
isLocating: boolean;
isPirMotionDetected: boolean;
isProvisioned: boolean;
isRebooting: boolean;
isSshEnabled: boolean;
isUpdating: boolean;
lastMotion: number;
lastSeen: number;
latestFirmwareVersion: string;
lightDeviceSettings: {
isIndicatorEnabled: boolean;
ledLevel: number;
luxSensitivity: string;
pirDuration: number;
pirSensitivity: number;
};
lightModeSettings: {
enableAt: string;
mode: string;
};
lightOnSettings: {
isLedForceOn: boolean;
};
mac: string;
marketName: string;
modelKey: string;
name: string;
nvrMac: string;
state: string;
type: string;
upSince: number;
uptime: number;
wiredConnectionState: {
phyRate: number;
};
}
/**
* A semi-complete description of the UniFi Protect NVR liveview JSON.
*/
export interface ProtectNvrLiveviewConfigInterface {
id: string;
isDefault: boolean;
isGlobal: boolean;
layout: number;
modelKey: string;
name: string;
owner: string;
slots: {
cameras: string[];
cycleInterval: number;
cycleMode: string;
}[];
}
/**
* A semi-complete description of the UniFi Protect NVR user JSON.
*/
export interface ProtectNvrUserConfigInterface {
alertRules: unknown[];
allPermissions: string[];
cloudAccount: {
firstName: string;
lastName: string;
email: string;
profileImg: string;
user: string;
id: string;
cloudId: string;
name: string;
modelKey: string;
};
email: string;
enableNotifications: boolean;
firstName: string;
groups: string[];
hasAcceptedInvite: boolean;
id: string;
isOwner: boolean;
lastLoginIp: string;
lastLoginTime: number;
lastName: string;
localUsername: string;
location: {
isAway: boolean;
latitude: string;
longitude: string;
};
modelKey: string;
name: string;
permissions: string[];
role: string;
settings: {
flags: string[];
};
syncSso: boolean;
}
/**
* A semi-complete description of the UniFi Protect system events JSON.
*/
export interface ProtectNvrSystemEventInterface {
apps: {
apps: unknown[];
controllers: ProtectNvrSystemEventController[];
};
system: unknown;
type: string;
}
/**
* A semi-complete description of the UniFi Protect system events controller JSON.
*/
export interface ProtectNvrSystemEventControllerInterface {
harddriveRequired: boolean;
info: {
events: number[];
isAdopted: boolean;
isConnectedToCloud: boolean;
isSetup: boolean;
lastMotion: number;
lastMotionCamera: string;
lastMotionCameraAddress: string;
lastMotionCameraModel: string;
managedCameras: number;
offlineCameras: number;
oldestRecording: number;
onlineCameras: number;
recordingSpaceTotal: number;
recordingSpaceUsed: number;
retentionTime: number;
startedAt: number;
throughput: number;
timeFormat: string;
updateAvailable: boolean;
updateVersion: string;
};
installState: string;
isConfigured: boolean;
isInstalled: boolean;
isRunning: boolean;
name: string;
port: number;
required: boolean;
state: string;
status: string;
statusMessage: string;
swaiVersion: number;
type: string;
ui: {
apiPrefix: string;
baseUrl: string;
cdnPublicPaths: string[];
entrypoint: string;
hotkey: string;
icon: string;
publicPath: string;
swaiVersion: number;
};
uiNpmPackageName: string;
uiVersion: string;
unadoptedDevices: unknown[];
updateAvailable: string;
version: string;
}
/**
* A semi-complete description of the UniFi Protect ringtone JSON.
*/
export interface ProtectRingtoneConfigInterface {
id: string;
isDefault: boolean;
modelKey: string;
name: string;
nvrMac: string;
size: number;
}
/**
* A semi-complete description of the UniFi Protect sensor JSON.
*/
export interface ProtectSensorConfigInterface {
alarmSettings: {
isEnabled: boolean;
};
alarmTriggeredAt: Nullable<number>;
batteryStatus: {
isLow: boolean;
percentage: number;
};
bluetoothConnectionState: {
signalQuality: number;
signalStrength: number;
};
bridge: string;
bridgeCandidates: [];
camera: string;
canAdopt: boolean;
connectedSince: number;
connectionHost: string;
displayName: string;
firmwareBuild: string;
firmwareVersion: string;
fwUpdateState: string;
hardwareRevision: string;
host: string;
humiditySettings: {
highThreshold: number;
isEnabled: boolean;
lowThreshold: number;
margin: number;
};
id: string;
isAdopted: boolean;
isAdoptedByOther: boolean;
isAdopting: boolean;
isAttemptingToConnect: boolean;
isConnected: boolean;
isDownloadingFW: boolean;
isMotionDetected: boolean;
isOpened: boolean;
isProvisioned: boolean;
isRebooting: boolean;
isRestoring: boolean;
isSshEnabled: boolean;
isUpdating: boolean;
lastDisconnect: number;
lastSeen: number;
latestFirmwareVersion: string;
leakDetectedAt: number;
ledSettings: {
isEnabled: boolean;
};
lightSettings: {
highThreshold: number;
isEnabled: boolean;
lowThreshold: number;
margin: number;
};
mac: string;
marketName: string;
modelKey: string;
motionDetectedAt: number;
motionSettings: {
isEnabled: boolean;
sensitivity: number;
};
mountType: string;
name: string;
nvrMac: string;
openStatusChangedAt: number;
state: string;
stats: {
humidity: {
status: string;
value: Nullable<number>;
};
light: {
status: string;
value: Nullable<number>;
};
temperature: {
status: string;
value: Nullable<number>;
};
};
tamperingDetectedAt: Nullable<number>;
temperatureSettings: {
highThreshold: number;
isEnabled: boolean;
lowThreshold: number;
margin: number;
};
type: string;
upSince: number;
uptime: number;
wifiConnectionState: {
apName: Nullable<string>;
bssid: Nullable<string>;
channel: Nullable<string>;
connectivity: string;
experience: null;
frequency: null;
phyRate: number;
signalQuality: number;
signalStrength: number;
ssid: Nullable<string>;
txRate: null;
};
wiredConnectionState: {
phyRate: number;
};
}
/**
* A semi-complete description of the UniFi Protect viewer JSON.
*/
export interface ProtectViewerConfigInterface {
canAdopt: boolean;
connectedSince: number;
connectionHost: string;
firmwareBuild: string;
firmwareVersion: string;
hardwareRevision: string;
host: string;
id: string;
isAdopted: boolean;
isAdoptedByOther: boolean;
isAdopting: boolean;
isAttemptingToConnect: boolean;
isConnected: boolean;
isProvisioned: boolean;
isRebooting: boolean;
isSshEnabled: boolean;
isUpdating: boolean;
lastSeen: number;
latestFirmwareVersion: string;
liveview: Nullable<string>;
mac: string;
marketName: string;
modelKey: string;
name: string;
nvrMac: string;
softwareVersion: string;
state: string;
streamLimit: number;
type: string;
upSince: number;
uptime: number;
wiredConnectionState: {
phyRate: number;
};
}
/**
* A semi-complete description of the UniFi Protect smart motion detection event JSON.
*/
export interface ProtectEventAddInterface {
camera: string;
cameraId: string;
detectedAt: number;
end: number;
eventId: string;
id: string;
metadata: ProtectEventMetadata;
modelKey: string;
partition: string;
score: number;
smartDetectEvents: string[];
smartDetectTypes: string[];
start: number;
thumbnailId: string;
type: string;
user: string;
}
/**
* A description of metadata in UniFi Protect smart motion detect events.
*/
export interface ProtectEventMetadataInterface {
deviceId: {
text: string;
};
fingerprint: {
ulpId: string;
};
isLowBattery: boolean;
isWireless: boolean;
licensePlate: {
confidenceLevel: number;
name: string;
};
name: {
text: string;
};
nfc: {
nfcId: string;
ulpId: string;
};
reason: string;
}
/** @see {@link ProtectEventAddInterface} */
export type ProtectEventAdd = ProtectEventAddInterface;
/** @see {@link ProtectEventMetadataInterface} */
export type ProtectEventMetadata = ProtectEventMetadataInterface;
/** @see {@link ProtectNvrBootstrapInterface} */
export type ProtectNvrBootstrap = ProtectNvrBootstrapInterface;
/** @see {@link ProtectNvrConfigInterface} */
export type ProtectNvrConfig = ProtectNvrConfigInterface;
/** @see {@link ProtectNvrConfigInterface} */
export type ProtectNvrConfigPayload = DeepPartial<ProtectNvrConfigInterface>;
/** @see {@link ProtectNvrSystemInfoInterface} */
export type ProtectNvrSystemInfoConfig = ProtectNvrSystemInfoInterface;
/** @see {@link ProtectCameraConfigInterface} */
export type ProtectCameraConfig = ProtectCameraConfigInterface;
/** @see {@link ProtectCameraConfigInterface} */
export type ProtectCameraConfigPayload = DeepPartial<ProtectCameraConfigInterface>;
/** @see {@link ProtectCameraChannelConfigInterface} */
export type ProtectCameraChannelConfig = ProtectCameraChannelConfigInterface;
/** @see {@link ProtectCameraLcdMessageConfigInterface} */
export type ProtectCameraLcdMessageConfig = ProtectCameraLcdMessageConfigInterface;
/** @see {@link ProtectCameraLcdMessageConfigInterface} */
export type ProtectCameraLcdMessagePayload = DeepPartial<ProtectCameraLcdMessageConfigInterface>;
/** @see {@link ProtectChimeConfigInterface} */
export type ProtectChimeConfig = ProtectChimeConfigInterface;
/** @see {@link ProtectChimeConfigInterface} */
export type ProtectChimeConfigPayload = DeepPartial<ProtectChimeConfigInterface>;
/** @see {@link ProtectLightConfigInterface} */
export type ProtectLightConfig = ProtectLightConfigInterface;
/** @see {@link ProtectLightConfigInterface} */
export type ProtectLightConfigPayload = DeepPartial<ProtectLightConfigInterface>;
/** @see {@link ProtectNvrLiveviewConfigInterface} */
export type ProtectNvrLiveviewConfig = ProtectNvrLiveviewConfigInterface;
/** @see {@link ProtectNvrSystemEventInterface} */
export type ProtectNvrSystemEvent = ProtectNvrSystemEventInterface;
/** @see {@link ProtectNvrSystemEventInterface} */
export type ProtectNvrSystemEventController = ProtectNvrSystemEventControllerInterface;
/** @see {@link ProtectNvrUserConfigInterface} */
export type ProtectNvrUserConfig = ProtectNvrUserConfigInterface;
/** @see {@link ProtectRingtoneConfigInterface} */
export type ProtectRingtoneConfig = ProtectRingtoneConfigInterface;
/** @see {@link ProtectSensorConfigInterface} */
export type ProtectSensorConfig = ProtectSensorConfigInterface;
/** @see {@link ProtectSensorConfigInterface} */
export type ProtectSensorConfigPayload = DeepPartial<ProtectSensorConfigInterface>;
/** @see {@link ProtectViewerConfigInterface} */
export type ProtectViewerConfig = ProtectViewerConfigInterface;
/** @see {@link ProtectViewerConfigInterface} */
export type ProtectViewerConfigPayload = DeepPartial<ProtectViewerConfigInterface>;