sdk/server: humidity and fan types

This commit is contained in:
Koushik Dutta
2021-11-07 19:13:17 -08:00
parent 9ab7ac3785
commit d128732289
10 changed files with 154 additions and 21 deletions

4
sdk/index.d.ts vendored
View File

@@ -1,6 +1,6 @@
export * from './types';
import type { ScryptedNativeId } from './types';
import type { DeviceInformation, ScryptedInterface, ScryptedStatic, ScryptedDeviceType, Logger, ColorRgb, ColorHsv, DeviceState, TemperatureUnit, LockState, ThermostatMode, Position } from './types';
import type { HumiditySettingStatus, DeviceInformation, ScryptedInterface, ScryptedStatic, ScryptedDeviceType, Logger, ColorRgb, ColorHsv, DeviceState, TemperatureUnit, LockState, ThermostatMode, Position, FanStatus } from './types';
export declare class ScryptedDeviceBase implements DeviceState {
nativeId?: string;
id?: string;
@@ -38,6 +38,8 @@ export declare class ScryptedDeviceBase implements DeviceState {
thermostatSetpoint?: number;
thermostatSetpointHigh?: number;
thermostatSetpointLow?: number;
humiditySetting?: HumiditySettingStatus;
fan?: FanStatus;
lockState?: LockState;
entryOpen?: boolean;
batteryLevel?: number;

View File

@@ -1,7 +1,7 @@
export * from './types'
import { ScryptedInterfaceProperty } from './types';
import type { ScryptedNativeId, DeviceManager, SystemManager, MediaManager, EndpointManager } from './types';
import type { DeviceInformation, ScryptedInterface, ScryptedStatic, ScryptedDeviceType, Logger, ColorRgb, ColorHsv, DeviceState, TemperatureUnit, LockState, ThermostatMode, Position, ScryptedDevice } from './types';
import type { HumiditySettingStatus, DeviceInformation, ScryptedInterface, ScryptedStatic, ScryptedDeviceType, Logger, ColorRgb, ColorHsv, DeviceState, TemperatureUnit, LockState, ThermostatMode, Position, FanStatus } from './types';
export class ScryptedDeviceBase implements DeviceState {
id?: string;
@@ -39,6 +39,8 @@ export class ScryptedDeviceBase implements DeviceState {
thermostatSetpoint?: number;
thermostatSetpointHigh?: number;
thermostatSetpointLow?: number;
humiditySetting?: HumiditySettingStatus;
fan?: FanStatus;
lockState?: LockState;
entryOpen?: boolean;
batteryLevel?: number;

4
sdk/package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "@scrypted/sdk",
"version": "0.0.93",
"version": "0.0.94",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@scrypted/sdk",
"version": "0.0.93",
"version": "0.0.94",
"license": "ISC",
"dependencies": {
"@babel/plugin-proposal-class-properties": "^7.14.5",

View File

@@ -1,6 +1,6 @@
{
"name": "@scrypted/sdk",
"version": "0.0.93",
"version": "0.0.94",
"description": "",
"main": "index.js",
"scripts": {

37
sdk/types.d.ts vendored
View File

@@ -245,7 +245,7 @@ export interface Dock {
/**
* TemperatureSetting represents a thermostat device.
*/
export interface TemperatureSetting extends Thermometer, HumiditySensor {
export interface TemperatureSetting {
setThermostatMode(mode: ThermostatMode): Promise<void>;
setThermostatSetpoint(degrees: number): Promise<void>;
setThermostatSetpointHigh(high: number): Promise<void>;
@@ -257,6 +257,41 @@ export interface TemperatureSetting extends Thermometer, HumiditySensor {
thermostatSetpointHigh?: number;
thermostatSetpointLow?: number;
}
export declare enum HumidityMode {
Off = "Off",
Humidify = "Humidify",
Dehumidify = "Dehumidify",
Auto = "Auto"
}
export interface HumidityCommand {
mode?: HumidityMode;
setpoint?: number;
}
export interface HumiditySettingStatus extends HumidityCommand {
activeMode?: HumidityMode;
availableModes?: HumidityMode[];
}
export interface HumiditySetting {
humiditySetting: HumiditySettingStatus;
setHumidity(humidity: HumidityCommand): Promise<void>;
}
export interface FanStatus {
speed?: number;
/**
* Available fan speed range in RPM.
*/
availableSpeeds: [number, number];
}
export interface Fan {
/**
* RPM. Negative numbers are valid to indicate fan direction,
* if it rotates in both directions.
* A fan speed of zero indicates it is active, but currently off.
* A fan speed of null or undefined indicates the fan is off.
*/
fan?: FanStatus;
setFanSpeed(speed: number): Promise<void>;
}
export interface Thermometer {
/**
* Get the ambient temperature in Celsius.

View File

@@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ScryptedInterfaceDescriptors = exports.SCRYPTED_MEDIA_SCHEME = exports.ScryptedMimeTypes = exports.ScryptedInterfaceProperty = exports.ScryptedInterface = exports.MediaPlayerState = exports.LockState = exports.ThermostatMode = exports.TemperatureUnit = exports.ScryptedDeviceType = void 0;
exports.ScryptedInterfaceDescriptors = exports.SCRYPTED_MEDIA_SCHEME = exports.ScryptedMimeTypes = exports.ScryptedInterfaceProperty = exports.ScryptedInterface = exports.MediaPlayerState = exports.LockState = exports.ThermostatMode = exports.TemperatureUnit = exports.HumidityMode = exports.ScryptedDeviceType = void 0;
var ScryptedDeviceType;
(function (ScryptedDeviceType) {
ScryptedDeviceType["Builtin"] = "Builtin";
@@ -32,6 +32,13 @@ var ScryptedDeviceType;
ScryptedDeviceType["Person"] = "Person";
ScryptedDeviceType["Unknown"] = "Unknown";
})(ScryptedDeviceType = exports.ScryptedDeviceType || (exports.ScryptedDeviceType = {}));
var HumidityMode;
(function (HumidityMode) {
HumidityMode["Off"] = "Off";
HumidityMode["Humidify"] = "Humidify";
HumidityMode["Dehumidify"] = "Dehumidify";
HumidityMode["Auto"] = "Auto";
})(HumidityMode = exports.HumidityMode || (exports.HumidityMode = {}));
var TemperatureUnit;
(function (TemperatureUnit) {
TemperatureUnit["C"] = "C";
@@ -602,6 +609,24 @@ exports.ScryptedInterfaceDescriptors = {
"getDetectionInput",
"getObjectTypes",
]
},
HumiditySetting: {
name: "HumiditySetting",
properties: [
"humiditySetting",
],
methods: [
"setHumidity",
]
},
Fan: {
name: "Fan",
properties: [
"fan",
],
methods: [
"setFanSpeed",
],
}
};
//# sourceMappingURL=types.js.map

View File

@@ -265,7 +265,7 @@ export interface Dock {
/**
* TemperatureSetting represents a thermostat device.
*/
export interface TemperatureSetting extends Thermometer, HumiditySensor {
export interface TemperatureSetting {
setThermostatMode(mode: ThermostatMode): Promise<void>;
setThermostatSetpoint(degrees: number): Promise<void>;
@@ -281,6 +281,41 @@ export interface TemperatureSetting extends Thermometer, HumiditySensor {
thermostatSetpointHigh?: number;
thermostatSetpointLow?: number;
}
export enum HumidityMode {
Off = "Off",
Humidify = "Humidify",
Dehumidify = "Dehumidify",
Auto = "Auto",
}
export interface HumidityCommand {
mode?: HumidityMode;
setpoint?: number;
}
export interface HumiditySettingStatus extends HumidityCommand {
activeMode?: HumidityMode;
availableModes?: HumidityMode[];
}
export interface HumiditySetting {
humiditySetting: HumiditySettingStatus;
setHumidity(humidity: HumidityCommand): Promise<void>;
}
export interface FanStatus {
speed?: number;
/**
* Available fan speed range in RPM.
*/
availableSpeeds: [number, number];
}
export interface Fan {
/**
* RPM. Negative numbers are valid to indicate fan direction,
* if it rotates in both directions.
* A fan speed of zero indicates it is active, but currently off.
* A fan speed of null or undefined indicates the fan is off.
*/
fan?: FanStatus;
setFanSpeed(speed: number): Promise<void>;
}
export interface Thermometer {
/**
* Get the ambient temperature in Celsius.
@@ -1668,6 +1703,24 @@ export const ScryptedInterfaceDescriptors: { [scryptedInterface: string]: Scrypt
"getDetectionInput",
"getObjectTypes",
]
},
HumiditySetting: {
name: "HumiditySetting",
properties: [
"humiditySetting",
],
methods: [
"setHumidity",
]
},
Fan: {
name: "Fan",
properties: [
"fan",
],
methods: [
"setFanSpeed",
],
}
} as any;

View File

@@ -1,16 +1,16 @@
{
"name": "@scrypted/server",
"version": "0.0.54",
"version": "0.0.55",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@scrypted/server",
"version": "0.0.54",
"version": "0.0.55",
"license": "ISC",
"dependencies": {
"@mapbox/node-pre-gyp": "^1.0.5",
"@scrypted/sdk": "^0.0.93",
"@scrypted/sdk": "^0.0.94",
"adm-zip": "^0.5.3",
"axios": "^0.21.1",
"body-parser": "^1.19.0",
@@ -628,9 +628,9 @@
}
},
"node_modules/@scrypted/sdk": {
"version": "0.0.93",
"resolved": "https://registry.npmjs.org/@scrypted/sdk/-/sdk-0.0.93.tgz",
"integrity": "sha512-BP7QBrFOF3LViVn6KYEm6jHGmnlkUVEXxtCwhH2iHmUqUVQvuK2ZIJ2MIUAZ8ql6s+SnP0rd//8a2v6s2ujWMA==",
"version": "0.0.94",
"resolved": "https://registry.npmjs.org/@scrypted/sdk/-/sdk-0.0.94.tgz",
"integrity": "sha512-rLb/esVaQUbooyqzoOJBugMVagvlu6O4Q9QjTgjOV4rs1PImVtcth73rVY7bu0fg3kyb5zOg0yBoL9TB5UsZyg==",
"dependencies": {
"@babel/plugin-proposal-class-properties": "^7.14.5",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5",
@@ -645,8 +645,10 @@
"babel-loader": "^8.2.3",
"babel-plugin-const-enum": "^1.1.0",
"esbuild": "^0.13.8",
"ncp": "^2.0.0",
"raw-loader": "^4.0.2",
"rimraf": "^3.0.2",
"tmp": "^0.2.1",
"ts-loader": "^9.2.6",
"typescript-json-schema": "^0.50.1",
"webpack": "^5.59.0"
@@ -3227,6 +3229,14 @@
"resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz",
"integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg=="
},
"node_modules/ncp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
"integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
"bin": {
"ncp": "bin/ncp"
}
},
"node_modules/negotiator": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
@@ -5081,9 +5091,9 @@
}
},
"@scrypted/sdk": {
"version": "0.0.93",
"resolved": "https://registry.npmjs.org/@scrypted/sdk/-/sdk-0.0.93.tgz",
"integrity": "sha512-BP7QBrFOF3LViVn6KYEm6jHGmnlkUVEXxtCwhH2iHmUqUVQvuK2ZIJ2MIUAZ8ql6s+SnP0rd//8a2v6s2ujWMA==",
"version": "0.0.94",
"resolved": "https://registry.npmjs.org/@scrypted/sdk/-/sdk-0.0.94.tgz",
"integrity": "sha512-rLb/esVaQUbooyqzoOJBugMVagvlu6O4Q9QjTgjOV4rs1PImVtcth73rVY7bu0fg3kyb5zOg0yBoL9TB5UsZyg==",
"requires": {
"@babel/plugin-proposal-class-properties": "^7.14.5",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5",
@@ -5098,8 +5108,10 @@
"babel-loader": "^8.2.3",
"babel-plugin-const-enum": "^1.1.0",
"esbuild": "^0.13.8",
"ncp": "^2.0.0",
"raw-loader": "^4.0.2",
"rimraf": "^3.0.2",
"tmp": "^0.2.1",
"ts-loader": "^9.2.6",
"typescript-json-schema": "^0.50.1",
"webpack": "^5.59.0"
@@ -7085,6 +7097,11 @@
"resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz",
"integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg=="
},
"ncp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
"integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M="
},
"negotiator": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",

View File

@@ -1,10 +1,10 @@
{
"name": "@scrypted/server",
"version": "0.0.54",
"version": "0.0.55",
"description": "",
"dependencies": {
"@mapbox/node-pre-gyp": "^1.0.5",
"@scrypted/sdk": "^0.0.93",
"@scrypted/sdk": "^0.0.94",
"adm-zip": "^0.5.3",
"axios": "^0.21.1",
"body-parser": "^1.19.0",

View File

@@ -601,7 +601,7 @@ export class ScryptedRuntime {
await this.datastore.remove(device);
if (providerId == null || providerId === device._id) {
const plugin = await this.datastore.tryGet(Plugin, device.pluginId);
await this.killPlugin(plugin);
this.killPlugin(plugin);
await this.datastore.remove(plugin);
}
this.stateManager.removeDevice(device._id);
@@ -665,7 +665,6 @@ export class ScryptedRuntime {
this.stateManager.setPluginDeviceState(pluginDevice, ScryptedInterfaceProperty.providedRoom, providedRoom);
if (isUsingDefaultRoom)
this.stateManager.setPluginDeviceState(pluginDevice, ScryptedInterfaceProperty.room, getProvidedRoomOrDefault(pluginDevice));
// pluginDevice.state.model = device.model;
const ret = this.notifyPluginDeviceDescriptorChanged(pluginDevice);