iobroker.iot 4.0.3 → 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 (251) hide show
  1. package/README.md +5 -517
  2. package/admin/assets/index-6Itc0U48.js +681 -0
  3. package/admin/index_m.html +1 -1
  4. package/admin/rules/assets/{hostInit-hos3Txsy.js → hostInit-Dxp6BaAc.js} +2 -2
  5. package/admin/rules/assets/index-208Qrr3S.js +1152 -0
  6. package/admin/rules/assets/{index-CbxmbJvB.js → index-Bvn52imU.js} +1 -1
  7. package/admin/rules/assets/preload-helper-BDBacUwf.js +1 -0
  8. package/admin/rules/assets/{virtualExposes-BNZJTatg.js → virtualExposes-O8-92o9I.js} +1 -1
  9. package/admin/rules/customRuleBlocks.js +2 -2
  10. package/admin/rules/i18n/de.json +8 -8
  11. package/admin/rules/i18n/es.json +8 -8
  12. package/admin/rules/i18n/fr.json +8 -8
  13. package/admin/rules/i18n/it.json +8 -8
  14. package/admin/rules/i18n/nl.json +8 -8
  15. package/admin/rules/i18n/pl.json +8 -8
  16. package/admin/rules/i18n/pt.json +8 -8
  17. package/admin/rules/i18n/ru.json +8 -8
  18. package/admin/rules/i18n/uk.json +8 -8
  19. package/admin/rules/i18n/zh-cn.json +8 -8
  20. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/AlexaResponse.js +6 -0
  21. package/build/lib/AlexaSmartHomeV3/Alexa/AlexaResponse.js.map +1 -0
  22. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/Base.js +2 -7
  23. package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/Base.js.map +1 -0
  24. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/BrightnessController.js +6 -5
  25. package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/BrightnessController.js.map +1 -0
  26. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/ColorController.js +3 -2
  27. package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/ColorController.js.map +1 -0
  28. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/ColorTemperatureController.js +4 -3
  29. package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/ColorTemperatureController.js.map +1 -0
  30. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/ContactSensor.js +3 -2
  31. package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/ContactSensor.js.map +1 -0
  32. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/LockController.js +3 -2
  33. package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/LockController.js.map +1 -0
  34. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/ModeController.js +4 -3
  35. package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/ModeController.js.map +1 -0
  36. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/MotionSensor.js +3 -2
  37. package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/MotionSensor.js.map +1 -0
  38. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/PercentageController.js +3 -2
  39. package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/PercentageController.js.map +1 -0
  40. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/PowerController.js +6 -5
  41. package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/PowerController.js.map +1 -0
  42. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/Speaker.js +5 -4
  43. package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/Speaker.js.map +1 -0
  44. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/TemperatureSensor.js +3 -2
  45. package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/TemperatureSensor.js.map +1 -0
  46. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/ThermostatController.js +5 -4
  47. package/build/lib/AlexaSmartHomeV3/Alexa/Capabilities/ThermostatController.js.map +1 -0
  48. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/ModeValues/Open.js +1 -1
  49. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/ModeValues/Open.js.map +1 -1
  50. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/Base.js +20 -18
  51. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/Base.js.map +1 -0
  52. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/Color.js +2 -7
  53. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/Color.js.map +1 -0
  54. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/DetectionState.js +9 -0
  55. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/DetectionState.js.map +1 -0
  56. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/LockState.js +20 -0
  57. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/LockState.js.map +1 -0
  58. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/Mode.js +17 -3
  59. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/Mode.js.map +1 -0
  60. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/PowerState.js +6 -0
  61. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/PowerState.js.map +1 -0
  62. package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/ThermostatMode.js +3 -3
  63. package/build/lib/AlexaSmartHomeV3/Alexa/Properties/ThermostatMode.js.map +1 -0
  64. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/AdjustableControl.js +0 -3
  65. package/build/lib/AlexaSmartHomeV3/Controls/AdjustableControl.js.map +1 -0
  66. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/AdjustablePercentageControl.js +5 -7
  67. package/build/lib/AlexaSmartHomeV3/Controls/AdjustablePercentageControl.js.map +1 -0
  68. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/AirCondition.js +65 -71
  69. package/build/lib/AlexaSmartHomeV3/Controls/AirCondition.js.map +1 -0
  70. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/ContactSensor.js +5 -1
  71. package/build/lib/AlexaSmartHomeV3/Controls/ContactSensor.js.map +1 -0
  72. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Control.js +13 -29
  73. package/build/lib/AlexaSmartHomeV3/Controls/Control.js.map +1 -0
  74. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Ct.js +66 -73
  75. package/build/lib/AlexaSmartHomeV3/Controls/Ct.js.map +1 -0
  76. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Dimmer.js +32 -39
  77. package/build/lib/AlexaSmartHomeV3/Controls/Dimmer.js.map +1 -0
  78. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Gate.js +5 -7
  79. package/build/lib/AlexaSmartHomeV3/Controls/Gate.js.map +1 -0
  80. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Hue.js +91 -89
  81. package/build/lib/AlexaSmartHomeV3/Controls/Hue.js.map +1 -0
  82. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Light.js +10 -14
  83. package/build/lib/AlexaSmartHomeV3/Controls/Light.js.map +1 -0
  84. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Lock.js +6 -8
  85. package/build/lib/AlexaSmartHomeV3/Controls/Lock.js.map +1 -0
  86. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Motion.js +5 -1
  87. package/build/lib/AlexaSmartHomeV3/Controls/Motion.js.map +1 -0
  88. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/ReadOnlyDetector.js +0 -10
  89. package/build/lib/AlexaSmartHomeV3/Controls/ReadOnlyDetector.js.map +1 -0
  90. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Socket.js +5 -7
  91. package/build/lib/AlexaSmartHomeV3/Controls/Socket.js.map +1 -0
  92. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Temperature.js +5 -7
  93. package/build/lib/AlexaSmartHomeV3/Controls/Temperature.js.map +1 -0
  94. package/build/lib/AlexaSmartHomeV3/Controls/Thermostat.js +82 -0
  95. package/build/lib/AlexaSmartHomeV3/Controls/Thermostat.js.map +1 -0
  96. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/VacuumCleaner.js +5 -7
  97. package/build/lib/AlexaSmartHomeV3/Controls/VacuumCleaner.js.map +1 -0
  98. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Volume.js +29 -36
  99. package/build/lib/AlexaSmartHomeV3/Controls/Volume.js.map +1 -0
  100. package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/index.js +6 -6
  101. package/build/lib/AlexaSmartHomeV3/Controls/index.js.map +1 -0
  102. package/{build-backend → build}/lib/AlexaSmartHomeV3/DeviceManager.js +16 -10
  103. package/build/lib/AlexaSmartHomeV3/DeviceManager.js.map +1 -0
  104. package/{build-backend → build}/lib/AlexaSmartHomeV3/Helpers/AdapterProvider.js +4 -1
  105. package/build/lib/AlexaSmartHomeV3/Helpers/AdapterProvider.js.map +1 -0
  106. package/{build-backend → build}/lib/AlexaSmartHomeV3/Helpers/FileHelper.js +1 -3
  107. package/build/lib/AlexaSmartHomeV3/Helpers/FileHelper.js.map +1 -0
  108. package/{build-backend → build}/lib/AlexaSmartHomeV3/Helpers/RateLimiter.js +23 -16
  109. package/build/lib/AlexaSmartHomeV3/Helpers/RateLimiter.js.map +1 -0
  110. package/{build-backend → build}/lib/AlexaSmartHomeV3/Helpers/Utils.js +0 -1
  111. package/build/lib/AlexaSmartHomeV3/Helpers/Utils.js.map +1 -0
  112. package/{build-backend → build}/lib/alexaSmartHomeV3.js +3 -3
  113. package/build/lib/alexaSmartHomeV3.js.map +1 -0
  114. package/{build-backend → build}/main.js +29 -9
  115. package/build/main.js.map +1 -0
  116. package/io-package.json +30 -29
  117. package/package.json +13 -13
  118. package/admin/assets/index-BjEWVyqN.js +0 -681
  119. package/admin/rules/assets/index-_Y2FN5EZ.js +0 -1152
  120. package/admin/rules/assets/preload-helper-Dp1pzeXC.js +0 -1
  121. package/build-backend/lib/AlexaSmartHomeV3/Alexa/AlexaResponse.js.map +0 -1
  122. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/Base.js.map +0 -1
  123. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/BrightnessController.js.map +0 -1
  124. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ColorController.js.map +0 -1
  125. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ColorTemperatureController.js.map +0 -1
  126. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ContactSensor.js.map +0 -1
  127. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/LockController.js.map +0 -1
  128. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ModeController.js.map +0 -1
  129. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/MotionSensor.js.map +0 -1
  130. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/PercentageController.js.map +0 -1
  131. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/PowerController.js.map +0 -1
  132. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/Speaker.js.map +0 -1
  133. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/TemperatureSensor.js.map +0 -1
  134. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Capabilities/ThermostatController.js.map +0 -1
  135. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Base.js.map +0 -1
  136. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Color.js.map +0 -1
  137. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/DetectionState.js.map +0 -1
  138. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/LockState.js.map +0 -1
  139. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/Mode.js.map +0 -1
  140. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/PowerState.js.map +0 -1
  141. package/build-backend/lib/AlexaSmartHomeV3/Alexa/Properties/ThermostatMode.js.map +0 -1
  142. package/build-backend/lib/AlexaSmartHomeV3/Controls/AdjustableControl.js.map +0 -1
  143. package/build-backend/lib/AlexaSmartHomeV3/Controls/AdjustablePercentageControl.js.map +0 -1
  144. package/build-backend/lib/AlexaSmartHomeV3/Controls/AirCondition.js.map +0 -1
  145. package/build-backend/lib/AlexaSmartHomeV3/Controls/ContactSensor.js.map +0 -1
  146. package/build-backend/lib/AlexaSmartHomeV3/Controls/Control.js.map +0 -1
  147. package/build-backend/lib/AlexaSmartHomeV3/Controls/Ct.js.map +0 -1
  148. package/build-backend/lib/AlexaSmartHomeV3/Controls/Dimmer.js.map +0 -1
  149. package/build-backend/lib/AlexaSmartHomeV3/Controls/Gate.js.map +0 -1
  150. package/build-backend/lib/AlexaSmartHomeV3/Controls/Hue.js.map +0 -1
  151. package/build-backend/lib/AlexaSmartHomeV3/Controls/Light.js.map +0 -1
  152. package/build-backend/lib/AlexaSmartHomeV3/Controls/Lock.js.map +0 -1
  153. package/build-backend/lib/AlexaSmartHomeV3/Controls/Motion.js.map +0 -1
  154. package/build-backend/lib/AlexaSmartHomeV3/Controls/ReadOnlyDetector.js.map +0 -1
  155. package/build-backend/lib/AlexaSmartHomeV3/Controls/Socket.js.map +0 -1
  156. package/build-backend/lib/AlexaSmartHomeV3/Controls/Temperature.js.map +0 -1
  157. package/build-backend/lib/AlexaSmartHomeV3/Controls/Thermostat.js +0 -85
  158. package/build-backend/lib/AlexaSmartHomeV3/Controls/Thermostat.js.map +0 -1
  159. package/build-backend/lib/AlexaSmartHomeV3/Controls/VacuumCleaner.js.map +0 -1
  160. package/build-backend/lib/AlexaSmartHomeV3/Controls/Volume.js.map +0 -1
  161. package/build-backend/lib/AlexaSmartHomeV3/Controls/index.js.map +0 -1
  162. package/build-backend/lib/AlexaSmartHomeV3/DeviceManager.js.map +0 -1
  163. package/build-backend/lib/AlexaSmartHomeV3/Helpers/AdapterProvider.js.map +0 -1
  164. package/build-backend/lib/AlexaSmartHomeV3/Helpers/FileHelper.js.map +0 -1
  165. package/build-backend/lib/AlexaSmartHomeV3/Helpers/RateLimiter.js.map +0 -1
  166. package/build-backend/lib/AlexaSmartHomeV3/Helpers/Utils.js.map +0 -1
  167. package/build-backend/lib/alexaSmartHomeV3.js.map +0 -1
  168. package/build-backend/main.js.map +0 -1
  169. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/index.js +0 -0
  170. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Capabilities/index.js.map +0 -0
  171. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Directives/Base.js +0 -0
  172. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Directives/Base.js.map +0 -0
  173. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Directives/ChangeReport.js +0 -0
  174. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Directives/ChangeReport.js.map +0 -0
  175. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Directives/Discovery.js +0 -0
  176. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Directives/Discovery.js.map +0 -0
  177. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Directives/ReportState.js +0 -0
  178. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Directives/ReportState.js.map +0 -0
  179. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Directives/index.js +0 -0
  180. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Directives/index.js.map +0 -0
  181. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/ModeValues/Base.js +0 -0
  182. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/ModeValues/Base.js.map +0 -0
  183. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/ModeValues/Closed.js +0 -0
  184. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/ModeValues/Closed.js.map +0 -0
  185. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/ModeValues/index.js +0 -0
  186. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/ModeValues/index.js.map +0 -0
  187. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/AdjustableProperty.js +0 -0
  188. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/AdjustableProperty.js.map +0 -0
  189. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/Brightness.js +0 -0
  190. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/Brightness.js.map +0 -0
  191. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/ColorTemperatureInKelvin.js +0 -0
  192. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/ColorTemperatureInKelvin.js.map +0 -0
  193. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/Muted.js +0 -0
  194. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/Muted.js.map +0 -0
  195. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/Percentage.js +0 -0
  196. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/Percentage.js.map +0 -0
  197. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/TargetSetpoint.js +0 -0
  198. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/TargetSetpoint.js.map +0 -0
  199. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/Temperature.js +0 -0
  200. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/Temperature.js.map +0 -0
  201. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/Volume.js +0 -0
  202. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/Volume.js.map +0 -0
  203. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/index.js +0 -0
  204. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Alexa/Properties/index.js.map +0 -0
  205. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Blind.js +0 -0
  206. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Blind.js.map +0 -0
  207. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Door.js +0 -0
  208. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Door.js.map +0 -0
  209. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Slider.js +0 -0
  210. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Slider.js.map +0 -0
  211. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/VolumeGroup.js +0 -0
  212. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/VolumeGroup.js.map +0 -0
  213. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Window.js +0 -0
  214. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Controls/Window.js.map +0 -0
  215. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Device.js +0 -0
  216. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Device.js.map +0 -0
  217. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Exceptions/AlexaV3Exception.js +0 -0
  218. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Exceptions/AlexaV3Exception.js.map +0 -0
  219. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Exceptions/HourlyDeviceRateLimitExceeded.js +0 -0
  220. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Exceptions/HourlyDeviceRateLimitExceeded.js.map +0 -0
  221. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Exceptions/OverallDailyRateLimitExceeded.js +0 -0
  222. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Exceptions/OverallDailyRateLimitExceeded.js.map +0 -0
  223. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Helpers/IotProxy.js +0 -0
  224. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Helpers/IotProxy.js.map +0 -0
  225. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Helpers/Logger.js +0 -0
  226. /package/{build-backend → build}/lib/AlexaSmartHomeV3/Helpers/Logger.js.map +0 -0
  227. /package/{build-backend → build}/lib/Utils.js +0 -0
  228. /package/{build-backend → build}/lib/Utils.js.map +0 -0
  229. /package/{build-backend → build}/lib/adminCommonSocket.js +0 -0
  230. /package/{build-backend → build}/lib/adminCommonSocket.js.map +0 -0
  231. /package/{build-backend → build}/lib/alexaCustom.js +0 -0
  232. /package/{build-backend → build}/lib/alexaCustom.js.map +0 -0
  233. /package/{build-backend → build}/lib/alexaSmartHomeV2.js +0 -0
  234. /package/{build-backend → build}/lib/alisa.js +0 -0
  235. /package/{build-backend → build}/lib/devices.js +0 -0
  236. /package/{build-backend → build}/lib/devices.js.map +0 -0
  237. /package/{build-backend → build}/lib/functions.js +0 -0
  238. /package/{build-backend → build}/lib/functions.js.map +0 -0
  239. /package/{build-backend → build}/lib/googleHome.js +0 -0
  240. /package/{build-backend → build}/lib/notifications.js +0 -0
  241. /package/{build-backend → build}/lib/notifications.js.map +0 -0
  242. /package/{build-backend → build}/lib/remote.js +0 -0
  243. /package/{build-backend → build}/lib/remote.js.map +0 -0
  244. /package/{build-backend → build}/lib/rooms.js +0 -0
  245. /package/{build-backend → build}/lib/rooms.js.map +0 -0
  246. /package/{build-backend → build}/lib/texts.js +0 -0
  247. /package/{build-backend → build}/lib/texts.js.map +0 -0
  248. /package/{build-backend → build}/lib/translate.js +0 -0
  249. /package/{build-backend → build}/lib/translate.js.map +0 -0
  250. /package/{build-backend → build}/lib/visuApp.js +0 -0
  251. /package/{build-backend → build}/lib/visuApp.js.map +0 -0
@@ -737,12 +737,13 @@ class IotAdapter extends adapter_core_1.Adapter {
737
737
  if (request instanceof Buffer) {
738
738
  request = request.toString();
739
739
  }
740
- this.log.debug(`Data: ${JSON.stringify(request)}`);
741
740
  if (!request || !type) {
741
+ this.log.debug(`Invalid request: ${JSON.stringify(request)}`);
742
742
  return { error: 'invalid request' };
743
743
  }
744
744
  if (type.startsWith('remote')) {
745
745
  const start = Date.now();
746
+ this.log.debug(`Remote request: ${JSON.stringify(request)}`);
746
747
  if (this.remote) {
747
748
  return this.remote
748
749
  .process(request, type)
@@ -760,6 +761,7 @@ class IotAdapter extends adapter_core_1.Adapter {
760
761
  this.log.error(`Received command, but remote already closed.`);
761
762
  }
762
763
  else if (type.startsWith('nightscout')) {
764
+ this.log.debug(`Nightscout request: ${JSON.stringify(request)}`);
763
765
  if (this.config.nightscout) {
764
766
  const state = await this.getForeignStateAsync(`system.adapter.nightscout.${this.config.nightscout}.alive`);
765
767
  if (state?.val) {
@@ -779,7 +781,14 @@ class IotAdapter extends adapter_core_1.Adapter {
779
781
  return { error: 'Cannot parse request' };
780
782
  }
781
783
  }
782
- this.log.debug(`${Date.now()} ALEXA: ${JSON.stringify(request)}`);
784
+ const printRequest = JSON.parse(JSON.stringify(request));
785
+ if (printRequest.directive?.header?.correlationToken) {
786
+ printRequest.directive.header.correlationToken = '***';
787
+ }
788
+ if (printRequest.directive?.endpoint?.scope?.token) {
789
+ printRequest.directive.endpoint.scope.token = '***';
790
+ }
791
+ this.log.debug(`${Date.now()} ALEXA: ${JSON.stringify(printRequest)}`);
783
792
  if (request?.directive) {
784
793
  if (this.alexaSH3) {
785
794
  try {
@@ -829,6 +838,7 @@ class IotAdapter extends adapter_core_1.Adapter {
829
838
  this.log.error(`Cannot parse request: ${request}`);
830
839
  return { error: 'Cannot parse request' };
831
840
  }
841
+ this.log.debug(`IFTTT request: ${JSON.stringify(request)}`);
832
842
  await this.processIfttt(request);
833
843
  return NONE;
834
844
  }
@@ -842,6 +852,7 @@ class IotAdapter extends adapter_core_1.Adapter {
842
852
  return { error: 'Cannot parse request' };
843
853
  }
844
854
  }
855
+ this.log.debug(`[GHOME] request: ${JSON.stringify(request)}`);
845
856
  if (this.googleHome) {
846
857
  return this.googleHome.process(request, this.config.googleHome);
847
858
  }
@@ -857,6 +868,7 @@ class IotAdapter extends adapter_core_1.Adapter {
857
868
  return { error: 'Cannot parse request' };
858
869
  }
859
870
  }
871
+ this.log.debug(`[ALISA] request: ${JSON.stringify(request)}`);
860
872
  this.log.debug(`${Date.now()} ALISA: ${JSON.stringify(request)}`);
861
873
  if (this.yandexAlisa) {
862
874
  return this.yandexAlisa.process(request, this.config.yandexAlisa);
@@ -909,6 +921,7 @@ class IotAdapter extends adapter_core_1.Adapter {
909
921
  else {
910
922
  request = request.toString();
911
923
  }
924
+ this.log.debug(`Custom request: ${JSON.stringify(request)}`);
912
925
  if (SPECIAL_ADAPTERS.includes(_type)) {
913
926
  try {
914
927
  await this.setStateAsync(`services.${_type}`, request, true);
@@ -1082,7 +1095,14 @@ class IotAdapter extends adapter_core_1.Adapter {
1082
1095
  }
1083
1096
  }
1084
1097
  else {
1085
- this.log.debug(`[REMOTE] Send response to 'response/${clientId}/${type}: ${JSON.stringify(response)}`);
1098
+ const printResponse = JSON.parse(JSON.stringify(response));
1099
+ if (printResponse?.event?.header?.correlationToken) {
1100
+ printResponse.event.header.correlationToken = '***';
1101
+ }
1102
+ if (printResponse?.event?.endpoint?.scope?.token) {
1103
+ printResponse.event.endpoint.scope.token = '***';
1104
+ }
1105
+ this.log.debug(`[REMOTE] Response to 'response/${clientId}/${type}: ${JSON.stringify(printResponse)}`);
1086
1106
  const msg = JSON.stringify(response);
1087
1107
  if (msg && msg.length > MAX_IOT_MESSAGE_LENGTH) {
1088
1108
  const packed = (0, node_zlib_1.deflateSync)(msg).toString('base64');
@@ -1241,10 +1261,6 @@ class IotAdapter extends adapter_core_1.Adapter {
1241
1261
  }
1242
1262
  this.log.debug(`Following strings will be replaced in names: ${text.join(', ')}`);
1243
1263
  }
1244
- if (this.config.amazonAlexa) {
1245
- this.alexaSH2 = new alexaSmartHomeV2_1.default(this);
1246
- this.alexaCustom = new alexaCustom_1.default(this);
1247
- }
1248
1264
  if (this.config.yandexAlisa) {
1249
1265
  this.yandexAlisa = new alisa_1.default(this);
1250
1266
  }
@@ -1292,11 +1308,11 @@ class IotAdapter extends adapter_core_1.Adapter {
1292
1308
  if (this.lang !== 'en' && this.lang !== 'de' && this.lang !== 'ru') {
1293
1309
  this.lang = 'en';
1294
1310
  }
1295
- if (this.alexaSH2) {
1311
+ if (this.config.amazonAlexa) {
1312
+ this.alexaSH2 = new alexaSmartHomeV2_1.default(this);
1296
1313
  this.alexaSH2.setLanguage(this.lang, this.translate);
1297
1314
  this.alexaSH2.updateDevices();
1298
1315
  }
1299
- this.alexaCustom?.setLanguage(this.lang);
1300
1316
  this.remote?.setLanguage(this.lang);
1301
1317
  // check password
1302
1318
  if (this.config.pass.length < 8 ||
@@ -1336,6 +1352,10 @@ class IotAdapter extends adapter_core_1.Adapter {
1336
1352
  this.alexaSH3.setLanguage(this.lang);
1337
1353
  await this.alexaSH3.updateDevices();
1338
1354
  }
1355
+ if (this.config.amazonAlexa || this.config.amazonAlexaV3) {
1356
+ this.alexaCustom = new alexaCustom_1.default(this);
1357
+ this.alexaCustom.setLanguage(this.lang);
1358
+ }
1339
1359
  if (this.config.googleHome) {
1340
1360
  this.googleHome = new googleHome_1.default(this, this.urlKey);
1341
1361
  } // no else
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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","sourcesContent":["import { device as DeviceModule } from 'aws-iot-device-sdk';\nimport { Adapter, type AdapterOptions } from '@iobroker/adapter-core'; // Get common adapter utils\nimport { readFileSync } from 'node:fs';\nimport axios from 'axios';\nimport { deflateSync } from 'node:zlib';\n\n// @ts-expect-error no types\nimport AlexaSH2 from './lib/alexaSmartHomeV2';\nimport AlexaSH3 from './lib/alexaSmartHomeV3';\nimport AlexaCustom, { type AlexaCustomResponse } from './lib/alexaCustom';\n// @ts-expect-error no types\nimport GoogleHome from './lib/googleHome';\n// @ts-expect-error no types\nimport YandexAlisa from './lib/alisa';\nimport Remote, { type SOCKET_MESSAGE, type SOCKET_TRUNK } from './lib/remote';\nimport { handleGeofenceData, handleDevicesData, handleSendToAdapter, handleGetInstances } from './lib/visuApp';\nimport { buildMessageFromNotification } from './lib/notifications';\nimport type { IotAdapterConfig } from './lib/types';\n\nconst NONE = '___none___';\nconst MAX_IOT_MESSAGE_LENGTH = 127 * 1024;\nconst SPECIAL_ADAPTERS = ['netatmo'];\nconst ALLOWED_SERVICES = SPECIAL_ADAPTERS.concat(['text2command']);\n\nexport class IotAdapter extends Adapter {\n declare public config: IotAdapterConfig;\n private recalcTimeout: NodeJS.Timeout | null = null;\n private lang: ioBroker.Languages = 'de';\n private translate = false;\n private alexaSH2: AlexaSH2 | null = null;\n private alexaSH3: AlexaSH3 | null = null;\n private googleHome: GoogleHome | null = null;\n private alexaCustom: AlexaCustom | null = null;\n private yandexAlisa: YandexAlisa | null = null;\n private remote: Remote | null = null;\n private device: DeviceModule | null = null;\n private urlKey: { key: string } | null = null;\n\n private connectedOwn = false;\n private secret: string = '';\n private connectStarted = 0;\n\n public constructor(options: Partial<AdapterOptions> = {}) {\n super({\n ...options,\n name: 'iot',\n objectChange: (id, obj) => {\n if (id === 'system.config' && obj && !this.translate) {\n const systemObj = obj as ioBroker.SystemConfigObject;\n this.lang = systemObj.common.language;\n\n if (this.lang !== 'en' && this.lang !== 'de' && this.lang !== 'ru') {\n this.lang = 'en';\n }\n\n this.alexaSH2?.setLanguage(this.lang);\n this.alexaSH3?.setLanguage(this.lang);\n this.yandexAlisa?.setLanguage(this.lang);\n this.alexaCustom?.setLanguage(this.lang);\n this.googleHome?.setLanguage(this.lang);\n this.remote?.setLanguage(this.lang);\n }\n // if it is an instance\n if (id.startsWith('system.adapter.')) {\n // try to find it in special adapters\n const adpr = SPECIAL_ADAPTERS.find(a => id.startsWith(`system.adapter.${a}.`));\n // if found and it is really instance\n if (adpr && id.match(/\\.\\d+$/)) {\n // update state\n setTimeout(async () => await this.createStateForAdapter(adpr), 1000);\n }\n\n return;\n }\n void this.alexaSH3?.handleObjectChange(id, obj);\n\n if (id) {\n this.remote?.updateObject(id, obj);\n }\n },\n stateChange: async (id, state) => {\n if (id === `${this.namespace}.app.message` && state && !state.ack) {\n try {\n await this.sendMessageToApp(state.val as string);\n } catch (e) {\n this.log.error(`Cannot send message to app: ${e}`);\n }\n }\n\n if (state) {\n if (this.config.googleHome) {\n void this.googleHome?.updateState(id, state);\n }\n if (this.config.amazonAlexa) {\n void this.alexaSH3?.handleStateUpdate(id, state);\n }\n\n if (this.config.yandexAlisa) {\n void this.yandexAlisa?.updateState?.(id, state);\n }\n }\n\n if (id) {\n this.remote?.updateState(id, state);\n }\n\n if (id === `${this.namespace}.smart.lastResponse` && state && !state.ack) {\n this.alexaCustom?.setResponse(state.val as string);\n }\n },\n unload: async callback => {\n try {\n if (this.device) {\n this.device.end();\n this.device = null;\n }\n if (this.remote) {\n this.remote.destroy();\n this.remote = null;\n }\n\n if (this.alexaSH3) {\n await this.alexaSH3.destroy();\n }\n } catch {\n // ignore\n }\n callback();\n },\n message: async obj => {\n if (obj) {\n switch (obj.command) {\n case 'update':\n if (this.recalcTimeout) {\n clearTimeout(this.recalcTimeout);\n }\n\n this.recalcTimeout = setTimeout(async () => {\n this.recalcTimeout = null;\n this.alexaSH2?.updateDevices(\n obj.message,\n async (analyseAddedId: any): Promise<void> => {\n await this.setStateAsync('smart.updatesResult', analyseAddedId || '', true);\n this.log.debug('Devices updated!');\n await this.setStateAsync('smart.updates', true, true);\n },\n );\n\n // this.alexaSH3 && this.alexaSH3.updateDevices(obj.message, async analyseAddedId => {\n // await this.setStateAsync('smart.updatesResult', analyseAddedId || '', true);\n // await this.setStateAsync('smart.updates3', true, true);\n // });\n if (this.alexaSH3) {\n await this.alexaSH3.updateDevices();\n await this.setStateAsync('smart.updates3', true, true);\n }\n\n this.googleHome?.updateDevices(async (analyseAddedId: any): Promise<void> => {\n await this.setStateAsync('smart.updatesResult', analyseAddedId || '', true);\n this.log.debug('GH Devices updated!');\n await this.setStateAsync('smart.updatesGH', true, true);\n });\n }, 1000);\n break;\n\n case 'browse':\n if (obj.callback) {\n this.log.info('Request devices');\n if (this.alexaSH2) {\n this.alexaSH2.updateDevices(() => {\n this.sendTo(obj.from, obj.command, this.alexaSH2!.getDevices(), obj.callback);\n void this.setState('smart.updates', false, true);\n });\n } else {\n this.sendTo(obj.from, obj.command, { error: 'not activated' }, obj.callback);\n }\n }\n break;\n\n case 'browse3':\n if (obj.callback) {\n this.log.info('Request V3 devices');\n if (this.alexaSH3) {\n const devices = await this.alexaSH3.getDevices();\n this.sendTo(obj.from, obj.command, devices, obj.callback);\n await this.setStateAsync('smart.updates3', false, true);\n } else {\n this.sendTo(obj.from, obj.command, { error: 'not activated' }, obj.callback);\n }\n }\n break;\n\n case 'browseGH':\n if (obj.callback) {\n this.log.info('Request google home devices');\n if (this.googleHome) {\n this.googleHome.updateDevices(() => {\n this.sendTo(obj.from, obj.command, this.googleHome!.getDevices(), obj.callback);\n void this.setStateAsync('smart.updatesGH', false, true);\n });\n } else {\n this.sendTo(obj.from, obj.command, { error: 'not activated' }, obj.callback);\n }\n }\n break;\n\n case 'browseAlisa':\n if (obj.callback) {\n this.log.info('Request Yandex Alice devices');\n if (this.yandexAlisa) {\n this.yandexAlisa.updateDevices(() => {\n this.sendTo(\n obj.from,\n obj.command,\n this.yandexAlisa!.getDevices(),\n obj.callback,\n );\n void this.setStateAsync('smart.updatesYA', false, true);\n });\n } else {\n this.sendTo(obj.from, obj.command, { error: 'not activated' }, obj.callback);\n }\n }\n break;\n\n case 'alexaCustomKnownDevices':\n // Admin UI can request the known/discoveredAlexa devices used via Custom skill\n // Allow setting the rooms of the devices and store in adapter config\n // Restart adapter after change - or we also add a set message to the config\n if (obj.callback) {\n this.log.info('Request Alexa Custom known devices');\n if (this.alexaCustom) {\n const devices = this.alexaCustom.getKnownDevices();\n this.sendTo(obj.from, obj.command, devices, obj.callback);\n } else {\n this.sendTo(obj.from, obj.command, { error: 'not activated' }, obj.callback);\n }\n }\n break;\n\n case 'alexaCustomKnownUsers':\n // Admin UI can request the known/discoveredAlexa users used via Custom skill\n // Allow setting the names of the users and store in adapter config\n // Restart adapter after change - or we also add a set message to the config\n if (obj.callback) {\n this.log.info('Request Alexa Custom known users');\n if (this.alexaCustom) {\n const users = this.alexaCustom.getKnownUsers();\n this.sendTo(obj.from, obj.command, users, obj.callback);\n } else {\n this.sendTo(obj.from, obj.command, { error: 'not activated' }, obj.callback);\n }\n }\n break;\n\n case 'private': {\n if (typeof obj.message !== 'object') {\n try {\n obj.message = JSON.parse(obj.message);\n } catch (e) {\n this.log.error(`Cannot parse object: ${e}`);\n obj.callback &&\n this.sendTo(\n obj.from,\n obj.command,\n { error: 'Invalid message format: cannot parse object' },\n obj.callback,\n );\n return;\n }\n }\n const response = await this.processMessage(obj.message.type, obj.message.request);\n if (obj.callback) {\n this.sendTo(obj.from, obj.command, response, obj.callback);\n }\n\n break;\n }\n case 'ifttt':\n this.sendDataToIFTTT(obj.message);\n break;\n\n case 'alexaCustomResponse':\n this.alexaCustom?.setResponse(obj.message);\n break;\n\n case 'debug':\n this.alexaSH2?.getDebug((data: any): void =>\n this.sendTo(obj.from, obj.command, data, obj.callback),\n );\n break;\n\n case 'getServiceEndpoint':\n if (obj.callback) {\n if (!this.urlKey) {\n try {\n this.urlKey = await this.readUrlKey();\n } catch {\n try {\n this.urlKey = await this.createUrlKey(this.config.login, this.config.pass);\n } catch (err) {\n return (\n obj.callback &&\n this.sendTo(\n obj.from,\n obj.command,\n { error: `Cannot get urlKey: ${err.toString()}` },\n obj.callback,\n )\n );\n }\n }\n }\n\n const result: {\n url: string;\n stateID?: string;\n data?: string;\n warning?: string;\n } = {\n url: `https://service.iobroker.in/v1/iotService?key=${this.urlKey.key}&user=${encodeURIComponent(this.config.login)}`,\n };\n const serviceName =\n typeof obj.message === 'string' ? obj.message : obj.message?.serviceName;\n if (serviceName) {\n result.url += `&service=${encodeURIComponent(serviceName)}`;\n result.stateID = `${this.namespace}.services.${serviceName}`;\n }\n if (obj.message?.data) {\n result.data += `&data=${typeof obj.message.data === 'object' ? JSON.stringify(obj.message.data) : obj.message.data}`;\n }\n // check if the service name is in the white list\n if (\n serviceName &&\n this.config.allowedServices[0] !== '*' &&\n !this.config.allowedServices.includes(serviceName.replace(/^custom_/, '')) &&\n !ALLOWED_SERVICES.includes(serviceName)\n ) {\n result.warning = 'Service name is not in white list';\n this.log.warn(`Service \"${serviceName}\" is not in allowed services list`);\n }\n\n if (obj.callback) {\n this.sendTo(obj.from, obj.command, result, obj.callback);\n }\n }\n break;\n case 'sendNotification':\n try {\n const { message, title } = buildMessageFromNotification(obj.message);\n await this.sendMessageToApp(JSON.stringify({ message, title }));\n if (obj.callback) {\n this.sendTo(obj.from, 'sendNotification', { sent: true }, obj.callback);\n }\n } catch {\n if (obj.callback) {\n this.sendTo(obj.from, 'sendNotification', { sent: false }, obj.callback);\n }\n }\n break;\n default:\n this.log.warn(`Unknown command: ${obj.command}`);\n break;\n }\n }\n },\n ready: () =>\n this.main()\n .then(() => {})\n .catch(error => {\n this.log.error(`Error in main: ${error.toString()}`);\n }),\n });\n\n // warning: `this.log = obj => console.log(obj)` does not implemented. Only this.on('log', obj => console.log(obj))\n this.on('log', obj => this.remote?.onLog(obj));\n }\n\n sendDataToIFTTT(obj: {\n event?: string;\n key?: string;\n id?: string;\n val?: ioBroker.StateValue;\n ack?: boolean;\n }): void {\n if (!obj) {\n this.log.warn('No data to send to IFTTT');\n return;\n }\n if (!this.config.iftttKey && (typeof obj !== 'object' || !obj.key)) {\n this.log.warn('No IFTTT key is defined');\n return;\n }\n\n let url;\n let data;\n if (typeof obj !== 'object') {\n url = `https://maker.ifttt.com/trigger/state/with/key/${this.config.iftttKey}`;\n data = {\n value1: `${this.namespace}.services.ifttt`,\n value2: obj,\n };\n } else if (obj.event) {\n const event = obj.event;\n const key = obj.key;\n delete obj.event;\n delete obj.key;\n url = `https://maker.ifttt.com/trigger/${event}/with/key/${key || this.config.iftttKey}`;\n data = obj;\n } else if (obj.val === undefined) {\n return this.log.warn('No value is defined');\n } else {\n obj.id = obj.id || `${this.namespace}.services.ifttt`;\n url = `https://maker.ifttt.com/trigger/state/with/key/${this.config.iftttKey}`;\n data = {\n value1: obj.id,\n value2: obj.val,\n value3: obj.ack,\n };\n }\n\n if (url) {\n axios\n .post(url, data, {\n timeout: 15000,\n validateStatus: status => status < 400,\n })\n .then(response => this.log.debug(`Response from IFTTT: ${JSON.stringify(response.data)}`))\n .catch(error => {\n if (error.response) {\n this.log.warn(\n `Response from IFTTT: ${error.response.data ? JSON.stringify(error.response.data) : error.response.status}`,\n );\n } else {\n this.log.warn(`Response from IFTTT: ${error.code}`);\n }\n });\n } else {\n this.log.warn(`Invalid request to IFTTT: ${JSON.stringify(obj)}`);\n }\n }\n\n /**\n * Send a message to the ioBroker Visu App by using the app-message endpoint (which then forwards it to the app via FCM)\n *\n * @param message either a json string or the message itself, if the message itself the other props will be taken from the adapter states\n */\n async sendMessageToApp(message: string): Promise<void> {\n if (!message) {\n throw new Error('Empty message');\n }\n const trimmedMessage = message.toString().trim();\n let json: {\n message: string;\n title: string;\n priority?: 'high';\n ttlSeconds?: number;\n expire?: number;\n } | null;\n if (trimmedMessage.startsWith('{') && trimmedMessage.endsWith('}')) {\n try {\n json = JSON.parse(trimmedMessage);\n } catch {\n this.log.warn(`Cannot parse message: ${trimmedMessage}`);\n json = null;\n }\n } else {\n json = null;\n }\n\n if (!json) {\n // take expires\n const ttlSecondsState = await this.getStateAsync(`${this.namespace}.app.expire`);\n const priorityState = await this.getStateAsync(`${this.namespace}.app.priority`);\n const titleState = await this.getStateAsync(`${this.namespace}.app.title`);\n const priorityVal = priorityState?.val;\n json = {\n message: message.toString(),\n priority: priorityVal === '1' || priorityVal === 'high' || priorityVal === true ? 'high' : undefined,\n ttlSeconds: parseInt(ttlSecondsState?.val as string, 0) || undefined,\n title: ((titleState?.val as string) || 'ioBroker').toString(),\n };\n } else {\n if (json.expire) {\n json.ttlSeconds = json.expire;\n delete json.expire;\n }\n }\n\n json.ttlSeconds = parseInt(json.ttlSeconds as unknown as string, 0) || undefined;\n\n if (json.ttlSeconds && json.ttlSeconds > 3_600 * 48) {\n json.ttlSeconds = 3_600 * 48;\n }\n\n if (!json.message) {\n throw new Error('Empty message');\n }\n\n const response = await axios.post('https://app-message.iobroker.in/', json, {\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${Buffer.from(`${this.config.login}:${this.config.pass}`).toString('base64')}`,\n },\n timeout: 5_000,\n validateStatus: status => status < 400,\n });\n await this.setState('app.message', message, true);\n this.log.debug(`Message sent: ${JSON.stringify(response.data)}`);\n }\n\n async controlState(\n id: string | null,\n data: string | { id?: string; val?: ioBroker.StateValue; ack?: boolean },\n ): Promise<void> {\n id ||= 'services.ifttt';\n\n if (typeof data === 'object') {\n if (data.id) {\n if (data.id === `${this.namespace}.services.ifttt`) {\n data.ack = true;\n }\n if (data.val === undefined) {\n throw new Error('No value set');\n }\n const obj = await this.getForeignObjectAsync(data.id);\n if (!obj || !obj.common) {\n throw new Error(`Unknown ID: ${data.id}`);\n } else {\n if (typeof data.val === 'string') {\n data.val = data.val.replace(/^@ifttt\\s?/, '');\n }\n if (obj.common.type === 'boolean') {\n data.val =\n data.val === true ||\n data.val === 'true' ||\n data.val === 'on' ||\n data.val === 'ON' ||\n data.val === 1 ||\n data.val === '1';\n } else if (obj.common.type === 'number') {\n data.val = parseFloat(data.val as string);\n }\n\n await this.setForeignStateAsync(data.id, data.val, data.ack);\n }\n } else if (data.val !== undefined) {\n if (typeof data.val === 'string') {\n data.val = data.val.replace(/^@ifttt\\s?/, '');\n }\n await this.setStateAsync(id, data.val, data.ack !== undefined ? data.ack : true);\n } else {\n await this.setStateAsync(id, JSON.stringify(data), true);\n }\n } else {\n if (typeof data === 'string') {\n data = data.replace(/^@ifttt\\s?/, '');\n }\n await this.setStateAsync(id, data, true);\n }\n }\n\n async processIfttt(data: {\n id?: string;\n data?:\n | string\n | {\n id?: string;\n val?: ioBroker.StateValue;\n ack?: boolean;\n data?: { id?: string; val?: ioBroker.StateValue; ack?: boolean } | string;\n };\n }): Promise<void> {\n this.log.debug(`Received IFTTT object: ${JSON.stringify(data)}`);\n let id: string | undefined;\n let dataObj: { id?: string; val?: ioBroker.StateValue; ack?: boolean } | null = null;\n // >If data is object with id and data property\n if (typeof data === 'object' && data.id && data.data !== undefined) {\n id = data.id;\n if (typeof data.data === 'string' && data.data[0] === '{') {\n try {\n dataObj = JSON.parse(data.data);\n } catch {\n this.log.debug(`Cannot parse: ${data.data}`);\n dataObj = data;\n }\n } else {\n dataObj = data.data as { id?: string; val?: ioBroker.StateValue; ack?: boolean };\n }\n } else if (typeof data === 'string' && data[0] === '{') {\n // If data is string and starts with {\n try {\n dataObj = JSON.parse(data) as { id?: string; val?: ioBroker.StateValue; ack?: boolean };\n\n if (typeof dataObj.id === 'string') {\n id = dataObj.id;\n if ((dataObj as any).data) {\n dataObj = (dataObj as any).data as {\n id?: string;\n val?: ioBroker.StateValue;\n ack?: boolean;\n };\n }\n }\n } catch {\n this.log.debug(`Cannot parse: ${JSON.stringify(data)}`);\n }\n } else {\n dataObj = data as { id?: string; val?: ioBroker.StateValue; ack?: boolean };\n }\n\n if (id) {\n let obj = await this.getForeignObjectAsync(id);\n if (!obj) {\n const newId = `${this.namespace}.services.${id}`;\n obj = await this.getForeignObjectAsync(newId);\n if (!obj) {\n // create state\n await this.setObjectNotExistsAsync(`services.${id}`, {\n type: 'state',\n common: {\n name: 'IFTTT value',\n write: false,\n role: 'state',\n read: true,\n type: 'mixed',\n desc: 'Custom state',\n },\n native: {},\n });\n id = newId;\n }\n }\n }\n\n await this.controlState(\n id || null,\n (dataObj as { id?: string; val?: ioBroker.StateValue; ack?: boolean }) || data,\n );\n }\n\n onDisconnect(event?: string): void {\n const now = Date.now();\n if (now - this.connectStarted < 500) {\n this.log.warn(\n 'Looks like your connection certificates are invalid. Please renew them via configuration dialog.',\n );\n }\n\n if (typeof event === 'string') {\n if (event.toLowerCase().includes('duplicate')) {\n // disable adapter\n this.log.error(\n `Two devices are trying to connect with the same iot account. This is not allowed. Stopping`,\n );\n void this.getForeignObjectAsync(`system.adapter.${this.namespace}`).then(obj => {\n if (obj) {\n obj.common.enabled = false;\n return this.setForeignObjectAsync(obj._id, obj);\n }\n });\n }\n this.log.info(`Connection changed: ${event}`);\n } else {\n this.log.info('Connection changed: disconnect');\n }\n\n if (this.connectedOwn) {\n this.log.info('Connection lost');\n this.connectedOwn = false;\n void this.setState('info.connection', false, true);\n }\n\n this.remote?.onCloudDisconnect();\n }\n\n onConnect(clientId: string): void {\n if (!this.connectedOwn) {\n this.log.info(`Connection changed: connect \"${clientId}\"`);\n this.connectedOwn = true;\n void this.setState('info.connection', this.connectedOwn, true);\n // setTimeout(() => {\n // device.publish(`response/${clientId}/stateChange`, JSON.stringify({alive: true}), {qos: 0}, (error, result) => {\n // console.log(`Published alive: ${result}, ${error}`);\n // });\n // }, 2000);\n } else {\n this.log.info('Connection not changed: was connected');\n }\n }\n\n encryptOwn(secret: string, value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(secret[i % secret.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return `base64:${Buffer.from(result).toString('base64')}`;\n }\n\n decryptOwn(secret: string, value: string): string {\n if (value.startsWith('base64:')) {\n try {\n value = Buffer.from(value.substring(7), 'base64').toString('ascii');\n } catch (e) {\n this.log.error(`Cannot decrypt key: ${e}`);\n }\n }\n\n let result = '';\n for (let i = 0; i < value.length; i++) {\n result += String.fromCharCode(secret[i % secret.length].charCodeAt(0) ^ value.charCodeAt(i));\n }\n return result;\n }\n\n async readUrlKey(): Promise<{ key: string }> {\n const key = await this.getStateAsync('certs.urlKey');\n\n if (!key?.val) {\n throw new Error('Not exists');\n } else {\n return { key: key.val as string };\n }\n }\n\n async createUrlKey(login: string, pass: string): Promise<{ key: string }> {\n this.log.debug('Fetching URL key...');\n\n let response;\n try {\n response = await axios.get(\n `https://generate-key.iobroker.in/v1/generateUrlKey?user=${encodeURIComponent(login)}&pass=${encodeURIComponent(pass)}&version=${this.version}`,\n {\n timeout: 15000,\n validateStatus: status => status < 400,\n },\n );\n } catch (error) {\n if (error.response) {\n if (error.response.status === 401) {\n this.log.error(`Cannot create URL key because of invalid user or password`);\n }\n\n throw new Error(error.response.data);\n } else {\n throw error;\n }\n }\n\n if (response.data && response.data.error) {\n this.log.error(`Cannot fetch URL key: ${JSON.stringify(response.data.error)}`);\n throw new Error(response.data);\n } else if (response.data && response.data.key) {\n await this.setStateAsync('certs.urlKey', response.data.key, true);\n return { key: response.data.key };\n } else {\n this.log.error(`Cannot fetch URL key: ${JSON.stringify(response.data)}`);\n throw new Error(response.data);\n }\n }\n\n async readCertificates(): Promise<{\n private: string;\n certificate: string;\n }> {\n let privateKey: ioBroker.State | null | undefined;\n let certificate: ioBroker.State | null | undefined;\n\n try {\n privateKey = await this.getStateAsync('certs.private');\n certificate = await this.getStateAsync('certs.certificate');\n } catch {\n throw new Error('Not exists');\n }\n\n if (!certificate?.val || !privateKey?.val) {\n throw new Error('Not exists');\n } else {\n return {\n private: this.decryptOwn(this.secret, privateKey.val as string),\n certificate: this.decryptOwn(this.secret, certificate.val as string),\n };\n }\n }\n\n async writeKeys(data: {\n certificateId: string;\n certificatePem: string;\n keyPair: { PublicKey: string; PrivateKey: string };\n }): Promise<void> {\n await this.setStateAsync('certs.private', this.encryptOwn(this.secret, data.keyPair.PrivateKey), true);\n await this.setStateAsync('certs.public', this.encryptOwn(this.secret, data.keyPair.PublicKey), true);\n await this.setStateAsync('certs.certificate', this.encryptOwn(this.secret, data.certificatePem), true);\n await this.setStateAsync('certs.id', data.certificateId, true);\n }\n\n async fetchCertificates(\n login: string,\n pass: string,\n _forceUserCreation?: boolean,\n ): Promise<{\n private: string;\n certificate: string;\n }> {\n const state = await this.getStateAsync('certs.forceUserCreate');\n const forceUserCreation = state?.val;\n\n if (forceUserCreation) {\n await this.setStateAsync('certs.forceUserCreate', false, true);\n }\n\n this.log.debug('Fetching certificates...');\n let response;\n try {\n response = await axios.get(\n `https://create-user.iobroker.in/v1/createUser?user=${encodeURIComponent(login)}&pass=${encodeURIComponent(pass)}&forceRecreate=${forceUserCreation}&version=${this.version}`,\n {\n timeout: 15000,\n validateStatus: status => status < 400,\n },\n );\n } catch (error) {\n if (error.response) {\n if (error.response.status === 401) {\n this.log.error(`Cannot fetch connection certificates because of invalid user or password`);\n } else {\n this.log.error(`Cannot fetch connection certificates: ${JSON.stringify(error.response.data)}`);\n }\n throw new Error(error.response.data);\n } else {\n this.log.error(`Cannot fetch connection certificates: ${JSON.stringify(error.code)}`);\n throw error;\n }\n }\n\n if (response?.data?.certificates) {\n const awsCertificates: {\n certificateId: string;\n certificatePem: string;\n keyPair: { PublicKey: string; PrivateKey: string };\n } = response.data.certificates;\n await this.writeKeys(awsCertificates);\n\n return {\n private: awsCertificates.keyPair.PrivateKey,\n certificate: awsCertificates.certificatePem,\n };\n }\n this.log.error(`Cannot fetch connection certificates: ${JSON.stringify(response.data)}`);\n throw new Error(response.data);\n }\n\n async processMessage(\n type: string,\n request: any,\n ): Promise<{ error?: string; result?: string } | string | SOCKET_MESSAGE | SOCKET_TRUNK[] | AlexaCustomResponse> {\n if (request instanceof Buffer) {\n request = request.toString();\n }\n\n if (!request || !type) {\n this.log.debug(`Invalid request: ${JSON.stringify(request)}`);\n return { error: 'invalid request' };\n }\n\n if (type.startsWith('remote')) {\n const start = Date.now();\n\n this.log.debug(`Remote request: ${JSON.stringify(request)}`);\n\n if (this.remote) {\n return this.remote\n .process(request, type as `remote${string}`)\n .then(response => {\n if (response !== NONE) {\n this.log.debug(\n `[REMOTE] Response in: ${Date.now() - start}ms (Length: ${Array.isArray(response) ? `A ${response.length}` : JSON.stringify(response).length}) for ${request}`,\n );\n }\n return response;\n })\n .catch(err => {\n this.log.error(`Error in processing of remote request: ${err.toString()}`);\n return NONE;\n });\n }\n this.log.error(`Received command, but remote already closed.`);\n } else if (type.startsWith('nightscout')) {\n this.log.debug(`Nightscout request: ${JSON.stringify(request)}`);\n if (this.config.nightscout) {\n const state = await this.getForeignStateAsync(\n `system.adapter.nightscout.${this.config.nightscout}.alive`,\n );\n if (state?.val) {\n return this.sendToAsync(`nightscout.${this.config.nightscout}`, 'send', request) as {\n error?: string;\n result?: string;\n };\n }\n return { error: `nightscout.${this.config.nightscout} is offline` };\n }\n return { error: 'Service is disabled' };\n } else if (type.startsWith('alexa')) {\n if (typeof request === 'string') {\n try {\n request = JSON.parse(request);\n } catch {\n this.log.error(`Cannot parse request: ${JSON.stringify(request)}`);\n return { error: 'Cannot parse request' };\n }\n }\n\n const printRequest = JSON.parse(JSON.stringify(request));\n if (printRequest.directive?.header?.correlationToken) {\n printRequest.directive.header.correlationToken = '***';\n }\n if (printRequest.directive?.endpoint?.scope?.token) {\n printRequest.directive.endpoint.scope.token = '***';\n }\n this.log.debug(`${Date.now()} ALEXA: ${JSON.stringify(printRequest)}`);\n\n if (request?.directive) {\n if (this.alexaSH3) {\n try {\n const response = await this.alexaSH3.process(request);\n if (request.directive.header.messageId != response.event!.header.messageId) {\n throw new Error('Incoming and outgoing header message IDs are not equal!');\n }\n return response as any;\n } catch {\n this.log.error(`Cannot parse request: ${request}`);\n }\n }\n return { error: 'Service is disabled' };\n } else if (request?.error) {\n // answer from alexa3 events cloud actually just show it in log\n if (request.error.includes('You have no iobroker.iot license')) {\n // pause for 30 minutes send of the events\n this.alexaSH3?.pauseEvents();\n }\n this.log.error(`Error from Alexa events cloud: ${request.error}`);\n } else if (request && !request.header) {\n if (this.alexaCustom) {\n return this.alexaCustom.process(request, this.config.amazonAlexa);\n }\n return { error: 'Service is disabled' };\n } else {\n if (this.alexaSH2) {\n return this.alexaSH2.process(request, this.config.amazonAlexa) as any;\n }\n return { error: 'Service is disabled' };\n }\n } else if (type.startsWith('ifttt')) {\n try {\n if (typeof request === 'object') {\n request = JSON.stringify(request);\n } else {\n request = request.toString();\n }\n } catch {\n this.log.error(`Cannot parse request: ${request}`);\n return { error: 'Cannot parse request' };\n }\n this.log.debug(`IFTTT request: ${JSON.stringify(request)}`);\n\n await this.processIfttt(request);\n return NONE;\n } else if (type.startsWith('ghome')) {\n if (typeof request === 'string') {\n try {\n request = JSON.parse(request);\n } catch {\n this.log.error(`Cannot parse request: ${request}`);\n return { error: 'Cannot parse request' };\n }\n }\n this.log.debug(`[GHOME] request: ${JSON.stringify(request)}`);\n\n if (this.googleHome) {\n return this.googleHome.process(request, this.config.googleHome);\n }\n return { error: 'Service is disabled' };\n } else if (type.startsWith('alisa')) {\n if (typeof request === 'string') {\n try {\n request = JSON.parse(request);\n } catch {\n this.log.error(`Cannot parse request: ${request}`);\n return { error: 'Cannot parse request' };\n }\n }\n this.log.debug(`[ALISA] request: ${JSON.stringify(request)}`);\n\n this.log.debug(`${Date.now()} ALISA: ${JSON.stringify(request)}`);\n if (this.yandexAlisa) {\n return this.yandexAlisa.process(request, this.config.yandexAlisa) as any;\n }\n return { error: 'Service is disabled' };\n } else {\n let isCustom = false;\n let _type = type;\n if (_type.match(/^custom_/)) {\n _type = _type.substring(7);\n isCustom = true;\n }\n if (_type === 'visu') {\n this.log.debug(`Received visu command: ${JSON.stringify(request)}`);\n if (typeof request === 'object') {\n request = JSON.stringify(request);\n } else {\n request = request.toString();\n }\n\n try {\n const visuData = JSON.parse(request);\n\n if (visuData.presence) {\n await handleGeofenceData(visuData, this);\n }\n\n if (visuData.devices) {\n await handleDevicesData(visuData, this);\n }\n\n if (visuData.command === 'getInstances') {\n const res = await handleGetInstances(visuData, this);\n return { result: 'Ok', ...res };\n }\n\n if (visuData.command === 'sendToAdapter') {\n return await handleSendToAdapter(visuData, this);\n }\n } catch (e) {\n this.log.error(`Could not handle data \"${request}\" by Visu App: ${e.message}`);\n return { error: e.message };\n }\n\n return { result: 'Ok' };\n } else if (\n this.config.allowedServices[0] === '*' ||\n this.config.allowedServices.includes(_type) ||\n ALLOWED_SERVICES.includes(_type)\n ) {\n if (typeof request === 'object') {\n request = JSON.stringify(request);\n } else {\n request = request.toString();\n }\n this.log.debug(`Custom request: ${JSON.stringify(request)}`);\n\n if (SPECIAL_ADAPTERS.includes(_type)) {\n try {\n await this.setStateAsync(`services.${_type}`, request, true);\n } catch (err) {\n return { result: err };\n }\n\n return { result: 'Ok' };\n } else if (type.startsWith('text2command')) {\n if (this.config.text2command !== undefined && (this.config.text2command as string) !== '') {\n try {\n await this.setForeignStateAsync(`text2command.${this.config.text2command}.text`, request);\n } catch (err) {\n return { result: err };\n }\n return { result: 'Ok' };\n }\n this.log.warn('Received service text2command, but instance is not defined');\n return { result: 'but instance is not defined' };\n } else if (type.startsWith('simpleApi')) {\n return { result: 'not implemented' };\n } else if (isCustom) {\n let obj;\n try {\n obj = await this.getObjectAsync(`services.custom_${_type}`);\n } catch (e) {\n this.log.error(`Cannot get object services.custom_${_type}: ${e}`);\n }\n\n if (!obj) {\n try {\n await this.setObjectNotExistsAsync(`services.custom_${_type}`, {\n _id: `${this.namespace}.services.custom_${_type}`,\n type: 'state',\n common: {\n name: `Service for ${_type}`,\n write: false,\n read: true,\n type: 'mixed',\n role: 'value',\n },\n native: {},\n });\n await this.setStateAsync(`services.custom_${_type}`, request, true);\n } catch (err) {\n this.log.error(`Cannot control .services.custom_${_type}: ${JSON.stringify(err)}`);\n return { error: err };\n }\n } else {\n await this.setStateAsync(`services.custom_${_type}`, request, true);\n return { result: 'Ok' };\n }\n } else {\n this.log.warn(`Received service \"${type}\", but it is not allowed`);\n return { error: 'not allowed' };\n }\n } else {\n this.log.warn(`Received service \"${type}\", but it is not found in whitelist`);\n return { error: 'Unknown service' };\n }\n }\n\n this.log.warn(`Received message of unknown type: ${type}`);\n return { error: 'Unknown message type' };\n }\n\n closeDevice(): Promise<void> {\n return new Promise<void>(resolve => {\n if (this.device) {\n try {\n this.device.end(true, () => {\n this.device = null;\n resolve();\n });\n } catch {\n this.device = null;\n resolve();\n }\n } else {\n resolve();\n }\n });\n }\n\n async startDevice(clientId: string, login: string, password: string, retry?: number): Promise<void> {\n retry ||= 0;\n let certs:\n | {\n private: string;\n certificate: string;\n }\n | undefined;\n\n try {\n certs = await this.readCertificates();\n } catch (error) {\n if (error.message === 'Not exists') {\n try {\n certs = await this.fetchCertificates(login, password);\n } catch {\n // ignore\n }\n } else {\n throw error;\n }\n }\n\n // destroy the old device\n await this.closeDevice();\n\n if (!certs) {\n return this.log.error(`Cannot read connection certificates`);\n }\n\n try {\n this.connectStarted = Date.now();\n this.device = new DeviceModule({\n privateKey: Buffer.from(certs.private),\n clientCert: Buffer.from(certs.certificate),\n caCert: readFileSync(`${__dirname}/../keys/root-CA.crt`),\n clientId,\n username: 'ioBroker',\n host: this.config.cloudUrl,\n debug: !!this.config.debug,\n baseReconnectTimeMs: 5000,\n keepalive: 60,\n });\n this.remote?.registerDevice(this.device);\n\n this.device.subscribe(`command/${clientId}/#`);\n this.device.on('connect', () => this.onConnect(clientId));\n this.device.on('close', (): void => this.onDisconnect());\n this.device.on('reconnect', () => this.log.debug('reconnect'));\n this.device.on('offline', () => this.log.debug('offline'));\n this.device.on('error', error => {\n const errorTxt =\n ((error as Error)?.message && JSON.stringify((error as Error).message)) || JSON.stringify(error);\n this.log.error(`Error by device connection: ${errorTxt}`);\n\n // restart the iot device if DNS cannot be resolved\n if (errorTxt.includes('EAI_AGAIN')) {\n this.log.error(\n `DNS name of ${this.config.cloudUrl} cannot be resolved: connection will be retried in 10 seconds.`,\n );\n setTimeout(() => this.startDevice(clientId, login, password), 10000);\n }\n });\n\n this.device.on('message', async (topic: string, request: string | Buffer): Promise<void> => {\n this.log.debug(`Request ${topic}`);\n if (topic.startsWith(`command/${clientId}/`)) {\n const type = topic.substring(clientId.length + 9); // 9 === 'command//'.length\n\n try {\n const response = await this.processMessage(type, request);\n\n if (this.common!.loglevel === 'debug' && !type.startsWith('remote')) {\n this.log.debug(`Response: ${JSON.stringify(response)}`);\n }\n\n if (this.device && response !== NONE) {\n // It is a big file - send in trunks\n if (Array.isArray(response)) {\n try {\n for (let m = 0; m < response.length; m++) {\n const trunk = response[m];\n await new Promise<void>((resolve, reject) =>\n this.device!.publish(\n `response/${clientId}/${type}`,\n typeof trunk !== 'string' ? JSON.stringify(trunk) : trunk,\n { qos: 1 },\n error => {\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n },\n ),\n );\n }\n } catch (err) {\n this.log.error(`[REMOTE] Cannot send packet: ${err}`);\n }\n } else {\n const printResponse = JSON.parse(JSON.stringify(response));\n if (printResponse?.event?.header?.correlationToken) {\n printResponse.event.header.correlationToken = '***';\n }\n if (printResponse?.event?.endpoint?.scope?.token) {\n printResponse.event.endpoint.scope.token = '***';\n }\n this.log.debug(\n `[REMOTE] Response to 'response/${clientId}/${type}: ${JSON.stringify(\n printResponse,\n )}`,\n );\n\n const msg = JSON.stringify(response);\n if (msg && msg.length > MAX_IOT_MESSAGE_LENGTH) {\n const packed = deflateSync(msg).toString('base64');\n this.log.debug(\n `[REMOTE] Content was packed from ${msg.length} bytes to ${packed.length} bytes`,\n );\n if (packed.length > MAX_IOT_MESSAGE_LENGTH) {\n this.log.warn(\n `[REMOTE] Content was packed to ${packed.length} bytes which is still near/over the message limit!`,\n );\n }\n this.device.publish(`response/${clientId}/${type}`, packed);\n } else {\n // console.log(`Publish to \"response/${clientId}/${type}\": ${msg}`);\n this.device.publish(`response/${clientId}/${type}`, msg);\n }\n }\n }\n } catch (error) {\n this.log.debug(`Error processing request ${topic}`);\n this.log.debug(`${error}`);\n }\n }\n });\n } catch (error) {\n if (error && typeof error === 'object' && error.message) {\n this.log.error(`Cannot read connection certificates: ${error.message}`);\n } else {\n this.log.error(\n `Cannot read connection certificates: ${JSON.stringify(error)} / ${error && error.toString()}`,\n );\n }\n\n if ((error === 'timeout' || error.message?.includes('timeout')) && retry < 10) {\n setTimeout(() => this.startDevice(clientId, login, password, retry + 1), 10000);\n }\n }\n }\n\n async updateNightscoutSecret(): Promise<void> {\n if (!this.config.nightscout) {\n return;\n }\n\n const email = this.config.login.replace(/[^\\w\\d-_]/g, '_');\n const secret = this.config.nightscoutPass;\n const apiSecret = email + (secret ? `-${secret}` : '');\n const URL = `https://generate-key.iobroker.in/v1/generateUrlKey?user=${encodeURIComponent(this.config.login)}&pass=${encodeURIComponent(this.config.pass)}&apisecret=${encodeURIComponent(apiSecret)}`;\n let response;\n\n try {\n response = await axios.get(URL, {\n timeout: 15000,\n validateStatus: status => status < 400,\n });\n if (response.data.error) {\n this.log.error(`Api-Secret cannot be updated: ${response.data.error}`);\n } else {\n this.log.debug(`Api-Secret updated: ${JSON.stringify(response.data)}`);\n }\n } catch (error) {\n if (error.response) {\n this.log.warn(\n `Cannot update api-secret: ${error.response.data ? JSON.stringify(error.response.data) : error.response.status}`,\n );\n } else {\n this.log.warn(`Cannot update api-secret: ${error.code}`);\n }\n }\n }\n\n async createStateForAdapter(adapterName: string): Promise<void> {\n // find any instance of this adapter\n const instances = await this.getObjectViewAsync('system', 'instance', {\n startkey: `system.adapter.${adapterName}.`,\n endkey: `system.adapter.${adapterName}.\\u9999`,\n });\n if (instances?.rows?.length) {\n let obj;\n try {\n obj = await this.getObjectAsync(`service.${adapterName}`);\n } catch {\n // ignore\n }\n if (!obj) {\n try {\n await this.setForeignObjectAsync(`${this.namespace}.services.${adapterName}`, {\n type: 'state',\n common: {\n name: `Service for ${adapterName}`,\n write: false,\n read: true,\n type: 'mixed',\n role: 'value',\n },\n native: {},\n });\n } catch {\n // ignore\n }\n }\n } else {\n try {\n // delete if object exists\n const obj = await this.getObjectAsync(`service.${adapterName}`);\n if (obj) {\n await this.delObjectAsync(`service.${adapterName}`);\n }\n } catch {\n // ignore\n }\n }\n }\n\n async main(): Promise<void> {\n if (this.config.googleHome === undefined) {\n this.config.googleHome = false;\n }\n\n if (this.config.amazonAlexa === undefined) {\n this.config.amazonAlexa = true;\n }\n\n if (this.config.yandexAlisa === undefined) {\n this.config.yandexAlisa = false;\n }\n\n this.config.pingTimeout = parseInt(this.config.pingTimeout as string, 10) || 5000;\n\n if (this.config.pingTimeout < 3000) {\n this.config.pingTimeout = 3000;\n }\n\n if (this.config.deviceOffLevel === undefined) {\n this.config.deviceOffLevel = 30;\n }\n\n if (this.config.login !== (this.config.login || '').trim().toLowerCase()) {\n this.log.error('Please write your login only in lowercase!');\n }\n if (!this.config.login || !this.config.pass) {\n return this.log.error('No cloud credentials found. Please get one on https://iobroker.pro');\n }\n\n let systemConfig = await this.getForeignObjectAsync('system.config');\n if (!systemConfig) {\n this.log.warn('Object system.config not found. Please check your installation!');\n systemConfig = { common: {} } as ioBroker.SystemConfigObject;\n }\n\n // create service state for netatmo if any instance exists\n for (let a = 0; a < SPECIAL_ADAPTERS.length; a++) {\n await this.createStateForAdapter(SPECIAL_ADAPTERS[a]);\n }\n\n this.secret = systemConfig?.native?.secret || 'Zgfr56gFe87jJOM';\n\n this.config.pass = this.decryptOwn(this.secret, this.config.pass);\n this.config.deviceOffLevel = parseFloat(this.config.deviceOffLevel as string) || 0;\n this.config.concatWord = (this.config.concatWord || '').toString().trim();\n this.config.apikey = (this.config.apikey || '').trim();\n this.config.replaces = this.config.replaces ? (this.config.replaces as string).split(',') : null;\n this.config.cloudUrl = (this.config.cloudUrl || '').toString();\n this.config.nightscout = this.config.nightscout || '';\n\n if (this.config.replaces) {\n const text: string[] = [];\n for (let r = 0; r < this.config.replaces.length; r++) {\n text.push(`\"${this.config.replaces[r]}\"`);\n }\n this.log.debug(`Following strings will be replaced in names: ${text.join(', ')}`);\n }\n if (this.config.yandexAlisa) {\n this.yandexAlisa = new YandexAlisa(this);\n }\n\n this.remote = new Remote(this, this.config.login.replace(/[^-_:a-zA-Z1-9]/g, '_'));\n\n this.config.allowedServices = ((this.config.allowedServices as string) || '')\n .split(/[,\\s]+/)\n .map(s => s.trim())\n .filter(s => s);\n\n await this.setStateAsync('info.connection', false, true);\n this.config.cloudUrl = this.config.cloudUrl || 'a18wym7vjdl22g.iot.eu-west-1.amazonaws.com';\n\n if (!this.config.login || !this.config.pass) {\n return this.log.error('No cloud credentials found. Please get one on https://iobroker.pro');\n }\n\n if (this.config.iftttKey) {\n await this.subscribeStatesAsync('services.ifttt');\n // create ifttt object\n const iftttObj = await this.getObjectAsync('.services.ifttt');\n if (!iftttObj) {\n await this.setObjectNotExistsAsync('services.ifttt', {\n _id: `${this.namespace}.services.ifttt`,\n type: 'state',\n common: {\n name: 'IFTTT value',\n write: true,\n role: 'state',\n read: true,\n type: 'mixed',\n desc: 'All written data will be sent to IFTTT. If no state specified all requests from IFTTT will be saved here',\n },\n native: {},\n });\n }\n }\n\n // detect netatmo creation\n await this.subscribeForeignObjectsAsync('system.adapter.*');\n\n await this.subscribeStatesAsync('smart.*');\n\n this.log.info(`Connecting with ${this.config.cloudUrl}`);\n\n if (this.config.language) {\n this.translate = true;\n this.lang = this.config.language;\n } else {\n this.lang = systemConfig.common.language;\n }\n\n if (this.lang !== 'en' && this.lang !== 'de' && this.lang !== 'ru') {\n this.lang = 'en';\n }\n\n if (this.config.amazonAlexa) {\n this.alexaSH2 = new AlexaSH2(this);\n this.alexaSH2.setLanguage(this.lang, this.translate);\n this.alexaSH2.updateDevices();\n }\n\n this.remote?.setLanguage(this.lang);\n // check password\n if (\n this.config.pass.length < 8 ||\n !this.config.pass.match(/[a-z]/) ||\n !this.config.pass.match(/[A-Z]/) ||\n !this.config.pass.match(/\\d/)\n ) {\n return this.log.error(\n 'The password must be at least 8 characters long and have numbers, upper and lower case letters. Please change the password in the profile https://iobroker.pro/accountProfile.',\n );\n }\n\n await this.updateNightscoutSecret();\n\n const iotClientId = this.config.login.replace(/[^-_:a-zA-Z1-9]/g, '_');\n // user will be created here\n await this.startDevice(iotClientId, this.config.login, this.config.pass);\n\n // after the user created, we can try to generate URL key\n // read URL keys from server\n try {\n this.urlKey = await this.readUrlKey();\n } catch {\n if (\n this.config.googleHome ||\n this.config.yandexAlisa ||\n this.config.allowedServices.length ||\n this.config.iftttKey\n ) {\n try {\n this.urlKey = await this.createUrlKey(this.config.login, this.config.pass);\n } catch (err) {\n return this.log.error(\n `Cannot read URL key: ${typeof err === 'object' ? JSON.stringify(err) : err}`,\n );\n }\n }\n }\n\n if (this.config.amazonAlexaV3) {\n this.alexaSH3 = new AlexaSH3({\n adapter: this,\n iotClientId,\n iotDevice: this.device!,\n });\n this.alexaSH3.setLanguage(this.lang);\n await this.alexaSH3.updateDevices();\n }\n\n if (this.config.amazonAlexa || this.config.amazonAlexaV3) {\n this.alexaCustom = new AlexaCustom(this);\n this.alexaCustom.setLanguage(this.lang);\n }\n\n if (this.config.googleHome) {\n this.googleHome = new GoogleHome(this, this.urlKey);\n } // no else\n if (this.config.yandexAlisa) {\n this.yandexAlisa = new YandexAlisa(this, this.urlKey);\n }\n\n this.googleHome?.setLanguage(this.lang);\n this.googleHome?.updateDevices();\n\n this.yandexAlisa?.setLanguage(this.lang);\n this.yandexAlisa?.updateDevices();\n\n await this.subscribeStatesAsync('app.message');\n }\n}\n\nif (require.main !== module) {\n // Export the constructor in compact mode\n module.exports = (options: Partial<AdapterOptions> | undefined) => new IotAdapter(options);\n} else {\n // otherwise start the instance directly\n (() => new IotAdapter())();\n}\n"]}
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "iot",
4
- "version": "4.0.3",
4
+ "version": "4.1.2",
5
5
  "news": {
6
+ "4.1.2": {
7
+ "en": "Made Alexa V3 default\nUpdated packages\nCorrected Alexa V3 engine",
8
+ "de": "Made Alexa V3 default\nAktualisierte Pakete\nKorrektur Alexa V3 Motor",
9
+ "ru": "По умолчанию Alexa V3\nОбновленные пакеты\nИсправлен двигатель Alexa V3",
10
+ "pt": "Made Alexa V3 por omissão\nPacotes atualizados\nMotor Alexa V3 corrigido",
11
+ "nl": "Alexa V3 standaard gemaakt\nBijgewerkte pakketten\nGecorrigeerde Alexa V3-motor",
12
+ "fr": "A fait Alexa V3 par défaut\nPaquets mis à jour\nMoteur Alexa V3 corrigé",
13
+ "it": "Made Alexa V3 default\nPacchetti aggiornati\nMotore Alexa V3 corretto",
14
+ "es": "Fabricado Alexa V3 por defecto\nPaquetes actualizados\nMotor Alexa V3 corregido",
15
+ "pl": "Domyślnie Alexa V3\nAktualizacja pakietów\nPoprawiony silnik Alexa V3",
16
+ "uk": "Зроблено Alexa V3 за замовчуванням\nОновлені пакети\nВиправлений двигун Alexa V3",
17
+ "zh-cn": "让 Alexa V3 默认\n更新软件包\n校正 Alexa V3 引擎"
18
+ },
19
+ "4.1.0": {
20
+ "en": "Made Alexa V3 default\nUpdated packages\nCorrected Alexa V3 engine",
21
+ "de": "Made Alexa V3 default\nAktualisierte Pakete\nKorrektur Alexa V3 Motor",
22
+ "ru": "По умолчанию Alexa V3\nОбновленные пакеты\nИсправлен двигатель Alexa V3",
23
+ "pt": "Made Alexa V3 por omissão\nPacotes atualizados\nMotor Alexa V3 corrigido",
24
+ "nl": "Alexa V3 standaard gemaakt\nBijgewerkte pakketten\nGecorrigeerde Alexa V3-motor",
25
+ "fr": "A fait Alexa V3 par défaut\nPaquets mis à jour\nMoteur Alexa V3 corrigé",
26
+ "it": "Made Alexa V3 default\nPacchetti aggiornati\nMotore Alexa V3 corretto",
27
+ "es": "Fabricado Alexa V3 por defecto\nPaquetes actualizados\nMotor Alexa V3 corregido",
28
+ "pl": "Domyślnie Alexa V3\nAktualizacja pakietów\nPoprawiony silnik Alexa V3",
29
+ "uk": "Зроблено Alexa V3 за замовчуванням\nОновлені пакети\nВиправлений двигун Alexa V3",
30
+ "zh-cn": "让 Alexa V3 默认\n更新软件包\n校正 Alexa V3 引擎"
31
+ },
6
32
  "4.0.3": {
7
33
  "en": "Added response ID to custom skill responses",
8
34
  "de": "Antwort ID auf benutzerdefinierte Fähigkeiten Antworten hinzugefügt",
@@ -67,32 +93,6 @@
67
93
  "pl": "Przepisz zasady za pomocą TypeScript\nAktualizacja pakietu. Logo SVG",
68
94
  "uk": "Правила перезапису з TypeScript\nОновлення пакету. Логотип SVG",
69
95
  "zh-cn": "用类型脚本重写规则\n软件包更新. SVG 标志"
70
- },
71
- "3.5.0": {
72
- "en": "added notification manager support (notifications will be sent as push notifications to the Visu App)",
73
- "de": "unterstützung von Benachrichtigungsmanagern (Anmerkungen werden als Push-Benachrichtigungen an die Visu App gesendet)",
74
- "ru": "добавлена поддержка менеджера уведомлений (уведомления будут отправляться в виде push-уведомлений в приложение Visu)",
75
- "pt": "suporte adicional do gerenciador de notificações (as notificações serão enviadas como notificações push para o Visu App)",
76
- "nl": "toegevoegde notificatiemanager ondersteuning (meldingen worden verzonden als push notificaties naar de Visu App)",
77
- "fr": "support du gestionnaire de notification ajouté (les notifications seront envoyées sous forme de notifications poussées à l'application Visu)",
78
- "it": "supporto del gestore di notifiche aggiunto (le notifiche verranno inviate come notifiche push all'App Visu)",
79
- "es": "apoyo añadido al administrador de notificaciones (las notificaciones se enviarán como notificaciones push a la aplicación Visu)",
80
- "pl": "dodane wsparcie menedżera powiadomień (powiadomienia będą wysyłane jako powiadomienia do aplikacji Visu)",
81
- "uk": "додана підтримка менеджера повідомлень (повідомлення буде відправлено як поштові повідомлення до додатку Visu)",
82
- "zh-cn": "新增通知管理器支持( 通知将作为推送通知发送给 Visu App)"
83
- },
84
- "3.4.5": {
85
- "en": "Checked the max length of discovered devices for Alexa",
86
- "de": "Überprüfte die maximale Länge der entdeckten Geräte für Alexa",
87
- "ru": "Проверка максимальной длины обнаруженных устройств для Alexa",
88
- "pt": "Verificado o comprimento máximo de dispositivos descobertos para Alexa",
89
- "nl": "De maximale lengte van ontdekte apparaten voor Alexa gecontroleerd",
90
- "fr": "Vérification de la longueur maximale des appareils découverts pour Alexa",
91
- "it": "Controllata la lunghezza massima di dispositivi scoperti per Alexa",
92
- "es": "Compruebe la longitud máxima de los dispositivos descubiertos para Alexa",
93
- "pl": "Sprawdziliśmy maksymalną długość odkrytych urządzeń dla Alexa",
94
- "uk": "Перевірити максимальну довжину відкритих пристроїв для Alexa",
95
- "zh-cn": "为 Alexa 检查了已发现设备的最大长度"
96
96
  }
97
97
  },
98
98
  "titleLang": {
@@ -171,6 +171,7 @@
171
171
  "dsn": "https://20987eaf91ef49de821771499fdb4e1a@sentry.iobroker.net/40"
172
172
  }
173
173
  },
174
+ "nogit": true,
174
175
  "javascriptRules": {
175
176
  "i18n": true,
176
177
  "url": "rules/customRuleBlocks.js",
@@ -200,8 +201,8 @@
200
201
  "restartOnDisconnect": false,
201
202
  "iftttKey": "",
202
203
  "replaces": "",
203
- "amazonAlexa": true,
204
- "amazonAlexaV3": false,
204
+ "amazonAlexa": false,
205
+ "amazonAlexaV3": true,
205
206
  "amazonAlexaBlood": "",
206
207
  "amazonAlexaBloodShortAnswer": false,
207
208
  "googleHome": false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.iot",
3
- "version": "4.0.3",
3
+ "version": "4.1.2",
4
4
  "description": "This adapter allows to communicate Amazon Alexa and Google Home with ioBroker.",
5
5
  "author": {
6
6
  "name": "bluefox",
@@ -24,42 +24,42 @@
24
24
  "dependencies": {
25
25
  "@iobroker/adapter-core": "^3.3.2",
26
26
  "aws-iot-device-sdk": "^2.2.15",
27
- "axios": "^1.11.0",
27
+ "axios": "^1.12.2",
28
28
  "@iobroker/type-detector": "^4.5.1",
29
29
  "mime": "^3.0.0",
30
- "uuid": "^11.1.0"
30
+ "uuid": "^11.0.0"
31
31
  },
32
32
  "devDependencies": {
33
- "@alcalzone/release-script": "^3.8.0",
34
- "@alcalzone/release-script-plugin-iobroker": "^3.7.2",
35
- "@alcalzone/release-script-plugin-license": "^3.7.0",
33
+ "@alcalzone/release-script": "^4.0.0",
34
+ "@alcalzone/release-script-plugin-iobroker": "^4.0.0",
35
+ "@alcalzone/release-script-plugin-license": "^4.0.0",
36
36
  "@iobroker/build-tools": "^2.0.15",
37
- "@iobroker/eslint-config": "^2.1.0",
37
+ "@iobroker/eslint-config": "^2.2.0",
38
38
  "@iobroker/legacy-testing": "^2.0.2",
39
39
  "@iobroker/types": "^7.0.7",
40
- "@types/node": "^24.3.0",
40
+ "@types/node": "^24.7.1",
41
41
  "@types/aws-iot-device-sdk": "^2.2.8",
42
42
  "colorette": "^2.0.20",
43
- "puppeteer": "^24.16.2",
44
- "typescript": "^5.9.2"
43
+ "puppeteer": "^24.24.0",
44
+ "typescript": "^5.9.3"
45
45
  },
46
46
  "bugs": {
47
47
  "url": "https://github.com/ioBroker/ioBroker.iot/issues"
48
48
  },
49
- "main": "build-backend/main.js",
49
+ "main": "build/main.js",
50
50
  "files": [
51
51
  "admin/",
52
52
  "doc/",
53
53
  "img/",
54
54
  "keys/",
55
- "build-backend/",
55
+ "build/",
56
56
  "io-package.json",
57
57
  "LICENSE"
58
58
  ],
59
59
  "scripts": {
60
60
  "test-gui": "mocha test/testAdapter.gui.js --exit",
61
61
  "test-package": "mocha test/testPackageFiles.js --exit",
62
- "test": "npm run test-gui && npm run test-package",
62
+ "test": "npm run test-gui && npm run test-package && npm run test-alexa-v3",
63
63
  "test-alexa-v3": "mocha --grep AlexaSmartHomeV3 --recursive",
64
64
  "prepublishOnly": "npm run build",
65
65
  "tsc": "tsc -p tsconfig.build.json && node tasks --backend",