From da02e2825cb472dad5e649da51ecb5a275e01c9b Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Mon, 9 May 2022 13:05:26 -0700 Subject: [PATCH] sdk: security system --- .../src/types/camera/camera-streaming-srtp.ts | 2 + sdk/gen/types.input.ts | 42 ++++++++++++--- sdk/scrypted_python/scrypted_sdk/types.py | 43 +++++++++++++++ sdk/types/index.d.ts | 40 +++++++++++--- sdk/types/index.js | 27 +++++++++- sdk/types/index.ts | 54 ++++++++++++++++--- .../scrypted_python/scrypted_sdk/types.py | 43 +++++++++++++++ 7 files changed, 229 insertions(+), 22 deletions(-) diff --git a/plugins/homekit/src/types/camera/camera-streaming-srtp.ts b/plugins/homekit/src/types/camera/camera-streaming-srtp.ts index 252c4c0ee..b7bf354ed 100644 --- a/plugins/homekit/src/types/camera/camera-streaming-srtp.ts +++ b/plugins/homekit/src/types/camera/camera-streaming-srtp.ts @@ -28,6 +28,8 @@ export async function startCameraStreamSrtp(media: FFmpegInput, console: Console session.kill(); }; + session.killPromise.finally(cleanup); + if (isRtsp) { rtspClient = new RtspClient(url); rtspClient.requestTimeout = 1000; diff --git a/sdk/gen/types.input.ts b/sdk/gen/types.input.ts index 73e7104c7..fa13c0629 100644 --- a/sdk/gen/types.input.ts +++ b/sdk/gen/types.input.ts @@ -757,6 +757,14 @@ export interface UltravioletSensor { export interface LuminanceSensor { luminance?: number; } +export interface Position { + /** + * The accuracy radius of this position in meters. + */ + accuracyRadius?: number; + latitude?: number; + longitude?: number; +} export interface PositionSensor { position?: Position; } @@ -777,14 +785,33 @@ export enum AirQuality { export interface AirQualitySensor { airQuality?: AirQuality; } -export interface Position { - /** - * The accuracy radius of this position in meters. - */ - accuracyRadius?: number; - latitude?: number; - longitude?: number; + +export enum SecuritySystemMode { + Disarmed = 'Disarmed', + HomeArmed = 'HomeArmed', + AwayArmed = 'AwayArmed', + NightArmed = 'NightArmed', } + +export enum SecuritySystemObstruction { + Sensor = 'Sensor', + Occupied = 'Occupied', + Time = 'Time', + Error = 'Error', +} + +export interface SecuritySystemState { + mode: SecuritySystemMode; + triggered?: boolean; + supportedModes?: SecuritySystemMode[]; + obstruction?: SecuritySystemObstruction; +} + +export interface SecuritySystem { + securitySystem?: SecuritySystemState; + setSecuritySystem(mode: SecuritySystemMode): Promise; +} + export interface ZoneHistory { firstEntry: number; lastEntry: number; @@ -1395,6 +1422,7 @@ export enum ScryptedInterface { UltravioletSensor = "UltravioletSensor", LuminanceSensor = "LuminanceSensor", PositionSensor = "PositionSensor", + SecuritySystem = 'SecuritySystem', PM25Sensor = "PM25Sensor", VOCSensor = "VOCSensor", AirQualitySensor = "AirQualitySensor", diff --git a/sdk/scrypted_python/scrypted_sdk/types.py b/sdk/scrypted_python/scrypted_sdk/types.py index 311bd7901..f610da5f8 100644 --- a/sdk/scrypted_python/scrypted_sdk/types.py +++ b/sdk/scrypted_python/scrypted_sdk/types.py @@ -124,6 +124,7 @@ class ScryptedInterface(Enum): Scriptable = "Scriptable" ScryptedDevice = "ScryptedDevice" ScryptedPlugin = "ScryptedPlugin" + SecuritySystem = "SecuritySystem" Settings = "Settings" SoftwareUpdate = "SoftwareUpdate" StartStop = "StartStop" @@ -147,6 +148,18 @@ class ScryptedMimeTypes(Enum): SchemePrefix = "x-scrypted/x-scrypted-scheme-" Url = "text/x-uri" +class SecuritySystemMode(Enum): + AwayArmed = "AwayArmed" + Disarmed = "Disarmed" + HomeArmed = "HomeArmed" + NightArmed = "NightArmed" + +class SecuritySystemObstruction(Enum): + Error = "Error" + Occupied = "Occupied" + Sensor = "Sensor" + Time = "Time" + class TemperatureUnit(Enum): C = "C" F = "F" @@ -468,6 +481,13 @@ class ScryptedDevice(TypedDict): type: ScryptedDeviceType pass +class SecuritySystemState(TypedDict): + mode: SecuritySystemMode + obstruction: SecuritySystemObstruction + supportedModes: list[SecuritySystemMode] + triggered: bool + pass + class Setting(TypedDict): choices: list[str] combobox: bool @@ -844,6 +864,12 @@ class ScryptedPlugin: pass pass +class SecuritySystem: + securitySystem: SecuritySystemState + async def setSecuritySystem(self, mode: SecuritySystemMode) -> None: + pass + pass + class Settings: async def getSettings(self) -> list[Setting]: pass @@ -1090,6 +1116,7 @@ class ScryptedInterfaceProperty(Enum): ultraviolet = "ultraviolet" luminance = "luminance" position = "position" + securitySystem = "securitySystem" pm25Density = "pm25Density" vocDensity = "vocDensity" airQuality = "airQuality" @@ -1438,6 +1465,13 @@ class DeviceState: def position(self, value: Position): self.setScryptedProperty("position", value) + @property + def securitySystem(self) -> SecuritySystemState: + return self.getScryptedProperty("securitySystem") + @securitySystem.setter + def securitySystem(self, value: SecuritySystemState): + self.setScryptedProperty("securitySystem", value) + @property def pm25Density(self) -> float: return self.getScryptedProperty("pm25Density") @@ -1899,6 +1933,15 @@ ScryptedInterfaceDescriptors = { "position" ] }, + "SecuritySystem": { + "name": "SecuritySystem", + "methods": [ + "setSecuritySystem" + ], + "properties": [ + "securitySystem" + ] + }, "PM25Sensor": { "name": "PM25Sensor", "methods": [], diff --git a/sdk/types/index.d.ts b/sdk/types/index.d.ts index 428c05975..fd03df076 100644 --- a/sdk/types/index.d.ts +++ b/sdk/types/index.d.ts @@ -48,6 +48,7 @@ export interface DeviceState { ultraviolet?: number; luminance?: number; position?: Position; + securitySystem?: SecuritySystemState; pm25Density?: number; vocDensity?: number; airQuality?: AirQuality; @@ -103,6 +104,7 @@ export declare class DeviceBase implements DeviceState { ultraviolet?: number; luminance?: number; position?: Position; + securitySystem?: SecuritySystemState; pm25Density?: number; vocDensity?: number; airQuality?: AirQuality; @@ -158,6 +160,7 @@ export declare enum ScryptedInterfaceProperty { ultraviolet = "ultraviolet", luminance = "luminance", position = "position", + securitySystem = "securitySystem", pm25Density = "pm25Density", vocDensity = "vocDensity", airQuality = "airQuality", @@ -855,6 +858,14 @@ export interface UltravioletSensor { export interface LuminanceSensor { luminance?: number; } +export interface Position { + /** + * The accuracy radius of this position in meters. + */ + accuracyRadius?: number; + latitude?: number; + longitude?: number; +} export interface PositionSensor { position?: Position; } @@ -875,13 +886,27 @@ export declare enum AirQuality { export interface AirQualitySensor { airQuality?: AirQuality; } -export interface Position { - /** - * The accuracy radius of this position in meters. - */ - accuracyRadius?: number; - latitude?: number; - longitude?: number; +export declare enum SecuritySystemMode { + Disarmed = "Disarmed", + HomeArmed = "HomeArmed", + AwayArmed = "AwayArmed", + NightArmed = "NightArmed" +} +export declare enum SecuritySystemObstruction { + Sensor = "Sensor", + Occupied = "Occupied", + Time = "Time", + Error = "Error" +} +export interface SecuritySystemState { + mode: SecuritySystemMode; + triggered?: boolean; + supportedModes?: SecuritySystemMode[]; + obstruction?: SecuritySystemObstruction; +} +export interface SecuritySystem { + securitySystem?: SecuritySystemState; + setSecuritySystem(mode: SecuritySystemMode): Promise; } export interface ZoneHistory { firstEntry: number; @@ -1436,6 +1461,7 @@ export declare enum ScryptedInterface { UltravioletSensor = "UltravioletSensor", LuminanceSensor = "LuminanceSensor", PositionSensor = "PositionSensor", + SecuritySystem = "SecuritySystem", PM25Sensor = "PM25Sensor", VOCSensor = "VOCSensor", AirQualitySensor = "AirQualitySensor", diff --git a/sdk/types/index.js b/sdk/types/index.js index 93025b272..90048f41a 100644 --- a/sdk/types/index.js +++ b/sdk/types/index.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ScryptedMimeTypes = exports.ScryptedInterface = exports.MediaPlayerState = exports.AirQuality = exports.LockState = exports.ThermostatMode = exports.TemperatureUnit = exports.FanMode = exports.HumidityMode = exports.ScryptedDeviceType = exports.ScryptedInterfaceDescriptors = exports.ScryptedInterfaceProperty = exports.DeviceBase = void 0; +exports.ScryptedMimeTypes = exports.ScryptedInterface = exports.MediaPlayerState = exports.SecuritySystemObstruction = exports.SecuritySystemMode = exports.AirQuality = exports.LockState = exports.ThermostatMode = exports.TemperatureUnit = exports.FanMode = exports.HumidityMode = exports.ScryptedDeviceType = exports.ScryptedInterfaceDescriptors = exports.ScryptedInterfaceProperty = exports.DeviceBase = void 0; class DeviceBase { } exports.DeviceBase = DeviceBase; @@ -54,6 +54,7 @@ var ScryptedInterfaceProperty; ScryptedInterfaceProperty["ultraviolet"] = "ultraviolet"; ScryptedInterfaceProperty["luminance"] = "luminance"; ScryptedInterfaceProperty["position"] = "position"; + ScryptedInterfaceProperty["securitySystem"] = "securitySystem"; ScryptedInterfaceProperty["pm25Density"] = "pm25Density"; ScryptedInterfaceProperty["vocDensity"] = "vocDensity"; ScryptedInterfaceProperty["airQuality"] = "airQuality"; @@ -486,6 +487,15 @@ exports.ScryptedInterfaceDescriptors = { 'position' ] }, + SecuritySystem: { + name: 'SecuritySystem', + methods: [ + 'setSecuritySystem' + ], + properties: [ + 'securitySystem' + ] + }, PM25Sensor: { name: 'PM25Sensor', methods: [], @@ -704,6 +714,20 @@ var AirQuality; AirQuality["Inferior"] = "Inferior"; AirQuality["Poor"] = "Poor"; })(AirQuality = exports.AirQuality || (exports.AirQuality = {})); +var SecuritySystemMode; +(function (SecuritySystemMode) { + SecuritySystemMode["Disarmed"] = "Disarmed"; + SecuritySystemMode["HomeArmed"] = "HomeArmed"; + SecuritySystemMode["AwayArmed"] = "AwayArmed"; + SecuritySystemMode["NightArmed"] = "NightArmed"; +})(SecuritySystemMode = exports.SecuritySystemMode || (exports.SecuritySystemMode = {})); +var SecuritySystemObstruction; +(function (SecuritySystemObstruction) { + SecuritySystemObstruction["Sensor"] = "Sensor"; + SecuritySystemObstruction["Occupied"] = "Occupied"; + SecuritySystemObstruction["Time"] = "Time"; + SecuritySystemObstruction["Error"] = "Error"; +})(SecuritySystemObstruction = exports.SecuritySystemObstruction || (exports.SecuritySystemObstruction = {})); var MediaPlayerState; (function (MediaPlayerState) { MediaPlayerState["Idle"] = "Idle"; @@ -762,6 +786,7 @@ var ScryptedInterface; ScryptedInterface["UltravioletSensor"] = "UltravioletSensor"; ScryptedInterface["LuminanceSensor"] = "LuminanceSensor"; ScryptedInterface["PositionSensor"] = "PositionSensor"; + ScryptedInterface["SecuritySystem"] = "SecuritySystem"; ScryptedInterface["PM25Sensor"] = "PM25Sensor"; ScryptedInterface["VOCSensor"] = "VOCSensor"; ScryptedInterface["AirQualitySensor"] = "AirQualitySensor"; diff --git a/sdk/types/index.ts b/sdk/types/index.ts index ba8b027bc..209bea52d 100644 --- a/sdk/types/index.ts +++ b/sdk/types/index.ts @@ -49,6 +49,7 @@ export interface DeviceState { ultraviolet?: number luminance?: number position?: Position + securitySystem?: SecuritySystemState pm25Density?: number vocDensity?: number airQuality?: AirQuality @@ -105,6 +106,7 @@ export class DeviceBase implements DeviceState { ultraviolet?: number luminance?: number position?: Position + securitySystem?: SecuritySystemState pm25Density?: number vocDensity?: number airQuality?: AirQuality @@ -162,6 +164,7 @@ export enum ScryptedInterfaceProperty { ultraviolet = "ultraviolet", luminance = "luminance", position = "position", + securitySystem = "securitySystem", pm25Density = "pm25Density", vocDensity = "vocDensity", airQuality = "airQuality", @@ -597,6 +600,15 @@ export const ScryptedInterfaceDescriptors: { [scryptedInterface: string]: Scrypt 'position' ] }, + SecuritySystem: { + name: 'SecuritySystem', + methods: [ + 'setSecuritySystem' + ], + properties: [ + 'securitySystem' + ] + }, PM25Sensor: { name: 'PM25Sensor', methods: [], @@ -1488,6 +1500,14 @@ export interface UltravioletSensor { export interface LuminanceSensor { luminance?: number; } +export interface Position { + /** + * The accuracy radius of this position in meters. + */ + accuracyRadius?: number; + latitude?: number; + longitude?: number; +} export interface PositionSensor { position?: Position; } @@ -1508,14 +1528,33 @@ export enum AirQuality { export interface AirQualitySensor { airQuality?: AirQuality; } -export interface Position { - /** - * The accuracy radius of this position in meters. - */ - accuracyRadius?: number; - latitude?: number; - longitude?: number; + +export enum SecuritySystemMode { + Disarmed = 'Disarmed', + HomeArmed = 'HomeArmed', + AwayArmed = 'AwayArmed', + NightArmed = 'NightArmed', } + +export enum SecuritySystemObstruction { + Sensor = 'Sensor', + Occupied = 'Occupied', + Time = 'Time', + Error = 'Error', +} + +export interface SecuritySystemState { + mode: SecuritySystemMode; + triggered?: boolean; + supportedModes?: SecuritySystemMode[]; + obstruction?: SecuritySystemObstruction; +} + +export interface SecuritySystem { + securitySystem?: SecuritySystemState; + setSecuritySystem(mode: SecuritySystemMode): Promise; +} + export interface ZoneHistory { firstEntry: number; lastEntry: number; @@ -2126,6 +2165,7 @@ export enum ScryptedInterface { UltravioletSensor = "UltravioletSensor", LuminanceSensor = "LuminanceSensor", PositionSensor = "PositionSensor", + SecuritySystem = 'SecuritySystem', PM25Sensor = "PM25Sensor", VOCSensor = "VOCSensor", AirQualitySensor = "AirQualitySensor", diff --git a/sdk/types/scrypted_python/scrypted_sdk/types.py b/sdk/types/scrypted_python/scrypted_sdk/types.py index 311bd7901..f610da5f8 100644 --- a/sdk/types/scrypted_python/scrypted_sdk/types.py +++ b/sdk/types/scrypted_python/scrypted_sdk/types.py @@ -124,6 +124,7 @@ class ScryptedInterface(Enum): Scriptable = "Scriptable" ScryptedDevice = "ScryptedDevice" ScryptedPlugin = "ScryptedPlugin" + SecuritySystem = "SecuritySystem" Settings = "Settings" SoftwareUpdate = "SoftwareUpdate" StartStop = "StartStop" @@ -147,6 +148,18 @@ class ScryptedMimeTypes(Enum): SchemePrefix = "x-scrypted/x-scrypted-scheme-" Url = "text/x-uri" +class SecuritySystemMode(Enum): + AwayArmed = "AwayArmed" + Disarmed = "Disarmed" + HomeArmed = "HomeArmed" + NightArmed = "NightArmed" + +class SecuritySystemObstruction(Enum): + Error = "Error" + Occupied = "Occupied" + Sensor = "Sensor" + Time = "Time" + class TemperatureUnit(Enum): C = "C" F = "F" @@ -468,6 +481,13 @@ class ScryptedDevice(TypedDict): type: ScryptedDeviceType pass +class SecuritySystemState(TypedDict): + mode: SecuritySystemMode + obstruction: SecuritySystemObstruction + supportedModes: list[SecuritySystemMode] + triggered: bool + pass + class Setting(TypedDict): choices: list[str] combobox: bool @@ -844,6 +864,12 @@ class ScryptedPlugin: pass pass +class SecuritySystem: + securitySystem: SecuritySystemState + async def setSecuritySystem(self, mode: SecuritySystemMode) -> None: + pass + pass + class Settings: async def getSettings(self) -> list[Setting]: pass @@ -1090,6 +1116,7 @@ class ScryptedInterfaceProperty(Enum): ultraviolet = "ultraviolet" luminance = "luminance" position = "position" + securitySystem = "securitySystem" pm25Density = "pm25Density" vocDensity = "vocDensity" airQuality = "airQuality" @@ -1438,6 +1465,13 @@ class DeviceState: def position(self, value: Position): self.setScryptedProperty("position", value) + @property + def securitySystem(self) -> SecuritySystemState: + return self.getScryptedProperty("securitySystem") + @securitySystem.setter + def securitySystem(self, value: SecuritySystemState): + self.setScryptedProperty("securitySystem", value) + @property def pm25Density(self) -> float: return self.getScryptedProperty("pm25Density") @@ -1899,6 +1933,15 @@ ScryptedInterfaceDescriptors = { "position" ] }, + "SecuritySystem": { + "name": "SecuritySystem", + "methods": [ + "setSecuritySystem" + ], + "properties": [ + "securitySystem" + ] + }, "PM25Sensor": { "name": "PM25Sensor", "methods": [],