iobroker.iot 4.1.0 → 4.1.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.
Files changed (31) hide show
  1. package/README.md +1 -518
  2. package/admin/assets/{index-Ck_2gqQY.js → index-6Itc0U48.js} +18 -18
  3. package/admin/index_m.html +1 -1
  4. package/build/lib/AlexaSmartHomeV3/Alexa/AlexaResponse.js +6 -0
  5. package/build/lib/AlexaSmartHomeV3/Alexa/AlexaResponse.js.map +1 -1
  6. package/build/lib/AlexaSmartHomeV3/Alexa/ModeValues/Open.js +1 -1
  7. package/build/lib/AlexaSmartHomeV3/Alexa/ModeValues/Open.js.map +1 -1
  8. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/DetectionState.js +6 -0
  9. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/DetectionState.js.map +1 -1
  10. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/LockState.js +20 -0
  11. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/LockState.js.map +1 -1
  12. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/Mode.js +14 -0
  13. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/Mode.js.map +1 -1
  14. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/PowerState.js +6 -0
  15. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/PowerState.js.map +1 -1
  16. package/build/lib/AlexaSmartHomeV3/Controls/AirCondition.js +1 -2
  17. package/build/lib/AlexaSmartHomeV3/Controls/AirCondition.js.map +1 -1
  18. package/build/lib/AlexaSmartHomeV3/Controls/Lock.js +1 -1
  19. package/build/lib/AlexaSmartHomeV3/Controls/Lock.js.map +1 -1
  20. package/build/lib/AlexaSmartHomeV3/DeviceManager.js +16 -10
  21. package/build/lib/AlexaSmartHomeV3/DeviceManager.js.map +1 -1
  22. package/build/lib/AlexaSmartHomeV3/Helpers/FileHelper.js +1 -3
  23. package/build/lib/AlexaSmartHomeV3/Helpers/FileHelper.js.map +1 -1
  24. package/build/lib/AlexaSmartHomeV3/Helpers/RateLimiter.js +23 -16
  25. package/build/lib/AlexaSmartHomeV3/Helpers/RateLimiter.js.map +1 -1
  26. package/build/lib/AlexaSmartHomeV3/Helpers/Utils.js +0 -1
  27. package/build/lib/AlexaSmartHomeV3/Helpers/Utils.js.map +1 -1
  28. package/build/main.js +23 -3
  29. package/build/main.js.map +1 -1
  30. package/io-package.json +14 -14
  31. package/package.json +2 -2
@@ -21,7 +21,7 @@
21
21
  />
22
22
  <script type="text/javascript" onerror="setTimeout(function(){window.location.reload()}, 5000)" src="./lib/js/socket.io.js"></script>
23
23
  <title>IoT Settings</title>
24
- <script type="module" crossorigin src="./assets/index-Ck_2gqQY.js"></script>
24
+ <script type="module" crossorigin src="./assets/index-6Itc0U48.js"></script>
25
25
  <link rel="stylesheet" crossorigin href="./assets/index-Bd3GtHgn.css">
26
26
  </head>
27
27
  <body>
@@ -59,6 +59,12 @@ class AlexaResponse {
59
59
  message: 'Unable to reach endpoint.',
60
60
  });
61
61
  }
62
+ static throttlingException(messageId) {
63
+ return AlexaResponse.errorResponse(messageId, {
64
+ type: 'THROTTLING_EXCEPTION',
65
+ message: 'Unable to reach endpoint.',
66
+ });
67
+ }
62
68
  static directiveNotSupportedByControl(controlName, namespace, messageId, payloadVersion) {
63
69
  return AlexaResponse.errorResponse(messageId, {
64
70
  type: 'INTERNAL_ERROR',
@@ -1 +1 @@
1
- {"version":3,"file":"AlexaResponse.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Alexa/AlexaResponse.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as uuidv4 } from 'uuid';\nimport * as Utils from '../Helpers/Utils';\nimport type {\n AlexaV3Capability,\n AlexaV3ContextProperty,\n AlexaV3Directive,\n AlexaV3DirectiveType,\n AlexaV3DiscoverAppliance,\n AlexaV3EndpointID,\n AlexaV3Namespace,\n AlexaV3Payload,\n AlexaV3ReportedState,\n AlexaV3Request,\n} from '../types';\n\n/**\n * Helper class to generate an AlexaResponse.\n */\nexport default class AlexaResponse {\n public context?: {\n properties: AlexaV3ReportedState[];\n };\n\n public iobVersion = '1';\n\n public readonly event?: AlexaV3Directive;\n\n static ErrorResponseName: AlexaV3DirectiveType = 'ErrorResponse';\n\n static isErrorResponse(response: AlexaResponse): boolean {\n return response?.event?.header?.name === AlexaResponse.ErrorResponseName;\n }\n\n static errorResponse(messageId: string, payload: any): AlexaResponse {\n return new AlexaResponse({\n name: AlexaResponse.ErrorResponseName,\n payload,\n messageId,\n });\n }\n\n static endpointUnreachable(messageId: string): AlexaResponse {\n return AlexaResponse.errorResponse(messageId, {\n type: 'ENDPOINT_UNREACHABLE',\n message: 'Unable to reach endpoint.',\n });\n }\n\n static directiveNotSupportedByControl(\n controlName: string,\n namespace: AlexaV3Namespace,\n messageId: string,\n payloadVersion: string,\n ): AlexaResponse {\n return AlexaResponse.errorResponse(messageId, {\n type: 'INTERNAL_ERROR',\n message: `Control ${controlName} doesn't support the ${namespace} with payloadVersion ${payloadVersion}`,\n });\n }\n\n static directiveNotSupportedByDevice(\n deviceName: string,\n namespace: AlexaV3Namespace,\n messageId: string,\n payloadVersion: string,\n ): AlexaResponse {\n return AlexaResponse.errorResponse(messageId, {\n type: 'INTERNAL_ERROR',\n message: `Device ${deviceName} doesn't support the ${namespace} with payloadVersion ${payloadVersion}`,\n });\n }\n\n static nonExistingEndpoint(messageId: string, endpointId: AlexaV3EndpointID | undefined): AlexaResponse {\n return AlexaResponse.errorResponse(messageId, {\n type: 'INTERNAL_ERROR',\n message: `No endpoint with id ${endpointId} found`,\n });\n }\n\n /**\n * Composes Alexa respond on a successfully processed Alexa directive to change the capability's value of a device\n */\n static handled(event: AlexaV3Request, propertyName: string, value: any, propertyInstance?: string): AlexaResponse {\n const response = new AlexaResponse({\n correlationToken: event?.directive?.header?.correlationToken,\n token: event?.directive?.endpoint?.scope?.token,\n endpointId: event?.directive?.endpoint?.endpointId,\n messageId: event?.directive?.header?.messageId,\n });\n\n response.addContextProperty({\n namespace: event?.directive?.header?.namespace,\n name: propertyName,\n instance: propertyInstance,\n value,\n });\n\n return response;\n }\n\n /**\n * Constructor for an Alexa Response.\n *\n * @param opts Contains initialization options for the response\n */\n constructor(opts?: {\n context?: {\n properties: AlexaV3ReportedState[];\n };\n namespace?: AlexaV3Namespace;\n name?: AlexaV3DirectiveType;\n messageId?: string;\n correlationToken?: string;\n payloadVersion?: '3';\n token?: string;\n endpointId?: string;\n payload?: AlexaV3Payload;\n changeCauseType?: 'APP_INTERACTION' | 'PHYSICAL_INTERACTION' | 'VOICE_INTERACTION';\n event?: AlexaV3Directive;\n }) {\n opts ||= {};\n\n if (opts.context !== undefined) {\n this.context = Utils.defaultIfNullOrEmpty(opts.context, undefined);\n }\n\n if (opts.event !== undefined) {\n this.event = Utils.defaultIfNullOrEmpty(opts.event, undefined);\n } else {\n this.event = {\n header: {\n namespace: Utils.defaultIfNullOrEmpty<AlexaV3Namespace>(opts.namespace, 'Alexa'),\n name: Utils.defaultIfNullOrEmpty<AlexaV3DirectiveType>(opts.name, 'Response'),\n messageId: Utils.defaultIfNullOrEmpty(opts.messageId, uuidv4()),\n correlationToken: Utils.defaultIfNullOrEmpty(opts.correlationToken, undefined),\n payloadVersion: Utils.defaultIfNullOrEmpty<'3'>(opts.payloadVersion, '3'),\n },\n endpoint: {\n scope: {\n type: 'BearerToken',\n token: Utils.defaultIfNullOrEmpty(opts.token, 'INVALID'),\n },\n endpointId: Utils.defaultIfNullOrEmpty(opts.endpointId, 'INVALID'),\n },\n payload: Utils.defaultIfNullOrEmpty(opts.payload, {}),\n };\n\n if (opts.changeCauseType) {\n this.event.payload.change = {\n cause: {\n type: opts.changeCauseType,\n },\n properties: [],\n };\n }\n }\n\n if (!this.event) {\n throw new Error('Event is not defined');\n }\n\n // No endpoint in an AcceptGrant or Discover request\n if (this.event.header.name === 'AcceptGrant.Response' || this.event.header.name === 'Discover.Response') {\n delete this.event.endpoint;\n }\n }\n\n addContext(): void {\n this.context ||= { properties: [] };\n }\n\n /**\n * Add a property to the context.\n *\n * @param opts Contains options for the property.\n */\n addContextProperty(opts: {\n namespace?: AlexaV3Namespace;\n instance?: string;\n name?: string;\n value?: any;\n timeOfSample?: string;\n uncertaintyInMilliseconds?: number;\n }): void {\n this.addContext();\n\n const property = {\n namespace: Utils.defaultIfNullOrEmpty(opts.namespace, 'Alexa.EndpointHealth'),\n instance: Utils.defaultIfNullOrEmpty(opts.instance, undefined),\n name: Utils.defaultIfNullOrEmpty(opts.name, 'connectivity'),\n value: Utils.defaultIfNullOrEmpty(opts.value, { value: 'OK' }),\n timeOfSample: Utils.defaultIfNullOrEmpty(opts.timeOfSample, new Date().toISOString()),\n uncertaintyInMilliseconds: Utils.defaultIfNullOrEmpty(opts.uncertaintyInMilliseconds, 0),\n };\n\n if (!property.instance) {\n delete property.instance;\n }\n\n this.context!.properties.push(property);\n }\n\n /**\n * Add a property to the payload.\n *\n * @param opts Contains options for the property.\n */\n addPayloadChangeProperty(opts: AlexaV3ContextProperty): void {\n opts ||= {} as AlexaV3ContextProperty;\n\n const property = {\n namespace: Utils.defaultIfNullOrEmpty(opts.namespace, 'Alexa.EndpointHealth'),\n instance: Utils.defaultIfNullOrEmpty(opts.instance, undefined),\n name: Utils.defaultIfNullOrEmpty(opts.name, 'connectivity'),\n value: Utils.defaultIfNullOrEmpty(opts.value, { value: 'OK' }),\n timeOfSample: Utils.defaultIfNullOrEmpty(opts.timeOfSample, new Date().toISOString()),\n uncertaintyInMilliseconds: Utils.defaultIfNullOrEmpty(opts.uncertaintyInMilliseconds, 0),\n };\n\n if (!property.instance) {\n delete property.instance;\n }\n\n if (!this.event) {\n throw new Error('Event is not defined');\n }\n this.event.payload.change ||= { properties: [], cause: { type: 'APP_INTERACTION' } };\n\n this.event.payload.change.properties.push(property);\n }\n\n static alexaCapability(): AlexaV3Capability[] {\n return [\n {\n type: 'AlexaInterface',\n interface: 'Alexa',\n version: '3',\n },\n ];\n }\n\n /**\n * Adds an endpoint to the payload.\n *\n * @param opts Contains options for the endpoint.\n */\n addPayloadEndpoint(opts: AlexaV3DiscoverAppliance): void {\n if (!this.event) {\n throw new Error('Event is not defined');\n }\n\n this.event.payload.endpoints ||= [];\n\n opts ||= {} as AlexaV3DiscoverAppliance;\n\n // construct the proper structure expected for the endpoint\n const endpoint: AlexaV3DiscoverAppliance = {\n endpointId: Utils.defaultIfNullOrEmpty(opts.endpointId, 'dummy-endpoint-001'),\n manufacturerName: Utils.defaultIfNullOrEmpty(opts.manufacturerName, 'ioBroker Group'),\n description: Utils.defaultIfNullOrEmpty(opts.description, 'Device controlled by ioBroker'),\n friendlyName: Utils.defaultIfNullOrEmpty(opts.friendlyName, 'ioBroker Stub Endpoint'),\n displayCategories: Utils.defaultIfNullOrEmpty(opts.displayCategories, ['OTHER']),\n capabilities: AlexaResponse.alexaCapability().concat(\n Utils.defaultIfNullOrEmpty<AlexaV3Capability[]>(opts.capabilities, []),\n ),\n cookie: undefined,\n };\n\n if (Object.prototype.hasOwnProperty.call(opts, 'cookie')) {\n endpoint.cookie = Utils.defaultIfNullOrEmpty<Record<string, string>>(opts.cookie, {});\n }\n\n this.event.payload.endpoints.push(endpoint);\n }\n\n /**\n * Creates a capability for an endpoint within the payload.\n *\n * @param opts Contains options for the endpoint capability.\n */\n asEndpointCapability(opts?: AlexaV3Capability): AlexaV3Capability {\n opts ||= {} as AlexaV3Capability;\n\n const response = {\n type: Utils.defaultIfNullOrEmpty(opts.type, 'AlexaInterface'),\n interface: Utils.defaultIfNullOrEmpty(opts.interface, 'Alexa'),\n version: Utils.defaultIfNullOrEmpty(opts.version, '3'),\n properties: Utils.defaultIfNullOrEmpty<{\n supported: { name: string }[];\n proactivelyReported?: boolean;\n retrievable?: boolean;\n nonControllable?: boolean;\n }>(\n opts.properties,\n {} as {\n supported: { name: string }[];\n proactivelyReported?: boolean;\n retrievable?: boolean;\n nonControllable?: boolean;\n },\n ),\n // not all capabilities have the following ones\n instance: Utils.defaultIfNullOrEmpty(opts.instance, undefined),\n configuration: Utils.defaultIfNullOrEmpty(opts.configuration, undefined),\n semantics: Utils.defaultIfNullOrEmpty(opts.semantics, undefined),\n capabilityResources: Utils.defaultIfNullOrEmpty(opts.capabilityResources, undefined),\n };\n\n if (!response.instance) {\n delete response.instance;\n }\n if (!response.configuration) {\n delete response.configuration;\n }\n if (!response.semantics) {\n delete response.semantics;\n }\n if (!response.capabilityResources) {\n delete response.capabilityResources;\n }\n\n return response;\n }\n\n /**\n * Get the composed Alexa Response.\n */\n get(): AlexaResponse {\n return this;\n }\n}\n"]}
1
+ {"version":3,"file":"AlexaResponse.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Alexa/AlexaResponse.ts"],"names":[],"mappings":"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","sourcesContent":["import { v4 as uuidv4 } from 'uuid';\nimport * as Utils from '../Helpers/Utils';\nimport type {\n AlexaV3Capability,\n AlexaV3ContextProperty,\n AlexaV3Directive,\n AlexaV3DirectiveType,\n AlexaV3DiscoverAppliance,\n AlexaV3EndpointID,\n AlexaV3Namespace,\n AlexaV3Payload,\n AlexaV3ReportedState,\n AlexaV3Request,\n} from '../types';\n\n/**\n * Helper class to generate an AlexaResponse.\n */\nexport default class AlexaResponse {\n public context?: {\n properties: AlexaV3ReportedState[];\n };\n\n public iobVersion = '1';\n\n public readonly event?: AlexaV3Directive;\n\n static ErrorResponseName: AlexaV3DirectiveType = 'ErrorResponse';\n\n static isErrorResponse(response: AlexaResponse): boolean {\n return response?.event?.header?.name === AlexaResponse.ErrorResponseName;\n }\n\n static errorResponse(messageId: string, payload: any): AlexaResponse {\n return new AlexaResponse({\n name: AlexaResponse.ErrorResponseName,\n payload,\n messageId,\n });\n }\n\n static endpointUnreachable(messageId: string): AlexaResponse {\n return AlexaResponse.errorResponse(messageId, {\n type: 'ENDPOINT_UNREACHABLE',\n message: 'Unable to reach endpoint.',\n });\n }\n\n static throttlingException(messageId: string): AlexaResponse {\n return AlexaResponse.errorResponse(messageId, {\n type: 'THROTTLING_EXCEPTION',\n message: 'Unable to reach endpoint.',\n });\n }\n\n static directiveNotSupportedByControl(\n controlName: string,\n namespace: AlexaV3Namespace,\n messageId: string,\n payloadVersion: string,\n ): AlexaResponse {\n return AlexaResponse.errorResponse(messageId, {\n type: 'INTERNAL_ERROR',\n message: `Control ${controlName} doesn't support the ${namespace} with payloadVersion ${payloadVersion}`,\n });\n }\n\n static directiveNotSupportedByDevice(\n deviceName: string,\n namespace: AlexaV3Namespace,\n messageId: string,\n payloadVersion: string,\n ): AlexaResponse {\n return AlexaResponse.errorResponse(messageId, {\n type: 'INTERNAL_ERROR',\n message: `Device ${deviceName} doesn't support the ${namespace} with payloadVersion ${payloadVersion}`,\n });\n }\n\n static nonExistingEndpoint(messageId: string, endpointId: AlexaV3EndpointID | undefined): AlexaResponse {\n return AlexaResponse.errorResponse(messageId, {\n type: 'INTERNAL_ERROR',\n message: `No endpoint with id ${endpointId} found`,\n });\n }\n\n /**\n * Composes Alexa respond on a successfully processed Alexa directive to change the capability's value of a device\n */\n static handled(event: AlexaV3Request, propertyName: string, value: any, propertyInstance?: string): AlexaResponse {\n const response = new AlexaResponse({\n correlationToken: event?.directive?.header?.correlationToken,\n token: event?.directive?.endpoint?.scope?.token,\n endpointId: event?.directive?.endpoint?.endpointId,\n messageId: event?.directive?.header?.messageId,\n });\n\n response.addContextProperty({\n namespace: event?.directive?.header?.namespace,\n name: propertyName,\n instance: propertyInstance,\n value,\n });\n\n return response;\n }\n\n /**\n * Constructor for an Alexa Response.\n *\n * @param opts Contains initialization options for the response\n */\n constructor(opts?: {\n context?: {\n properties: AlexaV3ReportedState[];\n };\n namespace?: AlexaV3Namespace;\n name?: AlexaV3DirectiveType;\n messageId?: string;\n correlationToken?: string;\n payloadVersion?: '3';\n token?: string;\n endpointId?: string;\n payload?: AlexaV3Payload;\n changeCauseType?: 'APP_INTERACTION' | 'PHYSICAL_INTERACTION' | 'VOICE_INTERACTION';\n event?: AlexaV3Directive;\n }) {\n opts ||= {};\n\n if (opts.context !== undefined) {\n this.context = Utils.defaultIfNullOrEmpty(opts.context, undefined);\n }\n\n if (opts.event !== undefined) {\n this.event = Utils.defaultIfNullOrEmpty(opts.event, undefined);\n } else {\n this.event = {\n header: {\n namespace: Utils.defaultIfNullOrEmpty<AlexaV3Namespace>(opts.namespace, 'Alexa'),\n name: Utils.defaultIfNullOrEmpty<AlexaV3DirectiveType>(opts.name, 'Response'),\n messageId: Utils.defaultIfNullOrEmpty(opts.messageId, uuidv4()),\n correlationToken: Utils.defaultIfNullOrEmpty(opts.correlationToken, undefined),\n payloadVersion: Utils.defaultIfNullOrEmpty<'3'>(opts.payloadVersion, '3'),\n },\n endpoint: {\n scope: {\n type: 'BearerToken',\n token: Utils.defaultIfNullOrEmpty(opts.token, 'INVALID'),\n },\n endpointId: Utils.defaultIfNullOrEmpty(opts.endpointId, 'INVALID'),\n },\n payload: Utils.defaultIfNullOrEmpty(opts.payload, {}),\n };\n\n if (opts.changeCauseType) {\n this.event.payload.change = {\n cause: {\n type: opts.changeCauseType,\n },\n properties: [],\n };\n }\n }\n\n if (!this.event) {\n throw new Error('Event is not defined');\n }\n\n // No endpoint in an AcceptGrant or Discover request\n if (this.event.header.name === 'AcceptGrant.Response' || this.event.header.name === 'Discover.Response') {\n delete this.event.endpoint;\n }\n }\n\n addContext(): void {\n this.context ||= { properties: [] };\n }\n\n /**\n * Add a property to the context.\n *\n * @param opts Contains options for the property.\n */\n addContextProperty(opts: {\n namespace?: AlexaV3Namespace;\n instance?: string;\n name?: string;\n value?: any;\n timeOfSample?: string;\n uncertaintyInMilliseconds?: number;\n }): void {\n this.addContext();\n\n const property = {\n namespace: Utils.defaultIfNullOrEmpty(opts.namespace, 'Alexa.EndpointHealth'),\n instance: Utils.defaultIfNullOrEmpty(opts.instance, undefined),\n name: Utils.defaultIfNullOrEmpty(opts.name, 'connectivity'),\n value: Utils.defaultIfNullOrEmpty(opts.value, { value: 'OK' }),\n timeOfSample: Utils.defaultIfNullOrEmpty(opts.timeOfSample, new Date().toISOString()),\n uncertaintyInMilliseconds: Utils.defaultIfNullOrEmpty(opts.uncertaintyInMilliseconds, 0),\n };\n\n if (!property.instance) {\n delete property.instance;\n }\n\n this.context!.properties.push(property);\n }\n\n /**\n * Add a property to the payload.\n *\n * @param opts Contains options for the property.\n */\n addPayloadChangeProperty(opts: AlexaV3ContextProperty): void {\n opts ||= {} as AlexaV3ContextProperty;\n\n const property = {\n namespace: Utils.defaultIfNullOrEmpty(opts.namespace, 'Alexa.EndpointHealth'),\n instance: Utils.defaultIfNullOrEmpty(opts.instance, undefined),\n name: Utils.defaultIfNullOrEmpty(opts.name, 'connectivity'),\n value: Utils.defaultIfNullOrEmpty(opts.value, { value: 'OK' }),\n timeOfSample: Utils.defaultIfNullOrEmpty(opts.timeOfSample, new Date().toISOString()),\n uncertaintyInMilliseconds: Utils.defaultIfNullOrEmpty(opts.uncertaintyInMilliseconds, 0),\n };\n\n if (!property.instance) {\n delete property.instance;\n }\n\n if (!this.event) {\n throw new Error('Event is not defined');\n }\n this.event.payload.change ||= { properties: [], cause: { type: 'APP_INTERACTION' } };\n\n this.event.payload.change.properties.push(property);\n }\n\n static alexaCapability(): AlexaV3Capability[] {\n return [\n {\n type: 'AlexaInterface',\n interface: 'Alexa',\n version: '3',\n },\n ];\n }\n\n /**\n * Adds an endpoint to the payload.\n *\n * @param opts Contains options for the endpoint.\n */\n addPayloadEndpoint(opts: AlexaV3DiscoverAppliance): void {\n if (!this.event) {\n throw new Error('Event is not defined');\n }\n\n this.event.payload.endpoints ||= [];\n\n opts ||= {} as AlexaV3DiscoverAppliance;\n\n // construct the proper structure expected for the endpoint\n const endpoint: AlexaV3DiscoverAppliance = {\n endpointId: Utils.defaultIfNullOrEmpty(opts.endpointId, 'dummy-endpoint-001'),\n manufacturerName: Utils.defaultIfNullOrEmpty(opts.manufacturerName, 'ioBroker Group'),\n description: Utils.defaultIfNullOrEmpty(opts.description, 'Device controlled by ioBroker'),\n friendlyName: Utils.defaultIfNullOrEmpty(opts.friendlyName, 'ioBroker Stub Endpoint'),\n displayCategories: Utils.defaultIfNullOrEmpty(opts.displayCategories, ['OTHER']),\n capabilities: AlexaResponse.alexaCapability().concat(\n Utils.defaultIfNullOrEmpty<AlexaV3Capability[]>(opts.capabilities, []),\n ),\n cookie: undefined,\n };\n\n if (Object.prototype.hasOwnProperty.call(opts, 'cookie')) {\n endpoint.cookie = Utils.defaultIfNullOrEmpty<Record<string, string>>(opts.cookie, {});\n }\n\n this.event.payload.endpoints.push(endpoint);\n }\n\n /**\n * Creates a capability for an endpoint within the payload.\n *\n * @param opts Contains options for the endpoint capability.\n */\n asEndpointCapability(opts?: AlexaV3Capability): AlexaV3Capability {\n opts ||= {} as AlexaV3Capability;\n\n const response = {\n type: Utils.defaultIfNullOrEmpty(opts.type, 'AlexaInterface'),\n interface: Utils.defaultIfNullOrEmpty(opts.interface, 'Alexa'),\n version: Utils.defaultIfNullOrEmpty(opts.version, '3'),\n properties: Utils.defaultIfNullOrEmpty<{\n supported: { name: string }[];\n proactivelyReported?: boolean;\n retrievable?: boolean;\n nonControllable?: boolean;\n }>(\n opts.properties,\n {} as {\n supported: { name: string }[];\n proactivelyReported?: boolean;\n retrievable?: boolean;\n nonControllable?: boolean;\n },\n ),\n // not all capabilities have the following ones\n instance: Utils.defaultIfNullOrEmpty(opts.instance, undefined),\n configuration: Utils.defaultIfNullOrEmpty(opts.configuration, undefined),\n semantics: Utils.defaultIfNullOrEmpty(opts.semantics, undefined),\n capabilityResources: Utils.defaultIfNullOrEmpty(opts.capabilityResources, undefined),\n };\n\n if (!response.instance) {\n delete response.instance;\n }\n if (!response.configuration) {\n delete response.configuration;\n }\n if (!response.semantics) {\n delete response.semantics;\n }\n if (!response.capabilityResources) {\n delete response.capabilityResources;\n }\n\n return response;\n }\n\n /**\n * Get the composed Alexa Response.\n */\n get(): AlexaResponse {\n return this;\n }\n}\n"]}
@@ -47,7 +47,7 @@ class Open extends Base_1.default {
47
47
  return [
48
48
  {
49
49
  '@type': 'StatesToValue',
50
- states: ['Alexa.States.Open'],
50
+ states: ['Alexa.States.Opened'],
51
51
  value: this.value,
52
52
  },
53
53
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"Open.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/ModeValues/Open.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAG1B,MAAqB,IAAK,SAAQ,cAAI;IAClC,IAAI,aAAa;QACb,OAAO;YACH;gBACI,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE;oBACH,OAAO,EAAE,kBAAkB;iBAC9B;aACJ;YACD;gBACI,OAAO,EAAE,MAAM;gBACf,KAAK,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,OAAO;iBAClB;aACJ;YACD;gBACI,OAAO,EAAE,MAAM;gBACf,KAAK,EAAE;oBACH,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,OAAO;iBAClB;aACJ;SACJ,CAAC;IACN,CAAC;IAED,IAAI,cAAc;QACd,OAAO;YACH;gBACI,OAAO,EAAE,oBAAoB;gBAC7B,OAAO,EAAE,CAAC,oBAAoB,CAAC;gBAC/B,SAAS,EAAE;oBACP,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE;wBACL,IAAI,EAAE,IAAI,CAAC,KAAK;qBACnB;iBACJ;aACJ;SACJ,CAAC;IACN,CAAC;IAED,IAAI,aAAa;QACb,OAAO;YACH;gBACI,OAAO,EAAE,eAAe;gBACxB,MAAM,EAAE,CAAC,mBAAmB,CAAC;gBAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;aACpB;SACJ,CAAC;IACN,CAAC;CACJ;AAlDD,uBAkDC","sourcesContent":["import Base from './Base';\nimport type { AlexaV3ActionMapping, AlexaV3FriendlyName, AlexaV3StateMapping } from '../../types';\n\nexport default class Open extends Base {\n get friendlyNames(): AlexaV3FriendlyName[] {\n return [\n {\n '@type': 'asset',\n value: {\n assetId: 'Alexa.Value.Open',\n },\n },\n {\n '@type': 'text',\n value: {\n text: 'Opened',\n locale: 'en-US',\n },\n },\n {\n '@type': 'text',\n value: {\n text: 'Geöffnet',\n locale: 'de-DE',\n },\n },\n ];\n }\n\n get actionMappings(): AlexaV3ActionMapping[] {\n return [\n {\n '@type': 'ActionsToDirective',\n actions: ['Alexa.Actions.Open'],\n directive: {\n name: 'SetMode',\n payload: {\n mode: this.value,\n },\n },\n },\n ];\n }\n\n get stateMappings(): AlexaV3StateMapping[] {\n return [\n {\n '@type': 'StatesToValue',\n states: ['Alexa.States.Open'],\n value: this.value,\n },\n ];\n }\n}\n"]}
1
+ {"version":3,"file":"Open.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/ModeValues/Open.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAG1B,MAAqB,IAAK,SAAQ,cAAI;IAClC,IAAI,aAAa;QACb,OAAO;YACH;gBACI,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE;oBACH,OAAO,EAAE,kBAAkB;iBAC9B;aACJ;YACD;gBACI,OAAO,EAAE,MAAM;gBACf,KAAK,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,OAAO;iBAClB;aACJ;YACD;gBACI,OAAO,EAAE,MAAM;gBACf,KAAK,EAAE;oBACH,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,OAAO;iBAClB;aACJ;SACJ,CAAC;IACN,CAAC;IAED,IAAI,cAAc;QACd,OAAO;YACH;gBACI,OAAO,EAAE,oBAAoB;gBAC7B,OAAO,EAAE,CAAC,oBAAoB,CAAC;gBAC/B,SAAS,EAAE;oBACP,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE;wBACL,IAAI,EAAE,IAAI,CAAC,KAAK;qBACnB;iBACJ;aACJ;SACJ,CAAC;IACN,CAAC;IAED,IAAI,aAAa;QACb,OAAO;YACH;gBACI,OAAO,EAAE,eAAe;gBACxB,MAAM,EAAE,CAAC,qBAAqB,CAAC;gBAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;aACpB;SACJ,CAAC;IACN,CAAC;CACJ;AAlDD,uBAkDC","sourcesContent":["import Base from './Base';\nimport type { AlexaV3ActionMapping, AlexaV3FriendlyName, AlexaV3StateMapping } from '../../types';\n\nexport default class Open extends Base {\n get friendlyNames(): AlexaV3FriendlyName[] {\n return [\n {\n '@type': 'asset',\n value: {\n assetId: 'Alexa.Value.Open',\n },\n },\n {\n '@type': 'text',\n value: {\n text: 'Opened',\n locale: 'en-US',\n },\n },\n {\n '@type': 'text',\n value: {\n text: 'Geöffnet',\n locale: 'de-DE',\n },\n },\n ];\n }\n\n get actionMappings(): AlexaV3ActionMapping[] {\n return [\n {\n '@type': 'ActionsToDirective',\n actions: ['Alexa.Actions.Open'],\n directive: {\n name: 'SetMode',\n payload: {\n mode: this.value,\n },\n },\n },\n ];\n }\n\n get stateMappings(): AlexaV3StateMapping[] {\n return [\n {\n '@type': 'StatesToValue',\n states: ['Alexa.States.Opened'],\n value: this.value,\n },\n ];\n }\n}\n"]}
@@ -21,6 +21,12 @@ class DetectionState extends Base_1.default {
21
21
  static get NOT_DETECTED() {
22
22
  return 'NOT_DETECTED';
23
23
  }
24
+ alexaValue(value) {
25
+ return value ? DetectionState.DETECTED : DetectionState.NOT_DETECTED;
26
+ }
27
+ value(alexaValue) {
28
+ return alexaValue === DetectionState.DETECTED;
29
+ }
24
30
  }
25
31
  exports.default = DetectionState;
26
32
  //# sourceMappingURL=DetectionState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DetectionState.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/DetectionState.ts"],"names":[],"mappings":";;;;;AAAA,kDAA2D;AAG3D,MAAqB,cAAe,SAAQ,cAAI;IAC5C,YAAY,IAA4B;QACpC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,KAAqB;QAChC,OAAO,CACH,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,KAAK,oBAAoB;YAC5D,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,KAAK,qBAAqB,CAChE,CAAC;IACN,CAAC;IAED,OAAO,CAAC,KAAqB;QACzB,OAAO,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,KAAK,QAAQ;QACf,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,YAAY;QACnB,OAAO,cAAc,CAAC;IAC1B,CAAC;CACJ;AAvBD,iCAuBC","sourcesContent":["import Base, { type ControlStateInitObject } from './Base';\nimport type { AlexaV3DirectiveName, AlexaV3Request } from '../../types';\n\nexport default class DetectionState extends Base {\n constructor(opts: ControlStateInitObject) {\n super(opts);\n }\n\n static matches(event: AlexaV3Request): boolean {\n return (\n event?.directive?.header?.namespace === 'Alexa.MotionSensor' ||\n event?.directive?.header?.namespace === 'Alexa.ContactSensor'\n );\n }\n\n matches(event: AlexaV3Request): boolean {\n return DetectionState.matches(event);\n }\n\n static get DETECTED(): AlexaV3DirectiveName {\n return 'DETECTED';\n }\n\n static get NOT_DETECTED(): AlexaV3DirectiveName {\n return 'NOT_DETECTED';\n }\n}\n"]}
1
+ {"version":3,"file":"DetectionState.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/DetectionState.ts"],"names":[],"mappings":";;;;;AAAA,kDAA2D;AAG3D,MAAqB,cAAe,SAAQ,cAAI;IAC5C,YAAY,IAA4B;QACpC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,KAAqB;QAChC,OAAO,CACH,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,KAAK,oBAAoB;YAC5D,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,KAAK,qBAAqB,CAChE,CAAC;IACN,CAAC;IAED,OAAO,CAAC,KAAqB;QACzB,OAAO,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,KAAK,QAAQ;QACf,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,YAAY;QACnB,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED,UAAU,CAAC,KAAsC;QAC7C,OAAO,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,UAAiC;QACnC,OAAO,UAAU,KAAK,cAAc,CAAC,QAAQ,CAAC;IAClD,CAAC;CACJ;AA/BD,iCA+BC","sourcesContent":["import Base, { type ControlStateInitObject } from './Base';\nimport type { AlexaV3DirectiveName, AlexaV3DirectiveValue, AlexaV3Request } from '../../types';\n\nexport default class DetectionState extends Base {\n constructor(opts: ControlStateInitObject) {\n super(opts);\n }\n\n static matches(event: AlexaV3Request): boolean {\n return (\n event?.directive?.header?.namespace === 'Alexa.MotionSensor' ||\n event?.directive?.header?.namespace === 'Alexa.ContactSensor'\n );\n }\n\n matches(event: AlexaV3Request): boolean {\n return DetectionState.matches(event);\n }\n\n static get DETECTED(): AlexaV3DirectiveName {\n return 'DETECTED';\n }\n\n static get NOT_DETECTED(): AlexaV3DirectiveName {\n return 'NOT_DETECTED';\n }\n\n alexaValue(value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return value ? DetectionState.DETECTED : DetectionState.NOT_DETECTED;\n }\n\n value(alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue | undefined {\n return alexaValue === DetectionState.DETECTED;\n }\n}\n"]}
@@ -32,6 +32,26 @@ class LockState extends Base_1.default {
32
32
  static get JAMMED() {
33
33
  return 'JAMMED';
34
34
  }
35
+ alexaValue(value) {
36
+ // Lock could be true (locked) or false (unlocked)
37
+ // ot 1 (locked) or 0 (unlocked)
38
+ if (value === true || value === 1) {
39
+ return LockState.LOCKED;
40
+ }
41
+ if (value === false || value === 0) {
42
+ return LockState.UNLOCKED;
43
+ }
44
+ return LockState.JAMMED;
45
+ }
46
+ value(alexaValue) {
47
+ if (alexaValue === LockState.LOCKED || alexaValue === LockState.LOCK) {
48
+ return true;
49
+ }
50
+ if (alexaValue === LockState.UNLOCKED || alexaValue === LockState.UNLOCK) {
51
+ return false;
52
+ }
53
+ return undefined;
54
+ }
35
55
  }
36
56
  exports.default = LockState;
37
57
  //# sourceMappingURL=LockState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LockState.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/LockState.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAG1B,MAAqB,SAAU,SAAQ,cAAI;IACvC,MAAM,CAAC,OAAO,CAAC,KAAqB;QAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,KAAK,sBAAsB,CAAC;IAC1E,CAAC;IAED,OAAO,CAAC,KAAqB;QACzB,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,mBAAmB,CAAC,KAAqB;QACrC,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAyB,CAAC;IAC5D,CAAC;IAED,MAAM,KAAK,IAAI;QACX,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,MAAM;QACb,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,MAAM,KAAK,MAAM;QACb,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,MAAM,KAAK,QAAQ;QACf,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,MAAM,KAAK,MAAM;QACb,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ;AAnCD,4BAmCC","sourcesContent":["import Base from './Base';\nimport type { AlexaV3DirectiveName, AlexaV3DirectiveValue, AlexaV3Request } from '../../types';\n\nexport default class LockState extends Base {\n static matches(event: AlexaV3Request): boolean {\n return event?.directive?.header?.namespace === 'Alexa.LockController';\n }\n\n matches(event: AlexaV3Request): boolean {\n return LockState.matches(event);\n }\n\n alexaDirectiveValue(event: AlexaV3Request): AlexaV3DirectiveValue {\n return event.directive.header.name as 'Lock' | 'Unlock';\n }\n\n static get LOCK(): string {\n return 'Lock';\n }\n\n static get LOCKED(): AlexaV3DirectiveName {\n return 'LOCKED';\n }\n\n static get UNLOCK(): string {\n return 'Unlock';\n }\n\n static get UNLOCKED(): AlexaV3DirectiveName {\n return 'UNLOCKED';\n }\n\n /**\n * The lock can't transition to `locked` or `unlocked` because the locking mechanism is jammed.\n */\n static get JAMMED(): AlexaV3DirectiveName {\n return 'JAMMED';\n }\n}\n"]}
1
+ {"version":3,"file":"LockState.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/LockState.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAG1B,MAAqB,SAAU,SAAQ,cAAI;IACvC,MAAM,CAAC,OAAO,CAAC,KAAqB;QAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,KAAK,sBAAsB,CAAC;IAC1E,CAAC;IAED,OAAO,CAAC,KAAqB;QACzB,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,mBAAmB,CAAC,KAAqB;QACrC,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAyB,CAAC;IAC5D,CAAC;IAED,MAAM,KAAK,IAAI;QACX,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,MAAM;QACb,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,MAAM,KAAK,MAAM;QACb,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,MAAM,KAAK,QAAQ;QACf,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,MAAM,KAAK,MAAM;QACb,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,UAAU,CAAC,KAAsC;QAC7C,kDAAkD;QAClD,gCAAgC;QAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,SAAS,CAAC,MAAM,CAAC;QAC5B,CAAC;QACD,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,SAAS,CAAC,QAAQ,CAAC;QAC9B,CAAC;QACD,OAAO,SAAS,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,UAAiC;QACnC,IAAI,UAAU,KAAK,SAAS,CAAC,MAAM,IAAI,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACnE,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,UAAU,KAAK,SAAS,CAAC,QAAQ,IAAI,UAAU,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;YACvE,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ;AAzDD,4BAyDC","sourcesContent":["import Base from './Base';\nimport type { AlexaV3DirectiveName, AlexaV3DirectiveValue, AlexaV3Request } from '../../types';\n\nexport default class LockState extends Base {\n static matches(event: AlexaV3Request): boolean {\n return event?.directive?.header?.namespace === 'Alexa.LockController';\n }\n\n matches(event: AlexaV3Request): boolean {\n return LockState.matches(event);\n }\n\n alexaDirectiveValue(event: AlexaV3Request): AlexaV3DirectiveValue {\n return event.directive.header.name as 'Lock' | 'Unlock';\n }\n\n static get LOCK(): string {\n return 'Lock';\n }\n\n static get LOCKED(): AlexaV3DirectiveName {\n return 'LOCKED';\n }\n\n static get UNLOCK(): string {\n return 'Unlock';\n }\n\n static get UNLOCKED(): AlexaV3DirectiveName {\n return 'UNLOCKED';\n }\n\n /**\n * The lock can't transition to `locked` or `unlocked` because the locking mechanism is jammed.\n */\n static get JAMMED(): AlexaV3DirectiveName {\n return 'JAMMED';\n }\n\n alexaValue(value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n // Lock could be true (locked) or false (unlocked)\n // ot 1 (locked) or 0 (unlocked)\n if (value === true || value === 1) {\n return LockState.LOCKED;\n }\n if (value === false || value === 0) {\n return LockState.UNLOCKED;\n }\n return LockState.JAMMED;\n }\n\n value(alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue | undefined {\n if (alexaValue === LockState.LOCKED || alexaValue === LockState.LOCK) {\n return true;\n }\n if (alexaValue === LockState.UNLOCKED || alexaValue === LockState.UNLOCK) {\n return false;\n }\n return undefined;\n }\n}\n"]}
@@ -26,6 +26,20 @@ class Mode extends Base_1.default {
26
26
  alexaDirectiveValue(event) {
27
27
  return event.directive.payload.mode;
28
28
  }
29
+ alexaValue(value) {
30
+ if ((typeof value === 'string' || typeof value === 'number') &&
31
+ this.supportedModes[parseInt(value, 10)]) {
32
+ return this.supportedModes[parseInt(value, 10)].value;
33
+ }
34
+ return this.supportedModes[0].value;
35
+ }
36
+ value(alexaValue) {
37
+ const pos = this.supportedModes.findIndex(mode => mode.value === alexaValue);
38
+ if (pos !== -1) {
39
+ return pos;
40
+ }
41
+ return undefined;
42
+ }
29
43
  get supportedModes() {
30
44
  return this._supportedModes;
31
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Mode.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/Mode.ts"],"names":[],"mappings":";;;;;AAAA,kDAA2D;AAS3D,MAAqB,IAAK,SAAQ,cAAI;IACjB,eAAe,CAK5B;IAEJ,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,mEAAmE,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,KAAqB;QACzB,OAAO,CACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACnB,iCAAiC;YACjC,SAAS,KAAK,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI;YAC5C,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ;YACpD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CAC9F,CAAC;IACN,CAAC;IAED,mBAAmB,CAAC,KAAqB;QACrC,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;IACxC,CAAC;IAED,IAAI,cAAc;QAMd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;CACJ;AAzCD,uBAyCC","sourcesContent":["import Base, { type ControlStateInitObject } from './Base';\nimport type {\n AlexaV3ActionMapping,\n AlexaV3DirectiveValue,\n AlexaV3DiscoveryResponse,\n AlexaV3Request,\n AlexaV3StateMapping,\n} from '../../types';\n\nexport default class Mode extends Base {\n private readonly _supportedModes: {\n value: string;\n actionMappings: AlexaV3ActionMapping[];\n discoveryResponse: AlexaV3DiscoveryResponse[];\n stateMappings: AlexaV3StateMapping[];\n }[];\n\n constructor(opts: ControlStateInitObject) {\n super(opts);\n if (!opts.supportedModes || !Array.isArray(opts.supportedModes) || opts.supportedModes.length === 0) {\n throw new Error('Mode control requires supportedModes array with at least one mode');\n }\n if (!opts.instance || typeof opts.instance !== 'string') {\n throw new Error('Mode control requires a valid instance string');\n }\n this._supportedModes = opts.supportedModes;\n }\n\n matches(event: AlexaV3Request): boolean {\n return (\n Mode.matches(event) &&\n // non-adjustable mode controller\n 'SetMode' === event?.directive?.header?.name &&\n this.instance === event?.directive?.header?.instance &&\n this.supportedModes.map(mode => mode.value).includes(event?.directive?.payload?.mode || '')\n );\n }\n\n alexaDirectiveValue(event: AlexaV3Request): AlexaV3DirectiveValue {\n return event.directive.payload.mode;\n }\n\n get supportedModes(): {\n value: string;\n actionMappings: AlexaV3ActionMapping[];\n discoveryResponse: AlexaV3DiscoveryResponse[];\n stateMappings: AlexaV3StateMapping[];\n }[] {\n return this._supportedModes;\n }\n}\n"]}
1
+ {"version":3,"file":"Mode.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/Mode.ts"],"names":[],"mappings":";;;;;AAAA,kDAA2D;AAS3D,MAAqB,IAAK,SAAQ,cAAI;IACjB,eAAe,CAK5B;IAEJ,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,mEAAmE,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,KAAqB;QACzB,OAAO,CACH,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YACnB,iCAAiC;YACjC,SAAS,KAAK,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI;YAC5C,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ;YACpD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CAC9F,CAAC;IACN,CAAC;IAED,mBAAmB,CAAC,KAAqB;QACrC,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;IACxC,CAAC;IAED,UAAU,CAAC,KAAsC;QAC7C,IACI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;YACxD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC;YACC,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,UAAiC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;QAC7E,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACb,OAAO,GAAG,CAAC;QACf,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,cAAc;QAMd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;CACJ;AA3DD,uBA2DC","sourcesContent":["import Base, { type ControlStateInitObject } from './Base';\nimport type {\n AlexaV3ActionMapping,\n AlexaV3DirectiveValue,\n AlexaV3DiscoveryResponse,\n AlexaV3Request,\n AlexaV3StateMapping,\n} from '../../types';\n\nexport default class Mode extends Base {\n private readonly _supportedModes: {\n value: string;\n actionMappings: AlexaV3ActionMapping[];\n discoveryResponse: AlexaV3DiscoveryResponse[];\n stateMappings: AlexaV3StateMapping[];\n }[];\n\n constructor(opts: ControlStateInitObject) {\n super(opts);\n if (!opts.supportedModes || !Array.isArray(opts.supportedModes) || opts.supportedModes.length === 0) {\n throw new Error('Mode control requires supportedModes array with at least one mode');\n }\n if (!opts.instance || typeof opts.instance !== 'string') {\n throw new Error('Mode control requires a valid instance string');\n }\n this._supportedModes = opts.supportedModes;\n }\n\n matches(event: AlexaV3Request): boolean {\n return (\n Mode.matches(event) &&\n // non-adjustable mode controller\n 'SetMode' === event?.directive?.header?.name &&\n this.instance === event?.directive?.header?.instance &&\n this.supportedModes.map(mode => mode.value).includes(event?.directive?.payload?.mode || '')\n );\n }\n\n alexaDirectiveValue(event: AlexaV3Request): AlexaV3DirectiveValue {\n return event.directive.payload.mode;\n }\n\n alexaValue(value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n if (\n (typeof value === 'string' || typeof value === 'number') &&\n this.supportedModes[parseInt(value as string, 10)]\n ) {\n return this.supportedModes[parseInt(value as string, 10)].value;\n }\n return this.supportedModes[0].value;\n }\n\n value(alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue | undefined {\n const pos = this.supportedModes.findIndex(mode => mode.value === alexaValue);\n if (pos !== -1) {\n return pos;\n }\n return undefined;\n }\n\n get supportedModes(): {\n value: string;\n actionMappings: AlexaV3ActionMapping[];\n discoveryResponse: AlexaV3DiscoveryResponse[];\n stateMappings: AlexaV3StateMapping[];\n }[] {\n return this._supportedModes;\n }\n}\n"]}
@@ -20,6 +20,12 @@ class PowerState extends Base_1.default {
20
20
  alexaDirectiveValue(event) {
21
21
  return event.directive.header.name === 'TurnOn' ? PowerState.ON : PowerState.OFF;
22
22
  }
23
+ alexaValue(value) {
24
+ return value === true ? PowerState.ON : value === false ? PowerState.OFF : undefined;
25
+ }
26
+ value(alexaValue) {
27
+ return alexaValue === PowerState.ON ? true : alexaValue === PowerState.OFF ? false : undefined;
28
+ }
23
29
  }
24
30
  exports.default = PowerState;
25
31
  //# sourceMappingURL=PowerState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PowerState.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/PowerState.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAG1B,MAAqB,UAAW,SAAQ,cAAI;IACxC,MAAM,CAAC,OAAO,CAAC,KAAqB;QAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,KAAK,uBAAuB,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,KAAqB;QACzB,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,KAAK,EAAE;QACT,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG;QACV,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,mBAAmB,CAAC,KAAqB;QACrC,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;IACrF,CAAC;CACJ;AApBD,6BAoBC","sourcesContent":["import Base from './Base';\nimport type { AlexaV3DirectiveName, AlexaV3DirectiveValue, AlexaV3Request } from '../../types';\n\nexport default class PowerState extends Base {\n static matches(event: AlexaV3Request): boolean {\n return event?.directive?.header?.namespace === 'Alexa.PowerController';\n }\n\n matches(event: AlexaV3Request): boolean {\n return PowerState.matches(event);\n }\n\n static get ON(): AlexaV3DirectiveName {\n return 'ON';\n }\n\n static get OFF(): AlexaV3DirectiveName {\n return 'OFF';\n }\n\n alexaDirectiveValue(event: AlexaV3Request): AlexaV3DirectiveValue {\n return event.directive.header.name === 'TurnOn' ? PowerState.ON : PowerState.OFF;\n }\n}\n"]}
1
+ {"version":3,"file":"PowerState.js","sourceRoot":"","sources":["../../../../../src/lib/AlexaSmartHomeV3/Alexa/Properties/PowerState.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAG1B,MAAqB,UAAW,SAAQ,cAAI;IACxC,MAAM,CAAC,OAAO,CAAC,KAAqB;QAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,KAAK,uBAAuB,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,KAAqB;QACzB,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,KAAK,EAAE;QACT,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG;QACV,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,mBAAmB,CAAC,KAAqB;QACrC,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;IACrF,CAAC;IAED,UAAU,CAAC,KAAsC;QAC7C,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,UAAiC;QACnC,OAAO,UAAU,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACnG,CAAC;CACJ;AA5BD,6BA4BC","sourcesContent":["import Base from './Base';\nimport type { AlexaV3DirectiveName, AlexaV3DirectiveValue, AlexaV3Request } from '../../types';\n\nexport default class PowerState extends Base {\n static matches(event: AlexaV3Request): boolean {\n return event?.directive?.header?.namespace === 'Alexa.PowerController';\n }\n\n matches(event: AlexaV3Request): boolean {\n return PowerState.matches(event);\n }\n\n static get ON(): AlexaV3DirectiveName {\n return 'ON';\n }\n\n static get OFF(): AlexaV3DirectiveName {\n return 'OFF';\n }\n\n alexaDirectiveValue(event: AlexaV3Request): AlexaV3DirectiveValue {\n return event.directive.header.name === 'TurnOn' ? PowerState.ON : PowerState.OFF;\n }\n\n alexaValue(value: ioBroker.StateValue | undefined): AlexaV3DirectiveValue {\n return value === true ? PowerState.ON : value === false ? PowerState.OFF : undefined;\n }\n\n value(alexaValue: AlexaV3DirectiveValue): ioBroker.StateValue | undefined {\n return alexaValue === PowerState.ON ? true : alexaValue === PowerState.OFF ? false : undefined;\n }\n}\n"]}
@@ -64,8 +64,7 @@ class AirCondition extends AdjustableControl_1.default {
64
64
  if (property.propertyName === ThermostatMode_1.default.propertyName) {
65
65
  this._lastKnownMode = value;
66
66
  if (!this.dedicatedOnOff) {
67
- this._powerState.currentValue =
68
- value !== this._thermostatMode.supportedModesAsEnum[ThermostatMode_1.default.OFF];
67
+ this._powerState.currentValue = value !== ThermostatMode_1.default.OFF;
69
68
  }
70
69
  }
71
70
  }
@@ -1 +1 @@
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 } from '../Alexa/Properties/Base';\nimport AdapterProvider from '../Helpers/AdapterProvider';\nimport type {\n AlexaV3Category,\n AlexaV3DirectiveValue,\n IotExternalDetectorState,\n IotExternalPatternControl,\n} from '../types';\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.composeInitObjectThermostatMode(),\n this.composeInitObjectTargetSetpoint(),\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 }\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 =\n value !== this._thermostatMode.supportedModesAsEnum[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(): {\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.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(): {\n setState: IotExternalDetectorState;\n getState: IotExternalDetectorState;\n alexaSetter?: (alexaValue: AlexaV3DirectiveValue) => ioBroker.StateValue | undefined;\n alexaGetter?: (value: ioBroker.StateValue | undefined) => AlexaV3DirectiveValue;\n supportedModes?: string[];\n } {\n const map = this.statesMap;\n return {\n setState: this.states[map.mode]!,\n getState: this.states[map.mode]!,\n alexaSetter: function (\n this: PropertiesBase,\n alexaValue: AlexaV3DirectiveValue,\n ): ioBroker.StateValue | undefined {\n return this.supportedModesAsEnum[alexaValue as string];\n },\n alexaGetter: function (\n this: PropertiesBase,\n value: ioBroker.StateValue | undefined,\n ): AlexaV3DirectiveValue {\n return this.supportedModesAsEnum[value as string];\n },\n supportedModes: [\n ThermostatMode.AUTO,\n ThermostatMode.COOL,\n ThermostatMode.ECO,\n ThermostatMode.HEAT,\n ThermostatMode.OFF,\n ],\n };\n }\n\n private composeInitObjectTargetSetpoint(): {\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 // 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(): {\n setState: IotExternalDetectorState;\n getState: IotExternalDetectorState;\n } {\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 } from '../Alexa/Properties/Base';\nimport AdapterProvider from '../Helpers/AdapterProvider';\nimport type {\n AlexaV3Category,\n AlexaV3DirectiveValue,\n IotExternalDetectorState,\n IotExternalPatternControl,\n} from '../types';\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.composeInitObjectThermostatMode(),\n this.composeInitObjectTargetSetpoint(),\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 }\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 = 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(): {\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.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(): {\n setState: IotExternalDetectorState;\n getState: IotExternalDetectorState;\n alexaSetter?: (alexaValue: AlexaV3DirectiveValue) => ioBroker.StateValue | undefined;\n alexaGetter?: (value: ioBroker.StateValue | undefined) => AlexaV3DirectiveValue;\n supportedModes?: string[];\n } {\n const map = this.statesMap;\n return {\n setState: this.states[map.mode]!,\n getState: this.states[map.mode]!,\n alexaSetter: function (\n this: PropertiesBase,\n alexaValue: AlexaV3DirectiveValue,\n ): ioBroker.StateValue | undefined {\n return this.supportedModesAsEnum[alexaValue as string];\n },\n alexaGetter: function (\n this: PropertiesBase,\n value: ioBroker.StateValue | undefined,\n ): AlexaV3DirectiveValue {\n return this.supportedModesAsEnum[value as string];\n },\n supportedModes: [\n ThermostatMode.AUTO,\n ThermostatMode.COOL,\n ThermostatMode.ECO,\n ThermostatMode.HEAT,\n ThermostatMode.OFF,\n ],\n };\n }\n\n private composeInitObjectTargetSetpoint(): {\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 // 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(): {\n setState: IotExternalDetectorState;\n getState: IotExternalDetectorState;\n } {\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"]}
@@ -24,7 +24,7 @@ class Lock extends Control_1.default {
24
24
  return alexaValue === Properties_1.default.LockState.UNLOCK;
25
25
  },
26
26
  alexaGetter: function (value) {
27
- return value ? Properties_1.default.LockState.UNLOCKED : Properties_1.default.LockState.LOCKED;
27
+ return value ? Properties_1.default.LockState.LOCKED : Properties_1.default.LockState.UNLOCKED;
28
28
  },
29
29
  };
30
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Lock.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Controls/Lock.ts"],"names":[],"mappings":";;;;;AAAA,yEAAiD;AACjD,qEAA6C;AAC7C,wDAAgC;AAQhC,MAAqB,IAAK,SAAQ,iBAAO;IACrC,YAAY,eAA0C;QAClD,KAAK,CAAC,eAAe,CAAC,CAAC;QAEvB,MAAM,cAAc,GAAG,IAAI,sBAAY,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,UAAU,GAAG,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,UAAU;QACV,OAAO,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC;IAEO,mBAAmB;QAMvB,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,CAAE;YAClC,WAAW,EAAE,UAAU,UAAU;gBAC7B,OAAO,UAAU,KAAK,oBAAU,CAAC,SAAS,CAAC,MAAM,CAAC;YACtD,CAAC;YACD,WAAW,EAAE,UAAU,KAAK;gBACxB,OAAO,KAAK,CAAC,CAAC,CAAC,oBAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,oBAAU,CAAC,SAAS,CAAC,MAAM,CAAC;YAC/E,CAAC;SACJ,CAAC;IACN,CAAC;CACJ;AA9BD,uBA8BC","sourcesContent":["import Capabilities from '../Alexa/Capabilities';\nimport Properties from '../Alexa/Properties';\nimport Control from './Control';\nimport type {\n AlexaV3Category,\n AlexaV3DirectiveValue,\n IotExternalDetectorState,\n IotExternalPatternControl,\n} from '../types';\n\nexport default class Lock extends Control {\n constructor(detectedControl: IotExternalPatternControl) {\n super(detectedControl);\n\n const lockController = new Capabilities.LockController(this.lockStateInitObject());\n this._supported = [lockController];\n }\n\n get categories(): AlexaV3Category[] {\n return ['SMARTLOCK'];\n }\n\n private lockStateInitObject(): {\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.set]!,\n getState: this.states[map.actual]!,\n alexaSetter: function (alexaValue) {\n return alexaValue === Properties.LockState.UNLOCK;\n },\n alexaGetter: function (value) {\n return value ? Properties.LockState.UNLOCKED : Properties.LockState.LOCKED;\n },\n };\n }\n}\n"]}
1
+ {"version":3,"file":"Lock.js","sourceRoot":"","sources":["../../../../src/lib/AlexaSmartHomeV3/Controls/Lock.ts"],"names":[],"mappings":";;;;;AAAA,yEAAiD;AACjD,qEAA6C;AAC7C,wDAAgC;AAQhC,MAAqB,IAAK,SAAQ,iBAAO;IACrC,YAAY,eAA0C;QAClD,KAAK,CAAC,eAAe,CAAC,CAAC;QAEvB,MAAM,cAAc,GAAG,IAAI,sBAAY,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,UAAU,GAAG,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,UAAU;QACV,OAAO,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC;IAEO,mBAAmB;QAMvB,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,CAAE;YAClC,WAAW,EAAE,UAAU,UAAU;gBAC7B,OAAO,UAAU,KAAK,oBAAU,CAAC,SAAS,CAAC,MAAM,CAAC;YACtD,CAAC;YACD,WAAW,EAAE,UAAU,KAAK;gBACxB,OAAO,KAAK,CAAC,CAAC,CAAC,oBAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAU,CAAC,SAAS,CAAC,QAAQ,CAAC;YAC/E,CAAC;SACJ,CAAC;IACN,CAAC;CACJ;AA9BD,uBA8BC","sourcesContent":["import Capabilities from '../Alexa/Capabilities';\nimport Properties from '../Alexa/Properties';\nimport Control from './Control';\nimport type {\n AlexaV3Category,\n AlexaV3DirectiveValue,\n IotExternalDetectorState,\n IotExternalPatternControl,\n} from '../types';\n\nexport default class Lock extends Control {\n constructor(detectedControl: IotExternalPatternControl) {\n super(detectedControl);\n\n const lockController = new Capabilities.LockController(this.lockStateInitObject());\n this._supported = [lockController];\n }\n\n get categories(): AlexaV3Category[] {\n return ['SMARTLOCK'];\n }\n\n private lockStateInitObject(): {\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.set]!,\n getState: this.states[map.actual]!,\n alexaSetter: function (alexaValue) {\n return alexaValue === Properties.LockState.UNLOCK;\n },\n alexaGetter: function (value) {\n return value ? Properties.LockState.LOCKED : Properties.LockState.UNLOCKED;\n },\n };\n }\n}\n"]}
@@ -63,8 +63,8 @@ class DeviceManager {
63
63
  constructor() {
64
64
  this.log = new Logger_1.default(this);
65
65
  }
66
- informAboutStatesChange() {
67
- void AdapterProvider_1.default.get().setState('smart.updates3', true, true);
66
+ async informAboutStatesChange() {
67
+ await AdapterProvider_1.default.get().setStateAsync('smart.updates3', true, true);
68
68
  }
69
69
  get language() {
70
70
  return this.lang;
@@ -310,15 +310,17 @@ class DeviceManager {
310
310
  const directive = this.matchDirective(responseEvent);
311
311
  if (directive) {
312
312
  // BF[2024.02.04]: temporarily disabled as produced a huge number of events
313
- // const stateChange = await directive.handle(responseEvent, this);
313
+ const stateChange = await directive.handle(responseEvent, this);
314
314
  // get device state (not just one control)
315
315
  const deviceState = await device.reportState();
316
316
  if (JSON.stringify(device.lastReportedState) !== JSON.stringify(deviceState)) {
317
317
  device.lastReportedState = deviceState;
318
318
  // fire state change report to Alexa
319
319
  // BF[2024.02.04]: temporarily disabled as produced a huge number of events
320
- // this.publishStateChange(stateChange);
321
- this.informAboutStatesChange();
320
+ if (process.env.TESTS_EXECUTION) {
321
+ this.publishStateChange(stateChange);
322
+ }
323
+ await this.informAboutStatesChange();
322
324
  }
323
325
  else {
324
326
  this.log.debug(`ignoring state change event for ${endpointId} due to the same_ value [${JSON.stringify(deviceState)}]`);
@@ -326,7 +328,7 @@ class DeviceManager {
326
328
  }
327
329
  }
328
330
  return response;
329
- }, AlexaResponse_1.default.endpointUnreachable(event.directive.header.messageId).get());
331
+ }, AlexaResponse_1.default.throttlingException(event.directive.header.messageId).get());
330
332
  }
331
333
  else {
332
334
  response = AlexaResponse_1.default.directiveNotSupportedByDevice(device.friendlyName, event.directive.header.namespace, event.directive.header.messageId, event.directive.header.payloadVersion).get();
@@ -362,16 +364,20 @@ class DeviceManager {
362
364
  const directive = this.matchDirective(responseEvent);
363
365
  if (directive) {
364
366
  // BF[2024.02.04]: temporarily disabled as produced a huge number of events
365
- // const stateChange = await directive.handle(event, this);
367
+ const stateChange = await directive.handle(responseEvent, this);
366
368
  // get device state (not just one control)
367
369
  const deviceState = await device.reportState();
368
370
  if (JSON.stringify(device.lastReportedState) !== JSON.stringify(deviceState)) {
369
371
  device.lastReportedState = deviceState;
370
- this.informAboutStatesChange();
372
+ await this.informAboutStatesChange();
371
373
  // fire state change report to Alexa
372
374
  // BF[2024.02.04]: temporarily disabled as produced a huge number of events
373
- // await this.executeWithinRateLimits(device.id, async () =>
374
- // this.publishStateChange(stateChange), undefined);
375
+ if (process.env.TESTS_EXECUTION) {
376
+ await this.executeWithinRateLimits(device.id, () => {
377
+ this.publishStateChange(stateChange);
378
+ return Promise.resolve(stateChange);
379
+ }, AlexaResponse_1.default.throttlingException(responseEvent.directive.header.messageId).get());
380
+ }
375
381
  }
376
382
  else {
377
383
  this.log.debug(`ignoring state change event for ${id} due to the same_ value [${JSON.stringify(deviceState)}]`);