sdk: update developer site

This commit is contained in:
Koushik Dutta
2022-09-21 11:42:16 -07:00
parent b59e963c5c
commit 16eebdb54e
17 changed files with 1057 additions and 626 deletions

3
.gitmodules vendored
View File

@@ -37,3 +37,6 @@
[submodule "external/push-receiver"]
path = external/push-receiver
url = ../../koush/push-receiver.git
[submodule "sdk/developer.scrypted.app"]
path = sdk/developer.scrypted.app
url = ../../koush/developer.scrypted.app

1
sdk/.gitignore vendored
View File

@@ -1,3 +1,4 @@
node_modules/
*.map
schema.json
docs

211
sdk/README.md Normal file
View File

@@ -0,0 +1,211 @@
# Table of Contents
* [Getting Started](#getting-started)
* [Typescript Sample Setup](#typescript-sample-setup)
* [Creating a Switch](#creating-a-switch)
* [Core Concepts](#core-concepts)
* [Interfaces](#interfaces)
* [Events](#events)
* [Creating Multiple Devices](#creating-multiple-devices)
* [Full Reference](/modules)
<br/>
<br/>
# Getting Started
The quickest way to get started is to check out the the [Typescript sample](https://github.com/koush/scrypted-vscode-typescript) and open it in Visual Studio Code. The setup instructions can be found in the readme for the [project](https://github.com/koush/scrypted-vscode-typescript).
<br/>
## Typescript Sample Setup
These instructions can be followed on your preferred development machine, and do not need to be run on the Scrypted Server itself. The Scrypted SDK can deploy and **debug** plugins running on a remote server. For example, the VS Code development environment can be running on a Mac, while the server is running on a Raspberry Pi.
1. npm install
2. Open this plugin director yin VS Code.
3. Edit `.vscode/settings.json` to point to the IP address of your Scrypted server. The default is `127.0.0.1`, your local machine.
4. Press Launch (green arrow button in the Run and Debug sidebar) to start debugging.
* The VS Code `Terminal` area may show an authentication failure and prompt you to log in to the Scrypted Management Console with `npx scrypted login`. You will only need to do this once. You can then relaunch afterwards.
<p align="center">
<img width="538" alt="image" src="https://user-images.githubusercontent.com/73924/151676616-c730eb56-26dd-466d-b7f5-25783300b3bc.png">
</p>
<br/>
## Creating a Switch
The aforementioned sample will create a single switch device.
```typescript
import axios from 'axios';
import { OnOff, ScryptedDeviceBase } from '@scrypted/sdk';
console.log('Hello World. This will create a virtual OnOff device.');
// OnOff is a simple binary switch. See "interfaces" in package.json
// to add support for more capabilities, like Brightness or Lock.
class TypescriptLight extends ScryptedDeviceBase implements OnOff {
constructor() {
super();
this.on = this.on || false;
}
async turnOff() {
this.console.log('turnOff was called!');
this.on = false;
}
async turnOn() {
// set a breakpoint here.
this.console.log('turnOn was called!');
this.console.log("Let's pretend to perform a web request on an API that would turn on a light.");
const ip = await axios.get('http://jsonip.com');
this.console.log(`my ip: ${ip.data.ip}`);
this.on = true;
}
}
export default TypescriptLight;
```
<br/>
<br/>
# Core Concepts
Devices the core entry points and objects within Scrypted. A device can be a physical device, a virtual device, a provider of other devices (like a hub), a webhook, etc. Devices have two primary properties: Interfaces and Events.
<br/>
## Interfaces
Interfaces are how devices expose their capabilities to Scrypted. An OnOff interface represents a binary switch. The Brightness interface represents a light that can be dimmed. The ColorSettingRgb interface indicates the light can change color. A device may expose multiple different interfaces to describe its functionality.
For example, given the following devices, the interfaces they would implement:
Outlet: OnOff,
Dimmer Switch: OnOff, Brightness,
Color Bulb: OnOff, Brightness, ColorSettingRgb
Interfaces aren't only used represent characteristics of physical devices. As mentioned, they provide ways to hook into Scrypted. The HttpRequestHandler lets you add a web hook to handle incoming web requests. EventListener lets you create handlers that respond to events. DeviceProvider acts as a controller platform (like Hue or Lifx) for exposing multiple other devices to Scrypted.
Interfaces also provide a way to query the device state. Such as checking whether an outlet is on or off, the current brightness level, or the current color.
```typescript
// Interfaces describe how the current state of a device, and can be used to modify that state.
if (light.on) {
light.turnOff();
}
else {
light.turnOn();
}
```
<br/>
## Events
Scrypted maintains the state of all connected devices. Whenever the state of an interface is updated on a device, an Event will be triggered for that particular interface.
For example, when a light turns on, the Light device would send an OnOff event. If a Slack message is received, the Slack device would send a MessagingEndpoint event. Setting a schedule for sunrise on weekdays would send an Alarm event on that schedule.
Automations subscribe to these events in your smart home setup and react accordingly.
```
// Events are triggered by the device on update, and can be observed.
light.listen('OnOff', (eventSource: ScryptedDevice, eventDetails: EventDetails, eventData: object) => {
if (eventData) {
log.i('The light was turned on.');
}
else {
log.i('The light was turned off.');
}
});
```
<br/>
<br/>
# Creating Multiple Devices
Most plugins will want to create multiple devices. This is done by implementing the DeviceProvider interface.
To do this, thep project `package.json` needs to update the `scrypted` section that describes the plugin:
```json
"scrypted": {
"name": "TypeScript Light Provider",
"type": "DeviceProvider",
"interfaces": [
"DeviceProvider"
]
},
```
Then, the code is updated to support multiple lights:
```typescript
import axios from 'axios';
import sdk, { DeviceProvider, OnOff, ScryptedDeviceBase, ScryptedDeviceType, ScryptedInterface } from '@scrypted/sdk';
class TypescriptLight extends ScryptedDeviceBase implements OnOff {
constructor(nativeId?: string) {
super(nativeId);
this.on = this.on || false;
}
async turnOff() {
this.console.log('turnOff was called!');
this.on = false;
}
async turnOn() {
// set a breakpoint here.
this.console.log('turnOn was called!');
this.console.log("Let's pretend to perform a web request on an API that would turn on a light.");
const ip = await axios.get('http://jsonip.com');
this.console.log(`my ip: ${ip.data.ip}`);
this.on = true;
}
}
class MyDeviceProvider extends ScryptedDeviceBase implements DeviceProvider {
constructor(nativeId?: string) {
super(nativeId);
this.prepareDevices();
}
async prepareDevices() {
// "Discover" the lights provided by this provider to Scrypted.
await sdk.deviceManager.onDevicesChanged({
devices: [
{
// the native id is the unique identifier for this light within
// your plugin.
nativeId: 'light1',
name: 'Light 1',
type: ScryptedDeviceType.Light,
interfaces: [
ScryptedInterface.OnOff,
]
},
{
nativeId: 'light2',
name: 'Light 1',
type: ScryptedDeviceType.Light,
interfaces: [
ScryptedInterface.OnOff,
]
}
]
});
}
// After the device is discovered, Scrypted will request the plugin create the
// instance that can be used to create the light.
getDevice(nativeId: string) {
return new TypescriptLight(nativeId);
}
}
// Export the provider from the plugin, rather than the individual light.
export default MyDeviceProvider;
```
Running the sample will then create 3 devices: the plugin/hub and the 2 lights it controls.

5
sdk/docs.css Normal file
View File

@@ -0,0 +1,5 @@
@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;1,100&display=swap');
body {
font-family: "Lato", sans-serif;
}

View File

@@ -2,6 +2,8 @@ export type ScryptedNativeId = string | undefined;
/**
* All devices in Scrypted implement ScryptedDevice, which contains the id, name, and type. Add listeners to subscribe to events from that device.
*
* @category Core Reference
*/
export interface ScryptedDevice {
/**
@@ -52,6 +54,9 @@ export interface EventListenerOptions {
watch?: boolean;
}
/**
* @category Core Reference
*/
export type EventListener = (eventSource: ScryptedDevice | undefined, eventDetails: EventDetails, eventData: any) => void;
export interface EventDetails {
@@ -62,11 +67,17 @@ export interface EventDetails {
}
/**
* Returned when an event listener is attached to an EventEmitter. Call removeListener to unregister from events.
*/
*
* @category Core Reference
*/
export interface EventListenerRegister {
removeListener(): void;
}
/**
* @category Core Reference
*/
export enum ScryptedDeviceType {
Builtin = "Builtin",
Camera = "Camera",
@@ -188,6 +199,8 @@ export interface Notifier {
}
/**
* MediaObject is an intermediate object within Scrypted to represent all media objects. Plugins should use the MediaConverter to convert the Scrypted MediaObject into a desired type, whether it is a externally accessible URL, a Buffer, etc.
*
* @category Media Reference
*/
export interface MediaObject {
mimeType: string;
@@ -672,8 +685,88 @@ export interface Entry {
export interface EntrySensor {
entryOpen?: boolean;
}
/**
* DeviceManager is the interface used by DeviceProvider to report new devices, device states, and device events to Scrypted.
*
* @category Device Provider Reference
*/
export interface DeviceManager {
/**
* Get the logger for a device given a native id.
*/
getDeviceLogger(nativeId?: ScryptedNativeId): Logger;
/**
* Get the console for the device given a native id.
*/
getDeviceConsole?(nativeId?: ScryptedNativeId): Console;
/**
* Get the console for the device given a native id.
*/
getMixinConsole?(mixinId: string, nativeId?: ScryptedNativeId): Console;
/**
* Get the device state maintained by Scrypted. Setting properties on this state will update the state in Scrypted.
*/
getDeviceState(nativeId?: ScryptedNativeId): DeviceState;
/**
* Create a device state object that will trap all state setting calls. Used internally by mixins and fork.
*/
createDeviceState?(id: string, setState: (property: string, value: any) => Promise<void>): DeviceState;
/**
* Get the storage for a mixin.
* @param id The id of the device being mixined.
* @param nativeId The nativeId of the MixinProvider.
*/
getMixinStorage(id: string, nativeId?: ScryptedNativeId): Storage;
/**
* Fire an event for a mixin provided by this plugin.
*/
onMixinEvent(id: string, mixinDevice: any, eventInterface: string, eventData: any): Promise<void>;
/**
* Get the device Storage object.
*/
getDeviceStorage(nativeId?: ScryptedNativeId): Storage;
/**
* Get all the native ids that have been reported by this plugin. This always includes "undefined", the plugin itself.
*/
getNativeIds(): string[];
/**
* onDeviceDiscovered is used to report new devices that are trickle discovered, one by one, such as via a network broadcast.
*/
onDeviceDiscovered(device: Device): Promise<string>;
/**
* Fire an event for a device provided by this plugin.
*/
onDeviceEvent(nativeId: ScryptedNativeId, eventInterface: string, eventData: any): Promise<void>;
/**
* onDeviceRemoved is used to report when discovered devices are removed.
*/
onDeviceRemoved(nativeId: string): Promise<void>;
/**
* onDevicesChanged is used to sync Scrypted with devices that are attached to a hub, such as Hue or SmartThings. All the devices should be reported at once.
*/
onDevicesChanged(devices: DeviceManifest): Promise<void>;
/**
* Restart the plugin. May not happen immediately.
*/
requestRestart(): Promise<void>;
}
/**
* DeviceProvider acts as a controller/hub and exposes multiple devices to Scrypted Device Manager.
*
* @category Device Provider Reference
*/
export interface DeviceProvider {
/**
@@ -682,11 +775,25 @@ export interface DeviceProvider {
getDevice(nativeId: ScryptedNativeId): any;
}
/**
* DeviceManifest is passed to DeviceManager.onDevicesChanged to sync a full list of devices from the controller/hub (Hue, SmartThings, etc)
*
* @category Device Provider Reference
*/
export interface DeviceManifest {
/**
* The native id of the hub or discovery DeviceProvider that manages these devices.
*/
providerNativeId?: ScryptedNativeId;
devices?: Device[];
}
export interface DeviceCreatorSettings {
[key: string]: SettingValue;
}
/**
* A DeviceProvider that allows the user to create a device.
*
* @category Device Provider Reference
*/
export interface DeviceCreator {
getCreateDeviceSettings(): Promise<Setting[]>;
@@ -698,6 +805,8 @@ export interface DeviceCreator {
}
/**
* A DeviceProvider that has a device discovery mechanism.
*
* @category Device Provider Reference
*/
export interface DeviceDiscovery {
/**
@@ -713,6 +822,8 @@ export interface Battery {
}
/**
* Refresh indicates that this device has properties that are not automatically updated, and must be periodically refreshed via polling. Device implementations should never implement their own underlying polling algorithm, and instead implement Refresh to allow Scrypted to manage polling intelligently.
*
* @category Device Provider Reference
*/
export interface Refresh {
/**
@@ -1047,6 +1158,9 @@ export interface MediaObjectOptions {
sourceId?: string;
}
/**
* @category Media Reference
*/
export interface MediaManager {
/**
* Add an convertor to consider for use when converting MediaObjects.
@@ -1123,82 +1237,6 @@ export interface FFmpegInput extends MediaStreamUrl {
videoDecoderArguments?: string[];
h264FilterArguments?: string[];
}
/**
* DeviceManager is the interface used by DeviceProvider to report new devices, device states, and device events to Scrypted.
*/
export interface DeviceManager {
/**
* Get the logger for a device given a native id.
*/
getDeviceLogger(nativeId?: ScryptedNativeId): Logger;
/**
* Get the console for the device given a native id.
*/
getDeviceConsole?(nativeId?: ScryptedNativeId): Console;
/**
* Get the console for the device given a native id.
*/
getMixinConsole?(mixinId: string, nativeId?: ScryptedNativeId): Console;
/**
* Get the device state maintained by Scrypted. Setting properties on this state will update the state in Scrypted.
*/
getDeviceState(nativeId?: ScryptedNativeId): DeviceState;
/**
* Create a device state object that will trap all state setting calls. Used internally by mixins and fork.
*/
createDeviceState?(id: string, setState: (property: string, value: any) => Promise<void>): DeviceState;
/**
* Get the storage for a mixin.
* @param id The id of the device being mixined.
* @param nativeId The nativeId of the MixinProvider.
*/
getMixinStorage(id: string, nativeId?: ScryptedNativeId): Storage;
/**
* Fire an event for a mixin provided by this plugin.
*/
onMixinEvent(id: string, mixinDevice: any, eventInterface: string, eventData: any): Promise<void>;
/**
* Get the device Storage object.
*/
getDeviceStorage(nativeId?: ScryptedNativeId): Storage;
/**
* Get all the native ids that have been reported by this plugin. This always includes "undefined", the plugin itself.
*/
getNativeIds(): string[];
/**
* onDeviceDiscovered is used to report new devices that are trickle discovered, one by one, such as via a network broadcast.
*/
onDeviceDiscovered(device: Device): Promise<string>;
/**
* Fire an event for a device provided by this plugin.
*/
onDeviceEvent(nativeId: ScryptedNativeId, eventInterface: string, eventData: any): Promise<void>;
/**
* onDeviceRemoved is used to report when discovered devices are removed.
*/
onDeviceRemoved(nativeId: string): Promise<void>;
/**
* onDevicesChanged is used to sync Scrypted with devices that are attached to a hub, such as Hue or SmartThings. All the devices should be reported at once.
*/
onDevicesChanged(devices: DeviceManifest): Promise<void>;
/**
* Restart the plugin. May not happen immediately.
*/
requestRestart(): Promise<void>;
}
export interface DeviceInformation {
model?: string;
manufacturer?: string;
@@ -1211,6 +1249,8 @@ export interface DeviceInformation {
}
/**
* Device objects are created by DeviceProviders when new devices are discover and synced to Scrypted via the DeviceManager.
*
* @category Device Provider Reference
*/
export interface Device {
name: string;
@@ -1229,18 +1269,10 @@ export interface Device {
internal?: boolean;
}
/**
* DeviceManifest is passed to DeviceManager.onDevicesChanged to sync a full list of devices from the controller/hub (Hue, SmartThings, etc)
*/
export interface DeviceManifest {
/**
* The native id of the hub or discovery DeviceProvider that manages these devices.
*/
providerNativeId?: ScryptedNativeId;
devices?: Device[];
}
/**
* EndpointManager provides publicly accessible URLs that can be used to contact your Scrypted Plugin.
*
* @category Webhook and Push Reference
*/
export interface EndpointManager {
/**
@@ -1301,6 +1333,8 @@ export interface EndpointManager {
}
/**
* SystemManager is used by scripts to query device state and access devices.
*
* @category Core Reference
*/
export interface SystemManager {
/**
@@ -1376,6 +1410,8 @@ export interface MixinProvider {
}
/**
* The HttpRequestHandler allows handling of web requests under the endpoint path: /endpoint/npm-package-name/*.
*
* @category Webhook and Push Reference
*/
export interface HttpRequestHandler {
/**
@@ -1384,6 +1420,9 @@ export interface HttpRequestHandler {
onRequest(request: HttpRequest, response: HttpResponse): Promise<void>;
}
/**
* @category Webhook and Push Reference
*/
export interface HttpRequest {
body?: string;
headers?: object;
@@ -1395,6 +1434,8 @@ export interface HttpRequest {
}
/**
* Response object provided by the HttpRequestHandler.
*
* @category Webhook and Push Reference
*/
export interface HttpResponse {
send(body: string): void;
@@ -1411,6 +1452,9 @@ export interface HttpResponse {
sendSocket(socket: any, options: HttpResponseOptions): void;
}
/**
* @category Webhook and Push Reference
*/
export interface HttpResponseOptions {
code?: number;
headers?: object;
@@ -1419,6 +1463,10 @@ export interface EngineIOHandler {
onConnection(request: HttpRequest, webSocketUrl: string): Promise<void>;
}
/**
* @category Webhook and Push Reference
*
*/
export interface PushHandler {
/**
* Callback to handle an incoming push.

View File

@@ -1,7 +1,11 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];

153
sdk/package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "@scrypted/sdk",
"version": "0.0.207",
"version": "0.0.208",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@scrypted/sdk",
"version": "0.0.207",
"version": "0.0.208",
"license": "ISC",
"dependencies": {
"@babel/preset-typescript": "^7.16.7",
@@ -36,7 +36,7 @@
"@types/stringify-object": "^4.0.0",
"stringify-object": "^3.3.0",
"ts-node": "^10.4.0",
"typedoc": "^0.22.8",
"typedoc": "^0.23.15",
"typescript-json-schema": "^0.50.1"
}
},
@@ -1618,9 +1618,9 @@
}
},
"node_modules/jsonc-parser": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz",
"integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
"integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
"dev": true
},
"node_modules/jsonify": {
@@ -1707,9 +1707,9 @@
"dev": true
},
"node_modules/marked": {
"version": "4.0.10",
"resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz",
"integrity": "sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==",
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/marked/-/marked-4.1.0.tgz",
"integrity": "sha512-+Z6KDjSPa6/723PQYyc1axYZpYYpDnECDaU6hkaf5gqBieBkMKYReL5hteF2QizhlMbgbo8umXl/clZ67+GlsA==",
"dev": true,
"bin": {
"marked": "bin/marked.js"
@@ -1997,14 +1997,14 @@
}
},
"node_modules/shiki": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.0.tgz",
"integrity": "sha512-iczxaIYeBFHTFrQPb9DVy2SKgYxC4Wo7Iucm7C17cCh2Ge/refnvHscUOxM85u57MfLoNOtjoEFUWt9gBexblA==",
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/shiki/-/shiki-0.11.1.tgz",
"integrity": "sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==",
"dev": true,
"dependencies": {
"jsonc-parser": "^3.0.0",
"vscode-oniguruma": "^1.6.1",
"vscode-textmate": "5.2.0"
"vscode-textmate": "^6.0.0"
}
},
"node_modules/sirv": {
@@ -2248,31 +2248,51 @@
}
},
"node_modules/typedoc": {
"version": "0.22.11",
"resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.11.tgz",
"integrity": "sha512-pVr3hh6dkS3lPPaZz1fNpvcrqLdtEvXmXayN55czlamSgvEjh+57GUqfhAI1Xsuu/hNHUT1KNSx8LH2wBP/7SA==",
"version": "0.23.15",
"resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.15.tgz",
"integrity": "sha512-x9Zu+tTnwxb9YdVr+zvX7LYzyBl1nieOr6lrSHbHsA22/RJK2m4Y525WIg5Mj4jWCmfL47v6f4hUzY7EIuwS5w==",
"dev": true,
"dependencies": {
"glob": "^7.2.0",
"lunr": "^2.3.9",
"marked": "^4.0.10",
"minimatch": "^3.0.4",
"shiki": "^0.10.0"
"marked": "^4.0.19",
"minimatch": "^5.1.0",
"shiki": "^0.11.1"
},
"bin": {
"typedoc": "bin/typedoc"
},
"engines": {
"node": ">= 12.10.0"
"node": ">= 14.14"
},
"peerDependencies": {
"typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x"
"typescript": "4.6.x || 4.7.x || 4.8.x"
}
},
"node_modules/typedoc/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/typedoc/node_modules/minimatch": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
"integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"node_modules/typescript": {
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz",
"integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==",
"version": "4.8.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz",
"integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==",
"dev": true,
"peer": true,
"bin": {
@@ -2355,15 +2375,15 @@
}
},
"node_modules/vscode-oniguruma": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz",
"integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==",
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz",
"integrity": "sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==",
"dev": true
},
"node_modules/vscode-textmate": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz",
"integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==",
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-6.0.0.tgz",
"integrity": "sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==",
"dev": true
},
"node_modules/watchpack": {
@@ -3831,9 +3851,9 @@
}
},
"jsonc-parser": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz",
"integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
"integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
"dev": true
},
"jsonify": {
@@ -3901,9 +3921,9 @@
"dev": true
},
"marked": {
"version": "4.0.10",
"resolved": "https://registry.npmjs.org/marked/-/marked-4.0.10.tgz",
"integrity": "sha512-+QvuFj0nGgO970fySghXGmuw+Fd0gD2x3+MqCWLIPf5oxdv1Ka6b2q+z9RP01P/IaKPMEramy+7cNy/Lw8c3hw==",
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/marked/-/marked-4.1.0.tgz",
"integrity": "sha512-+Z6KDjSPa6/723PQYyc1axYZpYYpDnECDaU6hkaf5gqBieBkMKYReL5hteF2QizhlMbgbo8umXl/clZ67+GlsA==",
"dev": true
},
"merge-stream": {
@@ -4106,14 +4126,14 @@
}
},
"shiki": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.0.tgz",
"integrity": "sha512-iczxaIYeBFHTFrQPb9DVy2SKgYxC4Wo7Iucm7C17cCh2Ge/refnvHscUOxM85u57MfLoNOtjoEFUWt9gBexblA==",
"version": "0.11.1",
"resolved": "https://registry.npmjs.org/shiki/-/shiki-0.11.1.tgz",
"integrity": "sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==",
"dev": true,
"requires": {
"jsonc-parser": "^3.0.0",
"vscode-oniguruma": "^1.6.1",
"vscode-textmate": "5.2.0"
"vscode-textmate": "^6.0.0"
}
},
"sirv": {
@@ -4270,22 +4290,41 @@
}
},
"typedoc": {
"version": "0.22.11",
"resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.11.tgz",
"integrity": "sha512-pVr3hh6dkS3lPPaZz1fNpvcrqLdtEvXmXayN55czlamSgvEjh+57GUqfhAI1Xsuu/hNHUT1KNSx8LH2wBP/7SA==",
"version": "0.23.15",
"resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.23.15.tgz",
"integrity": "sha512-x9Zu+tTnwxb9YdVr+zvX7LYzyBl1nieOr6lrSHbHsA22/RJK2m4Y525WIg5Mj4jWCmfL47v6f4hUzY7EIuwS5w==",
"dev": true,
"requires": {
"glob": "^7.2.0",
"lunr": "^2.3.9",
"marked": "^4.0.10",
"minimatch": "^3.0.4",
"shiki": "^0.10.0"
"marked": "^4.0.19",
"minimatch": "^5.1.0",
"shiki": "^0.11.1"
},
"dependencies": {
"brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0"
}
},
"minimatch": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz",
"integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==",
"dev": true,
"requires": {
"brace-expansion": "^2.0.1"
}
}
}
},
"typescript": {
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz",
"integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==",
"version": "4.8.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz",
"integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==",
"dev": true,
"peer": true
},
@@ -4341,15 +4380,15 @@
}
},
"vscode-oniguruma": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz",
"integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==",
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz",
"integrity": "sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==",
"dev": true
},
"vscode-textmate": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz",
"integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==",
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-6.0.0.tgz",
"integrity": "sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==",
"dev": true
},
"watchpack": {

View File

@@ -1,6 +1,6 @@
{
"name": "@scrypted/sdk",
"version": "0.0.207",
"version": "0.0.208",
"description": "",
"main": "index.js",
"scripts": {
@@ -40,7 +40,7 @@
"@types/stringify-object": "^4.0.0",
"stringify-object": "^3.3.0",
"ts-node": "^10.4.0",
"typedoc": "^0.22.8",
"typedoc": "^0.23.15",
"typescript-json-schema": "^0.50.1"
},
"types": "index.d.ts"

View File

@@ -8,184 +8,184 @@ from .other import *
class AirQuality(Enum):
Excellent = "Excellent"
Fair = "Fair"
Good = "Good"
Inferior = "Inferior"
Poor = "Poor"
Unknown = "Unknown"
Excellent = undefined
Fair = undefined
Good = undefined
Inferior = undefined
Poor = undefined
Unknown = undefined
class FanMode(Enum):
Auto = "Auto"
Manual = "Manual"
Auto = undefined
Manual = undefined
class HumidityMode(Enum):
Auto = "Auto"
Dehumidify = "Dehumidify"
Humidify = "Humidify"
Off = "Off"
Auto = undefined
Dehumidify = undefined
Humidify = undefined
Off = undefined
class LockState(Enum):
Jammed = "Jammed"
Locked = "Locked"
Unlocked = "Unlocked"
Jammed = undefined
Locked = undefined
Unlocked = undefined
class MediaPlayerState(Enum):
Buffering = "Buffering"
Idle = "Idle"
Paused = "Paused"
Playing = "Playing"
Buffering = undefined
Idle = undefined
Paused = undefined
Playing = undefined
class ScryptedDeviceType(Enum):
API = "API"
Automation = "Automation"
Builtin = "Builtin"
Camera = "Camera"
DataSource = "DataSource"
DeviceProvider = "DeviceProvider"
Display = "Display"
Doorbell = "Doorbell"
Entry = "Entry"
Event = "Event"
Fan = "Fan"
Garage = "Garage"
Irrigation = "Irrigation"
Light = "Light"
Lock = "Lock"
Notifier = "Notifier"
Outlet = "Outlet"
PasswordControl = "PasswordControl"
Person = "Person"
Program = "Program"
Scene = "Scene"
SecuritySystem = "SecuritySystem"
Sensor = "Sensor"
SmartDisplay = "SmartDisplay"
SmartSpeaker = "SmartSpeaker"
Speaker = "Speaker"
Switch = "Switch"
Thermostat = "Thermostat"
Unknown = "Unknown"
Vacuum = "Vacuum"
Valve = "Valve"
API = undefined
Automation = undefined
Builtin = undefined
Camera = undefined
DataSource = undefined
DeviceProvider = undefined
Display = undefined
Doorbell = undefined
Entry = undefined
Event = undefined
Fan = undefined
Garage = undefined
Irrigation = undefined
Light = undefined
Lock = undefined
Notifier = undefined
Outlet = undefined
PasswordControl = undefined
Person = undefined
Program = undefined
Scene = undefined
SecuritySystem = undefined
Sensor = undefined
SmartDisplay = undefined
SmartSpeaker = undefined
Speaker = undefined
Switch = undefined
Thermostat = undefined
Unknown = undefined
Vacuum = undefined
Valve = undefined
class ScryptedInterface(Enum):
AirQualitySensor = "AirQualitySensor"
AmbientLightSensor = "AmbientLightSensor"
AudioSensor = "AudioSensor"
Authenticator = "Authenticator"
Battery = "Battery"
BinarySensor = "BinarySensor"
Brightness = "Brightness"
BufferConverter = "BufferConverter"
CO2Sensor = "CO2Sensor"
Camera = "Camera"
ColorSettingHsv = "ColorSettingHsv"
ColorSettingRgb = "ColorSettingRgb"
ColorSettingTemperature = "ColorSettingTemperature"
DeviceCreator = "DeviceCreator"
DeviceDiscovery = "DeviceDiscovery"
DeviceProvider = "DeviceProvider"
Display = "Display"
Dock = "Dock"
EngineIOHandler = "EngineIOHandler"
Entry = "Entry"
EntrySensor = "EntrySensor"
EventRecorder = "EventRecorder"
Fan = "Fan"
FloodSensor = "FloodSensor"
HttpRequestHandler = "HttpRequestHandler"
HumiditySensor = "HumiditySensor"
HumiditySetting = "HumiditySetting"
Intercom = "Intercom"
LauncherApplication = "LauncherApplication"
Lock = "Lock"
LuminanceSensor = "LuminanceSensor"
MediaPlayer = "MediaPlayer"
Microphone = "Microphone"
MixinProvider = "MixinProvider"
MotionSensor = "MotionSensor"
Notifier = "Notifier"
OauthClient = "OauthClient"
ObjectDetection = "ObjectDetection"
ObjectDetector = "ObjectDetector"
OccupancySensor = "OccupancySensor"
OnOff = "OnOff"
Online = "Online"
PM25Sensor = "PM25Sensor"
PanTiltZoom = "PanTiltZoom"
PasswordStore = "PasswordStore"
Pause = "Pause"
PositionSensor = "PositionSensor"
PowerSensor = "PowerSensor"
Program = "Program"
PushHandler = "PushHandler"
RTCSignalingChannel = "RTCSignalingChannel"
RTCSignalingClient = "RTCSignalingClient"
Readme = "Readme"
Refresh = "Refresh"
Scene = "Scene"
Scriptable = "Scriptable"
ScryptedDevice = "ScryptedDevice"
ScryptedPlugin = "ScryptedPlugin"
SecuritySystem = "SecuritySystem"
Settings = "Settings"
SoftwareUpdate = "SoftwareUpdate"
StartStop = "StartStop"
TamperSensor = "TamperSensor"
TemperatureSetting = "TemperatureSetting"
Thermometer = "Thermometer"
UltravioletSensor = "UltravioletSensor"
VOCSensor = "VOCSensor"
VideoCamera = "VideoCamera"
VideoCameraConfiguration = "VideoCameraConfiguration"
VideoClips = "VideoClips"
VideoRecorder = "VideoRecorder"
AirQualitySensor = undefined
AmbientLightSensor = undefined
AudioSensor = undefined
Authenticator = undefined
Battery = undefined
BinarySensor = undefined
Brightness = undefined
BufferConverter = undefined
CO2Sensor = undefined
Camera = undefined
ColorSettingHsv = undefined
ColorSettingRgb = undefined
ColorSettingTemperature = undefined
DeviceCreator = undefined
DeviceDiscovery = undefined
DeviceProvider = undefined
Display = undefined
Dock = undefined
EngineIOHandler = undefined
Entry = undefined
EntrySensor = undefined
EventRecorder = undefined
Fan = undefined
FloodSensor = undefined
HttpRequestHandler = undefined
HumiditySensor = undefined
HumiditySetting = undefined
Intercom = undefined
LauncherApplication = undefined
Lock = undefined
LuminanceSensor = undefined
MediaPlayer = undefined
Microphone = undefined
MixinProvider = undefined
MotionSensor = undefined
Notifier = undefined
OauthClient = undefined
ObjectDetection = undefined
ObjectDetector = undefined
OccupancySensor = undefined
OnOff = undefined
Online = undefined
PM25Sensor = undefined
PanTiltZoom = undefined
PasswordStore = undefined
Pause = undefined
PositionSensor = undefined
PowerSensor = undefined
Program = undefined
PushHandler = undefined
RTCSignalingChannel = undefined
RTCSignalingClient = undefined
Readme = undefined
Refresh = undefined
Scene = undefined
Scriptable = undefined
ScryptedDevice = undefined
ScryptedPlugin = undefined
SecuritySystem = undefined
Settings = undefined
SoftwareUpdate = undefined
StartStop = undefined
TamperSensor = undefined
TemperatureSetting = undefined
Thermometer = undefined
UltravioletSensor = undefined
VOCSensor = undefined
VideoCamera = undefined
VideoCameraConfiguration = undefined
VideoClips = undefined
VideoRecorder = undefined
class ScryptedMimeTypes(Enum):
FFmpegInput = "x-scrypted/x-ffmpeg-input"
FFmpegTranscodeStream = "x-scrypted/x-ffmpeg-transcode-stream"
InsecureLocalUrl = "text/x-insecure-local-uri"
LocalUrl = "text/x-local-uri"
MediaObject = "x-scrypted/x-scrypted-media-object"
MediaStreamUrl = "text/x-media-url"
PushEndpoint = "text/x-push-endpoint"
RTCConnectionManagement = "x-scrypted/x-scrypted-rtc-connection-management"
RTCSignalingChannel = "x-scrypted/x-scrypted-rtc-signaling-channel"
RTCSignalingSession = "x-scrypted/x-scrypted-rtc-signaling-session"
RequestMediaStream = "x-scrypted/x-scrypted-request-stream"
SchemePrefix = "x-scrypted/x-scrypted-scheme-"
ScryptedDevice = "x-scrypted/x-scrypted-device"
ScryptedDeviceId = "x-scrypted/x-scrypted-device-id"
Url = "text/x-uri"
FFmpegInput = undefined
FFmpegTranscodeStream = undefined
InsecureLocalUrl = undefined
LocalUrl = undefined
MediaObject = undefined
MediaStreamUrl = undefined
PushEndpoint = undefined
RTCConnectionManagement = undefined
RTCSignalingChannel = undefined
RTCSignalingSession = undefined
RequestMediaStream = undefined
SchemePrefix = undefined
ScryptedDevice = undefined
ScryptedDeviceId = undefined
Url = undefined
class SecuritySystemMode(Enum):
AwayArmed = "AwayArmed"
Disarmed = "Disarmed"
HomeArmed = "HomeArmed"
NightArmed = "NightArmed"
AwayArmed = undefined
Disarmed = undefined
HomeArmed = undefined
NightArmed = undefined
class SecuritySystemObstruction(Enum):
Error = "Error"
Occupied = "Occupied"
Sensor = "Sensor"
Time = "Time"
Error = undefined
Occupied = undefined
Sensor = undefined
Time = undefined
class TemperatureUnit(Enum):
C = "C"
F = "F"
C = undefined
F = undefined
class ThermostatMode(Enum):
Auto = "Auto"
Cool = "Cool"
Dry = "Dry"
Eco = "Eco"
FanOnly = "FanOnly"
Heat = "Heat"
HeatCool = "HeatCool"
Off = "Off"
On = "On"
Purifier = "Purifier"
Auto = undefined
Cool = undefined
Dry = undefined
Eco = undefined
FanOnly = undefined
Heat = undefined
HeatCool = undefined
Off = undefined
On = undefined
Purifier = undefined
class H264Info(TypedDict):

21
sdk/typedoc.json Normal file
View File

@@ -0,0 +1,21 @@
{
"entryPoints": [
"./"
],
"sort": ["source-order"],
"name": "Scrypted Documentation",
"tsconfig": "./tsconfig.json",
"out": "./developer.scrypted.app/docs",
"categorizeByGroup": false,
"defaultCategory": "Device Interfaces Reference",
"excludePrivate": true,
"disableSources": true,
"categoryOrder": [
"Core Reference",
"Device Provider Reference",
"Media Reference",
"Webhook and Push Reference"
],
"customCss": "docs.css",
"readme": "./README.md"
}

197
sdk/types/index.d.ts vendored
View File

@@ -1,5 +1,5 @@
/// <reference types="node" />
export declare const TYPES_VERSION = "0.0.89";
export declare const TYPES_VERSION = "0.0.90";
export interface DeviceState {
id?: string;
info?: DeviceInformation;
@@ -183,6 +183,8 @@ export declare const ScryptedInterfaceDescriptors: {
export declare type ScryptedNativeId = string | undefined;
/**
* All devices in Scrypted implement ScryptedDevice, which contains the id, name, and type. Add listeners to subscribe to events from that device.
*
* @category Core Reference
*/
export interface ScryptedDevice {
/**
@@ -227,6 +229,9 @@ export interface EventListenerOptions {
*/
watch?: boolean;
}
/**
* @category Core Reference
*/
export declare type EventListener = (eventSource: ScryptedDevice | undefined, eventDetails: EventDetails, eventData: any) => void;
export interface EventDetails {
changed?: boolean;
@@ -236,10 +241,15 @@ export interface EventDetails {
}
/**
* Returned when an event listener is attached to an EventEmitter. Call removeListener to unregister from events.
*/
*
* @category Core Reference
*/
export interface EventListenerRegister {
removeListener(): void;
}
/**
* @category Core Reference
*/
export declare enum ScryptedDeviceType {
Builtin = "Builtin",
Camera = "Camera",
@@ -353,6 +363,8 @@ export interface Notifier {
}
/**
* MediaObject is an intermediate object within Scrypted to represent all media objects. Plugins should use the MediaConverter to convert the Scrypted MediaObject into a desired type, whether it is a externally accessible URL, a Buffer, etc.
*
* @category Media Reference
*/
export interface MediaObject {
mimeType: string;
@@ -784,8 +796,75 @@ export interface Entry {
export interface EntrySensor {
entryOpen?: boolean;
}
/**
* DeviceManager is the interface used by DeviceProvider to report new devices, device states, and device events to Scrypted.
*
* @category Device Provider Reference
*/
export interface DeviceManager {
/**
* Get the logger for a device given a native id.
*/
getDeviceLogger(nativeId?: ScryptedNativeId): Logger;
/**
* Get the console for the device given a native id.
*/
getDeviceConsole?(nativeId?: ScryptedNativeId): Console;
/**
* Get the console for the device given a native id.
*/
getMixinConsole?(mixinId: string, nativeId?: ScryptedNativeId): Console;
/**
* Get the device state maintained by Scrypted. Setting properties on this state will update the state in Scrypted.
*/
getDeviceState(nativeId?: ScryptedNativeId): DeviceState;
/**
* Create a device state object that will trap all state setting calls. Used internally by mixins and fork.
*/
createDeviceState?(id: string, setState: (property: string, value: any) => Promise<void>): DeviceState;
/**
* Get the storage for a mixin.
* @param id The id of the device being mixined.
* @param nativeId The nativeId of the MixinProvider.
*/
getMixinStorage(id: string, nativeId?: ScryptedNativeId): Storage;
/**
* Fire an event for a mixin provided by this plugin.
*/
onMixinEvent(id: string, mixinDevice: any, eventInterface: string, eventData: any): Promise<void>;
/**
* Get the device Storage object.
*/
getDeviceStorage(nativeId?: ScryptedNativeId): Storage;
/**
* Get all the native ids that have been reported by this plugin. This always includes "undefined", the plugin itself.
*/
getNativeIds(): string[];
/**
* onDeviceDiscovered is used to report new devices that are trickle discovered, one by one, such as via a network broadcast.
*/
onDeviceDiscovered(device: Device): Promise<string>;
/**
* Fire an event for a device provided by this plugin.
*/
onDeviceEvent(nativeId: ScryptedNativeId, eventInterface: string, eventData: any): Promise<void>;
/**
* onDeviceRemoved is used to report when discovered devices are removed.
*/
onDeviceRemoved(nativeId: string): Promise<void>;
/**
* onDevicesChanged is used to sync Scrypted with devices that are attached to a hub, such as Hue or SmartThings. All the devices should be reported at once.
*/
onDevicesChanged(devices: DeviceManifest): Promise<void>;
/**
* Restart the plugin. May not happen immediately.
*/
requestRestart(): Promise<void>;
}
/**
* DeviceProvider acts as a controller/hub and exposes multiple devices to Scrypted Device Manager.
*
* @category Device Provider Reference
*/
export interface DeviceProvider {
/**
@@ -793,11 +872,25 @@ export interface DeviceProvider {
*/
getDevice(nativeId: ScryptedNativeId): any;
}
/**
* DeviceManifest is passed to DeviceManager.onDevicesChanged to sync a full list of devices from the controller/hub (Hue, SmartThings, etc)
*
* @category Device Provider Reference
*/
export interface DeviceManifest {
/**
* The native id of the hub or discovery DeviceProvider that manages these devices.
*/
providerNativeId?: ScryptedNativeId;
devices?: Device[];
}
export interface DeviceCreatorSettings {
[key: string]: SettingValue;
}
/**
* A DeviceProvider that allows the user to create a device.
*
* @category Device Provider Reference
*/
export interface DeviceCreator {
getCreateDeviceSettings(): Promise<Setting[]>;
@@ -809,6 +902,8 @@ export interface DeviceCreator {
}
/**
* A DeviceProvider that has a device discovery mechanism.
*
* @category Device Provider Reference
*/
export interface DeviceDiscovery {
/**
@@ -824,6 +919,8 @@ export interface Battery {
}
/**
* Refresh indicates that this device has properties that are not automatically updated, and must be periodically refreshed via polling. Device implementations should never implement their own underlying polling algorithm, and instead implement Refresh to allow Scrypted to manage polling intelligently.
*
* @category Device Provider Reference
*/
export interface Refresh {
/**
@@ -1135,6 +1232,9 @@ export interface MediaObjectOptions {
*/
sourceId?: string;
}
/**
* @category Media Reference
*/
export interface MediaManager {
/**
* Add an convertor to consider for use when converting MediaObjects.
@@ -1200,69 +1300,6 @@ export interface FFmpegInput extends MediaStreamUrl {
videoDecoderArguments?: string[];
h264FilterArguments?: string[];
}
/**
* DeviceManager is the interface used by DeviceProvider to report new devices, device states, and device events to Scrypted.
*/
export interface DeviceManager {
/**
* Get the logger for a device given a native id.
*/
getDeviceLogger(nativeId?: ScryptedNativeId): Logger;
/**
* Get the console for the device given a native id.
*/
getDeviceConsole?(nativeId?: ScryptedNativeId): Console;
/**
* Get the console for the device given a native id.
*/
getMixinConsole?(mixinId: string, nativeId?: ScryptedNativeId): Console;
/**
* Get the device state maintained by Scrypted. Setting properties on this state will update the state in Scrypted.
*/
getDeviceState(nativeId?: ScryptedNativeId): DeviceState;
/**
* Create a device state object that will trap all state setting calls. Used internally by mixins and fork.
*/
createDeviceState?(id: string, setState: (property: string, value: any) => Promise<void>): DeviceState;
/**
* Get the storage for a mixin.
* @param id The id of the device being mixined.
* @param nativeId The nativeId of the MixinProvider.
*/
getMixinStorage(id: string, nativeId?: ScryptedNativeId): Storage;
/**
* Fire an event for a mixin provided by this plugin.
*/
onMixinEvent(id: string, mixinDevice: any, eventInterface: string, eventData: any): Promise<void>;
/**
* Get the device Storage object.
*/
getDeviceStorage(nativeId?: ScryptedNativeId): Storage;
/**
* Get all the native ids that have been reported by this plugin. This always includes "undefined", the plugin itself.
*/
getNativeIds(): string[];
/**
* onDeviceDiscovered is used to report new devices that are trickle discovered, one by one, such as via a network broadcast.
*/
onDeviceDiscovered(device: Device): Promise<string>;
/**
* Fire an event for a device provided by this plugin.
*/
onDeviceEvent(nativeId: ScryptedNativeId, eventInterface: string, eventData: any): Promise<void>;
/**
* onDeviceRemoved is used to report when discovered devices are removed.
*/
onDeviceRemoved(nativeId: string): Promise<void>;
/**
* onDevicesChanged is used to sync Scrypted with devices that are attached to a hub, such as Hue or SmartThings. All the devices should be reported at once.
*/
onDevicesChanged(devices: DeviceManifest): Promise<void>;
/**
* Restart the plugin. May not happen immediately.
*/
requestRestart(): Promise<void>;
}
export interface DeviceInformation {
model?: string;
manufacturer?: string;
@@ -1275,6 +1312,8 @@ export interface DeviceInformation {
}
/**
* Device objects are created by DeviceProviders when new devices are discover and synced to Scrypted via the DeviceManager.
*
* @category Device Provider Reference
*/
export interface Device {
name: string;
@@ -1292,18 +1331,10 @@ export interface Device {
room?: string;
internal?: boolean;
}
/**
* DeviceManifest is passed to DeviceManager.onDevicesChanged to sync a full list of devices from the controller/hub (Hue, SmartThings, etc)
*/
export interface DeviceManifest {
/**
* The native id of the hub or discovery DeviceProvider that manages these devices.
*/
providerNativeId?: ScryptedNativeId;
devices?: Device[];
}
/**
* EndpointManager provides publicly accessible URLs that can be used to contact your Scrypted Plugin.
*
* @category Webhook and Push Reference
*/
export interface EndpointManager {
/**
@@ -1353,6 +1384,8 @@ export interface EndpointManager {
}
/**
* SystemManager is used by scripts to query device state and access devices.
*
* @category Core Reference
*/
export interface SystemManager {
/**
@@ -1422,6 +1455,8 @@ export interface MixinProvider {
}
/**
* The HttpRequestHandler allows handling of web requests under the endpoint path: /endpoint/npm-package-name/*.
*
* @category Webhook and Push Reference
*/
export interface HttpRequestHandler {
/**
@@ -1429,6 +1464,9 @@ export interface HttpRequestHandler {
*/
onRequest(request: HttpRequest, response: HttpResponse): Promise<void>;
}
/**
* @category Webhook and Push Reference
*/
export interface HttpRequest {
body?: string;
headers?: object;
@@ -1440,6 +1478,8 @@ export interface HttpRequest {
}
/**
* Response object provided by the HttpRequestHandler.
*
* @category Webhook and Push Reference
*/
export interface HttpResponse {
send(body: string): void;
@@ -1450,6 +1490,9 @@ export interface HttpResponse {
sendFile(path: string, options: HttpResponseOptions): void;
sendSocket(socket: any, options: HttpResponseOptions): void;
}
/**
* @category Webhook and Push Reference
*/
export interface HttpResponseOptions {
code?: number;
headers?: object;
@@ -1457,6 +1500,10 @@ export interface HttpResponseOptions {
export interface EngineIOHandler {
onConnection(request: HttpRequest, webSocketUrl: string): Promise<void>;
}
/**
* @category Webhook and Push Reference
*
*/
export interface PushHandler {
/**
* Callback to handle an incoming push.

View File

@@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
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 = exports.TYPES_VERSION = void 0;
exports.TYPES_VERSION = "0.0.89";
exports.TYPES_VERSION = "0.0.90";
class DeviceBase {
}
exports.DeviceBase = DeviceBase;
@@ -663,6 +663,9 @@ exports.ScryptedInterfaceDescriptors = {
]
}
};
/**
* @category Core Reference
*/
var ScryptedDeviceType;
(function (ScryptedDeviceType) {
ScryptedDeviceType["Builtin"] = "Builtin";

View File

@@ -1,5 +1,5 @@
export const TYPES_VERSION = "0.0.89";
export const TYPES_VERSION = "0.0.90";
export interface DeviceState {
@@ -788,6 +788,8 @@ export type ScryptedNativeId = string | undefined;
/**
* All devices in Scrypted implement ScryptedDevice, which contains the id, name, and type. Add listeners to subscribe to events from that device.
*
* @category Core Reference
*/
export interface ScryptedDevice {
/**
@@ -838,6 +840,9 @@ export interface EventListenerOptions {
watch?: boolean;
}
/**
* @category Core Reference
*/
export type EventListener = (eventSource: ScryptedDevice | undefined, eventDetails: EventDetails, eventData: any) => void;
export interface EventDetails {
@@ -848,11 +853,17 @@ export interface EventDetails {
}
/**
* Returned when an event listener is attached to an EventEmitter. Call removeListener to unregister from events.
*/
*
* @category Core Reference
*/
export interface EventListenerRegister {
removeListener(): void;
}
/**
* @category Core Reference
*/
export enum ScryptedDeviceType {
Builtin = "Builtin",
Camera = "Camera",
@@ -974,6 +985,8 @@ export interface Notifier {
}
/**
* MediaObject is an intermediate object within Scrypted to represent all media objects. Plugins should use the MediaConverter to convert the Scrypted MediaObject into a desired type, whether it is a externally accessible URL, a Buffer, etc.
*
* @category Media Reference
*/
export interface MediaObject {
mimeType: string;
@@ -1458,8 +1471,88 @@ export interface Entry {
export interface EntrySensor {
entryOpen?: boolean;
}
/**
* DeviceManager is the interface used by DeviceProvider to report new devices, device states, and device events to Scrypted.
*
* @category Device Provider Reference
*/
export interface DeviceManager {
/**
* Get the logger for a device given a native id.
*/
getDeviceLogger(nativeId?: ScryptedNativeId): Logger;
/**
* Get the console for the device given a native id.
*/
getDeviceConsole?(nativeId?: ScryptedNativeId): Console;
/**
* Get the console for the device given a native id.
*/
getMixinConsole?(mixinId: string, nativeId?: ScryptedNativeId): Console;
/**
* Get the device state maintained by Scrypted. Setting properties on this state will update the state in Scrypted.
*/
getDeviceState(nativeId?: ScryptedNativeId): DeviceState;
/**
* Create a device state object that will trap all state setting calls. Used internally by mixins and fork.
*/
createDeviceState?(id: string, setState: (property: string, value: any) => Promise<void>): DeviceState;
/**
* Get the storage for a mixin.
* @param id The id of the device being mixined.
* @param nativeId The nativeId of the MixinProvider.
*/
getMixinStorage(id: string, nativeId?: ScryptedNativeId): Storage;
/**
* Fire an event for a mixin provided by this plugin.
*/
onMixinEvent(id: string, mixinDevice: any, eventInterface: string, eventData: any): Promise<void>;
/**
* Get the device Storage object.
*/
getDeviceStorage(nativeId?: ScryptedNativeId): Storage;
/**
* Get all the native ids that have been reported by this plugin. This always includes "undefined", the plugin itself.
*/
getNativeIds(): string[];
/**
* onDeviceDiscovered is used to report new devices that are trickle discovered, one by one, such as via a network broadcast.
*/
onDeviceDiscovered(device: Device): Promise<string>;
/**
* Fire an event for a device provided by this plugin.
*/
onDeviceEvent(nativeId: ScryptedNativeId, eventInterface: string, eventData: any): Promise<void>;
/**
* onDeviceRemoved is used to report when discovered devices are removed.
*/
onDeviceRemoved(nativeId: string): Promise<void>;
/**
* onDevicesChanged is used to sync Scrypted with devices that are attached to a hub, such as Hue or SmartThings. All the devices should be reported at once.
*/
onDevicesChanged(devices: DeviceManifest): Promise<void>;
/**
* Restart the plugin. May not happen immediately.
*/
requestRestart(): Promise<void>;
}
/**
* DeviceProvider acts as a controller/hub and exposes multiple devices to Scrypted Device Manager.
*
* @category Device Provider Reference
*/
export interface DeviceProvider {
/**
@@ -1468,11 +1561,25 @@ export interface DeviceProvider {
getDevice(nativeId: ScryptedNativeId): any;
}
/**
* DeviceManifest is passed to DeviceManager.onDevicesChanged to sync a full list of devices from the controller/hub (Hue, SmartThings, etc)
*
* @category Device Provider Reference
*/
export interface DeviceManifest {
/**
* The native id of the hub or discovery DeviceProvider that manages these devices.
*/
providerNativeId?: ScryptedNativeId;
devices?: Device[];
}
export interface DeviceCreatorSettings {
[key: string]: SettingValue;
}
/**
* A DeviceProvider that allows the user to create a device.
*
* @category Device Provider Reference
*/
export interface DeviceCreator {
getCreateDeviceSettings(): Promise<Setting[]>;
@@ -1484,6 +1591,8 @@ export interface DeviceCreator {
}
/**
* A DeviceProvider that has a device discovery mechanism.
*
* @category Device Provider Reference
*/
export interface DeviceDiscovery {
/**
@@ -1499,6 +1608,8 @@ export interface Battery {
}
/**
* Refresh indicates that this device has properties that are not automatically updated, and must be periodically refreshed via polling. Device implementations should never implement their own underlying polling algorithm, and instead implement Refresh to allow Scrypted to manage polling intelligently.
*
* @category Device Provider Reference
*/
export interface Refresh {
/**
@@ -1833,6 +1944,9 @@ export interface MediaObjectOptions {
sourceId?: string;
}
/**
* @category Media Reference
*/
export interface MediaManager {
/**
* Add an convertor to consider for use when converting MediaObjects.
@@ -1909,82 +2023,6 @@ export interface FFmpegInput extends MediaStreamUrl {
videoDecoderArguments?: string[];
h264FilterArguments?: string[];
}
/**
* DeviceManager is the interface used by DeviceProvider to report new devices, device states, and device events to Scrypted.
*/
export interface DeviceManager {
/**
* Get the logger for a device given a native id.
*/
getDeviceLogger(nativeId?: ScryptedNativeId): Logger;
/**
* Get the console for the device given a native id.
*/
getDeviceConsole?(nativeId?: ScryptedNativeId): Console;
/**
* Get the console for the device given a native id.
*/
getMixinConsole?(mixinId: string, nativeId?: ScryptedNativeId): Console;
/**
* Get the device state maintained by Scrypted. Setting properties on this state will update the state in Scrypted.
*/
getDeviceState(nativeId?: ScryptedNativeId): DeviceState;
/**
* Create a device state object that will trap all state setting calls. Used internally by mixins and fork.
*/
createDeviceState?(id: string, setState: (property: string, value: any) => Promise<void>): DeviceState;
/**
* Get the storage for a mixin.
* @param id The id of the device being mixined.
* @param nativeId The nativeId of the MixinProvider.
*/
getMixinStorage(id: string, nativeId?: ScryptedNativeId): Storage;
/**
* Fire an event for a mixin provided by this plugin.
*/
onMixinEvent(id: string, mixinDevice: any, eventInterface: string, eventData: any): Promise<void>;
/**
* Get the device Storage object.
*/
getDeviceStorage(nativeId?: ScryptedNativeId): Storage;
/**
* Get all the native ids that have been reported by this plugin. This always includes "undefined", the plugin itself.
*/
getNativeIds(): string[];
/**
* onDeviceDiscovered is used to report new devices that are trickle discovered, one by one, such as via a network broadcast.
*/
onDeviceDiscovered(device: Device): Promise<string>;
/**
* Fire an event for a device provided by this plugin.
*/
onDeviceEvent(nativeId: ScryptedNativeId, eventInterface: string, eventData: any): Promise<void>;
/**
* onDeviceRemoved is used to report when discovered devices are removed.
*/
onDeviceRemoved(nativeId: string): Promise<void>;
/**
* onDevicesChanged is used to sync Scrypted with devices that are attached to a hub, such as Hue or SmartThings. All the devices should be reported at once.
*/
onDevicesChanged(devices: DeviceManifest): Promise<void>;
/**
* Restart the plugin. May not happen immediately.
*/
requestRestart(): Promise<void>;
}
export interface DeviceInformation {
model?: string;
manufacturer?: string;
@@ -1997,6 +2035,8 @@ export interface DeviceInformation {
}
/**
* Device objects are created by DeviceProviders when new devices are discover and synced to Scrypted via the DeviceManager.
*
* @category Device Provider Reference
*/
export interface Device {
name: string;
@@ -2015,18 +2055,10 @@ export interface Device {
internal?: boolean;
}
/**
* DeviceManifest is passed to DeviceManager.onDevicesChanged to sync a full list of devices from the controller/hub (Hue, SmartThings, etc)
*/
export interface DeviceManifest {
/**
* The native id of the hub or discovery DeviceProvider that manages these devices.
*/
providerNativeId?: ScryptedNativeId;
devices?: Device[];
}
/**
* EndpointManager provides publicly accessible URLs that can be used to contact your Scrypted Plugin.
*
* @category Webhook and Push Reference
*/
export interface EndpointManager {
/**
@@ -2087,6 +2119,8 @@ export interface EndpointManager {
}
/**
* SystemManager is used by scripts to query device state and access devices.
*
* @category Core Reference
*/
export interface SystemManager {
/**
@@ -2162,6 +2196,8 @@ export interface MixinProvider {
}
/**
* The HttpRequestHandler allows handling of web requests under the endpoint path: /endpoint/npm-package-name/*.
*
* @category Webhook and Push Reference
*/
export interface HttpRequestHandler {
/**
@@ -2170,6 +2206,9 @@ export interface HttpRequestHandler {
onRequest(request: HttpRequest, response: HttpResponse): Promise<void>;
}
/**
* @category Webhook and Push Reference
*/
export interface HttpRequest {
body?: string;
headers?: object;
@@ -2181,6 +2220,8 @@ export interface HttpRequest {
}
/**
* Response object provided by the HttpRequestHandler.
*
* @category Webhook and Push Reference
*/
export interface HttpResponse {
send(body: string): void;
@@ -2197,6 +2238,9 @@ export interface HttpResponse {
sendSocket(socket: any, options: HttpResponseOptions): void;
}
/**
* @category Webhook and Push Reference
*/
export interface HttpResponseOptions {
code?: number;
headers?: object;
@@ -2205,6 +2249,10 @@ export interface EngineIOHandler {
onConnection(request: HttpRequest, webSocketUrl: string): Promise<void>;
}
/**
* @category Webhook and Push Reference
*
*/
export interface PushHandler {
/**
* Callback to handle an incoming push.

View File

@@ -1,12 +1,12 @@
{
"name": "@scrypted/types",
"version": "0.0.89",
"version": "0.0.90",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@scrypted/types",
"version": "0.0.89",
"version": "0.0.90",
"license": "ISC",
"devDependencies": {}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@scrypted/types",
"version": "0.0.89",
"version": "0.0.90",
"description": "",
"main": "index.js",
"author": "",

View File

@@ -8,184 +8,184 @@ from .other import *
class AirQuality(Enum):
Excellent = "Excellent"
Fair = "Fair"
Good = "Good"
Inferior = "Inferior"
Poor = "Poor"
Unknown = "Unknown"
Excellent = undefined
Fair = undefined
Good = undefined
Inferior = undefined
Poor = undefined
Unknown = undefined
class FanMode(Enum):
Auto = "Auto"
Manual = "Manual"
Auto = undefined
Manual = undefined
class HumidityMode(Enum):
Auto = "Auto"
Dehumidify = "Dehumidify"
Humidify = "Humidify"
Off = "Off"
Auto = undefined
Dehumidify = undefined
Humidify = undefined
Off = undefined
class LockState(Enum):
Jammed = "Jammed"
Locked = "Locked"
Unlocked = "Unlocked"
Jammed = undefined
Locked = undefined
Unlocked = undefined
class MediaPlayerState(Enum):
Buffering = "Buffering"
Idle = "Idle"
Paused = "Paused"
Playing = "Playing"
Buffering = undefined
Idle = undefined
Paused = undefined
Playing = undefined
class ScryptedDeviceType(Enum):
API = "API"
Automation = "Automation"
Builtin = "Builtin"
Camera = "Camera"
DataSource = "DataSource"
DeviceProvider = "DeviceProvider"
Display = "Display"
Doorbell = "Doorbell"
Entry = "Entry"
Event = "Event"
Fan = "Fan"
Garage = "Garage"
Irrigation = "Irrigation"
Light = "Light"
Lock = "Lock"
Notifier = "Notifier"
Outlet = "Outlet"
PasswordControl = "PasswordControl"
Person = "Person"
Program = "Program"
Scene = "Scene"
SecuritySystem = "SecuritySystem"
Sensor = "Sensor"
SmartDisplay = "SmartDisplay"
SmartSpeaker = "SmartSpeaker"
Speaker = "Speaker"
Switch = "Switch"
Thermostat = "Thermostat"
Unknown = "Unknown"
Vacuum = "Vacuum"
Valve = "Valve"
API = undefined
Automation = undefined
Builtin = undefined
Camera = undefined
DataSource = undefined
DeviceProvider = undefined
Display = undefined
Doorbell = undefined
Entry = undefined
Event = undefined
Fan = undefined
Garage = undefined
Irrigation = undefined
Light = undefined
Lock = undefined
Notifier = undefined
Outlet = undefined
PasswordControl = undefined
Person = undefined
Program = undefined
Scene = undefined
SecuritySystem = undefined
Sensor = undefined
SmartDisplay = undefined
SmartSpeaker = undefined
Speaker = undefined
Switch = undefined
Thermostat = undefined
Unknown = undefined
Vacuum = undefined
Valve = undefined
class ScryptedInterface(Enum):
AirQualitySensor = "AirQualitySensor"
AmbientLightSensor = "AmbientLightSensor"
AudioSensor = "AudioSensor"
Authenticator = "Authenticator"
Battery = "Battery"
BinarySensor = "BinarySensor"
Brightness = "Brightness"
BufferConverter = "BufferConverter"
CO2Sensor = "CO2Sensor"
Camera = "Camera"
ColorSettingHsv = "ColorSettingHsv"
ColorSettingRgb = "ColorSettingRgb"
ColorSettingTemperature = "ColorSettingTemperature"
DeviceCreator = "DeviceCreator"
DeviceDiscovery = "DeviceDiscovery"
DeviceProvider = "DeviceProvider"
Display = "Display"
Dock = "Dock"
EngineIOHandler = "EngineIOHandler"
Entry = "Entry"
EntrySensor = "EntrySensor"
EventRecorder = "EventRecorder"
Fan = "Fan"
FloodSensor = "FloodSensor"
HttpRequestHandler = "HttpRequestHandler"
HumiditySensor = "HumiditySensor"
HumiditySetting = "HumiditySetting"
Intercom = "Intercom"
LauncherApplication = "LauncherApplication"
Lock = "Lock"
LuminanceSensor = "LuminanceSensor"
MediaPlayer = "MediaPlayer"
Microphone = "Microphone"
MixinProvider = "MixinProvider"
MotionSensor = "MotionSensor"
Notifier = "Notifier"
OauthClient = "OauthClient"
ObjectDetection = "ObjectDetection"
ObjectDetector = "ObjectDetector"
OccupancySensor = "OccupancySensor"
OnOff = "OnOff"
Online = "Online"
PM25Sensor = "PM25Sensor"
PanTiltZoom = "PanTiltZoom"
PasswordStore = "PasswordStore"
Pause = "Pause"
PositionSensor = "PositionSensor"
PowerSensor = "PowerSensor"
Program = "Program"
PushHandler = "PushHandler"
RTCSignalingChannel = "RTCSignalingChannel"
RTCSignalingClient = "RTCSignalingClient"
Readme = "Readme"
Refresh = "Refresh"
Scene = "Scene"
Scriptable = "Scriptable"
ScryptedDevice = "ScryptedDevice"
ScryptedPlugin = "ScryptedPlugin"
SecuritySystem = "SecuritySystem"
Settings = "Settings"
SoftwareUpdate = "SoftwareUpdate"
StartStop = "StartStop"
TamperSensor = "TamperSensor"
TemperatureSetting = "TemperatureSetting"
Thermometer = "Thermometer"
UltravioletSensor = "UltravioletSensor"
VOCSensor = "VOCSensor"
VideoCamera = "VideoCamera"
VideoCameraConfiguration = "VideoCameraConfiguration"
VideoClips = "VideoClips"
VideoRecorder = "VideoRecorder"
AirQualitySensor = undefined
AmbientLightSensor = undefined
AudioSensor = undefined
Authenticator = undefined
Battery = undefined
BinarySensor = undefined
Brightness = undefined
BufferConverter = undefined
CO2Sensor = undefined
Camera = undefined
ColorSettingHsv = undefined
ColorSettingRgb = undefined
ColorSettingTemperature = undefined
DeviceCreator = undefined
DeviceDiscovery = undefined
DeviceProvider = undefined
Display = undefined
Dock = undefined
EngineIOHandler = undefined
Entry = undefined
EntrySensor = undefined
EventRecorder = undefined
Fan = undefined
FloodSensor = undefined
HttpRequestHandler = undefined
HumiditySensor = undefined
HumiditySetting = undefined
Intercom = undefined
LauncherApplication = undefined
Lock = undefined
LuminanceSensor = undefined
MediaPlayer = undefined
Microphone = undefined
MixinProvider = undefined
MotionSensor = undefined
Notifier = undefined
OauthClient = undefined
ObjectDetection = undefined
ObjectDetector = undefined
OccupancySensor = undefined
OnOff = undefined
Online = undefined
PM25Sensor = undefined
PanTiltZoom = undefined
PasswordStore = undefined
Pause = undefined
PositionSensor = undefined
PowerSensor = undefined
Program = undefined
PushHandler = undefined
RTCSignalingChannel = undefined
RTCSignalingClient = undefined
Readme = undefined
Refresh = undefined
Scene = undefined
Scriptable = undefined
ScryptedDevice = undefined
ScryptedPlugin = undefined
SecuritySystem = undefined
Settings = undefined
SoftwareUpdate = undefined
StartStop = undefined
TamperSensor = undefined
TemperatureSetting = undefined
Thermometer = undefined
UltravioletSensor = undefined
VOCSensor = undefined
VideoCamera = undefined
VideoCameraConfiguration = undefined
VideoClips = undefined
VideoRecorder = undefined
class ScryptedMimeTypes(Enum):
FFmpegInput = "x-scrypted/x-ffmpeg-input"
FFmpegTranscodeStream = "x-scrypted/x-ffmpeg-transcode-stream"
InsecureLocalUrl = "text/x-insecure-local-uri"
LocalUrl = "text/x-local-uri"
MediaObject = "x-scrypted/x-scrypted-media-object"
MediaStreamUrl = "text/x-media-url"
PushEndpoint = "text/x-push-endpoint"
RTCConnectionManagement = "x-scrypted/x-scrypted-rtc-connection-management"
RTCSignalingChannel = "x-scrypted/x-scrypted-rtc-signaling-channel"
RTCSignalingSession = "x-scrypted/x-scrypted-rtc-signaling-session"
RequestMediaStream = "x-scrypted/x-scrypted-request-stream"
SchemePrefix = "x-scrypted/x-scrypted-scheme-"
ScryptedDevice = "x-scrypted/x-scrypted-device"
ScryptedDeviceId = "x-scrypted/x-scrypted-device-id"
Url = "text/x-uri"
FFmpegInput = undefined
FFmpegTranscodeStream = undefined
InsecureLocalUrl = undefined
LocalUrl = undefined
MediaObject = undefined
MediaStreamUrl = undefined
PushEndpoint = undefined
RTCConnectionManagement = undefined
RTCSignalingChannel = undefined
RTCSignalingSession = undefined
RequestMediaStream = undefined
SchemePrefix = undefined
ScryptedDevice = undefined
ScryptedDeviceId = undefined
Url = undefined
class SecuritySystemMode(Enum):
AwayArmed = "AwayArmed"
Disarmed = "Disarmed"
HomeArmed = "HomeArmed"
NightArmed = "NightArmed"
AwayArmed = undefined
Disarmed = undefined
HomeArmed = undefined
NightArmed = undefined
class SecuritySystemObstruction(Enum):
Error = "Error"
Occupied = "Occupied"
Sensor = "Sensor"
Time = "Time"
Error = undefined
Occupied = undefined
Sensor = undefined
Time = undefined
class TemperatureUnit(Enum):
C = "C"
F = "F"
C = undefined
F = undefined
class ThermostatMode(Enum):
Auto = "Auto"
Cool = "Cool"
Dry = "Dry"
Eco = "Eco"
FanOnly = "FanOnly"
Heat = "Heat"
HeatCool = "HeatCool"
Off = "Off"
On = "On"
Purifier = "Purifier"
Auto = undefined
Cool = undefined
Dry = undefined
Eco = undefined
FanOnly = undefined
Heat = undefined
HeatCool = undefined
Off = undefined
On = undefined
Purifier = undefined
class H264Info(TypedDict):