iobroker.iot 4.1.2 → 4.1.4
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 +10 -6
- package/admin/assets/{index-6Itc0U48.js → index-apVn3YLm.js} +85 -85
- package/admin/index_m.html +1 -1
- package/admin/rules/assets/{index-208Qrr3S.js → index-DBQ_ihVx.js} +83 -83
- package/admin/rules/customRuleBlocks.js +2 -2
- package/build/lib/AlexaSmartHomeV3/Alexa/AlexaResponse.js +7 -0
- package/build/lib/AlexaSmartHomeV3/Alexa/AlexaResponse.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/Base.js +3 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/Base.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/SceneController.js +38 -0
- package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/SceneController.js.map +1 -0
- 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/ModeValues/Closed.js +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/ModeValues/Closed.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/ModeValues/Open.js +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/ModeValues/Open.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Properties/Base.js +2 -0
- package/build/lib/AlexaSmartHomeV3/Alexa/Properties/Base.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Properties/Color.js +67 -14
- package/build/lib/AlexaSmartHomeV3/Alexa/Properties/Color.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Alexa/Properties/PowerState.js +20 -0
- package/build/lib/AlexaSmartHomeV3/Alexa/Properties/PowerState.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Controls/Button.js +74 -0
- package/build/lib/AlexaSmartHomeV3/Controls/Button.js.map +1 -0
- package/build/lib/AlexaSmartHomeV3/Controls/Control.js +6 -0
- package/build/lib/AlexaSmartHomeV3/Controls/Control.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Controls/Ct.js +1 -7
- package/build/lib/AlexaSmartHomeV3/Controls/Ct.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Controls/Dimmer.js +31 -11
- package/build/lib/AlexaSmartHomeV3/Controls/Dimmer.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Controls/Hue.js +8 -5
- package/build/lib/AlexaSmartHomeV3/Controls/Hue.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Controls/Light.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Controls/Rgb.js +303 -0
- package/build/lib/AlexaSmartHomeV3/Controls/Rgb.js.map +1 -0
- package/build/lib/AlexaSmartHomeV3/Controls/RgbSingle.js +200 -0
- package/build/lib/AlexaSmartHomeV3/Controls/RgbSingle.js.map +1 -0
- package/build/lib/AlexaSmartHomeV3/Controls/RgbwSingle.js +210 -0
- package/build/lib/AlexaSmartHomeV3/Controls/RgbwSingle.js.map +1 -0
- package/build/lib/AlexaSmartHomeV3/Controls/VacuumCleaner.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Controls/index.js +20 -3
- package/build/lib/AlexaSmartHomeV3/Controls/index.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/DeviceManager.js +9 -2
- package/build/lib/AlexaSmartHomeV3/DeviceManager.js.map +1 -1
- package/build/lib/AlexaSmartHomeV3/Helpers/Utils.js +297 -2
- package/build/lib/AlexaSmartHomeV3/Helpers/Utils.js.map +1 -1
- package/build/lib/alexaCustom.js +1 -1
- package/build/lib/alexaCustom.js.map +1 -1
- package/build/main.js +12 -1
- package/build/main.js.map +1 -1
- package/io-package.json +27 -27
- package/package.json +4 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hue.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Controls/Hue.ts"],"names":[],"mappings":"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","sourcesContent":["import Capabilities from '../Alexa/Capabilities';\nimport type PowerController from '../Alexa/Capabilities/PowerController';\nimport type BrightnessController from '../Alexa/Capabilities/BrightnessController';\nimport type ColorTemperatureController from '../Alexa/Capabilities/ColorTemperatureController';\nimport { configuredRangeOrDefault, denormalize_0_100, normalize_0_100, closestFromList } from '../Helpers/Utils';\nimport Properties from '../Alexa/Properties';\nimport PowerState from '../Alexa/Properties/PowerState';\nimport Brightness from '../Alexa/Properties/Brightness';\nimport AdapterProvider from '../Helpers/AdapterProvider';\nimport AdjustableControl from './AdjustableControl';\nimport type { Base as PropertiesBase, ControlStateInitObject } from '../Alexa/Properties/Base';\nimport type { AlexaV3Category, AlexaV3DirectiveValue, AlexaV3Request, IotExternalPatternControl } from '../types';\nimport Color from '../Alexa/Properties/Color';\nimport ColorTemperatureInKelvin from '../Alexa/Properties/ColorTemperatureInKelvin';\n\nexport default class Hue extends AdjustableControl {\n private readonly _powerControllerCapability: PowerController | undefined;\n private readonly _powerState: PowerState | undefined;\n private readonly _brightnessCapability: BrightnessController | undefined;\n private readonly _brightness: Brightness | undefined;\n private readonly _colorTemperatureCapability: ColorTemperatureController | undefined;\n\n constructor(detectedControl: IotExternalPatternControl) {\n super(detectedControl);\n\n const map = this.statesMap;\n this._supported = [new Capabilities.ColorController(this.composeInitObjectColor())];\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 TEMPERATURE configured\n if (this.states[map.temperature]) {\n this._colorTemperatureCapability = new Capabilities.ColorTemperatureController(\n this.composeInitObjectColorTemperature(),\n );\n this._supported.push(this._colorTemperatureCapability);\n }\n\n // if the state ON, DIMMER or BRIGHTNESS configured\n if (this.states[map.on] || this._brightness) {\n this._powerControllerCapability = new Capabilities.PowerController(this.composeInitObjectPowerState());\n this._powerState = this._powerControllerCapability.powerState;\n this._supported.push(this._powerControllerCapability);\n }\n }\n\n get categories(): AlexaV3Category[] {\n return ['LIGHT'];\n }\n\n adjustableProperties(): (typeof PropertiesBase)[] {\n return [Properties.ColorTemperatureInKelvin];\n }\n\n async getOrRetrieveCurrentValue(property: Color): 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 === Properties.PowerState.propertyName && !this.states[map.on]) {\n property.currentValue = property.currentValue !== 0;\n }\n\n if (property.propertyName === Properties.Color.propertyName) {\n // @ts-expect-error special case for Color property\n property.currentValue = {\n hue: property.currentValue,\n saturation: property.hal.saturation,\n brightness: property.hal.brightness,\n };\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 | undefined): 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 ?? false);\n property.currentValue = value;\n } else {\n if (value) {\n // set brightness\n // set byOn to the configured value or range.max otherwise\n const range = configuredRangeOrDefault(this.states[map.dimmer] || this.states[map.brightness]!);\n const smartName = (this.states[map.dimmer] || this.states[map.brightness])?.smartName;\n let byOn: string | number | undefined | null;\n if (smartName && typeof smartName === 'object') {\n byOn = smartName.byON;\n }\n byOn =\n byOn === null || byOn === undefined || isNaN(byOn as number)\n ? (range.max as number)\n : parseFloat(byOn as string);\n if (this._brightness) {\n await AdapterProvider.setState(this._brightness.setId, byOn);\n this._brightness.currentValue = byOn;\n }\n if (this._powerState) {\n this._powerState.currentValue = true;\n }\n } else {\n if (this._brightness) {\n // set brightness to 0 on power OFF\n await AdapterProvider.setState(this._brightness.setId, 0);\n this._brightness.currentValue = 0;\n }\n if (this._powerState) {\n this._powerState.currentValue = false;\n }\n }\n }\n } else if (property.propertyName === Brightness.propertyName) {\n await AdapterProvider.setState(property.setId, value ?? 0);\n property.currentValue = value;\n } else if (property.propertyName === Color.propertyName) {\n const colorProperty = property as Color;\n const hueValue = value as unknown as { hue: number; saturation: number };\n await AdapterProvider.setState(colorProperty.hal.hue, hueValue.hue);\n if (colorProperty.hal.saturation) {\n await AdapterProvider.setState(colorProperty.hal.saturation, hueValue.saturation);\n }\n\n // do not set brightness\n\n // https://developer.amazon.com/en-US/docs/alexa/device-apis/alexa-colorcontroller.html\n // Important: For the best user experience, when you make a color change, maintain the current brightness setting of the endpoint.\n // For example, if a light bulb is currently set to white at 0.5 brightness, and a user requests a color change to red,\n // the SetColor directive specifies hue = 0, saturation = 1, and brightness = 1. Here, set the hue to 0, the saturation to 1,\n // and ignore the brightness value of 1 in the directive. Instead, maintain the current brightness value of 0.5.\n\n property.currentValue = value;\n } else if (property.propertyName === ColorTemperatureInKelvin.propertyName) {\n await AdapterProvider.setState(property.setId, value ?? 2200);\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);\n\n return value as AlexaV3DirectiveValue;\n }\n\n private 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 (\n this: PropertiesBase,\n value: ioBroker.StateValue | undefined,\n ): AlexaV3DirectiveValue {\n return value ? PowerState.ON : PowerState.OFF;\n },\n };\n }\n\n private composeInitObjectBrightness(): ControlStateInitObject {\n const map = this.statesMap;\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 };\n }\n\n private composeInitObjectColor(): ControlStateInitObject {\n const map = this.statesMap;\n return {\n hal: {\n hue: this.states[map.hue]!.id,\n saturation: this.states[map.saturation]?.id,\n brightness: (this.states[map.dimmer] || this.states[map.brightness])?.id,\n },\n };\n }\n\n private composeInitObjectColorTemperature(): ControlStateInitObject {\n const map = this.statesMap;\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 return alexaValue as number;\n },\n alexaGetter: function (\n this: PropertiesBase,\n value: ioBroker.StateValue | undefined,\n ): AlexaV3DirectiveValue {\n return value as number;\n },\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Hue.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Controls/Hue.ts"],"names":[],"mappings":"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","sourcesContent":["import Capabilities from '../Alexa/Capabilities';\nimport type PowerController from '../Alexa/Capabilities/PowerController';\nimport type BrightnessController from '../Alexa/Capabilities/BrightnessController';\nimport type ColorTemperatureController from '../Alexa/Capabilities/ColorTemperatureController';\nimport {\n configuredRangeOrDefault,\n denormalize_0_100,\n normalize_0_100,\n closestFromList,\n rgb2hal,\n} from '../Helpers/Utils';\nimport Properties from '../Alexa/Properties';\nimport PowerState from '../Alexa/Properties/PowerState';\nimport Brightness from '../Alexa/Properties/Brightness';\nimport AdapterProvider from '../Helpers/AdapterProvider';\nimport AdjustableControl from './AdjustableControl';\nimport type { Base as PropertiesBase, ControlStateInitObject } from '../Alexa/Properties/Base';\nimport type { AlexaV3Category, AlexaV3DirectiveValue, AlexaV3Request, IotExternalPatternControl } from '../types';\nimport Color from '../Alexa/Properties/Color';\nimport ColorTemperatureInKelvin from '../Alexa/Properties/ColorTemperatureInKelvin';\n\nexport default class Hue extends AdjustableControl {\n private readonly _powerControllerCapability: PowerController | undefined;\n private readonly _powerState: PowerState | undefined;\n private readonly _brightnessCapability: BrightnessController | undefined;\n private readonly _brightness: Brightness | undefined;\n private readonly _colorTemperatureCapability: ColorTemperatureController | undefined;\n\n constructor(detectedControl: IotExternalPatternControl) {\n super(detectedControl);\n\n const map = this.statesMap;\n this._supported = [new Capabilities.ColorController(this.composeInitObjectColor())];\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 TEMPERATURE configured\n if (this.states[map.temperature]) {\n this._colorTemperatureCapability = new Capabilities.ColorTemperatureController(\n this.composeInitObjectColorTemperature(),\n );\n this._supported.push(this._colorTemperatureCapability);\n }\n\n // if the state ON, DIMMER or BRIGHTNESS configured\n if (this.states[map.on] || this._brightness) {\n this._powerControllerCapability = new Capabilities.PowerController(this.composeInitObjectPowerState());\n this._powerState = this._powerControllerCapability.powerState;\n this._supported.push(this._powerControllerCapability);\n }\n }\n\n get categories(): AlexaV3Category[] {\n return ['LIGHT'];\n }\n\n adjustableProperties(): (typeof PropertiesBase)[] {\n return [Properties.ColorTemperatureInKelvin];\n }\n\n async getOrRetrieveCurrentValue(property: Color): 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 === Properties.PowerState.propertyName && !this.states[map.on]) {\n property.currentValue = property.currentValue !== 0;\n }\n\n if (property.propertyName === Properties.Color.propertyName) {\n // @ts-expect-error special case for Hue property\n property.currentValue = {\n hue: property.currentValue,\n saturation: property.hal!.saturation,\n brightness: property.hal!.brightness,\n };\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 | undefined): 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 ?? false);\n property.currentValue = value;\n } else {\n if (value) {\n // set brightness\n // set byOn to the configured value or range.max otherwise\n const range = configuredRangeOrDefault(this.states[map.dimmer] || this.states[map.brightness]!);\n const smartName = (this.states[map.dimmer] || this.states[map.brightness])?.smartName;\n let byOn: string | number | undefined | null;\n if (smartName && typeof smartName === 'object') {\n byOn = smartName.byON;\n }\n byOn =\n byOn === null || byOn === undefined || isNaN(byOn as number)\n ? (range.max as number)\n : parseFloat(byOn as string);\n if (this._brightness) {\n await AdapterProvider.setState(this._brightness.setId, byOn);\n this._brightness.currentValue = byOn;\n }\n if (this._powerState) {\n this._powerState.currentValue = true;\n }\n } else {\n if (this._brightness) {\n // set brightness to 0 on power OFF\n await AdapterProvider.setState(this._brightness.setId, 0);\n this._brightness.currentValue = 0;\n }\n if (this._powerState) {\n this._powerState.currentValue = false;\n }\n }\n }\n } else if (property.propertyName === Brightness.propertyName) {\n await AdapterProvider.setState(property.setId, value ?? 0);\n property.currentValue = value;\n } else if (property.propertyName === Color.propertyName) {\n const colorProperty = property as Color;\n const hueValue = rgb2hal(value as string);\n await AdapterProvider.setState(colorProperty.hal!.hue, hueValue.hue);\n if (colorProperty.hal!.saturation) {\n await AdapterProvider.setState(colorProperty.hal!.saturation, hueValue.saturation);\n }\n if (colorProperty.hal!.brightness) {\n await AdapterProvider.setState(colorProperty.hal!.brightness, hueValue.brightness);\n }\n\n // do not set brightness\n\n // https://developer.amazon.com/en-US/docs/alexa/device-apis/alexa-colorcontroller.html\n // Important: For the best user experience, when you make a color change, maintain the current brightness setting of the endpoint.\n // For example, if a light bulb is currently set to white at 0.5 brightness, and a user requests a color change to red,\n // the SetColor directive specifies hue = 0, saturation = 1, and brightness = 1. Here, set the hue to 0, the saturation to 1,\n // and ignore the brightness value of 1 in the directive. Instead, maintain the current brightness value of 0.5.\n\n property.currentValue = value;\n } else if (property.propertyName === ColorTemperatureInKelvin.propertyName) {\n await AdapterProvider.setState(property.setId, value ?? 2200);\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);\n\n return value as AlexaV3DirectiveValue;\n }\n\n private 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 (\n this: PropertiesBase,\n value: ioBroker.StateValue | undefined,\n ): AlexaV3DirectiveValue {\n return value ? PowerState.ON : PowerState.OFF;\n },\n };\n }\n\n private composeInitObjectBrightness(): ControlStateInitObject {\n const map = this.statesMap;\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 };\n }\n\n private composeInitObjectColor(): ControlStateInitObject {\n const map = this.statesMap;\n return {\n hal: {\n hue: this.states[map.hue]!,\n saturation: this.states[map.saturation],\n brightness: this.states[map.dimmer] || this.states[map.brightness],\n },\n };\n }\n\n private composeInitObjectColorTemperature(): ControlStateInitObject {\n const map = this.statesMap;\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 return alexaValue as number;\n },\n alexaGetter: function (\n this: PropertiesBase,\n value: ioBroker.StateValue | undefined,\n ): AlexaV3DirectiveValue {\n return value as number;\n },\n };\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Light.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Controls/Light.ts"],"names":[],"mappings":";;;;;AAAA,yEAAiD;AACjD,
|
|
1
|
+
{"version":3,"file":"Light.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Controls/Light.ts"],"names":[],"mappings":";;;;;AAAA,yEAAiD;AACjD,wDAAoD;AAQpD,MAAqB,KAAM,SAAQ,iBAAO;IACtC,YAAY,eAA0C;QAClD,KAAK,CAAC,eAAe,CAAC,CAAC;QAEvB,oGAAoG;QACpG,6BAA6B;QAC7B,MAAM,oBAAoB,GAAG,IAAI,sBAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,SAAS,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAExC,oBAAoB;QACpB,MAAM,eAAe,GAAG,IAAI,sBAAY,CAAC,eAAe,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,UAAU,GAAG,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,UAAU;QACV,OAAO,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,SAAS;QAIT,OAAO;YACH,GAAG,EAAE,KAAK;YACV,MAAM,EAAE,WAAW;SACtB,CAAC;IACN,CAAC;IAEO,oBAAoB;QAMxB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAE3B,OAAO;YACH,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE;YAC/B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAE;YAClC,WAAW,EAAE,UAAU,UAAiC;gBACpD,OAAQ,UAAqB,GAAG,CAAC,CAAC;YACtC,CAAC;YACD,WAAW,EAAE,UAAU,KAAsC;gBACzD,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;SACJ,CAAC;IACN,CAAC;CACJ;AA/CD,wBA+CC","sourcesContent":["import Capabilities from '../Alexa/Capabilities';\nimport Control, { type StateName } from './Control';\nimport type {\n AlexaV3Category,\n AlexaV3DirectiveValue,\n IotExternalDetectorState,\n IotExternalPatternControl,\n} from '../types';\n\nexport default class Light extends Control {\n constructor(detectedControl: IotExternalPatternControl) {\n super(detectedControl);\n\n // We support dimmer as enforced capability to allow setting group commands to dim to 0% and to 100%\n // Init enforced capabilities\n const brightnessController = new Capabilities.BrightnessController(this.brightnessInitObject());\n this._enforced = [brightnessController];\n\n // Init capabilities\n const powerController = new Capabilities.PowerController(this.powerStateInitObject());\n this._supported = [powerController];\n }\n\n get categories(): AlexaV3Category[] {\n return ['LIGHT'];\n }\n\n get statesMap(): {\n set: StateName;\n actual: StateName;\n } {\n return {\n set: 'SET',\n actual: 'ON_ACTUAL',\n };\n }\n\n private brightnessInitObject(): {\n setState: IotExternalDetectorState;\n getState: IotExternalDetectorState;\n alexaSetter?: (alexaValue: AlexaV3DirectiveValue) => ioBroker.StateValue | undefined;\n alexaGetter?: (value: ioBroker.StateValue | undefined) => AlexaV3DirectiveValue;\n } {\n const map = this.statesMap;\n\n return {\n setState: this.states[map.set]!,\n getState: this.states[map.actual]!,\n alexaSetter: function (alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue | undefined {\n return (alexaValue as number) > 0;\n },\n alexaGetter: function (value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return value ? 100 : 0;\n },\n };\n }\n}\n"]}
|
|
@@ -0,0 +1,303 @@
|
|
|
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 Capabilities_1 = __importDefault(require("../Alexa/Capabilities"));
|
|
7
|
+
const Utils_1 = require("../Helpers/Utils");
|
|
8
|
+
const AdapterProvider_1 = __importDefault(require("../Helpers/AdapterProvider"));
|
|
9
|
+
const AdjustableControl_1 = __importDefault(require("./AdjustableControl"));
|
|
10
|
+
const Brightness_1 = __importDefault(require("../Alexa/Properties/Brightness"));
|
|
11
|
+
const ColorTemperatureInKelvin_1 = __importDefault(require("../Alexa/Properties/ColorTemperatureInKelvin"));
|
|
12
|
+
const PowerState_1 = __importDefault(require("../Alexa/Properties/PowerState"));
|
|
13
|
+
const Color_1 = __importDefault(require("../Alexa/Properties/Color"));
|
|
14
|
+
// ### RGB(W) Light with different states for every color [rgb]
|
|
15
|
+
//
|
|
16
|
+
// R,G,B(,W) Light with different states for every color. The value is from 0 to 255.
|
|
17
|
+
//
|
|
18
|
+
// | R | Name | Role | Unit | Type | Wr | Ind | Multi | Regex |
|
|
19
|
+
// |---|-----------------|-------------------------------|------|---------|----|-----|-------|---------------------------------------------------|
|
|
20
|
+
// | * | RED | level.color.red | | number | W | | | `/^level\.color\.red$/` |
|
|
21
|
+
// | * | GREEN | level.color.green | | number | W | | | `/^level\.color\.green$/` |
|
|
22
|
+
// | * | BLUE | level.color.blue | | number | W | | | `/^level\.color\.blue$/` |
|
|
23
|
+
// | | WHITE | level.color.white | | number | W | | | `/^level\.color\.white$/` |
|
|
24
|
+
// | | DIMMER | level.dimmer | % | number | W | | | `/^level\.dimmer$/` |
|
|
25
|
+
// | | BRIGHTNESS | | | number | W | | | `/^level\.brightness$/` |
|
|
26
|
+
// | | TEMPERATURE | level.color.temperature | °K | number | W | | | `/^level\.color\.temperature$/` |
|
|
27
|
+
// | | ON | switch.light | | boolean | W | | | `/^switch(\.light)?$|^state$/` |
|
|
28
|
+
// | | ON_ACTUAL | sensor.light | | boolean | - | | | `/^(state|switch|sensor)\.light|switch$/` |
|
|
29
|
+
class Rgb extends AdjustableControl_1.default {
|
|
30
|
+
_brightnessCapability;
|
|
31
|
+
_brightness;
|
|
32
|
+
_colorTemperatureCapability;
|
|
33
|
+
_powerControllerCapability;
|
|
34
|
+
_powerState;
|
|
35
|
+
constructor(detectedControl) {
|
|
36
|
+
super(detectedControl);
|
|
37
|
+
const map = this.statesMap;
|
|
38
|
+
this._supported = [new Capabilities_1.default.ColorController(this.composeInitObjectColor())];
|
|
39
|
+
if (this.states[map.temperature]) {
|
|
40
|
+
this._colorTemperatureCapability = new Capabilities_1.default.ColorTemperatureController(this.composeInitObjectColorTemperature());
|
|
41
|
+
this._supported.push(this._colorTemperatureCapability);
|
|
42
|
+
}
|
|
43
|
+
// if the state DIMMER or BRIGHTNESS configured
|
|
44
|
+
if (this.states[map.dimmer] || this.states[map.brightness]) {
|
|
45
|
+
this._brightnessCapability = new Capabilities_1.default.BrightnessController(this.composeInitObjectBrightness());
|
|
46
|
+
this._brightness = this._brightnessCapability.brightness;
|
|
47
|
+
this._supported.push(this._brightnessCapability);
|
|
48
|
+
}
|
|
49
|
+
// if the state ON, DIMMER or BRIGHTNESS configured
|
|
50
|
+
if (this.states[map.on] || this._brightness) {
|
|
51
|
+
this._powerControllerCapability = new Capabilities_1.default.PowerController(this.composeInitObjectPowerState());
|
|
52
|
+
this._powerState = this._powerControllerCapability.powerState;
|
|
53
|
+
this._supported.push(this._powerControllerCapability);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
get categories() {
|
|
57
|
+
return ['LIGHT'];
|
|
58
|
+
}
|
|
59
|
+
adjustableProperties() {
|
|
60
|
+
return [ColorTemperatureInKelvin_1.default];
|
|
61
|
+
}
|
|
62
|
+
async getOrRetrieveCurrentValue(property) {
|
|
63
|
+
const map = this.statesMap;
|
|
64
|
+
if (property.propertyName === Color_1.default.propertyName) {
|
|
65
|
+
// read every time all colors
|
|
66
|
+
const red = await AdapterProvider_1.default.getState(this.states[map.red].id);
|
|
67
|
+
const green = await AdapterProvider_1.default.getState(this.states[map.green].id);
|
|
68
|
+
const blue = await AdapterProvider_1.default.getState(this.states[map.blue].id);
|
|
69
|
+
let white;
|
|
70
|
+
if (this.states[map.white]) {
|
|
71
|
+
white = await AdapterProvider_1.default.getState(this.states[map.white].id);
|
|
72
|
+
}
|
|
73
|
+
const minMaxRed = (0, Utils_1.configuredRangeOrDefault)(this.states[map.red]);
|
|
74
|
+
const minMaxGreen = (0, Utils_1.configuredRangeOrDefault)(this.states[map.green]);
|
|
75
|
+
const minMaxBlue = (0, Utils_1.configuredRangeOrDefault)(this.states[map.blue]);
|
|
76
|
+
let minMaxWhite;
|
|
77
|
+
if (this.states[map.white]) {
|
|
78
|
+
minMaxWhite = (0, Utils_1.configuredRangeOrDefault)(this.states[map.white]);
|
|
79
|
+
}
|
|
80
|
+
// normalize values to 0-255
|
|
81
|
+
const redNorm = (0, Utils_1.normalize_0_100)(red, minMaxRed.min, minMaxRed.max, true);
|
|
82
|
+
const greenNorm = (0, Utils_1.normalize_0_100)(green, minMaxGreen.min, minMaxGreen.max, true);
|
|
83
|
+
const blueNorm = (0, Utils_1.normalize_0_100)(blue, minMaxBlue.min, minMaxBlue.max, true);
|
|
84
|
+
let whiteNorm;
|
|
85
|
+
if (this.states[map.white]) {
|
|
86
|
+
whiteNorm = (0, Utils_1.normalize_0_100)(white, minMaxWhite.min, minMaxWhite.max, true);
|
|
87
|
+
}
|
|
88
|
+
const red255 = Math.round(redNorm * 2.55);
|
|
89
|
+
const green255 = Math.round(greenNorm * 2.55);
|
|
90
|
+
const blue255 = Math.round(blueNorm * 2.55);
|
|
91
|
+
let white255;
|
|
92
|
+
if (this.states[map.white]) {
|
|
93
|
+
white255 = Math.round(whiteNorm * 2.55);
|
|
94
|
+
}
|
|
95
|
+
// Convert to HEX
|
|
96
|
+
let hex = `#${red255.toString(16).padStart(2, '0')}${green255.toString(16).padStart(2, '0')}${blue255.toString(16).padStart(2, '0')}`;
|
|
97
|
+
if (this.states[map.white]) {
|
|
98
|
+
hex += white255.toString(16).padStart(2, '0');
|
|
99
|
+
}
|
|
100
|
+
// store current value
|
|
101
|
+
property.currentValue = hex.toLowerCase();
|
|
102
|
+
return property.currentValue;
|
|
103
|
+
}
|
|
104
|
+
if (property.currentValue === undefined) {
|
|
105
|
+
property.currentValue = await AdapterProvider_1.default.getState(property.getId);
|
|
106
|
+
// convert the non-zero brightness to power = true
|
|
107
|
+
if (property.propertyName === PowerState_1.default.propertyName && !this.states[map.on]) {
|
|
108
|
+
property.currentValue = property.currentValue !== 0;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (property.currentValue === undefined) {
|
|
112
|
+
throw new Error(`unable to retrieve ${property.getId}`);
|
|
113
|
+
}
|
|
114
|
+
return property.currentValue;
|
|
115
|
+
}
|
|
116
|
+
async setState(property, value) {
|
|
117
|
+
const map = this.statesMap;
|
|
118
|
+
if (property.propertyName === PowerState_1.default.propertyName) {
|
|
119
|
+
if (this.states[map.on]) {
|
|
120
|
+
await AdapterProvider_1.default.setState(property.setId, value);
|
|
121
|
+
property.currentValue = value;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
if (!this._brightness) {
|
|
125
|
+
throw new Error('No brightness property configured');
|
|
126
|
+
}
|
|
127
|
+
if (!this._powerState) {
|
|
128
|
+
throw new Error('No powerState property configured');
|
|
129
|
+
}
|
|
130
|
+
if (value) {
|
|
131
|
+
// set brightness
|
|
132
|
+
// set byOn to the configured value or range.max otherwise
|
|
133
|
+
const range = (0, Utils_1.configuredRangeOrDefault)(this.states[map.dimmer] || this.states[map.brightness]);
|
|
134
|
+
const smartName = (this.states[map.dimmer] || this.states[map.brightness])?.smartName;
|
|
135
|
+
let byOn;
|
|
136
|
+
if (smartName && typeof smartName === 'object') {
|
|
137
|
+
byOn = smartName.byON;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
byOn = undefined;
|
|
141
|
+
}
|
|
142
|
+
if (byOn === undefined || byOn === null || isNaN(byOn)) {
|
|
143
|
+
byOn = range.max;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
byOn = parseFloat(byOn);
|
|
147
|
+
}
|
|
148
|
+
await AdapterProvider_1.default.setState(this._brightness.setId, byOn ?? 100);
|
|
149
|
+
this._brightness.currentValue = byOn;
|
|
150
|
+
this._powerState.currentValue = true;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
// set brightness to 0 on power OFF
|
|
154
|
+
await AdapterProvider_1.default.setState(this._brightness.setId, 0);
|
|
155
|
+
this._brightness.currentValue = 0;
|
|
156
|
+
this._powerState.currentValue = false;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else if (property.propertyName === Color_1.default.propertyName) {
|
|
161
|
+
// Split value into RGB(W)
|
|
162
|
+
const hex = value.replace('#', '');
|
|
163
|
+
const red = parseInt(hex.substring(0, 2), 16);
|
|
164
|
+
const green = parseInt(hex.substring(2, 4), 16);
|
|
165
|
+
const blue = parseInt(hex.substring(4, 6), 16);
|
|
166
|
+
let white;
|
|
167
|
+
if (hex.length === 8) {
|
|
168
|
+
white = parseInt(hex.substring(6, 8), 16);
|
|
169
|
+
}
|
|
170
|
+
// Convert from 0-255 to 0-100
|
|
171
|
+
const red100 = (red / 255) * 100;
|
|
172
|
+
const green100 = (green / 255) * 100;
|
|
173
|
+
const blue100 = (blue / 255) * 100;
|
|
174
|
+
let white100;
|
|
175
|
+
if (white !== undefined) {
|
|
176
|
+
white100 = (white / 255) * 100;
|
|
177
|
+
}
|
|
178
|
+
// Convert from 0-100 to min-max of the state
|
|
179
|
+
const minMaxRed = (0, Utils_1.configuredRangeOrDefault)(this.states[map.red]);
|
|
180
|
+
const minMaxGreen = (0, Utils_1.configuredRangeOrDefault)(this.states[map.green]);
|
|
181
|
+
const minMaxBlue = (0, Utils_1.configuredRangeOrDefault)(this.states[map.blue]);
|
|
182
|
+
let minMaxWhite;
|
|
183
|
+
if (this.states[map.white]) {
|
|
184
|
+
minMaxWhite = (0, Utils_1.configuredRangeOrDefault)(this.states[map.white]);
|
|
185
|
+
}
|
|
186
|
+
const redValue = (0, Utils_1.denormalize_0_100)(red100, minMaxRed.min, minMaxRed.max);
|
|
187
|
+
const greenValue = (0, Utils_1.denormalize_0_100)(green100, minMaxGreen.min, minMaxGreen.max);
|
|
188
|
+
const blueValue = (0, Utils_1.denormalize_0_100)(blue100, minMaxBlue.min, minMaxBlue.max);
|
|
189
|
+
let whiteValue;
|
|
190
|
+
if (this.states[map.white]) {
|
|
191
|
+
whiteValue = (0, Utils_1.denormalize_0_100)(white100, minMaxWhite.min, minMaxWhite.max);
|
|
192
|
+
}
|
|
193
|
+
// set states
|
|
194
|
+
await Promise.all([
|
|
195
|
+
AdapterProvider_1.default.setState(this.states[map.red].id, redValue ?? 0),
|
|
196
|
+
AdapterProvider_1.default.setState(this.states[map.green].id, greenValue ?? 0),
|
|
197
|
+
AdapterProvider_1.default.setState(this.states[map.blue].id, blueValue ?? 0),
|
|
198
|
+
this.states[map.white] ? AdapterProvider_1.default.setState(this.states[map.white].id, whiteValue ?? 0) : null,
|
|
199
|
+
]);
|
|
200
|
+
property.currentValue = value;
|
|
201
|
+
}
|
|
202
|
+
else if (property.propertyName === Brightness_1.default.propertyName ||
|
|
203
|
+
property.propertyName === ColorTemperatureInKelvin_1.default.propertyName) {
|
|
204
|
+
await AdapterProvider_1.default.setState(property.setId, value);
|
|
205
|
+
property.currentValue = value;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
async adjustValue(event, property) {
|
|
209
|
+
// extract Alexa delta value from event
|
|
210
|
+
const delta = property.alexaDirectiveValue(event);
|
|
211
|
+
// convert delta to iobroker value
|
|
212
|
+
const value = property.value(delta);
|
|
213
|
+
// set iobroker state
|
|
214
|
+
await this.setState(property, value ?? 0);
|
|
215
|
+
return value;
|
|
216
|
+
}
|
|
217
|
+
composeInitObjectColor() {
|
|
218
|
+
const map = this.statesMap;
|
|
219
|
+
// Set default min max to 0 255 for colors
|
|
220
|
+
['red', 'green', 'blue', 'white'].forEach(color => {
|
|
221
|
+
if (this.states[map[color]] && this.states[map[color]].common?.min === undefined) {
|
|
222
|
+
this.states[map[color]].common ||= {};
|
|
223
|
+
this.states[map[color]].common.min = 0;
|
|
224
|
+
}
|
|
225
|
+
if (this.states[map[color]] && this.states[map[color]].common?.max === undefined) {
|
|
226
|
+
this.states[map[color]].common ||= {};
|
|
227
|
+
this.states[map[color]].common.max = 255;
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
if (this.states[map.white]) {
|
|
231
|
+
return {
|
|
232
|
+
rgbw: {
|
|
233
|
+
red: this.states[map.red],
|
|
234
|
+
green: this.states[map.green],
|
|
235
|
+
blue: this.states[map.blue],
|
|
236
|
+
white: this.states[map.white],
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
rgb: {
|
|
242
|
+
red: this.states[map.red],
|
|
243
|
+
green: this.states[map.green],
|
|
244
|
+
blue: this.states[map.blue],
|
|
245
|
+
},
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
composeInitObjectPowerState() {
|
|
249
|
+
const map = this.statesMap;
|
|
250
|
+
return {
|
|
251
|
+
setState: this.states[map.on] || this.states[map.dimmer] || this.states[map.brightness],
|
|
252
|
+
getState: this.states[map.on] || this.states[map.dimmer] || this.states[map.brightness],
|
|
253
|
+
alexaSetter: function (alexaValue) {
|
|
254
|
+
return alexaValue === PowerState_1.default.ON;
|
|
255
|
+
},
|
|
256
|
+
alexaGetter: function (value) {
|
|
257
|
+
return value ? PowerState_1.default.ON : PowerState_1.default.OFF;
|
|
258
|
+
},
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
composeInitObjectBrightness() {
|
|
262
|
+
const map = this.statesMap;
|
|
263
|
+
return {
|
|
264
|
+
setState: this.states[map.dimmer] || this.states[map.brightness],
|
|
265
|
+
getState: this.states[map.dimmer] || this.states[map.brightness],
|
|
266
|
+
alexaSetter: function (alexaValue) {
|
|
267
|
+
return ((0, Utils_1.denormalize_0_100)(alexaValue, this.valuesRangeMin, this.valuesRangeMax) ?? 0);
|
|
268
|
+
},
|
|
269
|
+
alexaGetter: function (value) {
|
|
270
|
+
return (0, Utils_1.normalize_0_100)(value, this.valuesRangeMin, this.valuesRangeMax);
|
|
271
|
+
},
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
composeInitObjectColorTemperature() {
|
|
275
|
+
const map = this.statesMap;
|
|
276
|
+
return {
|
|
277
|
+
setState: this.states[map.temperature],
|
|
278
|
+
getState: this.states[map.temperature],
|
|
279
|
+
alexaSetter: function (alexaValue) {
|
|
280
|
+
if (alexaValue === 1) {
|
|
281
|
+
// increase directive
|
|
282
|
+
const closest = (0, Utils_1.closestFromList)(this.currentValue || this.colorTemperatureTable[0], this.colorTemperatureTable);
|
|
283
|
+
let index = this.colorTemperatureTable.indexOf(closest) + 1;
|
|
284
|
+
index = index >= this.colorTemperatureTable.length ? this.colorTemperatureTable.length - 1 : index;
|
|
285
|
+
return this.colorTemperatureTable[index];
|
|
286
|
+
}
|
|
287
|
+
if (alexaValue === -1) {
|
|
288
|
+
// decrease directive
|
|
289
|
+
const closest = (0, Utils_1.closestFromList)(this.currentValue || this.colorTemperatureTable[0], this.colorTemperatureTable);
|
|
290
|
+
let index = this.colorTemperatureTable.indexOf(closest) - 1;
|
|
291
|
+
index = index < 0 ? 0 : index;
|
|
292
|
+
return this.colorTemperatureTable[index];
|
|
293
|
+
}
|
|
294
|
+
return alexaValue;
|
|
295
|
+
},
|
|
296
|
+
alexaGetter: function (value) {
|
|
297
|
+
return value;
|
|
298
|
+
},
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
exports.default = Rgb;
|
|
303
|
+
//# sourceMappingURL=Rgb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rgb.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Controls/Rgb.ts"],"names":[],"mappings":"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","sourcesContent":["import Capabilities from '../Alexa/Capabilities';\nimport { configuredRangeOrDefault, denormalize_0_100, normalize_0_100, closestFromList } from '../Helpers/Utils';\nimport AdapterProvider from '../Helpers/AdapterProvider';\nimport type { Base as PropertiesBase } from '../Alexa/Properties/Base';\nimport AdjustableControl from './AdjustableControl';\nimport type BrightnessController from '../Alexa/Capabilities/BrightnessController';\nimport Brightness from '../Alexa/Properties/Brightness';\nimport ColorTemperatureInKelvin from '../Alexa/Properties/ColorTemperatureInKelvin';\nimport type ColorTemperatureController from '../Alexa/Capabilities/ColorTemperatureController';\nimport type PowerController from '../Alexa/Capabilities/PowerController';\nimport PowerState from '../Alexa/Properties/PowerState';\nimport type {\n AlexaV3Category,\n AlexaV3DirectiveValue,\n AlexaV3Request,\n IotExternalDetectorState,\n IotExternalPatternControl,\n} from '../types';\nimport Color from '../Alexa/Properties/Color';\n\n// ### RGB(W) Light with different states for every color [rgb]\n//\n// R,G,B(,W) Light with different states for every color. The value is from 0 to 255.\n//\n// | R | Name | Role | Unit | Type | Wr | Ind | Multi | Regex |\n// |---|-----------------|-------------------------------|------|---------|----|-----|-------|---------------------------------------------------|\n// | * | RED | level.color.red | | number | W | | | `/^level\\.color\\.red$/` |\n// | * | GREEN | level.color.green | | number | W | | | `/^level\\.color\\.green$/` |\n// | * | BLUE | level.color.blue | | number | W | | | `/^level\\.color\\.blue$/` |\n// | | WHITE | level.color.white | | number | W | | | `/^level\\.color\\.white$/` |\n// | | DIMMER | level.dimmer | % | number | W | | | `/^level\\.dimmer$/` |\n// | | BRIGHTNESS | | | number | W | | | `/^level\\.brightness$/` |\n// | | TEMPERATURE | level.color.temperature | °K | number | W | | | `/^level\\.color\\.temperature$/` |\n// | | ON | switch.light | | boolean | W | | | `/^switch(\\.light)?$|^state$/` |\n// | | ON_ACTUAL | sensor.light | | boolean | - | | | `/^(state|switch|sensor)\\.light|switch$/` |\n\nexport default class Rgb extends AdjustableControl {\n private readonly _brightnessCapability: BrightnessController | undefined;\n private readonly _brightness: Brightness | undefined;\n private readonly _colorTemperatureCapability: ColorTemperatureController | undefined;\n private readonly _powerControllerCapability: PowerController | undefined;\n private readonly _powerState: PowerState | undefined;\n\n constructor(detectedControl: IotExternalPatternControl) {\n super(detectedControl);\n\n const map = this.statesMap;\n\n this._supported = [new Capabilities.ColorController(this.composeInitObjectColor())];\n\n if (this.states[map.temperature]) {\n this._colorTemperatureCapability = new Capabilities.ColorTemperatureController(\n this.composeInitObjectColorTemperature(),\n );\n this._supported.push(this._colorTemperatureCapability);\n }\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 this._powerControllerCapability = new Capabilities.PowerController(this.composeInitObjectPowerState());\n this._powerState = this._powerControllerCapability.powerState;\n this._supported.push(this._powerControllerCapability);\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.propertyName === Color.propertyName) {\n // read every time all colors\n const red = await AdapterProvider.getState(this.states[map.red]!.id);\n const green = await AdapterProvider.getState(this.states[map.green]!.id);\n const blue = await AdapterProvider.getState(this.states[map.blue]!.id);\n let white: ioBroker.StateValue | undefined;\n if (this.states[map.white]) {\n white = await AdapterProvider.getState(this.states[map.white]!.id);\n }\n const minMaxRed = configuredRangeOrDefault(this.states[map.red]!);\n const minMaxGreen = configuredRangeOrDefault(this.states[map.green]!);\n const minMaxBlue = configuredRangeOrDefault(this.states[map.blue]!);\n let minMaxWhite: { min: number | boolean; max: number | boolean } | undefined;\n if (this.states[map.white]) {\n minMaxWhite = configuredRangeOrDefault(this.states[map.white]!);\n }\n // normalize values to 0-255\n const redNorm = normalize_0_100(red as number, minMaxRed.min as number, minMaxRed.max as number, true);\n const greenNorm = normalize_0_100(\n green as number,\n minMaxGreen.min as number,\n minMaxGreen.max as number,\n true,\n );\n const blueNorm = normalize_0_100(blue as number, minMaxBlue.min as number, minMaxBlue.max as number, true);\n let whiteNorm: number | undefined;\n if (this.states[map.white]) {\n whiteNorm = normalize_0_100(\n white as number,\n minMaxWhite!.min as number,\n minMaxWhite!.max as number,\n true,\n );\n }\n const red255 = Math.round((redNorm as number) * 2.55);\n const green255 = Math.round((greenNorm as number) * 2.55);\n const blue255 = Math.round((blueNorm as number) * 2.55);\n let white255: number | undefined;\n if (this.states[map.white]) {\n white255 = Math.round((whiteNorm as number) * 2.55);\n }\n\n // Convert to HEX\n let hex = `#${red255.toString(16).padStart(2, '0')}${green255.toString(16).padStart(2, '0')}${blue255.toString(16).padStart(2, '0')}`;\n\n if (this.states[map.white]) {\n hex += white255!.toString(16).padStart(2, '0');\n }\n\n // store current value\n property.currentValue = hex.toLowerCase();\n return property.currentValue;\n }\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 !== 0;\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 if (!this._brightness) {\n throw new Error('No brightness property configured');\n }\n if (!this._powerState) {\n throw new Error('No powerState property configured');\n }\n\n if (value) {\n // set brightness\n // set byOn to the configured value or range.max otherwise\n const range = configuredRangeOrDefault(this.states[map.dimmer] || this.states[map.brightness]!);\n const smartName = (this.states[map.dimmer] || this.states[map.brightness])?.smartName;\n let byOn: number | string | undefined | null;\n if (smartName && typeof smartName === 'object') {\n byOn = smartName.byON;\n } else {\n byOn = undefined;\n }\n if (byOn === undefined || byOn === null || isNaN(byOn as unknown as number)) {\n byOn = range.max as number | string | undefined | null;\n } else {\n byOn = parseFloat(byOn);\n }\n await AdapterProvider.setState(this._brightness.setId, byOn ?? 100);\n this._brightness.currentValue = byOn;\n this._powerState.currentValue = true;\n } else {\n // set brightness to 0 on power OFF\n await AdapterProvider.setState(this._brightness.setId, 0);\n this._brightness.currentValue = 0;\n this._powerState.currentValue = false;\n }\n }\n } else if (property.propertyName === Color.propertyName) {\n // Split value into RGB(W)\n const hex = (value as string).replace('#', '');\n const red = parseInt(hex.substring(0, 2), 16);\n const green = parseInt(hex.substring(2, 4), 16);\n const blue = parseInt(hex.substring(4, 6), 16);\n let white: number | undefined;\n if (hex.length === 8) {\n white = parseInt(hex.substring(6, 8), 16);\n }\n // Convert from 0-255 to 0-100\n const red100 = (red / 255) * 100;\n const green100 = (green / 255) * 100;\n const blue100 = (blue / 255) * 100;\n let white100: number | undefined;\n if (white !== undefined) {\n white100 = (white / 255) * 100;\n }\n // Convert from 0-100 to min-max of the state\n const minMaxRed = configuredRangeOrDefault(this.states[map.red]!);\n const minMaxGreen = configuredRangeOrDefault(this.states[map.green]!);\n const minMaxBlue = configuredRangeOrDefault(this.states[map.blue]!);\n let minMaxWhite: { min: number | boolean; max: number | boolean } | undefined;\n if (this.states[map.white]) {\n minMaxWhite = configuredRangeOrDefault(this.states[map.white]!);\n }\n const redValue = denormalize_0_100(red100, minMaxRed.min as number, minMaxRed.max as number);\n const greenValue = denormalize_0_100(green100, minMaxGreen.min as number, minMaxGreen.max as number);\n const blueValue = denormalize_0_100(blue100, minMaxBlue.min as number, minMaxBlue.max as number);\n let whiteValue: number | undefined;\n if (this.states[map.white]) {\n whiteValue = denormalize_0_100(white100!, minMaxWhite!.min as number, minMaxWhite!.max as number);\n }\n // set states\n await Promise.all([\n AdapterProvider.setState(this.states[map.red]!.id, redValue ?? 0),\n AdapterProvider.setState(this.states[map.green]!.id, greenValue ?? 0),\n AdapterProvider.setState(this.states[map.blue]!.id, blueValue ?? 0),\n this.states[map.white] ? AdapterProvider.setState(this.states[map.white]!.id, whiteValue ?? 0) : null,\n ]);\n\n property.currentValue = value;\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 composeInitObjectColor(): {\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 const map = this.statesMap;\n\n // Set default min max to 0 255 for colors\n ['red', 'green', 'blue', 'white'].forEach(color => {\n if (this.states[map[color]] && this.states[map[color]]!.common?.min === undefined) {\n this.states[map[color]]!.common ||= {};\n this.states[map[color]]!.common.min = 0;\n }\n if (this.states[map[color]] && this.states[map[color]]!.common?.max === undefined) {\n this.states[map[color]]!.common ||= {};\n this.states[map[color]]!.common.max = 255;\n }\n });\n\n if (this.states[map.white]) {\n return {\n rgbw: {\n red: this.states[map.red]!,\n green: this.states[map.green]!,\n blue: this.states[map.blue]!,\n white: this.states[map.white]!,\n },\n };\n }\n return {\n rgb: {\n red: this.states[map.red]!,\n green: this.states[map.green]!,\n blue: this.states[map.blue]!,\n },\n };\n }\n\n protected composeInitObjectPowerState(): {\n setState: IotExternalDetectorState;\n getState: IotExternalDetectorState;\n alexaSetter?: (alexaValue: AlexaV3DirectiveValue) => ioBroker.StateValue | undefined;\n alexaGetter?: (value: ioBroker.StateValue | undefined) => AlexaV3DirectiveValue;\n } {\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(): {\n setState: IotExternalDetectorState;\n getState: IotExternalDetectorState;\n alexaSetter?: (alexaValue: AlexaV3DirectiveValue) => ioBroker.StateValue | undefined;\n alexaGetter?: (value: ioBroker.StateValue | undefined) => AlexaV3DirectiveValue;\n } {\n const map = this.statesMap;\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 };\n }\n\n protected composeInitObjectColorTemperature(): {\n setState: IotExternalDetectorState;\n getState: IotExternalDetectorState;\n alexaSetter?: (alexaValue: AlexaV3DirectiveValue) => ioBroker.StateValue | undefined;\n alexaGetter?: (value: ioBroker.StateValue | undefined) => AlexaV3DirectiveValue;\n } {\n const map = this.statesMap;\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 return alexaValue as number;\n },\n alexaGetter: function (value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return value as number;\n },\n };\n }\n}\n"]}
|