iobroker.iot 5.0.0 → 5.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/admin/assets/{index-BIqCLCEw.js → index-CZlHvSGg.js} +1 -1
- package/admin/index_m.html +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/RangeController.js +53 -0
- package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/RangeController.js.map +1 -0
- package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/ThermostatController.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/index.js +2 -0
- package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/index.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Properties/Base.js +7 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Properties/Base.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Properties/RangeValue.js +20 -0
- package/build/lib/AlexaSmartHomeV3/Alexa/Properties/RangeValue.js.map +1 -0
- package/build/lib/AlexaSmartHomeV3/Alexa/Properties/ThermostatMode.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Properties/index.js +2 -0
- package/build/lib/AlexaSmartHomeV3/Alexa/Properties/index.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Controls/AirCondition.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Controls/Ct.js +2 -1
- package/build/lib/AlexaSmartHomeV3/Controls/Ct.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Controls/Slider.js +49 -0
- package/build/lib/AlexaSmartHomeV3/Controls/Slider.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/DeviceManager.js +6 -4
- package/build/lib/AlexaSmartHomeV3/DeviceManager.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Helpers/Utils.js +7 -1
- package/build/lib/AlexaSmartHomeV3/Helpers/Utils.js.map +1 -1
- package/io-package.json +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const Properties_1 = __importDefault(require("../Properties"));
|
|
7
|
+
const Base_1 = __importDefault(require("./Base"));
|
|
8
|
+
class RangeController extends Base_1.default {
|
|
9
|
+
min;
|
|
10
|
+
max;
|
|
11
|
+
unit;
|
|
12
|
+
constructor(opts) {
|
|
13
|
+
super();
|
|
14
|
+
this._properties = [new Properties_1.default.RangeValue(opts)];
|
|
15
|
+
this.min = opts.setState?.common.min || 0;
|
|
16
|
+
this.max = opts.setState?.common.max || 100;
|
|
17
|
+
this.unit = opts.setState?.common.unit || '';
|
|
18
|
+
}
|
|
19
|
+
get alexaResponse() {
|
|
20
|
+
return {
|
|
21
|
+
interface: this.namespace,
|
|
22
|
+
instance: 'Range.Value',
|
|
23
|
+
version: this.version,
|
|
24
|
+
properties: this.discoverableProperties,
|
|
25
|
+
configuration: this.configuration,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
get configuration() {
|
|
29
|
+
// Map known units to Alexa units
|
|
30
|
+
let unitOfMeasure;
|
|
31
|
+
switch (this.unit) {
|
|
32
|
+
case '°C':
|
|
33
|
+
unitOfMeasure = 'Alexa.Unit.Temperature.Celsius';
|
|
34
|
+
break;
|
|
35
|
+
case '°F':
|
|
36
|
+
unitOfMeasure = 'Alexa.Unit.Temperature.Fahrenheit';
|
|
37
|
+
break;
|
|
38
|
+
case '%':
|
|
39
|
+
unitOfMeasure = 'Alexa.Unit.Percent';
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
supportedRange: {
|
|
44
|
+
minimumValue: this.min,
|
|
45
|
+
maximumValue: this.max,
|
|
46
|
+
precision: 1,
|
|
47
|
+
},
|
|
48
|
+
unitOfMeasure,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.default = RangeController;
|
|
53
|
+
//# sourceMappingURL=RangeController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RangeController.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Capabilities/RangeController.ts"],"names":[],"mappings":";;;;;AAAA,+DAAuC;AACvC,kDAA0B;AAW1B,MAAqB,eAAgB,SAAQ,cAAI;IAC5B,GAAG,CAAS;IACZ,GAAG,CAAS;IACZ,IAAI,CAAS;IAC9B,YAAY,IAA4B;QACpC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,oBAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,aAAa;QAyBb,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,sBAAsB;YACvC,aAAa,EAAE,IAAI,CAAC,aAAa;SACpC,CAAC;IACN,CAAC;IAED,IAAI,aAAa;QACb,iCAAiC;QACjC,IAAI,aAA+C,CAAC;QACpD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAChB,KAAK,IAAI;gBACL,aAAa,GAAG,gCAAgC,CAAC;gBACjD,MAAM;YACV,KAAK,IAAI;gBACL,aAAa,GAAG,mCAAmC,CAAC;gBACpD,MAAM;YACV,KAAK,GAAG;gBACJ,aAAa,GAAG,oBAAoB,CAAC;gBACrC,MAAM;QACd,CAAC;QAED,OAAO;YACH,cAAc,EAAE;gBACZ,YAAY,EAAE,IAAI,CAAC,GAAG;gBACtB,YAAY,EAAE,IAAI,CAAC,GAAG;gBACtB,SAAS,EAAE,CAAC;aACf;YACD,aAAa;SAChB,CAAC;IACN,CAAC;CACJ;AAtED,kCAsEC","sourcesContent":["import Properties from '../Properties';\nimport Base from './Base';\nimport type { ControlStateInitObject } from '../Properties/Base';\nimport type {\n AlexaV3ActionMapping,\n AlexaV3FriendlyName,\n AlexaV3Namespace,\n AlexaV3RangeConfiguration,\n AlexaV3StateMapping,\n AlexaV3UnitOfMeasure,\n} from '../../types';\n\nexport default class RangeController extends Base {\n private readonly min: number;\n private readonly max: number;\n private readonly unit: string;\n constructor(opts: ControlStateInitObject) {\n super();\n this._properties = [new Properties.RangeValue(opts)];\n this.min = opts.setState?.common.min || 0;\n this.max = opts.setState?.common.max || 100;\n this.unit = opts.setState?.common.unit || '';\n }\n\n get alexaResponse(): {\n interface: AlexaV3Namespace;\n version: string;\n instance: string;\n properties: {\n supported: { name: string }[];\n proactivelyReported: boolean;\n retrievable: boolean;\n };\n configuration?: {\n supportedRange: {\n minimumValue: number;\n maximumValue: number;\n precision: 1;\n };\n unitOfMeasure?: AlexaV3UnitOfMeasure;\n };\n semantics?: {\n actionMappings: AlexaV3ActionMapping[];\n stateMappings: AlexaV3StateMapping[];\n };\n capabilityResources?: {\n friendlyNames: AlexaV3FriendlyName[];\n };\n } {\n return {\n interface: this.namespace,\n instance: 'Range.Value',\n version: this.version,\n properties: this.discoverableProperties,\n configuration: this.configuration,\n };\n }\n\n get configuration(): AlexaV3RangeConfiguration {\n // Map known units to Alexa units\n let unitOfMeasure: AlexaV3UnitOfMeasure | undefined;\n switch (this.unit) {\n case '°C':\n unitOfMeasure = 'Alexa.Unit.Temperature.Celsius';\n break;\n case '°F':\n unitOfMeasure = 'Alexa.Unit.Temperature.Fahrenheit';\n break;\n case '%':\n unitOfMeasure = 'Alexa.Unit.Percent';\n break;\n }\n\n return {\n supportedRange: {\n minimumValue: this.min,\n maximumValue: this.max,\n precision: 1,\n },\n unitOfMeasure,\n };\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThermostatController.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Capabilities/ThermostatController.ts"],"names":[],"mappings":";;;;;AAAA,kFAA0D;AAC1D,kFAA0D;AAC1D,kDAA0B;
|
|
1
|
+
{"version":3,"file":"ThermostatController.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Capabilities/ThermostatController.ts"],"names":[],"mappings":";;;;;AAAA,kFAA0D;AAC1D,kFAA0D;AAC1D,kDAA0B;AAW1B,MAAqB,oBAAqB,SAAQ,cAAI;IACjC,eAAe,CAAiB;IAEjD,YAAY,YAAoC,EAAE,QAAgC;QAC9E,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,eAAe,GAAG,IAAI,wBAAc,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,wBAAc,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,OAAO;QACP,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,IAAI,aAAa;QAsBb,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,sBAAsB;YACvC,aAAa,EAAE,IAAI,CAAC,aAAa;SACpC,CAAC;IACN,CAAC;IAED,IAAI,aAAa;QACb,OAAO;YACH,OAAO,EAAE,KAAK;YACd,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,cAAc,IAAI,CAAC,MAAM,CAAC;SACnE,CAAC;IACN,CAAC;CACJ;AAtDD,uCAsDC","sourcesContent":["import ThermostatMode from '../Properties/ThermostatMode';\nimport TargetSetpoint from '../Properties/TargetSetpoint';\nimport Base from './Base';\nimport type {\n AlexaV3ActionMapping,\n AlexaV3FriendlyName,\n AlexaV3ModeConfiguration,\n AlexaV3Namespace,\n AlexaV3StateMapping,\n AlexaV3ThermostatMode,\n} from '../../types';\nimport type { ControlStateInitObject } from '../Properties/Base';\n\nexport default class ThermostatController extends Base {\n private readonly _thermostatMode: ThermostatMode;\n\n constructor(setPointOpts: ControlStateInitObject, modeOpts: ControlStateInitObject) {\n super();\n\n this._thermostatMode = new ThermostatMode(modeOpts);\n this._properties = [new TargetSetpoint(setPointOpts), this._thermostatMode];\n }\n\n get version(): string {\n return '3.2';\n }\n\n get thermostatMode(): ThermostatMode {\n return this._thermostatMode;\n }\n\n get alexaResponse(): {\n interface: AlexaV3Namespace;\n version: string;\n instance?: string;\n properties: {\n supported: { name: string }[];\n proactivelyReported: boolean;\n retrievable: boolean;\n };\n configuration?: {\n ordered: boolean;\n supportedModes: AlexaV3ThermostatMode[];\n supportsScheduling?: boolean;\n };\n semantics?: {\n actionMappings: AlexaV3ActionMapping[];\n stateMappings: AlexaV3StateMapping[];\n };\n capabilityResources?: {\n friendlyNames: AlexaV3FriendlyName[];\n };\n } {\n return {\n interface: this.namespace,\n version: this.version,\n properties: this.discoverableProperties,\n configuration: this.configuration,\n };\n }\n\n get configuration(): AlexaV3ModeConfiguration {\n return {\n ordered: false,\n supportedModes: this._thermostatMode?.supportedModes || ['AUTO'],\n };\n }\n}\n"]}
|
|
@@ -12,6 +12,7 @@ const ModeController_1 = __importDefault(require("./ModeController"));
|
|
|
12
12
|
const MotionSensor_1 = __importDefault(require("./MotionSensor"));
|
|
13
13
|
const PercentageController_1 = __importDefault(require("./PercentageController"));
|
|
14
14
|
const PowerController_1 = __importDefault(require("./PowerController"));
|
|
15
|
+
const RangeController_1 = __importDefault(require("./RangeController"));
|
|
15
16
|
const SceneController_1 = __importDefault(require("./SceneController"));
|
|
16
17
|
const Speaker_1 = __importDefault(require("./Speaker"));
|
|
17
18
|
const TemperatureSensor_1 = __importDefault(require("./TemperatureSensor"));
|
|
@@ -26,6 +27,7 @@ exports.default = {
|
|
|
26
27
|
MotionSensor: MotionSensor_1.default,
|
|
27
28
|
PercentageController: PercentageController_1.default,
|
|
28
29
|
PowerController: PowerController_1.default,
|
|
30
|
+
RangeController: RangeController_1.default,
|
|
29
31
|
SceneController: SceneController_1.default,
|
|
30
32
|
Speaker: Speaker_1.default,
|
|
31
33
|
TemperatureSensor: TemperatureSensor_1.default,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Capabilities/index.ts"],"names":[],"mappings":";;;;;AAAA,kFAA0D;AAC1D,wEAAgD;AAChD,8FAAsE;AACtE,oEAA4C;AAC5C,sEAA8C;AAC9C,sEAA8C;AAC9C,kEAA0C;AAC1C,kFAA0D;AAC1D,wEAAgD;AAChD,wEAAgD;AAChD,wDAAgC;AAChC,4EAAoD;AACpD,kFAA0D;AAE1D,kBAAe;IACX,oBAAoB,EAApB,8BAAoB;IACpB,eAAe,EAAf,yBAAe;IACf,0BAA0B,EAA1B,oCAA0B;IAC1B,aAAa,EAAb,uBAAa;IACb,cAAc,EAAd,wBAAc;IACd,cAAc,EAAd,wBAAc;IACd,YAAY,EAAZ,sBAAY;IACZ,oBAAoB,EAApB,8BAAoB;IACpB,eAAe,EAAf,yBAAe;IACf,eAAe,EAAf,yBAAe;IACf,OAAO,EAAP,iBAAO;IACP,iBAAiB,EAAjB,2BAAiB;IACjB,oBAAoB,EAApB,8BAAoB;CACvB,CAAC","sourcesContent":["import BrightnessController from './BrightnessController';\nimport ColorController from './ColorController';\nimport ColorTemperatureController from './ColorTemperatureController';\nimport ContactSensor from './ContactSensor';\nimport LockController from './LockController';\nimport ModeController from './ModeController';\nimport MotionSensor from './MotionSensor';\nimport PercentageController from './PercentageController';\nimport PowerController from './PowerController';\nimport SceneController from './SceneController';\nimport Speaker from './Speaker';\nimport TemperatureSensor from './TemperatureSensor';\nimport ThermostatController from './ThermostatController';\n\nexport default {\n BrightnessController,\n ColorController,\n ColorTemperatureController,\n ContactSensor,\n LockController,\n ModeController,\n MotionSensor,\n PercentageController,\n PowerController,\n SceneController,\n Speaker,\n TemperatureSensor,\n ThermostatController,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Capabilities/index.ts"],"names":[],"mappings":";;;;;AAAA,kFAA0D;AAC1D,wEAAgD;AAChD,8FAAsE;AACtE,oEAA4C;AAC5C,sEAA8C;AAC9C,sEAA8C;AAC9C,kEAA0C;AAC1C,kFAA0D;AAC1D,wEAAgD;AAChD,wEAAgD;AAChD,wEAAgD;AAChD,wDAAgC;AAChC,4EAAoD;AACpD,kFAA0D;AAE1D,kBAAe;IACX,oBAAoB,EAApB,8BAAoB;IACpB,eAAe,EAAf,yBAAe;IACf,0BAA0B,EAA1B,oCAA0B;IAC1B,aAAa,EAAb,uBAAa;IACb,cAAc,EAAd,wBAAc;IACd,cAAc,EAAd,wBAAc;IACd,YAAY,EAAZ,sBAAY;IACZ,oBAAoB,EAApB,8BAAoB;IACpB,eAAe,EAAf,yBAAe;IACf,eAAe,EAAf,yBAAe;IACf,eAAe,EAAf,yBAAe;IACf,OAAO,EAAP,iBAAO;IACP,iBAAiB,EAAjB,2BAAiB;IACjB,oBAAoB,EAApB,8BAAoB;CACvB,CAAC","sourcesContent":["import BrightnessController from './BrightnessController';\nimport ColorController from './ColorController';\nimport ColorTemperatureController from './ColorTemperatureController';\nimport ContactSensor from './ContactSensor';\nimport LockController from './LockController';\nimport ModeController from './ModeController';\nimport MotionSensor from './MotionSensor';\nimport PercentageController from './PercentageController';\nimport PowerController from './PowerController';\nimport RangeController from './RangeController';\nimport SceneController from './SceneController';\nimport Speaker from './Speaker';\nimport TemperatureSensor from './TemperatureSensor';\nimport ThermostatController from './ThermostatController';\n\nexport default {\n BrightnessController,\n ColorController,\n ColorTemperatureController,\n ContactSensor,\n LockController,\n ModeController,\n MotionSensor,\n PercentageController,\n PowerController,\n RangeController,\n SceneController,\n Speaker,\n TemperatureSensor,\n ThermostatController,\n};\n"]}
|
|
@@ -6,7 +6,7 @@ class Base {
|
|
|
6
6
|
#setState = null;
|
|
7
7
|
_setId = '';
|
|
8
8
|
_getId = '';
|
|
9
|
-
#valuesRange = { min: 0, max: 100 };
|
|
9
|
+
#valuesRange = { min: 0, max: 100, step: 10 };
|
|
10
10
|
_stateType;
|
|
11
11
|
#currentValue;
|
|
12
12
|
_alexaSetter;
|
|
@@ -66,6 +66,9 @@ class Base {
|
|
|
66
66
|
get valuesRangeMax() {
|
|
67
67
|
return this.#valuesRange.max;
|
|
68
68
|
}
|
|
69
|
+
get valuesRangeStep() {
|
|
70
|
+
return this.#valuesRange.step;
|
|
71
|
+
}
|
|
69
72
|
get setId() {
|
|
70
73
|
return this._setId;
|
|
71
74
|
}
|
|
@@ -123,6 +126,9 @@ class Base {
|
|
|
123
126
|
if (this.propertyName === 'percentage') {
|
|
124
127
|
return event.directive.payload.percentage;
|
|
125
128
|
}
|
|
129
|
+
if (this.propertyName === 'rangeValue') {
|
|
130
|
+
return event.directive.payload.rangeValue;
|
|
131
|
+
}
|
|
126
132
|
// @ts-expect-error fix later
|
|
127
133
|
return event.directive.payload[this.propertyName];
|
|
128
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Base.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/Base.ts"],"names":[],"mappings":"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","sourcesContent":["import { configuredRangeOrDefault, firstLower, className } from '../../Helpers/Utils';\nimport type {\n AlexaV3DirectiveName,\n AlexaV3DirectiveValue,\n AlexaV3Request,\n IotExternalDetectorState,\n} from '../../types';\n\nexport type ControlStateInitObject = {\n setState?: IotExternalDetectorState;\n getState?: IotExternalDetectorState;\n alexaSetter?: (alexaValue: AlexaV3DirectiveValue) => ioBroker.StateValue | undefined;\n alexaGetter?: (value: ioBroker.StateValue | undefined) => AlexaV3DirectiveValue;\n multiPurposeProperty?: boolean;\n // If brightness set to non-zero value and power is off, turn the lamp on\n handleSimilarEvents?: boolean;\n // Level below which the dimmer or percent based control means \"off\"\n offValue?: number;\n // Percent value to set the brightness when turning on the device\n onValue?: number | 'stored' | 'omit';\n\n // Extra for Hue control\n hal?: {\n hue: IotExternalDetectorState;\n saturation?: IotExternalDetectorState;\n brightness?: IotExternalDetectorState;\n };\n\n // Extra for Mode control\n supportedModes?: any[];\n instance?: string;\n\n // Extra for rgb(w) control\n rgbw?:\n | IotExternalDetectorState\n | {\n red: IotExternalDetectorState;\n green: IotExternalDetectorState;\n blue: IotExternalDetectorState;\n white: IotExternalDetectorState;\n };\n rgb?:\n | IotExternalDetectorState\n | {\n red: IotExternalDetectorState;\n green: IotExternalDetectorState;\n blue: IotExternalDetectorState;\n };\n};\n\nexport class Base {\n #setState: IotExternalDetectorState | null = null;\n protected _setId: string = '';\n protected _getId: string = '';\n #valuesRange: { min: number | boolean; max: number | boolean } = { min: 0, max: 100 };\n protected _stateType: ioBroker.CommonType | undefined;\n #currentValue: ioBroker.StateValue | undefined;\n protected _alexaSetter?: (value: AlexaV3DirectiveValue) => ioBroker.StateValue | undefined;\n protected _alexaGetter?: (value: ioBroker.StateValue | undefined) => AlexaV3DirectiveValue;\n #instance?: string;\n protected _supportedModesAsEnum: Record<string, number | string> = {};\n protected _multiPurposeProperty: boolean = false;\n protected _handleSimilarEvents: boolean = false;\n protected _offValue: number = 30;\n protected _onValueInPercent: number | undefined | 'stored' | 'omit';\n\n /**\n * @param opts The object to initialize the corresponding ioBroker state.\n * @param opts.setState The iobroker state to write values to.\n * @param opts.getState The iobroker state to read values from.\n * @param opts.alexaSetter The function to apply to an Alexa value to transform it to the iobroker's one\n * @param opts.alexaGetter The function to apply to an iobroker value to transform it to the Alexa's one\n * @param ignoreStandard If the standard checks should be ignored (used for Color control)\n */\n constructor(opts: ControlStateInitObject, ignoreStandard?: boolean) {\n if (!ignoreStandard) {\n if (!opts.setState) {\n throw new Error(`missing setState in ${this.constructor.name}`);\n }\n this._multiPurposeProperty = !!opts.multiPurposeProperty;\n this._handleSimilarEvents = !!opts.handleSimilarEvents;\n this.#setState = opts.setState;\n this._offValue = opts.offValue || 30;\n this._setId = opts.setState.id;\n this._getId = opts.getState?.id || this._setId;\n this._stateType = opts.setState.common?.type;\n this.#valuesRange = configuredRangeOrDefault(this.#setState);\n this.#instance = opts.instance;\n this._onValueInPercent = opts.onValue;\n }\n\n if (opts.alexaSetter) {\n this._alexaSetter = opts.alexaSetter;\n }\n if (opts.alexaGetter) {\n this._alexaGetter = opts.alexaGetter;\n }\n }\n\n get instance(): string | undefined {\n return this.#instance;\n }\n\n getSetState(): IotExternalDetectorState | null {\n return this.#setState;\n }\n\n get propertyName(): string {\n return firstLower(`${this.constructor.name}`);\n }\n\n static get propertyName(): string {\n return firstLower(className(this.toString()));\n }\n\n get valuesRangeMin(): number | boolean {\n return this.#valuesRange.min;\n }\n\n get valuesRangeMax(): number | boolean {\n return this.#valuesRange.max;\n }\n\n get setId(): string {\n return this._setId;\n }\n\n get getId(): string {\n return this._getId;\n }\n /**\n * returns last known iobroker value\n */\n get currentValue(): ioBroker.StateValue | undefined {\n return this.#currentValue;\n }\n\n set currentValue(value: ioBroker.StateValue | undefined) {\n this.#currentValue = value;\n }\n\n /** Converts an Alexa value to an ioBroker value */\n value(alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue | undefined {\n return this._alexaSetter && typeof alexaValue === 'number'\n ? this._alexaSetter(alexaValue)\n : (alexaValue as ioBroker.StateValue | undefined);\n }\n\n /** Converts an ioBroker value to an Alexa value */\n alexaValue(value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return this._alexaGetter && typeof value === 'number'\n ? this._alexaGetter(value)\n : (value as AlexaV3DirectiveValue);\n }\n\n static directive(_event: AlexaV3Request): AlexaV3DirectiveName {\n return Base.SET;\n }\n\n /**\n * Checks whether a directive refers to the property\n *\n * @param event Contains the Alexa event.\n */\n static matches(event: AlexaV3Request): boolean {\n return event?.directive?.header?.namespace === `Alexa.${className(this.toString())}Controller`;\n }\n\n matches(event: AlexaV3Request): boolean {\n return event?.directive?.header?.name === this.propertyName;\n }\n\n /**\n * Extracts value to be set on the smart device sent in an Alexa directive\n */\n alexaDirectiveValue(event: AlexaV3Request): AlexaV3DirectiveValue {\n if (this.propertyName === 'color') {\n return event.directive.payload.color;\n }\n if (this.propertyName === 'colorTemperatureInKelvin') {\n return event.directive.payload.colorTemperatureInKelvin;\n }\n if (this.propertyName === 'brightness') {\n return event.directive.payload.brightness;\n }\n if (this.propertyName === 'percentage') {\n return event.directive.payload.percentage;\n }\n // @ts-expect-error fix later\n return event.directive.payload[this.propertyName];\n }\n\n reportValue(value: AlexaV3DirectiveValue): any {\n return value;\n }\n\n static get ADJUST(): AlexaV3DirectiveName {\n return 'ADJUST';\n }\n\n static get SET(): AlexaV3DirectiveName {\n return 'SET';\n }\n\n static get CELSIUS_SCALE(): AlexaV3DirectiveName {\n return 'CELSIUS';\n }\n\n get supportedModesAsEnum(): Record<string, number | string> {\n return this._supportedModesAsEnum;\n }\n}\n\nexport default Base;\n"]}
|
|
1
|
+
{"version":3,"file":"Base.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/Base.ts"],"names":[],"mappings":"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","sourcesContent":["import { configuredRangeOrDefault, firstLower, className } from '../../Helpers/Utils';\nimport type {\n AlexaV3DirectiveName,\n AlexaV3DirectiveValue,\n AlexaV3Request,\n IotExternalDetectorState,\n} from '../../types';\n\nexport type ControlStateInitObject = {\n setState?: IotExternalDetectorState;\n getState?: IotExternalDetectorState;\n alexaSetter?: (alexaValue: AlexaV3DirectiveValue) => ioBroker.StateValue | undefined;\n alexaGetter?: (value: ioBroker.StateValue | undefined) => AlexaV3DirectiveValue;\n multiPurposeProperty?: boolean;\n // If brightness set to non-zero value and power is off, turn the lamp on\n handleSimilarEvents?: boolean;\n // Level below which the dimmer or percent based control means \"off\"\n offValue?: number;\n // Percent value to set the brightness when turning on the device\n onValue?: number | 'stored' | 'omit';\n\n // Extra for Hue control\n hal?: {\n hue: IotExternalDetectorState;\n saturation?: IotExternalDetectorState;\n brightness?: IotExternalDetectorState;\n };\n\n // Extra for Mode control\n supportedModes?: any[];\n instance?: string;\n\n // Extra for rgb(w) control\n rgbw?:\n | IotExternalDetectorState\n | {\n red: IotExternalDetectorState;\n green: IotExternalDetectorState;\n blue: IotExternalDetectorState;\n white: IotExternalDetectorState;\n };\n rgb?:\n | IotExternalDetectorState\n | {\n red: IotExternalDetectorState;\n green: IotExternalDetectorState;\n blue: IotExternalDetectorState;\n };\n};\n\nexport class Base {\n #setState: IotExternalDetectorState | null = null;\n protected _setId: string = '';\n protected _getId: string = '';\n #valuesRange: { min: number | boolean; max: number | boolean; step?: number } = { min: 0, max: 100, step: 10 };\n protected _stateType: ioBroker.CommonType | undefined;\n #currentValue: ioBroker.StateValue | undefined;\n protected _alexaSetter?: (value: AlexaV3DirectiveValue) => ioBroker.StateValue | undefined;\n protected _alexaGetter?: (value: ioBroker.StateValue | undefined) => AlexaV3DirectiveValue;\n #instance?: string;\n protected _supportedModesAsEnum: Record<string, number | string> = {};\n protected _multiPurposeProperty: boolean = false;\n protected _handleSimilarEvents: boolean = false;\n protected _offValue: number = 30;\n protected _onValueInPercent: number | undefined | 'stored' | 'omit';\n\n /**\n * @param opts The object to initialize the corresponding ioBroker state.\n * @param opts.setState The iobroker state to write values to.\n * @param opts.getState The iobroker state to read values from.\n * @param opts.alexaSetter The function to apply to an Alexa value to transform it to the iobroker's one\n * @param opts.alexaGetter The function to apply to an iobroker value to transform it to the Alexa's one\n * @param ignoreStandard If the standard checks should be ignored (used for Color control)\n */\n constructor(opts: ControlStateInitObject, ignoreStandard?: boolean) {\n if (!ignoreStandard) {\n if (!opts.setState) {\n throw new Error(`missing setState in ${this.constructor.name}`);\n }\n this._multiPurposeProperty = !!opts.multiPurposeProperty;\n this._handleSimilarEvents = !!opts.handleSimilarEvents;\n this.#setState = opts.setState;\n this._offValue = opts.offValue || 30;\n this._setId = opts.setState.id;\n this._getId = opts.getState?.id || this._setId;\n this._stateType = opts.setState.common?.type;\n this.#valuesRange = configuredRangeOrDefault(this.#setState);\n this.#instance = opts.instance;\n this._onValueInPercent = opts.onValue;\n }\n\n if (opts.alexaSetter) {\n this._alexaSetter = opts.alexaSetter;\n }\n if (opts.alexaGetter) {\n this._alexaGetter = opts.alexaGetter;\n }\n }\n\n get instance(): string | undefined {\n return this.#instance;\n }\n\n getSetState(): IotExternalDetectorState | null {\n return this.#setState;\n }\n\n get propertyName(): string {\n return firstLower(`${this.constructor.name}`);\n }\n\n static get propertyName(): string {\n return firstLower(className(this.toString()));\n }\n\n get valuesRangeMin(): number | boolean {\n return this.#valuesRange.min;\n }\n\n get valuesRangeMax(): number | boolean {\n return this.#valuesRange.max;\n }\n\n get valuesRangeStep(): number | undefined {\n return this.#valuesRange.step;\n }\n\n get setId(): string {\n return this._setId;\n }\n\n get getId(): string {\n return this._getId;\n }\n /**\n * returns last known iobroker value\n */\n get currentValue(): ioBroker.StateValue | undefined {\n return this.#currentValue;\n }\n\n set currentValue(value: ioBroker.StateValue | undefined) {\n this.#currentValue = value;\n }\n\n /** Converts an Alexa value to an ioBroker value */\n value(alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue | undefined {\n return this._alexaSetter && typeof alexaValue === 'number'\n ? this._alexaSetter(alexaValue)\n : (alexaValue as ioBroker.StateValue | undefined);\n }\n\n /** Converts an ioBroker value to an Alexa value */\n alexaValue(value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return this._alexaGetter && typeof value === 'number'\n ? this._alexaGetter(value)\n : (value as AlexaV3DirectiveValue);\n }\n\n static directive(_event: AlexaV3Request): AlexaV3DirectiveName {\n return Base.SET;\n }\n\n /**\n * Checks whether a directive refers to the property\n *\n * @param event Contains the Alexa event.\n */\n static matches(event: AlexaV3Request): boolean {\n return event?.directive?.header?.namespace === `Alexa.${className(this.toString())}Controller`;\n }\n\n matches(event: AlexaV3Request): boolean {\n return event?.directive?.header?.name === this.propertyName;\n }\n\n /**\n * Extracts value to be set on the smart device sent in an Alexa directive\n */\n alexaDirectiveValue(event: AlexaV3Request): AlexaV3DirectiveValue {\n if (this.propertyName === 'color') {\n return event.directive.payload.color;\n }\n if (this.propertyName === 'colorTemperatureInKelvin') {\n return event.directive.payload.colorTemperatureInKelvin;\n }\n if (this.propertyName === 'brightness') {\n return event.directive.payload.brightness;\n }\n if (this.propertyName === 'percentage') {\n return event.directive.payload.percentage;\n }\n if (this.propertyName === 'rangeValue') {\n return event.directive.payload.rangeValue;\n }\n // @ts-expect-error fix later\n return event.directive.payload[this.propertyName];\n }\n\n reportValue(value: AlexaV3DirectiveValue): any {\n return value;\n }\n\n static get ADJUST(): AlexaV3DirectiveName {\n return 'ADJUST';\n }\n\n static get SET(): AlexaV3DirectiveName {\n return 'SET';\n }\n\n static get CELSIUS_SCALE(): AlexaV3DirectiveName {\n return 'CELSIUS';\n }\n\n get supportedModesAsEnum(): Record<string, number | string> {\n return this._supportedModesAsEnum;\n }\n}\n\nexport default Base;\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const AdjustableProperty_1 = __importDefault(require("./AdjustableProperty"));
|
|
7
|
+
class RangeValue extends AdjustableProperty_1.default {
|
|
8
|
+
matches(event) {
|
|
9
|
+
return RangeValue.matches(event);
|
|
10
|
+
}
|
|
11
|
+
alexaDirectiveValue(event) {
|
|
12
|
+
return RangeValue.directive(event) === RangeValue.SET
|
|
13
|
+
? super.alexaDirectiveValue(event)
|
|
14
|
+
: event.directive.payload.rangeValueDeltaDefault
|
|
15
|
+
? this.valuesRangeStep
|
|
16
|
+
: event.directive.payload.rangeValueDelta;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.default = RangeValue;
|
|
20
|
+
//# sourceMappingURL=RangeValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RangeValue.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/RangeValue.ts"],"names":[],"mappings":";;;;;AACA,8EAAsD;AAEtD,MAAqB,UAAW,SAAQ,4BAAkB;IACtD,OAAO,CAAC,KAAqB;QACzB,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,mBAAmB,CAAC,KAAqB;QACrC,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,GAAG;YACjD,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAClC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,sBAAsB;gBAC9C,CAAC,CAAC,IAAI,CAAC,eAAe;gBACtB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC;IACpD,CAAC;CACJ;AAZD,6BAYC","sourcesContent":["import type { AlexaV3DirectiveValue, AlexaV3Request } from '../../types';\nimport AdjustableProperty from './AdjustableProperty';\n\nexport default class RangeValue extends AdjustableProperty {\n matches(event: AlexaV3Request): boolean {\n return RangeValue.matches(event);\n }\n\n alexaDirectiveValue(event: AlexaV3Request): AlexaV3DirectiveValue {\n return RangeValue.directive(event) === RangeValue.SET\n ? super.alexaDirectiveValue(event)\n : event.directive.payload.rangeValueDeltaDefault\n ? this.valuesRangeStep\n : event.directive.payload.rangeValueDelta;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThermostatMode.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/ThermostatMode.ts"],"names":[],"mappings":";;;;;AAEA,+CAA6C;AAC7C,kDAA2D;AAE3D,MAAqB,cAAe,SAAQ,cAAI;IAC3B,eAAe,CAAW;IAE3C,YAAY,IAA4B;QACpC,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClG,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;QACnG,CAAC;QACD,0DAA0D;QAC1D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC;QACjE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAA0B,CAAC;QACvD,IAAI,CAAC,qBAAqB,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,KAAqB;QAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,KAAK,mBAAmB,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,UAAiC;QACnC,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAmC,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC;IAED,UAAU,CAAC,KAAsC;QAC7C,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC;IAC/E,CAAC;IAED,OAAO,CAAC,KAAqB;QACzB,OAAO,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,mBAAmB,CAAC,KAAqB;QACrC,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;IACzD,CAAC;IAED,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,MAAM,KAAK,IAAI;QACX,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,IAAI;QACX,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG;QACV,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,KAAK,IAAI;QACX,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,OAAO;QACd,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAG;QACV,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AAxDD,iCAwDC","sourcesContent":["import { AlexaV3DirectiveValue, AlexaV3Request, AlexaV3ThermostatMode } from '../../types';\n\nimport { asEnum } from '../../Helpers/Utils';\nimport Base, { type ControlStateInitObject } from './Base';\n\nexport default class ThermostatMode extends Base {\n private readonly _supportedModes: string[];\n\n constructor(opts: ControlStateInitObject) {\n super(opts);\n if (!opts.supportedModes || !Array.isArray(opts.supportedModes) || opts.supportedModes.length === 0) {\n throw new Error('ThermostatMode control requires supportedModes array with at least one mode');\n }\n // set mode to be AUTO for thermostats without mode at all\n this.currentValue = this.setId ? undefined : ThermostatMode.AUTO;\n this._supportedModes = opts.supportedModes as string[];\n this._supportedModesAsEnum = asEnum(this._supportedModes);\n }\n\n static matches(event: AlexaV3Request): boolean {\n return event?.directive?.header?.name === 'SetThermostatMode';\n }\n\n value(alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue | undefined {\n return this._supportedModesAsEnum[alexaValue as AlexaV3ThermostatMode] || 0;\n }\n\n alexaValue(value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return this._supportedModesAsEnum[parseInt(value as string, 10)] || 'AUTO';\n }\n\n matches(event: AlexaV3Request): boolean {\n return ThermostatMode.matches(event);\n }\n\n alexaDirectiveValue(event: AlexaV3Request): AlexaV3DirectiveValue {\n return event.directive.payload.thermostatMode?.value;\n }\n\n get supportedModes(): any[] {\n return this._supportedModes;\n }\n\n static get AUTO(): string {\n return 'AUTO';\n }\n static get COOL(): string {\n return 'COOL';\n }\n static get ECO(): string {\n return 'ECO';\n }\n static get HEAT(): string {\n return 'HEAT';\n }\n static get EM_HEAT(): string {\n return 'EM_HEAT';\n }\n static get OFF(): string {\n return 'OFF';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ThermostatMode.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/ThermostatMode.ts"],"names":[],"mappings":";;;;;AAEA,+CAA6C;AAC7C,kDAA2D;AAE3D,MAAqB,cAAe,SAAQ,cAAI;IAC3B,eAAe,CAAW;IAE3C,YAAY,IAA4B;QACpC,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClG,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;QACnG,CAAC;QACD,0DAA0D;QAC1D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC;QACjE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAA0B,CAAC;QACvD,IAAI,CAAC,qBAAqB,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,KAAqB;QAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,KAAK,mBAAmB,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,UAAiC;QACnC,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAmC,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC;IAED,UAAU,CAAC,KAAsC;QAC7C,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC;IAC/E,CAAC;IAED,OAAO,CAAC,KAAqB;QACzB,OAAO,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,mBAAmB,CAAC,KAAqB;QACrC,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;IACzD,CAAC;IAED,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,MAAM,KAAK,IAAI;QACX,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,IAAI;QACX,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG;QACV,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,KAAK,IAAI;QACX,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,OAAO;QACd,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,KAAK,GAAG;QACV,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AAxDD,iCAwDC","sourcesContent":["import type { AlexaV3DirectiveValue, AlexaV3Request, AlexaV3ThermostatMode } from '../../types';\n\nimport { asEnum } from '../../Helpers/Utils';\nimport Base, { type ControlStateInitObject } from './Base';\n\nexport default class ThermostatMode extends Base {\n private readonly _supportedModes: string[];\n\n constructor(opts: ControlStateInitObject) {\n super(opts);\n if (!opts.supportedModes || !Array.isArray(opts.supportedModes) || opts.supportedModes.length === 0) {\n throw new Error('ThermostatMode control requires supportedModes array with at least one mode');\n }\n // set mode to be AUTO for thermostats without mode at all\n this.currentValue = this.setId ? undefined : ThermostatMode.AUTO;\n this._supportedModes = opts.supportedModes as string[];\n this._supportedModesAsEnum = asEnum(this._supportedModes);\n }\n\n static matches(event: AlexaV3Request): boolean {\n return event?.directive?.header?.name === 'SetThermostatMode';\n }\n\n value(alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue | undefined {\n return this._supportedModesAsEnum[alexaValue as AlexaV3ThermostatMode] || 0;\n }\n\n alexaValue(value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return this._supportedModesAsEnum[parseInt(value as string, 10)] || 'AUTO';\n }\n\n matches(event: AlexaV3Request): boolean {\n return ThermostatMode.matches(event);\n }\n\n alexaDirectiveValue(event: AlexaV3Request): AlexaV3DirectiveValue {\n return event.directive.payload.thermostatMode?.value;\n }\n\n get supportedModes(): any[] {\n return this._supportedModes;\n }\n\n static get AUTO(): string {\n return 'AUTO';\n }\n static get COOL(): string {\n return 'COOL';\n }\n static get ECO(): string {\n return 'ECO';\n }\n static get HEAT(): string {\n return 'HEAT';\n }\n static get EM_HEAT(): string {\n return 'EM_HEAT';\n }\n static get OFF(): string {\n return 'OFF';\n }\n}\n"]}
|
|
@@ -15,6 +15,7 @@ const Muted_1 = __importDefault(require("./Muted"));
|
|
|
15
15
|
const Percentage_1 = __importDefault(require("./Percentage"));
|
|
16
16
|
const PowerState_1 = __importDefault(require("./PowerState"));
|
|
17
17
|
const RelativeHumidity_1 = __importDefault(require("./RelativeHumidity"));
|
|
18
|
+
const RangeValue_1 = __importDefault(require("./RangeValue"));
|
|
18
19
|
const TargetSetpoint_1 = __importDefault(require("./TargetSetpoint"));
|
|
19
20
|
const Temperature_1 = __importDefault(require("./Temperature"));
|
|
20
21
|
const ThermostatMode_1 = __importDefault(require("./ThermostatMode"));
|
|
@@ -31,6 +32,7 @@ exports.default = {
|
|
|
31
32
|
Muted: Muted_1.default,
|
|
32
33
|
Percentage: Percentage_1.default,
|
|
33
34
|
PowerState: PowerState_1.default,
|
|
35
|
+
RangeValue: RangeValue_1.default,
|
|
34
36
|
RelativeHumidity: RelativeHumidity_1.default,
|
|
35
37
|
TargetSetpoint: TargetSetpoint_1.default,
|
|
36
38
|
Temperature: Temperature_1.default,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/index.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,8DAAsC;AACtC,oDAA4B;AAC5B,0FAAkE;AAClE,kEAA0C;AAC1C,sEAA8C;AAC9C,4DAAoC;AACpC,kDAA0B;AAC1B,oDAA4B;AAC5B,8DAAsC;AACtC,8DAAsC;AACtC,0EAAkD;AAClD,sEAA8C;AAC9C,gEAAwC;AACxC,sEAA8C;AAC9C,sDAA8B;AAE9B,kBAAe;IACX,IAAI,EAAJ,cAAI;IACJ,UAAU,EAAV,oBAAU;IACV,KAAK,EAAL,eAAK;IACL,wBAAwB,EAAxB,kCAAwB;IACxB,YAAY,EAAZ,sBAAY;IACZ,cAAc,EAAd,wBAAc;IACd,SAAS,EAAT,mBAAS;IACT,IAAI,EAAJ,cAAI;IACJ,KAAK,EAAL,eAAK;IACL,UAAU,EAAV,oBAAU;IACV,UAAU,EAAV,oBAAU;IACV,gBAAgB,EAAhB,0BAAgB;IAChB,cAAc,EAAd,wBAAc;IACd,WAAW,EAAX,qBAAW;IACX,cAAc,EAAd,wBAAc;IACd,MAAM,EAAN,gBAAM;CACT,CAAC","sourcesContent":["import Base from './Base';\nimport Brightness from './Brightness';\nimport Color from './Color';\nimport ColorTemperatureInKelvin from './ColorTemperatureInKelvin';\nimport Connectivity from './Connectivity';\nimport DetectionState from './DetectionState';\nimport LockState from './LockState';\nimport Mode from './Mode';\nimport Muted from './Muted';\nimport Percentage from './Percentage';\nimport PowerState from './PowerState';\nimport RelativeHumidity from './RelativeHumidity';\nimport TargetSetpoint from './TargetSetpoint';\nimport Temperature from './Temperature';\nimport ThermostatMode from './ThermostatMode';\nimport Volume from './Volume';\n\nexport default {\n Base,\n Brightness,\n Color,\n ColorTemperatureInKelvin,\n Connectivity,\n DetectionState,\n LockState,\n Mode,\n Muted,\n Percentage,\n PowerState,\n RelativeHumidity,\n TargetSetpoint,\n Temperature,\n ThermostatMode,\n Volume,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/index.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAC1B,8DAAsC;AACtC,oDAA4B;AAC5B,0FAAkE;AAClE,kEAA0C;AAC1C,sEAA8C;AAC9C,4DAAoC;AACpC,kDAA0B;AAC1B,oDAA4B;AAC5B,8DAAsC;AACtC,8DAAsC;AACtC,0EAAkD;AAClD,8DAAsC;AACtC,sEAA8C;AAC9C,gEAAwC;AACxC,sEAA8C;AAC9C,sDAA8B;AAE9B,kBAAe;IACX,IAAI,EAAJ,cAAI;IACJ,UAAU,EAAV,oBAAU;IACV,KAAK,EAAL,eAAK;IACL,wBAAwB,EAAxB,kCAAwB;IACxB,YAAY,EAAZ,sBAAY;IACZ,cAAc,EAAd,wBAAc;IACd,SAAS,EAAT,mBAAS;IACT,IAAI,EAAJ,cAAI;IACJ,KAAK,EAAL,eAAK;IACL,UAAU,EAAV,oBAAU;IACV,UAAU,EAAV,oBAAU;IACV,UAAU,EAAV,oBAAU;IACV,gBAAgB,EAAhB,0BAAgB;IAChB,cAAc,EAAd,wBAAc;IACd,WAAW,EAAX,qBAAW;IACX,cAAc,EAAd,wBAAc;IACd,MAAM,EAAN,gBAAM;CACT,CAAC","sourcesContent":["import Base from './Base';\nimport Brightness from './Brightness';\nimport Color from './Color';\nimport ColorTemperatureInKelvin from './ColorTemperatureInKelvin';\nimport Connectivity from './Connectivity';\nimport DetectionState from './DetectionState';\nimport LockState from './LockState';\nimport Mode from './Mode';\nimport Muted from './Muted';\nimport Percentage from './Percentage';\nimport PowerState from './PowerState';\nimport RelativeHumidity from './RelativeHumidity';\nimport RangeValue from './RangeValue';\nimport TargetSetpoint from './TargetSetpoint';\nimport Temperature from './Temperature';\nimport ThermostatMode from './ThermostatMode';\nimport Volume from './Volume';\n\nexport default {\n Base,\n Brightness,\n Color,\n ColorTemperatureInKelvin,\n Connectivity,\n DetectionState,\n LockState,\n Mode,\n Muted,\n Percentage,\n PowerState,\n RangeValue,\n RelativeHumidity,\n TargetSetpoint,\n Temperature,\n ThermostatMode,\n Volume,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AirCondition.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Controls/AirCondition.ts"],"names":[],"mappings":";;;;;AAAA,sGAA8E;AAC9E,wFAAgE;AAChE,4FAAoE;AACpE,gGAAwE;AACxE,gFAAwD;AACxD,4EAAoD;AACpD,4CAAsD;AACtD,wFAAgE;AAEhE,iFAAyD;AASzD,0FAAkE;AAElE,MAAqB,YAAa,SAAQ,2BAAiB;IACtC,qBAAqB,CAAuB;IAC5C,eAAe,CAAiB;IAChC,gBAAgB,CAAkB;IAClC,WAAW,CAAa;IACjC,cAAc,CAA8B;IAEpD,YAAY,eAA0C;QAClD,KAAK,CAAC,eAAe,CAAC,CAAC;QAEvB,IAAI,CAAC,qBAAqB,GAAG,IAAI,8BAAoB,CACjD,IAAI,CAAC,+BAA+B,EAAE,EACtC,IAAI,CAAC,+BAA+B,EAAE,CACzC,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC;QACjE,IAAI,CAAC,gBAAgB,GAAG,IAAI,yBAAe,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;QAEpD,IAAI,CAAC,UAAU,GAAG;YACd,IAAI,2BAAiB,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC;YAC1D,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,gBAAgB;SACxB,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,wBAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED,IAAI,UAAU;QACV,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC/B,CAAC;IAED,oBAAoB;QAChB,OAAO,CAAC,wBAAc,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAwB,EAAE,KAAsC;QAC3E,6CAA6C;QAC7C,IAAI,QAAQ,CAAC,YAAY,KAAK,oBAAU,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5E,qEAAqE;YACrE,IAAI,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,wBAAc,CAAC,IAAI,CAAC,CAAC;gBACvF,MAAM,yBAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;gBAChF,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC;gBACxD,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACJ,kBAAkB;gBAClB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,wBAAc,CAAC,GAAG,CAAC,CAAC;gBACnF,MAAM,yBAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;gBACzE,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC;gBACxD,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1C,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,wBAAwB;YACxB,MAAM,yBAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAM,CAAC,CAAC;YACvD,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC;YAE9B,IAAI,QAAQ,CAAC,YAAY,KAAK,wBAAc,CAAC,YAAY,EAAE,CAAC;gBACxD,IAAI,CAAC,cAAc,GAAG,KAAe,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,wBAAc,CAAC,GAAG,CAAC;gBAClG,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,QAAwB;QACpD,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,YAAY,GAAG,MAAM,yBAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEvE,sCAAsC;YACtC,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC,WAAW,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBAClF,QAAQ,CAAC,YAAY;oBACjB,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,wBAAc,CAAC,GAAG,CAAC,CAAC;YAChG,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,QAAQ,CAAC,YAAY,CAAC;IACjC,CAAC;IAEO,2BAA2B;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,OAAO;YACH,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE;YAC1D,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE;YAC1D,WAAW,EAAE,UAAU,UAAiC;gBACpD,OAAO,UAAU,KAAK,oBAAU,CAAC,EAAE,CAAC;YACxC,CAAC;YACD,WAAW,EAAE,UAAU,KAAsC;gBACzD,OAAO,KAAK,CAAC,CAAC,CAAC,oBAAU,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAU,CAAC,GAAG,CAAC;YAClD,CAAC;SACJ,CAAC;IACN,CAAC;IAEO,+BAA+B;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,oBAAoB;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC;QACzC,MAAM,cAAc,GAA4B,EAAE,CAAC;QACnD,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAoC,EAAE,CAAC;gBACpD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACnB,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gBACzC,CAAC,CAAC,CAAC;gBACH,MAAM,GAAG,OAAO,CAAC;YACrB,CAAC;YACD,8EAA8E;YAC9E,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAChC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;gBACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxB,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;oBAC7C,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;gBAC3B,CAAC;qBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC/B,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;oBAC7C,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;gBAC3B,CAAC;qBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC/B,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;oBAC7C,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;gBAC3B,CAAC;qBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;oBAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;gBAC1B,CAAC;qBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;oBAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;gBACzB,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;YACzB,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,OAAO;YACH,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAK,EAAE,EAAE,EAAE,SAAS,EAA0C;YAC7F,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAK,EAAE,EAAE,EAAE,SAAS,EAA0C;YAC7F,WAAW,EAAE,UAAgC,UAAiC;gBAC1E,qCAAqC;gBACrC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAmC,CAAC,CAAC;gBAC7E,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;oBACb,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;gBACpC,CAAC;gBACD,OAAO,CAAC,CAAC;YACb,CAAC;YACD,WAAW,EAAE,UAAU,KAAsC;gBACzD,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAe,CAAC,KAAK,SAAS,CAAC,IAAI,MAAM,CAAC;YACpF,CAAC;YACD,cAAc,EAAE,cAAc;SACjC,CAAC;IACN,CAAC;IAEO,+BAA+B;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,sEAAsE;QACtE,OAAO;YACH,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE;YAC/B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE;YAC1D,WAAW,EAAE,UAAgC,UAAiC;gBAC1E,OAAO,IAAA,0BAAkB,EACrB,UAAoB,EACpB,IAAI,CAAC,cAAwB,EAC7B,IAAI,CAAC,cAAwB,CAChC,CAAC;YACN,CAAC;YACD,WAAW,EAAE,UAAU,KAAsC;gBACzD,OAAO,KAAK,IAAI,CAAC,CAAC;YACtB,CAAC;SACJ,CAAC;IACN,CAAC;IAEO,4BAA4B;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,OAAO;YACH,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE;YAC/B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE;SAC7D,CAAC;IACN,CAAC;CACJ;AA5LD,+BA4LC","sourcesContent":["import ThermostatController from '../Alexa/Capabilities/ThermostatController';\nimport ThermostatMode from '../Alexa/Properties/ThermostatMode';\nimport PowerController from '../Alexa/Capabilities/PowerController';\nimport TemperatureSensor from '../Alexa/Capabilities/TemperatureSensor';\nimport PowerState from '../Alexa/Properties/PowerState';\nimport AdjustableControl from './AdjustableControl';\nimport { ensureValueInRange } from '../Helpers/Utils';\nimport TargetSetpoint from '../Alexa/Properties/TargetSetpoint';\nimport type { Base as PropertiesBase, ControlStateInitObject } from '../Alexa/Properties/Base';\nimport AdapterProvider from '../Helpers/AdapterProvider';\nimport type {\n AlexaV3Category,\n AlexaV3DirectiveValue,\n AlexaV3ThermostatMode,\n IotExternalDetectorState,\n IotExternalPatternControl,\n} from '../types';\nimport Connectivity from '../Alexa/Properties/Connectivity';\nimport EndpointHealth from '../Alexa/Capabilities/EndpointHealth';\n\nexport default class AirCondition extends AdjustableControl {\n private readonly _thermostatController: ThermostatController;\n private readonly _thermostatMode: ThermostatMode;\n private readonly _powerController: PowerController;\n private readonly _powerState: PowerState;\n private _lastKnownMode: number | string | undefined;\n\n constructor(detectedControl: IotExternalPatternControl) {\n super(detectedControl);\n\n this._thermostatController = new ThermostatController(\n this.composeInitObjectTargetSetpoint(),\n this.composeInitObjectThermostatMode(),\n );\n this._thermostatMode = this._thermostatController.thermostatMode;\n this._powerController = new PowerController(this.composeInitObjectPowerState());\n this._powerState = this._powerController.powerState;\n\n this._supported = [\n new TemperatureSensor(this.composeInitObjectTemperature()),\n this._thermostatController,\n this._powerController,\n ];\n const health = this.connectivityInitObject();\n if (health) {\n this._supported.push(new EndpointHealth(health));\n }\n }\n\n get categories(): AlexaV3Category[] {\n return ['AIR_CONDITIONER'];\n }\n\n adjustableProperties(): (typeof PropertiesBase)[] {\n return [TargetSetpoint];\n }\n\n get dedicatedOnOff(): boolean {\n return this.states[this.statesMap.power] !== undefined;\n }\n\n async setState(property: PropertiesBase, value: ioBroker.StateValue | undefined): Promise<void> {\n // if we set power ON/OFF via thermostat mode\n if (property.propertyName === PowerState.propertyName && !this.dedicatedOnOff) {\n // set the mode to the last known value or AUTO by switching power ON\n if (value) {\n this._lastKnownMode ||= this._thermostatMode.supportedModesAsEnum[ThermostatMode.AUTO];\n await AdapterProvider.setState(this._thermostatMode.setId, this._lastKnownMode);\n this._thermostatMode.currentValue = this._lastKnownMode;\n this._powerState.currentValue = true;\n } else {\n // set mode to OFF\n const modeOffValue = this._thermostatMode.supportedModesAsEnum[ThermostatMode.OFF];\n await AdapterProvider.setState(this._thermostatMode.setId, modeOffValue);\n this._thermostatMode.currentValue = this._lastKnownMode;\n this._powerState.currentValue = false;\n }\n } else {\n // just set the property\n await AdapterProvider.setState(property.setId, value!);\n property.currentValue = value;\n\n if (property.propertyName === ThermostatMode.propertyName) {\n this._lastKnownMode = value as string;\n if (!this.dedicatedOnOff) {\n this._powerState.currentValue = this._thermostatMode.alexaValue(value) !== ThermostatMode.OFF;\n }\n }\n }\n }\n\n async getOrRetrieveCurrentValue(property: PropertiesBase): Promise<ioBroker.StateValue> {\n if (property.currentValue === undefined) {\n property.currentValue = await AdapterProvider.getState(property.getId);\n\n // convert mode != OFF to power = true\n if (property.propertyName === this._powerState.propertyName && !this.dedicatedOnOff) {\n property.currentValue =\n property.currentValue !== this._thermostatMode.supportedModesAsEnum[ThermostatMode.OFF];\n }\n }\n\n if (property.currentValue === undefined) {\n throw new Error(`unable to retrieve ${property.getId}`);\n }\n\n return property.currentValue;\n }\n\n private composeInitObjectPowerState(): ControlStateInitObject {\n const map = this.statesMap;\n return {\n setState: this.states[map.power] || this.states[map.mode]!,\n getState: this.states[map.power] || this.states[map.mode]!,\n alexaSetter: function (alexaValue: AlexaV3DirectiveValue): boolean {\n return alexaValue === PowerState.ON;\n },\n alexaGetter: function (value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return value ? PowerState.ON : PowerState.OFF;\n },\n };\n }\n\n private composeInitObjectThermostatMode(): ControlStateInitObject {\n const map = this.statesMap;\n // extract all modes\n const modes = this.states[map.mode];\n let states = modes?.common?.states || {};\n const supportedModes: AlexaV3ThermostatMode[] = [];\n if (states) {\n if (Array.isArray(states)) {\n const _states: { [modeValue: string]: string } = {};\n states.forEach(state => {\n _states[state] = state.toUpperCase();\n });\n states = _states;\n }\n // Try map to known modes 'AUTO' | 'COOL' | 'HEAT' | 'OFF' | 'ECO' | 'EM_HEAT'\n Object.keys(states).forEach(state => {\n const mode = states[state].toUpperCase();\n if (mode.includes('AUTO')) {\n supportedModes[parseInt(state, 10)] = 'AUTO';\n states[state] = 'AUTO';\n } else if (mode.includes('COOL')) {\n supportedModes[parseInt(state, 10)] = 'COOL';\n states[state] = 'COOL';\n } else if (mode.includes('HEAT')) {\n supportedModes[parseInt(state, 10)] = 'HEAT';\n states[state] = 'HEAT';\n } else if (mode.includes('ECO')) {\n supportedModes[parseInt(state, 10)] = 'ECO';\n states[state] = 'ECO';\n } else if (mode.includes('OFF')) {\n supportedModes[parseInt(state, 10)] = 'OFF';\n states[state] = 'OFF';\n } else {\n states[state] = mode;\n }\n });\n }\n if (!supportedModes.length) {\n supportedModes.push('AUTO');\n }\n\n return {\n setState: this.states[map.mode] || ({ id: undefined } as unknown as IotExternalDetectorState),\n getState: this.states[map.mode] || ({ id: undefined } as unknown as IotExternalDetectorState),\n alexaSetter: function (this: PropertiesBase, alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue {\n // Convert 'AUTO' and so on into 0, 1\n const pos = Object.keys(states).indexOf(alexaValue as AlexaV3ThermostatMode);\n if (pos !== -1) {\n return Object.keys(states)[pos];\n }\n return 0;\n },\n alexaGetter: function (value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return (value !== undefined && states[value as number] !== undefined) || 'AUTO';\n },\n supportedModes: supportedModes,\n };\n }\n\n private composeInitObjectTargetSetpoint(): ControlStateInitObject {\n const map = this.statesMap;\n // const range = Utils.configuredRangeOrDefault(this.states[map.set]);\n return {\n setState: this.states[map.set]!,\n getState: this.states[map.actual] || this.states[map.set]!,\n alexaSetter: function (this: PropertiesBase, alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue {\n return ensureValueInRange(\n alexaValue as number,\n this.valuesRangeMin as number,\n this.valuesRangeMax as number,\n );\n },\n alexaGetter: function (value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return value || 0;\n },\n };\n }\n\n private composeInitObjectTemperature(): ControlStateInitObject {\n const map = this.statesMap;\n return {\n setState: this.states[map.set]!,\n getState: this.states[map.actual] || this.states[map.set]!,\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AirCondition.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Controls/AirCondition.ts"],"names":[],"mappings":"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","sourcesContent":["import ThermostatController from '../Alexa/Capabilities/ThermostatController';\nimport ThermostatMode from '../Alexa/Properties/ThermostatMode';\nimport PowerController from '../Alexa/Capabilities/PowerController';\nimport TemperatureSensor from '../Alexa/Capabilities/TemperatureSensor';\nimport PowerState from '../Alexa/Properties/PowerState';\nimport AdjustableControl from './AdjustableControl';\nimport { ensureValueInRange } from '../Helpers/Utils';\nimport TargetSetpoint from '../Alexa/Properties/TargetSetpoint';\nimport type { Base as PropertiesBase, ControlStateInitObject } from '../Alexa/Properties/Base';\nimport AdapterProvider from '../Helpers/AdapterProvider';\nimport type {\n AlexaV3Category,\n AlexaV3DirectiveValue,\n AlexaV3ThermostatMode,\n IotExternalDetectorState,\n IotExternalPatternControl,\n} from '../types';\nimport EndpointHealth from '../Alexa/Capabilities/EndpointHealth';\n\nexport default class AirCondition extends AdjustableControl {\n private readonly _thermostatController: ThermostatController;\n private readonly _thermostatMode: ThermostatMode;\n private readonly _powerController: PowerController;\n private readonly _powerState: PowerState;\n private _lastKnownMode: number | string | undefined;\n\n constructor(detectedControl: IotExternalPatternControl) {\n super(detectedControl);\n\n this._thermostatController = new ThermostatController(\n this.composeInitObjectTargetSetpoint(),\n this.composeInitObjectThermostatMode(),\n );\n this._thermostatMode = this._thermostatController.thermostatMode;\n this._powerController = new PowerController(this.composeInitObjectPowerState());\n this._powerState = this._powerController.powerState;\n\n this._supported = [\n new TemperatureSensor(this.composeInitObjectTemperature()),\n this._thermostatController,\n this._powerController,\n ];\n const health = this.connectivityInitObject();\n if (health) {\n this._supported.push(new EndpointHealth(health));\n }\n }\n\n get categories(): AlexaV3Category[] {\n return ['AIR_CONDITIONER'];\n }\n\n adjustableProperties(): (typeof PropertiesBase)[] {\n return [TargetSetpoint];\n }\n\n get dedicatedOnOff(): boolean {\n return this.states[this.statesMap.power] !== undefined;\n }\n\n async setState(property: PropertiesBase, value: ioBroker.StateValue | undefined): Promise<void> {\n // if we set power ON/OFF via thermostat mode\n if (property.propertyName === PowerState.propertyName && !this.dedicatedOnOff) {\n // set the mode to the last known value or AUTO by switching power ON\n if (value) {\n this._lastKnownMode ||= this._thermostatMode.supportedModesAsEnum[ThermostatMode.AUTO];\n await AdapterProvider.setState(this._thermostatMode.setId, this._lastKnownMode);\n this._thermostatMode.currentValue = this._lastKnownMode;\n this._powerState.currentValue = true;\n } else {\n // set mode to OFF\n const modeOffValue = this._thermostatMode.supportedModesAsEnum[ThermostatMode.OFF];\n await AdapterProvider.setState(this._thermostatMode.setId, modeOffValue);\n this._thermostatMode.currentValue = this._lastKnownMode;\n this._powerState.currentValue = false;\n }\n } else {\n // just set the property\n await AdapterProvider.setState(property.setId, value!);\n property.currentValue = value;\n\n if (property.propertyName === ThermostatMode.propertyName) {\n this._lastKnownMode = value as string;\n if (!this.dedicatedOnOff) {\n this._powerState.currentValue = this._thermostatMode.alexaValue(value) !== ThermostatMode.OFF;\n }\n }\n }\n }\n\n async getOrRetrieveCurrentValue(property: PropertiesBase): Promise<ioBroker.StateValue> {\n if (property.currentValue === undefined) {\n property.currentValue = await AdapterProvider.getState(property.getId);\n\n // convert mode != OFF to power = true\n if (property.propertyName === this._powerState.propertyName && !this.dedicatedOnOff) {\n property.currentValue =\n property.currentValue !== this._thermostatMode.supportedModesAsEnum[ThermostatMode.OFF];\n }\n }\n\n if (property.currentValue === undefined) {\n throw new Error(`unable to retrieve ${property.getId}`);\n }\n\n return property.currentValue;\n }\n\n private composeInitObjectPowerState(): ControlStateInitObject {\n const map = this.statesMap;\n return {\n setState: this.states[map.power] || this.states[map.mode]!,\n getState: this.states[map.power] || this.states[map.mode]!,\n alexaSetter: function (alexaValue: AlexaV3DirectiveValue): boolean {\n return alexaValue === PowerState.ON;\n },\n alexaGetter: function (value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return value ? PowerState.ON : PowerState.OFF;\n },\n };\n }\n\n private composeInitObjectThermostatMode(): ControlStateInitObject {\n const map = this.statesMap;\n // extract all modes\n const modes = this.states[map.mode];\n let states = modes?.common?.states || {};\n const supportedModes: AlexaV3ThermostatMode[] = [];\n if (states) {\n if (Array.isArray(states)) {\n const _states: { [modeValue: string]: string } = {};\n states.forEach(state => {\n _states[state] = state.toUpperCase();\n });\n states = _states;\n }\n // Try map to known modes 'AUTO' | 'COOL' | 'HEAT' | 'OFF' | 'ECO' | 'EM_HEAT'\n Object.keys(states).forEach(state => {\n const mode = states[state].toUpperCase();\n if (mode.includes('AUTO')) {\n supportedModes[parseInt(state, 10)] = 'AUTO';\n states[state] = 'AUTO';\n } else if (mode.includes('COOL')) {\n supportedModes[parseInt(state, 10)] = 'COOL';\n states[state] = 'COOL';\n } else if (mode.includes('HEAT')) {\n supportedModes[parseInt(state, 10)] = 'HEAT';\n states[state] = 'HEAT';\n } else if (mode.includes('ECO')) {\n supportedModes[parseInt(state, 10)] = 'ECO';\n states[state] = 'ECO';\n } else if (mode.includes('OFF')) {\n supportedModes[parseInt(state, 10)] = 'OFF';\n states[state] = 'OFF';\n } else {\n states[state] = mode;\n }\n });\n }\n if (!supportedModes.length) {\n supportedModes.push('AUTO');\n }\n\n return {\n setState: this.states[map.mode] || ({ id: undefined } as unknown as IotExternalDetectorState),\n getState: this.states[map.mode] || ({ id: undefined } as unknown as IotExternalDetectorState),\n alexaSetter: function (this: PropertiesBase, alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue {\n // Convert 'AUTO' and so on into 0, 1\n const pos = Object.keys(states).indexOf(alexaValue as AlexaV3ThermostatMode);\n if (pos !== -1) {\n return Object.keys(states)[pos];\n }\n return 0;\n },\n alexaGetter: function (value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return (value !== undefined && states[value as number] !== undefined) || 'AUTO';\n },\n supportedModes: supportedModes,\n };\n }\n\n private composeInitObjectTargetSetpoint(): ControlStateInitObject {\n const map = this.statesMap;\n // const range = Utils.configuredRangeOrDefault(this.states[map.set]);\n return {\n setState: this.states[map.set]!,\n getState: this.states[map.actual] || this.states[map.set]!,\n alexaSetter: function (this: PropertiesBase, alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue {\n return ensureValueInRange(\n alexaValue as number,\n this.valuesRangeMin as number,\n this.valuesRangeMax as number,\n );\n },\n alexaGetter: function (value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return value || 0;\n },\n };\n }\n\n private composeInitObjectTemperature(): ControlStateInitObject {\n const map = this.statesMap;\n return {\n setState: this.states[map.set]!,\n getState: this.states[map.actual] || this.states[map.set]!,\n };\n }\n}\n"]}
|
|
@@ -130,7 +130,8 @@ class Ct extends AdjustableControl_1.default {
|
|
|
130
130
|
}
|
|
131
131
|
composeInitObjectColorTemperature() {
|
|
132
132
|
const map = this.statesMap;
|
|
133
|
-
const isMireds = this.states[map.temperature]?.common?.unit === '
|
|
133
|
+
const isMireds = this.states[map.temperature]?.common?.unit === 'mired' ||
|
|
134
|
+
this.states[map.temperature]?.common?.unit === 'mireds';
|
|
134
135
|
return {
|
|
135
136
|
setState: this.states[map.temperature],
|
|
136
137
|
getState: this.states[map.temperature],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ct.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Controls/Ct.ts"],"names":[],"mappings":";;;;;AAAA,yEAAiD;AACjD,4CAAuF;AACvF,iFAAyD;AACzD,4EAAoD;AAGpD,gFAAwD;AACxD,4GAAoF;AACpF,gFAAwD;AAExD,0FAAkE;AAElE,MAAqB,EAAG,SAAQ,2BAAiB;IAC5B,qBAAqB,CAAmC;IACxD,WAAW,CAAyB;IACpC,SAAS,GAAW,CAAC,CAAC;IAEvC,YAAY,eAA0C;QAClD,KAAK,CAAC,eAAe,CAAC,CAAC;QAEvB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,sBAAY,CAAC,0BAA0B,CAAC,IAAI,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC;QAE1G,+CAA+C;QAC/C,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,qBAAqB,GAAG,IAAI,sBAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC;YACvG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;YACzD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACrD,CAAC;QAED,mDAAmD;QACnD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvB,MAAM,QAAQ,GAAG,yBAAe,CAAC,cAAc,EAAE,CAAC;gBAClD,IAAI,CAAC,SAAS,GAAG,IAAA,yBAAiB,EAC9B,QAAQ,EACR,IAAI,CAAC,WAAY,CAAC,cAAwB,EACzC,IAAI,CAAC,WAAY,CAAC,cAAyB,IAAI,GAAG,CAC5C,CAAC;YAChB,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,sBAAY,CAAC,eAAe,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,wBAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IAED,IAAI,UAAU;QACV,OAAO,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED,oBAAoB;QAChB,OAAO,CAAC,kCAAwB,CAAC,CAAC;IACtC,CAAC;IAES,KAAK,CAAC,yBAAyB,CAAC,QAAwB;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAE3B,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,YAAY,GAAG,MAAM,yBAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvE,kDAAkD;YAClD,IAAI,QAAQ,CAAC,YAAY,KAAK,oBAAU,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5E,QAAQ,CAAC,YAAY,GAAI,QAAQ,CAAC,YAAuB,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/E,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,QAAQ,CAAC,YAAY,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAwB,EAAE,KAA0B;QAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAE3B,IAAI,QAAQ,CAAC,YAAY,KAAK,oBAAU,CAAC,YAAY,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtB,MAAM,yBAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACtD,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACJ,gDAAgD;YACpD,CAAC;QACL,CAAC;aAAM,IACH,QAAQ,CAAC,YAAY,KAAK,oBAAU,CAAC,YAAY;YACjD,QAAQ,CAAC,YAAY,KAAK,kCAAwB,CAAC,YAAY,EACjE,CAAC;YACC,MAAM,yBAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACtD,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC;QAClC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAqB,EAAE,QAAwB;QAC7D,uCAAuC;QACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAElD,kCAAkC;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEpC,qBAAqB;QACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;QAE1C,OAAO,KAA8B,CAAC;IAC1C,CAAC;IAES,2BAA2B;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,OAAO;YACH,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAE;YACxF,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAE;YACxF,WAAW,EAAE,UAAgC,UAAiC;gBAC1E,OAAO,UAAU,KAAK,oBAAU,CAAC,EAAE,CAAC;YACxC,CAAC;YACD,WAAW,EAAE,UAAU,KAAsC;gBACzD,OAAO,KAAK,CAAC,CAAC,CAAC,oBAAU,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAU,CAAC,GAAG,CAAC;YAClD,CAAC;SACJ,CAAC;IACN,CAAC;IAES,2BAA2B;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,IAAI,OAAO,GAA2C,SAAS,CAAC;QAChE,MAAM,QAAQ,GAAG,yBAAe,CAAC,cAAc,EAAE,CAAC;QAClD,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACjC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAyB,CAAC,EAAE,CAAC;gBAC3E,OAAO,GAAG,UAAU,CAAC,IAAW,CAAC,CAAC;gBAClC,IAAI,OAAO,GAAG,QAAQ,EAAE,CAAC;oBACrB,OAAO,GAAG,QAAQ,CAAC;gBACvB,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC9C,OAAO,GAAG,IAAI,CAAC;YACnB,CAAC;QACL,CAAC;QAED,OAAO;YACH,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAE;YACjE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAE;YACjE,WAAW,EAAE,UAAgC,UAAiC;gBAC1E,OAAO,CACH,IAAA,yBAAiB,EACb,UAAoB,EACpB,IAAI,CAAC,cAAwB,EAC7B,IAAI,CAAC,cAAwB,CAChC,IAAI,CAAC,CACT,CAAC;YACN,CAAC;YACD,WAAW,EAAE,UAET,KAAsC;gBAEtC,OAAO,IAAA,uBAAe,EAAC,KAAe,EAAE,IAAI,CAAC,cAAwB,EAAE,IAAI,CAAC,cAAwB,CAAC,CAAC;YAC1G,CAAC;YACD,oBAAoB,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,iCAAiC;YAC7E,mBAAmB,EAAE,IAAI,EAAE,6DAA6D;YACxF,QAAQ;YACR,OAAO;SACV,CAAC;IACN,CAAC;IAES,iCAAiC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC;QAEzE,OAAO;YACH,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAE;YACvC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAE;YACvC,WAAW,EAAE,UAET,UAAiC;gBAEjC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;oBACnB,qBAAqB;oBACrB,MAAM,OAAO,GAAG,IAAA,uBAAe,EAC1B,IAAI,CAAC,YAAuB,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAC9D,IAAI,CAAC,qBAAqB,CAC7B,CAAC;oBACF,IAAI,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC5D,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;oBACnG,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC7C,CAAC;gBACD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;oBACpB,qBAAqB;oBACrB,MAAM,OAAO,GAAG,IAAA,uBAAe,EAC1B,IAAI,CAAC,YAAuB,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAC9D,IAAI,CAAC,qBAAqB,CAC7B,CAAC;oBACF,IAAI,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC5D,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;oBAC9B,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC7C,CAAC;gBAED,2BAA2B;gBAC3B,IAAI,QAAQ,EAAE,CAAC;oBACX,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAI,UAAqB,CAAC,CAAC;gBACxD,CAAC;gBAED,OAAO,UAAoB,CAAC;YAChC,CAAC;YACD,WAAW,EAAE,UAAU,KAAsC;gBACzD,2BAA2B;gBAC3B,IAAI,QAAQ,EAAE,CAAC;oBACX,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAI,KAAgB,CAAC,CAAC;gBACnD,CAAC;gBACD,OAAO,KAAe,CAAC;YAC3B,CAAC;SACJ,CAAC;IACN,CAAC;CACJ;AArMD,qBAqMC","sourcesContent":["import Capabilities from '../Alexa/Capabilities';\nimport { denormalize_0_100, normalize_0_100, closestFromList } from '../Helpers/Utils';\nimport AdapterProvider from '../Helpers/AdapterProvider';\nimport AdjustableControl from './AdjustableControl';\nimport type { Base as PropertiesBase, ControlStateInitObject } from '../Alexa/Properties/Base';\nimport type BrightnessController from '../Alexa/Capabilities/BrightnessController';\nimport Brightness from '../Alexa/Properties/Brightness';\nimport ColorTemperatureInKelvin from '../Alexa/Properties/ColorTemperatureInKelvin';\nimport PowerState from '../Alexa/Properties/PowerState';\nimport type { AlexaV3Category, AlexaV3DirectiveValue, AlexaV3Request, IotExternalPatternControl } from '../types';\nimport EndpointHealth from '../Alexa/Capabilities/EndpointHealth';\n\nexport default class Ct extends AdjustableControl {\n private readonly _brightnessCapability: BrightnessController | undefined;\n private readonly _brightness: Brightness | undefined;\n private readonly _offValue: number = 0;\n\n constructor(detectedControl: IotExternalPatternControl) {\n super(detectedControl);\n\n const map = this.statesMap;\n this._supported = [new Capabilities.ColorTemperatureController(this.composeInitObjectColorTemperature())];\n\n // if the state DIMMER or BRIGHTNESS configured\n if (this.states[map.dimmer] || this.states[map.brightness]) {\n this._brightnessCapability = new Capabilities.BrightnessController(this.composeInitObjectBrightness());\n this._brightness = this._brightnessCapability.brightness;\n this._supported.push(this._brightnessCapability);\n }\n\n // if the state ON, DIMMER or BRIGHTNESS configured\n if (this.states[map.on] || this._brightness) {\n if (!this.states[map.on]) {\n const offValue = AdapterProvider.deviceOffLevel();\n this._offValue = denormalize_0_100(\n offValue,\n this._brightness!.valuesRangeMin as number,\n (this._brightness!.valuesRangeMin as number) || 100,\n ) as number;\n }\n this._supported.push(new Capabilities.PowerController(this.composeInitObjectPowerState()));\n }\n const health = this.connectivityInitObject();\n if (health) {\n this._supported.push(new EndpointHealth(health));\n }\n }\n\n get categories(): AlexaV3Category[] {\n return ['LIGHT'];\n }\n\n adjustableProperties(): (typeof PropertiesBase)[] {\n return [ColorTemperatureInKelvin];\n }\n\n protected async getOrRetrieveCurrentValue(property: PropertiesBase): Promise<ioBroker.StateValue> {\n const map = this.statesMap;\n\n if (property.currentValue === undefined) {\n property.currentValue = await AdapterProvider.getState(property.getId);\n // convert the non-zero brightness to power = true\n if (property.propertyName === PowerState.propertyName && !this.states[map.on]) {\n property.currentValue = (property.currentValue as number) > this._offValue;\n }\n }\n\n if (property.currentValue === undefined) {\n throw new Error(`unable to retrieve ${property.getId}`);\n }\n\n return property.currentValue;\n }\n\n async setState(property: PropertiesBase, value: ioBroker.StateValue): Promise<void> {\n const map = this.statesMap;\n\n if (property.propertyName === PowerState.propertyName) {\n if (this.states[map.on]) {\n await AdapterProvider.setState(property.setId, value);\n property.currentValue = value;\n } else {\n // this will be processed in Brightness property\n }\n } else if (\n property.propertyName === Brightness.propertyName ||\n property.propertyName === ColorTemperatureInKelvin.propertyName\n ) {\n await AdapterProvider.setState(property.setId, value);\n property.currentValue = value;\n }\n }\n\n async adjustValue(event: AlexaV3Request, property: PropertiesBase): Promise<AlexaV3DirectiveValue> {\n // extract Alexa delta value from event\n const delta = property.alexaDirectiveValue(event);\n\n // convert delta to iobroker value\n const value = property.value(delta);\n\n // set iobroker state\n await this.setState(property, value ?? 0);\n\n return value as AlexaV3DirectiveValue;\n }\n\n protected composeInitObjectPowerState(): ControlStateInitObject {\n const map = this.statesMap;\n return {\n setState: this.states[map.on] || this.states[map.dimmer] || this.states[map.brightness]!,\n getState: this.states[map.on] || this.states[map.dimmer] || this.states[map.brightness]!,\n alexaSetter: function (this: PropertiesBase, alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue {\n return alexaValue === PowerState.ON;\n },\n alexaGetter: function (value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return value ? PowerState.ON : PowerState.OFF;\n },\n };\n }\n\n protected composeInitObjectBrightness(): ControlStateInitObject {\n const map = this.statesMap;\n let onValue: number | 'stored' | 'omit' | undefined = undefined;\n const offValue = AdapterProvider.deviceOffLevel();\n if (this.smartName && typeof this.smartName === 'object') {\n const byOn = this.smartName.byON;\n if (byOn !== null && byOn !== undefined && !isNaN(byOn as unknown as number)) {\n onValue = parseFloat(byOn as any);\n if (onValue < offValue) {\n onValue = offValue;\n }\n } else if (byOn === 'stored' || byOn === 'omit') {\n onValue = byOn;\n }\n }\n\n return {\n setState: this.states[map.dimmer] || this.states[map.brightness]!,\n getState: this.states[map.dimmer] || this.states[map.brightness]!,\n alexaSetter: function (this: PropertiesBase, alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue {\n return (\n denormalize_0_100(\n alexaValue as number,\n this.valuesRangeMin as number,\n this.valuesRangeMax as number,\n ) ?? 0\n );\n },\n alexaGetter: function (\n this: PropertiesBase,\n value: ioBroker.StateValue | undefined,\n ): AlexaV3DirectiveValue {\n return normalize_0_100(value as number, this.valuesRangeMin as number, this.valuesRangeMax as number);\n },\n multiPurposeProperty: !this.states[map.on], // Could handle powerState events\n handleSimilarEvents: true, // If power set ON and brightness is 0, set to non-zero value\n offValue,\n onValue,\n };\n }\n\n protected composeInitObjectColorTemperature(): ControlStateInitObject {\n const map = this.statesMap;\n const isMireds = this.states[map.temperature]?.common?.unit === 'mireds';\n\n return {\n setState: this.states[map.temperature]!,\n getState: this.states[map.temperature]!,\n alexaSetter: function (\n this: ColorTemperatureInKelvin,\n alexaValue: AlexaV3DirectiveValue,\n ): ioBroker.StateValue {\n if (alexaValue === 1) {\n // increase directive\n const closest = closestFromList(\n (this.currentValue as number) || this.colorTemperatureTable[0],\n this.colorTemperatureTable,\n );\n let index = this.colorTemperatureTable.indexOf(closest) + 1;\n index = index >= this.colorTemperatureTable.length ? this.colorTemperatureTable.length - 1 : index;\n return this.colorTemperatureTable[index];\n }\n if (alexaValue === -1) {\n // decrease directive\n const closest = closestFromList(\n (this.currentValue as number) || this.colorTemperatureTable[0],\n this.colorTemperatureTable,\n );\n let index = this.colorTemperatureTable.indexOf(closest) - 1;\n index = index < 0 ? 0 : index;\n return this.colorTemperatureTable[index];\n }\n\n // Convert Kelvin to mireds\n if (isMireds) {\n return Math.round(1000000 / (alexaValue as number));\n }\n\n return alexaValue as number;\n },\n alexaGetter: function (value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n // Convert Mireds to Kelvin\n if (isMireds) {\n return Math.round(1000000 / (value as number));\n }\n return value as number;\n },\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Ct.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Controls/Ct.ts"],"names":[],"mappings":"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","sourcesContent":["import Capabilities from '../Alexa/Capabilities';\nimport { denormalize_0_100, normalize_0_100, closestFromList } from '../Helpers/Utils';\nimport AdapterProvider from '../Helpers/AdapterProvider';\nimport AdjustableControl from './AdjustableControl';\nimport type { Base as PropertiesBase, ControlStateInitObject } from '../Alexa/Properties/Base';\nimport type BrightnessController from '../Alexa/Capabilities/BrightnessController';\nimport Brightness from '../Alexa/Properties/Brightness';\nimport ColorTemperatureInKelvin from '../Alexa/Properties/ColorTemperatureInKelvin';\nimport PowerState from '../Alexa/Properties/PowerState';\nimport type { AlexaV3Category, AlexaV3DirectiveValue, AlexaV3Request, IotExternalPatternControl } from '../types';\nimport EndpointHealth from '../Alexa/Capabilities/EndpointHealth';\n\nexport default class Ct extends AdjustableControl {\n private readonly _brightnessCapability: BrightnessController | undefined;\n private readonly _brightness: Brightness | undefined;\n private readonly _offValue: number = 0;\n\n constructor(detectedControl: IotExternalPatternControl) {\n super(detectedControl);\n\n const map = this.statesMap;\n this._supported = [new Capabilities.ColorTemperatureController(this.composeInitObjectColorTemperature())];\n\n // if the state DIMMER or BRIGHTNESS configured\n if (this.states[map.dimmer] || this.states[map.brightness]) {\n this._brightnessCapability = new Capabilities.BrightnessController(this.composeInitObjectBrightness());\n this._brightness = this._brightnessCapability.brightness;\n this._supported.push(this._brightnessCapability);\n }\n\n // if the state ON, DIMMER or BRIGHTNESS configured\n if (this.states[map.on] || this._brightness) {\n if (!this.states[map.on]) {\n const offValue = AdapterProvider.deviceOffLevel();\n this._offValue = denormalize_0_100(\n offValue,\n this._brightness!.valuesRangeMin as number,\n (this._brightness!.valuesRangeMin as number) || 100,\n ) as number;\n }\n this._supported.push(new Capabilities.PowerController(this.composeInitObjectPowerState()));\n }\n const health = this.connectivityInitObject();\n if (health) {\n this._supported.push(new EndpointHealth(health));\n }\n }\n\n get categories(): AlexaV3Category[] {\n return ['LIGHT'];\n }\n\n adjustableProperties(): (typeof PropertiesBase)[] {\n return [ColorTemperatureInKelvin];\n }\n\n protected async getOrRetrieveCurrentValue(property: PropertiesBase): Promise<ioBroker.StateValue> {\n const map = this.statesMap;\n\n if (property.currentValue === undefined) {\n property.currentValue = await AdapterProvider.getState(property.getId);\n // convert the non-zero brightness to power = true\n if (property.propertyName === PowerState.propertyName && !this.states[map.on]) {\n property.currentValue = (property.currentValue as number) > this._offValue;\n }\n }\n\n if (property.currentValue === undefined) {\n throw new Error(`unable to retrieve ${property.getId}`);\n }\n\n return property.currentValue;\n }\n\n async setState(property: PropertiesBase, value: ioBroker.StateValue): Promise<void> {\n const map = this.statesMap;\n\n if (property.propertyName === PowerState.propertyName) {\n if (this.states[map.on]) {\n await AdapterProvider.setState(property.setId, value);\n property.currentValue = value;\n } else {\n // this will be processed in Brightness property\n }\n } else if (\n property.propertyName === Brightness.propertyName ||\n property.propertyName === ColorTemperatureInKelvin.propertyName\n ) {\n await AdapterProvider.setState(property.setId, value);\n property.currentValue = value;\n }\n }\n\n async adjustValue(event: AlexaV3Request, property: PropertiesBase): Promise<AlexaV3DirectiveValue> {\n // extract Alexa delta value from event\n const delta = property.alexaDirectiveValue(event);\n\n // convert delta to iobroker value\n const value = property.value(delta);\n\n // set iobroker state\n await this.setState(property, value ?? 0);\n\n return value as AlexaV3DirectiveValue;\n }\n\n protected composeInitObjectPowerState(): ControlStateInitObject {\n const map = this.statesMap;\n return {\n setState: this.states[map.on] || this.states[map.dimmer] || this.states[map.brightness]!,\n getState: this.states[map.on] || this.states[map.dimmer] || this.states[map.brightness]!,\n alexaSetter: function (this: PropertiesBase, alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue {\n return alexaValue === PowerState.ON;\n },\n alexaGetter: function (value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return value ? PowerState.ON : PowerState.OFF;\n },\n };\n }\n\n protected composeInitObjectBrightness(): ControlStateInitObject {\n const map = this.statesMap;\n let onValue: number | 'stored' | 'omit' | undefined = undefined;\n const offValue = AdapterProvider.deviceOffLevel();\n if (this.smartName && typeof this.smartName === 'object') {\n const byOn = this.smartName.byON;\n if (byOn !== null && byOn !== undefined && !isNaN(byOn as unknown as number)) {\n onValue = parseFloat(byOn as any);\n if (onValue < offValue) {\n onValue = offValue;\n }\n } else if (byOn === 'stored' || byOn === 'omit') {\n onValue = byOn;\n }\n }\n\n return {\n setState: this.states[map.dimmer] || this.states[map.brightness]!,\n getState: this.states[map.dimmer] || this.states[map.brightness]!,\n alexaSetter: function (this: PropertiesBase, alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue {\n return (\n denormalize_0_100(\n alexaValue as number,\n this.valuesRangeMin as number,\n this.valuesRangeMax as number,\n ) ?? 0\n );\n },\n alexaGetter: function (\n this: PropertiesBase,\n value: ioBroker.StateValue | undefined,\n ): AlexaV3DirectiveValue {\n return normalize_0_100(value as number, this.valuesRangeMin as number, this.valuesRangeMax as number);\n },\n multiPurposeProperty: !this.states[map.on], // Could handle powerState events\n handleSimilarEvents: true, // If power set ON and brightness is 0, set to non-zero value\n offValue,\n onValue,\n };\n }\n\n protected composeInitObjectColorTemperature(): ControlStateInitObject {\n const map = this.statesMap;\n const isMireds =\n this.states[map.temperature]?.common?.unit === 'mired' ||\n this.states[map.temperature]?.common?.unit === 'mireds';\n\n return {\n setState: this.states[map.temperature]!,\n getState: this.states[map.temperature]!,\n alexaSetter: function (\n this: ColorTemperatureInKelvin,\n alexaValue: AlexaV3DirectiveValue,\n ): ioBroker.StateValue {\n if (alexaValue === 1) {\n // increase directive\n const closest = closestFromList(\n (this.currentValue as number) || this.colorTemperatureTable[0],\n this.colorTemperatureTable,\n );\n let index = this.colorTemperatureTable.indexOf(closest) + 1;\n index = index >= this.colorTemperatureTable.length ? this.colorTemperatureTable.length - 1 : index;\n return this.colorTemperatureTable[index];\n }\n if (alexaValue === -1) {\n // decrease directive\n const closest = closestFromList(\n (this.currentValue as number) || this.colorTemperatureTable[0],\n this.colorTemperatureTable,\n );\n let index = this.colorTemperatureTable.indexOf(closest) - 1;\n index = index < 0 ? 0 : index;\n return this.colorTemperatureTable[index];\n }\n\n // Convert Kelvin to mireds\n if (isMireds) {\n return Math.round(1000000 / (alexaValue as number));\n }\n\n return alexaValue as number;\n },\n alexaGetter: function (value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n // Convert Mireds to Kelvin\n if (isMireds) {\n return Math.round(1000000 / (value as number));\n }\n return value as number;\n },\n };\n }\n}\n"]}
|
|
@@ -1,4 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
// import Capabilities from '../Alexa/Capabilities';
|
|
3
|
+
// import AdjustableControl from './AdjustableControl';
|
|
4
|
+
// import RangeValue from '../Alexa/Properties/RangeValue';
|
|
5
|
+
// import type { Base as PropertiesBase, ControlStateInitObject } from '../Alexa/Properties/Base';
|
|
6
|
+
// import { type AlexaV3DirectiveValue, type IotExternalPatternControl } from '../types';
|
|
7
|
+
// import EndpointHealth from '../Alexa/Capabilities/EndpointHealth';
|
|
8
|
+
// import { ensureValueInRange } from '../Helpers/Utils';
|
|
9
|
+
//
|
|
10
|
+
// export default class SliderControl extends AdjustableControl {
|
|
11
|
+
// constructor(detectedControl: IotExternalPatternControl) {
|
|
12
|
+
// super(detectedControl);
|
|
13
|
+
// const rangeController = new Capabilities.RangeController(this.rangeInitObject());
|
|
14
|
+
// this._supported = [rangeController];
|
|
15
|
+
// const health = this.connectivityInitObject();
|
|
16
|
+
// if (health) {
|
|
17
|
+
// this._supported.push(new EndpointHealth(health));
|
|
18
|
+
// }
|
|
19
|
+
// }
|
|
20
|
+
//
|
|
21
|
+
// adjustableProperties(): (typeof PropertiesBase)[] {
|
|
22
|
+
// return [RangeValue];
|
|
23
|
+
// }
|
|
24
|
+
//
|
|
25
|
+
// async setState(property: PropertiesBase, value: ioBroker.StateValue): Promise<void> {
|
|
26
|
+
// // todo: byON
|
|
27
|
+
// return super.setState(property, value);
|
|
28
|
+
// }
|
|
29
|
+
//
|
|
30
|
+
// protected rangeInitObject(): ControlStateInitObject {
|
|
31
|
+
// const map = this.statesMap;
|
|
32
|
+
// return {
|
|
33
|
+
// setState: this.states[map.set]!,
|
|
34
|
+
// getState: this.states[map.actual]!,
|
|
35
|
+
// alexaSetter: function (this: PropertiesBase, alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue {
|
|
36
|
+
// return ensureValueInRange(
|
|
37
|
+
// alexaValue as number,
|
|
38
|
+
// this.valuesRangeMin as number,
|
|
39
|
+
// this.valuesRangeMax as number,
|
|
40
|
+
// );
|
|
41
|
+
// },
|
|
42
|
+
// alexaGetter: function (
|
|
43
|
+
// this: PropertiesBase,
|
|
44
|
+
// value: ioBroker.StateValue | undefined,
|
|
45
|
+
// ): AlexaV3DirectiveValue {
|
|
46
|
+
// return value as number;
|
|
47
|
+
// },
|
|
48
|
+
// };
|
|
49
|
+
// }
|
|
50
|
+
// }
|
|
2
51
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
52
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
53
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slider.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Controls/Slider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Slider.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Controls/Slider.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,uDAAuD;AACvD,2DAA2D;AAC3D,kGAAkG;AAClG,yFAAyF;AACzF,qEAAqE;AACrE,yDAAyD;AACzD,EAAE;AACF,iEAAiE;AACjE,gEAAgE;AAChE,kCAAkC;AAClC,4FAA4F;AAC5F,+CAA+C;AAC/C,wDAAwD;AACxD,wBAAwB;AACxB,gEAAgE;AAChE,YAAY;AACZ,QAAQ;AACR,EAAE;AACF,0DAA0D;AAC1D,+BAA+B;AAC/B,QAAQ;AACR,EAAE;AACF,4FAA4F;AAC5F,wBAAwB;AACxB,kDAAkD;AAClD,QAAQ;AACR,EAAE;AACF,4DAA4D;AAC5D,sCAAsC;AACtC,mBAAmB;AACnB,+CAA+C;AAC/C,kDAAkD;AAClD,qHAAqH;AACrH,6CAA6C;AAC7C,4CAA4C;AAC5C,qDAAqD;AACrD,qDAAqD;AACrD,qBAAqB;AACrB,iBAAiB;AACjB,sCAAsC;AACtC,wCAAwC;AACxC,0DAA0D;AAC1D,yCAAyC;AACzC,0CAA0C;AAC1C,iBAAiB;AACjB,aAAa;AACb,QAAQ;AACR,IAAI;;;;;AAEJ,gGAAwE;AAExE,MAAqB,MAAO,SAAQ,qCAA2B;CAAG;AAAlE,yBAAkE","sourcesContent":["// import Capabilities from '../Alexa/Capabilities';\n// import AdjustableControl from './AdjustableControl';\n// import RangeValue from '../Alexa/Properties/RangeValue';\n// import type { Base as PropertiesBase, ControlStateInitObject } from '../Alexa/Properties/Base';\n// import { type AlexaV3DirectiveValue, type IotExternalPatternControl } from '../types';\n// import EndpointHealth from '../Alexa/Capabilities/EndpointHealth';\n// import { ensureValueInRange } from '../Helpers/Utils';\n//\n// export default class SliderControl extends AdjustableControl {\n// constructor(detectedControl: IotExternalPatternControl) {\n// super(detectedControl);\n// const rangeController = new Capabilities.RangeController(this.rangeInitObject());\n// this._supported = [rangeController];\n// const health = this.connectivityInitObject();\n// if (health) {\n// this._supported.push(new EndpointHealth(health));\n// }\n// }\n//\n// adjustableProperties(): (typeof PropertiesBase)[] {\n// return [RangeValue];\n// }\n//\n// async setState(property: PropertiesBase, value: ioBroker.StateValue): Promise<void> {\n// // todo: byON\n// return super.setState(property, value);\n// }\n//\n// protected rangeInitObject(): ControlStateInitObject {\n// const map = this.statesMap;\n// return {\n// setState: this.states[map.set]!,\n// getState: this.states[map.actual]!,\n// alexaSetter: function (this: PropertiesBase, alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue {\n// return ensureValueInRange(\n// alexaValue as number,\n// this.valuesRangeMin as number,\n// this.valuesRangeMax as number,\n// );\n// },\n// alexaGetter: function (\n// this: PropertiesBase,\n// value: ioBroker.StateValue | undefined,\n// ): AlexaV3DirectiveValue {\n// return value as number;\n// },\n// };\n// }\n// }\n\nimport AdjustablePercentageControl from './AdjustablePercentageControl';\n\nexport default class Slider extends AdjustablePercentageControl {}\n"]}
|
|
@@ -166,7 +166,7 @@ class DeviceManager {
|
|
|
166
166
|
this.devices = [];
|
|
167
167
|
const defaultToggle = AdapterProvider_1.default.get().config.defaultToggle || false;
|
|
168
168
|
// collect all iobroker controls in terms of iobroker type detector (https://github.com/ioBroker/ioBroker.type-detector)
|
|
169
|
-
|
|
169
|
+
const detectedControls = await Utils.controls(AdapterProvider_1.default.get(), this.lang);
|
|
170
170
|
this.log.debug(`type detector found ${detectedControls.length} controls`);
|
|
171
171
|
// Normally, every control is a smart device. But due to the iobroker concept of 'rooms and functions'
|
|
172
172
|
// multiple controls might be merged to a single device.
|
|
@@ -242,9 +242,11 @@ class DeviceManager {
|
|
|
242
242
|
});
|
|
243
243
|
// Remove groupName from all controls to avoid processing it again
|
|
244
244
|
for (let c = detectedControls.length - 1; c >= 0; c--) {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
245
|
+
if (detectedControls[c].groupNames) {
|
|
246
|
+
const pos = detectedControls[c].groupNames?.indexOf(groupName);
|
|
247
|
+
if (pos !== -1) {
|
|
248
|
+
detectedControls[c].groupNames.splice(pos, 1);
|
|
249
|
+
}
|
|
248
250
|
if (!detectedControls[c].groupNames.length) {
|
|
249
251
|
detectedControls.splice(c, 1);
|
|
250
252
|
}
|