iobroker.iot 4.0.1 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/README.md +1 -1
  2. package/admin/assets/index-5zouxn2w.js +680 -0
  3. package/admin/index_m.html +1 -1
  4. package/admin/rules/assets/{ActionVisu-DE8dgNVF.js → ActionVisu-D9x2f6zu.js} +1 -1
  5. package/admin/rules/assets/{ActionVisu__loadShare__react__loadShare__-BKaC-p5K.js → ActionVisu__loadShare__react__loadShare__-Cg21Ef1U.js} +1 -1
  6. package/admin/rules/assets/{ActionVisu__loadShare__react_mf_2_dom__loadShare__-Bs1o8DtQ.js → ActionVisu__loadShare__react_mf_2_dom__loadShare__-B1zRWn0u.js} +2 -2
  7. package/admin/rules/assets/ActionVisu__mf_v__runtimeInit__mf_v__-Cz053nO7.js +10 -0
  8. package/admin/rules/assets/bootstrap-BCFKIiwZ.js +1 -0
  9. package/admin/rules/assets/hostInit-hos3Txsy.js +1 -1
  10. package/admin/rules/assets/{index-DjPMvPni.js → index-CAAeiKCc.js} +2 -2
  11. package/admin/rules/assets/{index-CbxmbJvB.js → index-Duo7mFlZ.js} +2 -2
  12. package/admin/rules/assets/index-DwYdaT5M.js +1151 -0
  13. package/admin/rules/assets/{virtualExposes-BNZJTatg.js → virtualExposes-BqVak7rX.js} +2 -2
  14. package/admin/rules/customRuleBlocks.js +2 -2
  15. package/build-backend/lib/AlexaSmartHomeV3/Alexa/AlexaResponse.js +268 -0
  16. package/build-backend/lib/AlexaSmartHomeV3/Alexa/AlexaResponse.js.map +1 -0
  17. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/Base.js +110 -0
  18. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/Base.js.map +1 -0
  19. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/BrightnessController.js +19 -0
  20. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/BrightnessController.js.map +1 -0
  21. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ColorController.js +14 -0
  22. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ColorController.js.map +1 -0
  23. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ColorTemperatureController.js +19 -0
  24. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ColorTemperatureController.js.map +1 -0
  25. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ContactSensor.js +16 -0
  26. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ContactSensor.js.map +1 -0
  27. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/LockController.js +14 -0
  28. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/LockController.js.map +1 -0
  29. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ModeController.js +68 -0
  30. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ModeController.js.map +1 -0
  31. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/MotionSensor.js +14 -0
  32. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/MotionSensor.js.map +1 -0
  33. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/PercentageController.js +14 -0
  34. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/PercentageController.js.map +1 -0
  35. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/PowerController.js +19 -0
  36. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/PowerController.js.map +1 -0
  37. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/Speaker.js +25 -0
  38. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/Speaker.js.map +1 -0
  39. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/TemperatureSensor.js +14 -0
  40. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/TemperatureSensor.js.map +1 -0
  41. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ThermostatController.js +37 -0
  42. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ThermostatController.js.map +1 -0
  43. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/index.js +32 -0
  44. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/index.js.map +1 -0
  45. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Directives/Base.js +29 -0
  46. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Directives/Base.js.map +1 -0
  47. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Directives/ChangeReport.js +82 -0
  48. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Directives/ChangeReport.js.map +1 -0
  49. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Directives/Discovery.js +39 -0
  50. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Directives/Discovery.js.map +1 -0
  51. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Directives/ReportState.js +47 -0
  52. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Directives/ReportState.js.map +1 -0
  53. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Directives/index.js +14 -0
  54. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Directives/index.js.map +1 -0
  55. package/build-backend/lib/AlexaSmartHomeV3/Alexa/ModeValues/Base.js +36 -0
  56. package/build-backend/lib/AlexaSmartHomeV3/Alexa/ModeValues/Base.js.map +1 -0
  57. package/build-backend/lib/AlexaSmartHomeV3/Alexa/ModeValues/Closed.js +57 -0
  58. package/build-backend/lib/AlexaSmartHomeV3/Alexa/ModeValues/Closed.js.map +1 -0
  59. package/build-backend/lib/AlexaSmartHomeV3/Alexa/ModeValues/Open.js +57 -0
  60. package/build-backend/lib/AlexaSmartHomeV3/Alexa/ModeValues/Open.js.map +1 -0
  61. package/build-backend/lib/AlexaSmartHomeV3/Alexa/ModeValues/index.js +12 -0
  62. package/build-backend/lib/AlexaSmartHomeV3/Alexa/ModeValues/index.js.map +1 -0
  63. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/AdjustableProperty.js +16 -0
  64. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/AdjustableProperty.js.map +1 -0
  65. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Base.js +127 -0
  66. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Base.js.map +1 -0
  67. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Brightness.js +18 -0
  68. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Brightness.js.map +1 -0
  69. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Color.js +38 -0
  70. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Color.js.map +1 -0
  71. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/ColorTemperatureInKelvin.js +53 -0
  72. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/ColorTemperatureInKelvin.js.map +1 -0
  73. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/DetectionState.js +23 -0
  74. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/DetectionState.js.map +1 -0
  75. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/LockState.js +37 -0
  76. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/LockState.js.map +1 -0
  77. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Mode.js +34 -0
  78. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Mode.js.map +1 -0
  79. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Muted.js +19 -0
  80. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Muted.js.map +1 -0
  81. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Percentage.js +18 -0
  82. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Percentage.js.map +1 -0
  83. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/PowerState.js +25 -0
  84. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/PowerState.js.map +1 -0
  85. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/TargetSetpoint.js +31 -0
  86. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/TargetSetpoint.js.map +1 -0
  87. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Temperature.js +22 -0
  88. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Temperature.js.map +1 -0
  89. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/ThermostatMode.js +49 -0
  90. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/ThermostatMode.js.map +1 -0
  91. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Volume.js +21 -0
  92. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Volume.js.map +1 -0
  93. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/index.js +38 -0
  94. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/index.js.map +1 -0
  95. package/build-backend/lib/AlexaSmartHomeV3/Controls/AdjustableControl.js +20 -0
  96. package/build-backend/lib/AlexaSmartHomeV3/Controls/AdjustableControl.js.map +1 -0
  97. package/build-backend/lib/AlexaSmartHomeV3/Controls/AdjustablePercentageControl.js +26 -0
  98. package/build-backend/lib/AlexaSmartHomeV3/Controls/AdjustablePercentageControl.js.map +1 -0
  99. package/build-backend/lib/AlexaSmartHomeV3/Controls/AirCondition.js +148 -0
  100. package/build-backend/lib/AlexaSmartHomeV3/Controls/AirCondition.js.map +1 -0
  101. package/build-backend/lib/AlexaSmartHomeV3/Controls/Blind.js +13 -0
  102. package/build-backend/lib/AlexaSmartHomeV3/Controls/Blind.js.map +1 -0
  103. package/build-backend/lib/AlexaSmartHomeV3/Controls/ContactSensor.js +17 -0
  104. package/build-backend/lib/AlexaSmartHomeV3/Controls/ContactSensor.js.map +1 -0
  105. package/build-backend/lib/AlexaSmartHomeV3/Controls/Control.js +321 -0
  106. package/build-backend/lib/AlexaSmartHomeV3/Controls/Control.js.map +1 -0
  107. package/build-backend/lib/AlexaSmartHomeV3/Controls/Ct.js +182 -0
  108. package/build-backend/lib/AlexaSmartHomeV3/Controls/Ct.js.map +1 -0
  109. package/build-backend/lib/AlexaSmartHomeV3/Controls/Dimmer.js +127 -0
  110. package/build-backend/lib/AlexaSmartHomeV3/Controls/Dimmer.js.map +1 -0
  111. package/build-backend/lib/AlexaSmartHomeV3/Controls/Door.js +10 -0
  112. package/build-backend/lib/AlexaSmartHomeV3/Controls/Door.js.map +1 -0
  113. package/build-backend/lib/AlexaSmartHomeV3/Controls/Gate.js +38 -0
  114. package/build-backend/lib/AlexaSmartHomeV3/Controls/Gate.js.map +1 -0
  115. package/build-backend/lib/AlexaSmartHomeV3/Controls/Hue.js +208 -0
  116. package/build-backend/lib/AlexaSmartHomeV3/Controls/Hue.js.map +1 -0
  117. package/build-backend/lib/AlexaSmartHomeV3/Controls/Light.js +47 -0
  118. package/build-backend/lib/AlexaSmartHomeV3/Controls/Light.js.map +1 -0
  119. package/build-backend/lib/AlexaSmartHomeV3/Controls/Lock.js +35 -0
  120. package/build-backend/lib/AlexaSmartHomeV3/Controls/Lock.js.map +1 -0
  121. package/build-backend/lib/AlexaSmartHomeV3/Controls/Motion.js +17 -0
  122. package/build-backend/lib/AlexaSmartHomeV3/Controls/Motion.js.map +1 -0
  123. package/build-backend/lib/AlexaSmartHomeV3/Controls/ReadOnlyDetector.js +26 -0
  124. package/build-backend/lib/AlexaSmartHomeV3/Controls/ReadOnlyDetector.js.map +1 -0
  125. package/build-backend/lib/AlexaSmartHomeV3/Controls/Slider.js +10 -0
  126. package/build-backend/lib/AlexaSmartHomeV3/Controls/Slider.js.map +1 -0
  127. package/build-backend/lib/AlexaSmartHomeV3/Controls/Socket.js +21 -0
  128. package/build-backend/lib/AlexaSmartHomeV3/Controls/Socket.js.map +1 -0
  129. package/build-backend/lib/AlexaSmartHomeV3/Controls/Temperature.js +21 -0
  130. package/build-backend/lib/AlexaSmartHomeV3/Controls/Temperature.js.map +1 -0
  131. package/build-backend/lib/AlexaSmartHomeV3/Controls/Thermostat.js +85 -0
  132. package/build-backend/lib/AlexaSmartHomeV3/Controls/Thermostat.js.map +1 -0
  133. package/build-backend/lib/AlexaSmartHomeV3/Controls/VacuumCleaner.js +27 -0
  134. package/build-backend/lib/AlexaSmartHomeV3/Controls/VacuumCleaner.js.map +1 -0
  135. package/build-backend/lib/AlexaSmartHomeV3/Controls/Volume.js +116 -0
  136. package/build-backend/lib/AlexaSmartHomeV3/Controls/Volume.js.map +1 -0
  137. package/build-backend/lib/AlexaSmartHomeV3/Controls/VolumeGroup.js +10 -0
  138. package/build-backend/lib/AlexaSmartHomeV3/Controls/VolumeGroup.js.map +1 -0
  139. package/build-backend/lib/AlexaSmartHomeV3/Controls/Window.js +10 -0
  140. package/build-backend/lib/AlexaSmartHomeV3/Controls/Window.js.map +1 -0
  141. package/build-backend/lib/AlexaSmartHomeV3/Controls/index.js +121 -0
  142. package/build-backend/lib/AlexaSmartHomeV3/Controls/index.js.map +1 -0
  143. package/build-backend/lib/AlexaSmartHomeV3/Device.js +83 -0
  144. package/build-backend/lib/AlexaSmartHomeV3/Device.js.map +1 -0
  145. package/build-backend/lib/AlexaSmartHomeV3/DeviceManager.js +392 -0
  146. package/build-backend/lib/AlexaSmartHomeV3/DeviceManager.js.map +1 -0
  147. package/build-backend/lib/AlexaSmartHomeV3/Exceptions/AlexaV3Exception.js +10 -0
  148. package/build-backend/lib/AlexaSmartHomeV3/Exceptions/AlexaV3Exception.js.map +1 -0
  149. package/build-backend/lib/AlexaSmartHomeV3/Exceptions/HourlyDeviceRateLimitExceeded.js +10 -0
  150. package/build-backend/lib/AlexaSmartHomeV3/Exceptions/HourlyDeviceRateLimitExceeded.js.map +1 -0
  151. package/build-backend/lib/AlexaSmartHomeV3/Exceptions/OverallDailyRateLimitExceeded.js +10 -0
  152. package/build-backend/lib/AlexaSmartHomeV3/Exceptions/OverallDailyRateLimitExceeded.js.map +1 -0
  153. package/build-backend/lib/AlexaSmartHomeV3/Helpers/AdapterProvider.js +37 -0
  154. package/build-backend/lib/AlexaSmartHomeV3/Helpers/AdapterProvider.js.map +1 -0
  155. package/build-backend/lib/AlexaSmartHomeV3/Helpers/FileHelper.js +53 -0
  156. package/build-backend/lib/AlexaSmartHomeV3/Helpers/FileHelper.js.map +1 -0
  157. package/build-backend/lib/AlexaSmartHomeV3/Helpers/IotProxy.js +27 -0
  158. package/build-backend/lib/AlexaSmartHomeV3/Helpers/IotProxy.js.map +1 -0
  159. package/build-backend/lib/AlexaSmartHomeV3/Helpers/Logger.js +93 -0
  160. package/build-backend/lib/AlexaSmartHomeV3/Helpers/Logger.js.map +1 -0
  161. package/build-backend/lib/AlexaSmartHomeV3/Helpers/RateLimiter.js +112 -0
  162. package/build-backend/lib/AlexaSmartHomeV3/Helpers/RateLimiter.js.map +1 -0
  163. package/build-backend/lib/AlexaSmartHomeV3/Helpers/Utils.js +625 -0
  164. package/build-backend/lib/AlexaSmartHomeV3/Helpers/Utils.js.map +1 -0
  165. package/build-backend/lib/Utils.js +96 -0
  166. package/build-backend/lib/Utils.js.map +1 -0
  167. package/build-backend/lib/adminCommonSocket.js +715 -0
  168. package/build-backend/lib/adminCommonSocket.js.map +1 -0
  169. package/build-backend/lib/alexaCustom.js +542 -0
  170. package/build-backend/lib/alexaCustom.js.map +1 -0
  171. package/build-backend/lib/alexaSmartHomeV2.js +2788 -0
  172. package/build-backend/lib/alexaSmartHomeV3.js +97 -0
  173. package/build-backend/lib/alexaSmartHomeV3.js.map +1 -0
  174. package/build-backend/lib/alisa.js +2409 -0
  175. package/build-backend/lib/devices.js +23 -0
  176. package/build-backend/lib/devices.js.map +1 -0
  177. package/build-backend/lib/functions.js +24 -0
  178. package/build-backend/lib/functions.js.map +1 -0
  179. package/build-backend/lib/googleHome.js +3322 -0
  180. package/build-backend/lib/notifications.js +30 -0
  181. package/build-backend/lib/notifications.js.map +1 -0
  182. package/build-backend/lib/remote.js +1342 -0
  183. package/build-backend/lib/remote.js.map +1 -0
  184. package/build-backend/lib/rooms.js +48 -0
  185. package/build-backend/lib/rooms.js.map +1 -0
  186. package/build-backend/lib/texts.js +81 -0
  187. package/build-backend/lib/texts.js.map +1 -0
  188. package/build-backend/lib/translate.js +21 -0
  189. package/build-backend/lib/translate.js.map +1 -0
  190. package/build-backend/lib/visuApp.js +147 -0
  191. package/build-backend/lib/visuApp.js.map +1 -0
  192. package/build-backend/main.js +1361 -0
  193. package/build-backend/main.js.map +1 -0
  194. package/io-package.json +2 -2
  195. package/package.json +2 -2
  196. package/admin/assets/index-Y479CE6x.js +0 -681
  197. package/admin/rules/assets/ActionVisu__mf_v__runtimeInit__mf_v__-DtUoI3FU.js +0 -5
  198. package/admin/rules/assets/bootstrap-Ba57tu25.js +0 -1
  199. package/admin/rules/assets/index-_Y2FN5EZ.js +0 -1152
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alexaCustom.js","sourceRoot":"","sources":["../../src/lib/alexaCustom.ts"],"names":[],"mappings":"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","sourcesContent":["import textsT from './texts';\nimport type { IotAdapterConfig } from './types';\nimport type { IotAdapter } from '../main';\n\n// Stop phrases all in lower case!\n// Required by v2 custom skill to detect when the user wants to cancel the conversation\nconst stopPhrases: { [language: string]: string[] } = {\n de: ['es reicht', 'ich bin fertig', 'ende', 'abbrechen', 'stopp', 'stop', 'beenden', 'danke', 'danke schön'],\n en: ['enough', 'i am done', \"i'm done\", 'stop', 'quit', 'bye', 'thanks', 'thank you'],\n ru: ['достаточно', 'я готов', 'хватит'],\n};\n\nexport type AlexaCustomResponse = {\n version: string;\n sessionAttributes: { [key: string]: string };\n response: {\n outputSpeech: {\n type: string;\n text: string;\n };\n card: {\n content: string;\n title: string;\n type: 'Simple';\n };\n shouldEndSession: boolean;\n reprompt?: {\n outputSpeech: {\n type: string;\n ssml: string;\n };\n };\n directives?: {\n type: 'Dialog.ElicitSlot';\n updatedIntent: {\n name: 'queryIntent';\n confirmationStatus: 'NONE';\n slots: {\n query: {\n name: 'query';\n value: '';\n confirmationStatus: 'NONE';\n };\n };\n };\n slotToElicit: 'query';\n }[];\n };\n};\n\ntype AlexaCustomSession = {\n sessionId: string;\n user: {\n userId: string;\n };\n};\ntype AlexaCustomRequest = {\n session: AlexaCustomSession;\n customSkillV2?: boolean;\n request: {\n type: string;\n reason: string;\n dialogState: string;\n intent: {\n name: string;\n slots: {\n [key: string]: {\n value: string;\n resolutions: {\n resolutionsPerAuthority: {\n status: { code: string };\n values: { value: { name: string } }[];\n }[];\n };\n };\n };\n };\n };\n context: {\n System: {\n device: {\n deviceId: string;\n };\n };\n };\n};\n\ntype StoredSession = {\n request: AlexaCustomRequest | null;\n isV2Skill?: boolean;\n responseTimer: NodeJS.Timeout | null;\n expiryTimer: NodeJS.Timeout | null;\n callback: ((response: AlexaCustomResponse) => void) | null;\n};\n\nexport default class AlexaCustom {\n private lang: ioBroker.Languages = 'de';\n private openSessions: {\n [sessionId: string]: StoredSession;\n } = {};\n\n private knownDevices: {\n [deviceId: string]: {\n id: string;\n room: `enum.room.${string}`;\n lastSeen: number;\n };\n } = {};\n private knownUsers: {\n [deviceId: string]: {\n id: string;\n name: string;\n lastSeen: number;\n };\n } = {};\n private lastSkillRequestWasV2 = false;\n private config: IotAdapterConfig;\n private adapter: IotAdapter;\n\n constructor(adapter: IotAdapter) {\n this.config = adapter.config;\n this.adapter = adapter;\n if (this.config.customKnownAlexaDevices && Array.isArray(this.config.customKnownAlexaDevices)) {\n this.config.customKnownAlexaDevices.forEach(device => {\n this.knownDevices[device.id] = device;\n // {\n // \"id\": \"amzn1.ask.device.XXXXXXXXX\", // just show last X chars in UI, should be unique enough\n // \"room\": \"enum.room.xyz\",\n // \"lastSeen\": 1234567899,\n // }\n });\n }\n if (this.config.customKnownAlexaUsers && Array.isArray(this.config.customKnownAlexaUsers)) {\n this.config.customKnownAlexaUsers.forEach(device => {\n this.knownUsers[device.id] = device;\n // {\n // \"id\": \"amzn1.ask.account.XXXXXXXXX\", // just show last X chars in UI, should be unique enough\n // \"name\": \"Holger\",\n // \"lastSeen\": 1234567899,\n // }\n });\n }\n }\n\n getKnownDevices(): {\n id: string;\n room: `enum.room.${string}`;\n lastSeen: number;\n }[] {\n return Object.values(this.knownDevices);\n }\n\n getKnownUsers(): {\n id: string;\n name: string;\n lastSeen: number;\n }[] {\n return Object.values(this.knownUsers);\n }\n\n // eslint-disable-next-line no-unused-private-class-members\n #writeResponse(_channelId: string, _stateId: string, _command: string, _value: ioBroker.StateValue): void {\n // adapter.log.warn('[CUSTOM] Unknown applianceId: ' + deviceId);\n }\n\n #getResponseV1(text: string, repromptText: string | null, shouldEndSession?: boolean): AlexaCustomResponse {\n let speechPlainText = text;\n let speechType = 'PlainText';\n if (text.startsWith('<speak>')) {\n speechPlainText = text.replace(/<[^>]*>/g, '').trim();\n speechType = 'SSML';\n }\n\n let repromptType = 'PlainText';\n if (repromptText?.startsWith('<speak>')) {\n repromptType = 'SSML';\n }\n\n const response: AlexaCustomResponse = {\n version: '1.0',\n sessionAttributes: {},\n response: {\n outputSpeech: {\n type: speechType,\n text: text,\n },\n card: {\n content: speechPlainText,\n title: textsT(this.lang, 'Answer from ioBroker') || 'ioBroker',\n type: 'Simple',\n },\n shouldEndSession: shouldEndSession || false,\n },\n };\n if (repromptText) {\n response.response.reprompt = {\n outputSpeech: {\n type: repromptType,\n ssml: repromptText,\n },\n };\n }\n return response;\n }\n\n #getResponseV2(text: string, repromptText: string | null, shouldEndSession?: boolean): AlexaCustomResponse {\n const response = this.#getResponseV1(text, repromptText, shouldEndSession);\n\n if (!shouldEndSession) {\n // We redirect the user to the Dialog Intent to capture the full traffic\n response.response.directives = [\n {\n type: 'Dialog.ElicitSlot',\n updatedIntent: {\n name: 'queryIntent',\n confirmationStatus: 'NONE',\n slots: {\n query: {\n name: 'query',\n value: '',\n confirmationStatus: 'NONE',\n },\n },\n },\n slotToElicit: 'query',\n },\n ];\n }\n return response;\n }\n\n setLanguage(_lang: ioBroker.Languages): void {\n this.lang = _lang || 'de';\n }\n\n setResponse(resp: string, shouldEndSession?: boolean): void {\n let response: {\n sessionId: string;\n responseText: string;\n shouldEndSession: boolean;\n } | null = null;\n if (resp.startsWith('{') && resp.endsWith('}')) {\n try {\n response = JSON.parse(resp);\n } catch {\n // ignore\n }\n }\n let session: StoredSession | undefined;\n let sessionId: string | undefined;\n if (response !== null && typeof response === 'object') {\n if (response.sessionId) {\n sessionId = response.sessionId;\n session = this.openSessions[sessionId];\n }\n }\n // We got a state response without session reference\n if (!session) {\n const sessions = Object.keys(this.openSessions).filter(\n sessionId => !!(this.openSessions[sessionId].responseTimer && this.openSessions[sessionId].callback),\n );\n if (sessions.length > 0) {\n sessionId = sessions[0];\n session = this.openSessions[sessionId];\n if (sessions.length > 1) {\n this.adapter.log.warn(\n '[CUSTOM] More than one session with expected responses ... consider the first one as the relevant one',\n );\n }\n }\n }\n\n const obj = {\n responseText: '',\n shouldEndSession: shouldEndSession === undefined ? !sessionId : shouldEndSession,\n };\n if (response !== null && typeof response === 'object') {\n if (response.responseText) {\n obj.responseText = response.responseText;\n }\n if (response.shouldEndSession !== undefined) {\n obj.shouldEndSession = response.shouldEndSession;\n }\n } else {\n obj.responseText = resp;\n }\n\n if (session?.responseTimer && session.callback) {\n this.processAfter(session.request!, obj.responseText, obj.shouldEndSession, session.callback);\n }\n }\n\n processAfter(\n request: AlexaCustomRequest,\n text: string,\n shouldEndSession: boolean | undefined,\n callback: (response: AlexaCustomResponse) => void,\n ): void {\n void this.adapter.setState('smart.lastResponse', text, true);\n\n const sessionId = request.session && request.session.sessionId ? request.session.sessionId : '';\n\n if (this.openSessions[sessionId].responseTimer) {\n clearTimeout(this.openSessions[sessionId].responseTimer);\n this.openSessions[sessionId].responseTimer = null;\n }\n\n this.openSessions[sessionId].callback = null;\n this.openSessions[sessionId].request = null;\n\n const isV2Skill =\n this.openSessions[sessionId].isV2Skill !== undefined\n ? this.openSessions[sessionId].isV2Skill\n : !!request.customSkillV2;\n if (isV2Skill) {\n callback(this.#getResponseV2(text, null, shouldEndSession));\n } else {\n callback(this.#getResponseV1(text, null, shouldEndSession));\n }\n }\n\n touchSession(sessionId: string, isV2Skill: boolean): void {\n if (this.openSessions[sessionId] && this.openSessions[sessionId].expiryTimer) {\n clearTimeout(this.openSessions[sessionId].expiryTimer);\n this.openSessions[sessionId].expiryTimer = null;\n }\n this.openSessions[sessionId] = this.openSessions[sessionId] || {\n expiryTimer: null,\n responseTimer: null,\n request: null,\n callback: null,\n isV2Skill,\n };\n this.openSessions[sessionId].expiryTimer = setTimeout(() => {\n delete this.openSessions[sessionId];\n }, 60000); // latest after 10 mins we declare a session as closed\n }\n\n deleteSession(sessionId: string): void {\n if (this.openSessions[sessionId] && this.openSessions[sessionId].expiryTimer) {\n clearTimeout(this.openSessions[sessionId].expiryTimer);\n }\n delete this.openSessions[sessionId];\n }\n\n // let example = {\n // \"session\": {\n // \"sessionId\": \"SessionId.74267f5d-3b58-45646-bdc7-4645645\",\n // \"application\": {\n // \"applicationId\": \"amzn1.ask.skill.6cee68cd-4356-456-9d53-45646456\"\n // },\n // \"attributes\": {},\n // \"user\": {\n // \"userId\": \"amzn1.ask.account.asdasdasdas\"\n // },\n // \"new\": true\n // },\n // \"request\": {\n // \"type\": \"IntentRequest\",\n // \"requestId\": \"EdwRequestId.b785ca9f-6ba9-45645-a667-4645646\",\n // \"locale\": \"de-DE\",\n // \"timestamp\": \"2017-07-25T15:30:51Z\",\n // \"intent\": {\n // \"name\": \"controlDevice\",\n // \"slots\": {\n // \"Command\": {\n // \"name\": \"Command\",\n // \"value\": \"an\"\n // },\n // \"Device\": {\n // \"name\": \"Device\"\n // },\n // \"Article\": {\n // \"name\": \"Article\"\n // },\n // \"Value\": {\n // \"name\": \"Value\"\n // },\n // \"Place\": {\n // \"name\": \"Place\",\n // \"value\": \"licht\"\n // }\n // }\n // }\n // },\n // \"version\": \"1.0\"\n // }\n async process(request: AlexaCustomRequest, isEnabled: boolean): Promise<AlexaCustomResponse | { error: string }> {\n if (!request?.request) {\n this.adapter.log.error('Invalid request: no intent!');\n return { error: 'Invalid request: no intent!' };\n }\n const isV2Skill = !!request.customSkillV2;\n this.lastSkillRequestWasV2 = isV2Skill;\n const getResponse = isV2Skill ? this.#getResponseV2 : this.#getResponseV1;\n\n if (!isEnabled) {\n if (this.lang === 'en') {\n return getResponse(\n 'The service is not activated. Please enable Alexa integration in the iot Adapter.',\n null,\n true,\n );\n }\n if (this.lang === 'ru') {\n return getResponse(\n 'Услуга не активирована. Включите интеграцию Alexa в адаптере Интернета вещей.',\n null,\n true,\n );\n }\n return getResponse(\n 'Der Service ist nicht aktiviert. Bitte aktiviere die Alex-Integration im iot-Adapter um Ihn zu aktivieren.',\n null,\n true,\n );\n }\n\n const sessionId = request.session && request.session.sessionId ? request.session.sessionId : '';\n this.adapter.log.debug(\n `Custom Skill ${isV2Skill ? 'V2' : 'V1'} request: ${request.request.type}/${request.request.intent && request.request.intent.name} for session ${sessionId}, dialog: ${request.request.dialogState}`,\n );\n\n if (request.request.type === 'LaunchRequest') {\n this.adapter.log.debug(request.request.type);\n this.touchSession(sessionId, isV2Skill);\n if (this.lang === 'en') {\n return getResponse(\n 'Hello, what do you want to know or control?',\n 'What do you want to know or control?',\n );\n }\n if (this.lang === 'ru') {\n return getResponse(\n 'Привет. Что вы хотите знать или контролировать?',\n 'Что вы хотите знать или контролировать?',\n );\n }\n return getResponse('Hallo, was möchtest Du wissen oder steuern?', 'Was möchtest Du wissen oder steuern?');\n }\n if (request.request.type === 'IntentRequest') {\n if (request.request.intent) {\n this.touchSession(sessionId, isV2Skill);\n\n if (request.request.intent.name === 'AMAZON.HelpIntent') {\n if (this.lang === 'en') {\n return getResponse(\n 'This skill will pass all recognized words to your ioBroker installation and you can configure actions and responses there! What do you want to know or control?',\n 'What do you want to know or control?',\n );\n }\n if (this.lang === 'ru') {\n return getResponse(\n 'Этот навык передаст все распознанные слова в вашу установку ioBroker, и вы сможете настроить действия и ответы там! Что вы хотите знать или контролировать?',\n 'Что вы хотите знать или контролировать?',\n );\n }\n return getResponse(\n 'Dieser Skill gibt alle erkannten Wörter an Deine ioBroker-Installation weiter und Du kannst dort Aktionen und Antworten konfigurieren! Was möchtest Du wissen oder steuern?',\n 'Was möchtest Du wissen oder steuern?',\n );\n } else if (\n request.request.intent.name === 'AMAZON.CancelIntent' ||\n request.request.intent.name === 'AMAZON.StopIntent'\n ) {\n this.adapter.log.debug(request.request.intent.name);\n this.deleteSession(sessionId);\n if (this.lang === 'en') {\n return getResponse('Goodbye!', null, true);\n }\n if (this.lang === 'ru') {\n return getResponse('До скорого!', null, true);\n }\n return getResponse('Bis bald!', null, true);\n }\n const textsLog = [];\n const texts = [];\n\n const originalIntentName = request.request.intent.name;\n if (request.request.intent.name === 'AMAZON.YesIntent') {\n // Only relevant for v2 Skill. Convert an initial YesIntent to Words\n if (this.lang === 'en') {\n textsLog.push('AMAZON.YesIntent = Yes');\n texts.push('Yes');\n } else if (this.lang === 'ru') {\n textsLog.push('AMAZON.YesIntent = Да');\n texts.push('Да');\n } else if (this.lang === 'de') {\n textsLog.push('AMAZON.YesIntent = Ja');\n texts.push('Ja');\n }\n } else if (request.request.intent.name === 'AMAZON.NoIntent') {\n // Only relevant for v2 Skill. Convert an initial NoIntent to Words\n if (this.lang === 'en') {\n textsLog.push('AMAZON.NoIntent = No');\n texts.push('No');\n } else if (this.lang === 'ru') {\n textsLog.push('AMAZON.NoIntent = Нет');\n texts.push('Нет');\n } else if (this.lang === 'de') {\n textsLog.push('AMAZON.NoIntent = Nein');\n texts.push('Nein');\n }\n } else if (request.request.intent.name.startsWith('queryIntent')) {\n // v2 Skill\n // Only relevant for v2 Skill, get the start words out of the intent name\n const startWords = request.request.intent.name\n .replace(/^queryIntent/, '')\n .replace(/ae/, 'ä')\n .replace(/oe/, 'ö')\n .replace(/ue/, 'ü')\n .replace(/Oe/, 'Ö')\n .replace(/Ue/, 'Ü')\n .replace(/Ae/, 'Ä')\n .replace(/ss/, 'ß')\n .replace(/([A-Z])/g, ' $1')\n .trim();\n request.request.intent.name = 'queryIntent';\n if (startWords.length && startWords !== 'FillWords') {\n // ignore FillWords\n textsLog.push(`queryIntent = ${startWords}`);\n texts.push(startWords);\n }\n }\n\n if (!request.request.intent.slots && textsLog.length === 0) {\n // No slots and nothing from above\n this.adapter.log.warn(`Unexpected ALEXA Request: ${JSON.stringify(request)}`);\n if (this.lang === 'en') {\n return getResponse('I did not hear you. Please repeat your question!', null);\n }\n if (this.lang === 'ru') {\n return getResponse('Я не слышал тебя. Пожалуйста, повторите свой вопрос!', null);\n }\n return getResponse('Ich habe Dich nicht verstanden. Bitte wiederhole deine Frage!', null);\n }\n\n // collect all filled slots (v1 and v2 skill)\n if (request.request.intent.slots) {\n const slots = Object.keys(request.request.intent.slots);\n slots.forEach(slotId => {\n const slot = request.request.intent.slots[slotId];\n let value = slot.value;\n const resolution =\n slot.resolutions?.resolutionsPerAuthority?.length > 0\n ? slot.resolutions.resolutionsPerAuthority[0]\n : null;\n\n if (resolution && resolution.status.code === 'ER_SUCCESS_MATCH') {\n const resolutionValue = resolution.values[0].value;\n value = resolutionValue.name;\n }\n\n if (value && value.length) {\n texts.push(value);\n textsLog.push(`${slotId} = ${value}`);\n }\n });\n }\n\n let text = texts.join(' ');\n\n const intent = request.request.intent.name || '';\n if (originalIntentName.startsWith('queryIntentStarteDialog')) {\n // v2 Skill StarteDialog* intents are automatically handled without sending anywhere\n let response = '';\n if (originalIntentName === 'queryIntentStarteDialog') {\n // Intent to directly redirect to the dialog state without further processing\n response = text.replace(/^Starte Dialog /, '').trim();\n } else if (originalIntentName === 'queryIntentStarteDialogMitFrage') {\n // Intent to directly redirect to the dialog state with asking a question without further processing\n response = text.replace(/^Starte Dialog Mit Frage /, '').trim();\n if (response.length) {\n response += '?';\n }\n }\n if (!response.length) {\n // We need to send an answer, else it is an error\n if (this.lang === 'en') {\n response = 'Yes?';\n } else if (this.lang === 'ru') {\n response = 'Да?';\n } else {\n response = 'Ja?';\n }\n }\n return getResponse(response, response);\n }\n if (intent === 'queryIntent' && stopPhrases[this.lang].includes(text.toLowerCase())) {\n // v2 Skill when in dialog mode, we need to take care of the exit criteria ourselves\n this.deleteSession(sessionId);\n\n if (this.lang === 'en') {\n return getResponse('Goodbye!', null, true);\n }\n if (this.lang === 'ru') {\n return getResponse('До скорого!', null, true);\n }\n return getResponse('Bis bald!', null, true);\n }\n // v1 and v2 Skill\n const deviceId = request?.context?.System?.device?.deviceId\n ? request.context.System.device.deviceId\n : '';\n const deviceRoom = this.knownDevices[deviceId] ? this.knownDevices[deviceId].room : undefined;\n const userId = request?.session?.user?.userId ? request.session.user.userId : '';\n const userName = this.knownUsers[userId] ? this.knownUsers[userId].name : undefined;\n const commandObj = {\n words: texts,\n intent: intent,\n deviceId,\n deviceRoom,\n sessionId,\n userId,\n userName,\n };\n\n // Add room and username to the text if configured\n if (deviceRoom && this.config.addCustomKnownAlexaDeviceRoomToText) {\n text += ` ${deviceRoom}`;\n }\n if (userName && this.config.addCustomKnownAlexaUserNameToText) {\n text += ` ${userName}`;\n }\n\n // Add intent in front of the text to stay compatible with v1 Skill\n text = `${intent} ${text}`;\n text = text.trim();\n\n await this.adapter.setStateAsync('smart.lastCommand', text, true);\n await this.adapter.setStateAsync('smart.lastCommandObj', JSON.stringify(commandObj), true);\n\n this.adapter.log.debug(`${intent}: ${textsLog.join(', ')}`);\n\n if (intent) {\n let text_timeout;\n if (this.lang === 'en') {\n text_timeout = `Processing of ${text} is not possible!`;\n } else if (this.lang === 'ru') {\n text_timeout = `Обработка ${text} не возможна!`;\n } else {\n text_timeout = `Die Verarbeitung von ${text} ist nicht möglich!`;\n }\n\n if (\n this.config.text2command !== null &&\n this.config.text2command !== undefined &&\n (this.config.text2command as string) !== ''\n ) {\n const state = await this.adapter.getForeignStateAsync(\n `system.adapter.text2command.${this.config.text2command}.alive`,\n );\n if (state?.val) {\n return new Promise<AlexaCustomResponse>(\n (resolve: ((response: AlexaCustomResponse) => void) | null): void => {\n this.openSessions[sessionId].responseTimer = setTimeout(() => {\n this.openSessions[sessionId].responseTimer = null;\n if (resolve) {\n this.processAfter(request, text_timeout, true, resolve);\n resolve = null;\n }\n }, 1000);\n\n if (this.config.language) {\n text = `${this.config.language};${text}`;\n }\n\n this.adapter.sendTo(`text2command.${this.config.text2command}`, text, result => {\n const typedResult: {\n response: string;\n } = result as any;\n if (this.openSessions[sessionId].responseTimer) {\n clearTimeout(this.openSessions[sessionId].responseTimer);\n this.openSessions[sessionId].responseTimer = null;\n }\n const regExp = new RegExp(`\"${intent.toLowerCase()}\\\\s`);\n typedResult.response = typedResult.response\n .replace(/^\\w\\w;/, '')\n .replace(regExp, '\"');\n this.adapter.log.debug(`Response from text2command: ${typedResult.response}`);\n\n void this.adapter.setState('smart.lastResponse', typedResult.response, true);\n if (resolve) {\n resolve(getResponse(typedResult.response, null, true));\n resolve = null;\n }\n });\n },\n );\n }\n }\n\n return new Promise(resolve => {\n this.openSessions[sessionId].responseTimer &&\n clearTimeout(this.openSessions[sessionId].responseTimer);\n this.openSessions[sessionId].callback = resolve;\n this.openSessions[sessionId].request = request;\n\n this.openSessions[sessionId].responseTimer = setTimeout(\n () => this.processAfter(request, text_timeout, true, resolve),\n 200,\n );\n });\n }\n if (this.lang === 'en') {\n return getResponse('I did not understand the question!', null);\n }\n if (this.lang === 'ru') {\n return getResponse('Я не поняла ваш вопрос!', null);\n }\n return getResponse('Ich habe Deine Frage nicht verstanden!', null);\n }\n this.adapter.log.warn(`Unexpected ALEXA Request: ${JSON.stringify(request)}`);\n if (this.lang === 'en') {\n return getResponse('Please repeat your question!', null);\n }\n if (this.lang === 'ru') {\n return getResponse('Пожалуйста, повторите вопрос!', null);\n }\n return getResponse('Bitte wiederhole die Frage!', null);\n }\n if (request.request.type === 'SessionEndedRequest') {\n this.adapter.log.debug(`SessionEndedRequest: ${request.request.reason}`);\n this.deleteSession(sessionId);\n // Should not be called\n return { error: 'Unexpected Session Ended' };\n }\n\n this.adapter.log.debug(`Unknown Request type: ${JSON.stringify(request)}`);\n\n return { error: 'Unknown Request type' };\n }\n}\n"]}