node-red-contrib-knx-ultimate 4.0.10 → 4.0.11

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 (364) hide show
  1. package/CHANGELOG.md +14 -1
  2. package/nodes/hue-config.html +2 -2
  3. package/nodes/hue-config.js +56 -0
  4. package/nodes/knxUltimate.html +87 -2
  5. package/nodes/knxUltimateAlerter.html +6 -5
  6. package/nodes/knxUltimateAutoResponder.html +1 -2
  7. package/nodes/knxUltimateGlobalContext.html +1 -2
  8. package/nodes/knxUltimateHueBattery.html +549 -222
  9. package/nodes/knxUltimateHueBattery.js +28 -8
  10. package/nodes/knxUltimateHueButton.html +688 -452
  11. package/nodes/knxUltimateHueButton.js +31 -17
  12. package/nodes/knxUltimateHueCameraMotion.html +631 -0
  13. package/nodes/knxUltimateHueCameraMotion.js +215 -0
  14. package/nodes/knxUltimateHueContactSensor.html +512 -212
  15. package/nodes/knxUltimateHueContactSensor.js +15 -3
  16. package/nodes/knxUltimateHueHumiditySensor.html +601 -0
  17. package/nodes/knxUltimateHueHumiditySensor.js +198 -0
  18. package/nodes/knxUltimateHueLight.html +788 -199
  19. package/nodes/knxUltimateHueLight.js +307 -66
  20. package/nodes/knxUltimateHueLightSensor.html +538 -224
  21. package/nodes/knxUltimateHueLightSensor.js +28 -10
  22. package/nodes/knxUltimateHueMotion.html +536 -215
  23. package/nodes/knxUltimateHueMotion.js +22 -3
  24. package/nodes/knxUltimateHuePlug.html +539 -0
  25. package/nodes/knxUltimateHuePlug.js +251 -0
  26. package/nodes/knxUltimateHueScene.html +863 -577
  27. package/nodes/knxUltimateHueScene.js +16 -4
  28. package/nodes/knxUltimateHueTapDial.html +543 -217
  29. package/nodes/knxUltimateHueTapDial.js +63 -22
  30. package/nodes/knxUltimateHueTemperatureSensor.html +541 -222
  31. package/nodes/knxUltimateHueTemperatureSensor.js +29 -9
  32. package/nodes/knxUltimateHueZigbeeConnectivity.html +549 -222
  33. package/nodes/knxUltimateHueZigbeeConnectivity.js +27 -7
  34. package/nodes/knxUltimateHuedevice_software_update.html +554 -222
  35. package/nodes/knxUltimateHuedevice_software_update.js +33 -6
  36. package/nodes/knxUltimateLoadControl.html +17 -6
  37. package/nodes/knxUltimateLogger.html +1 -2
  38. package/nodes/knxUltimateSceneController.html +7 -4
  39. package/nodes/knxUltimateViewer.html +1 -2
  40. package/nodes/knxUltimateWatchDog.html +1 -1
  41. package/nodes/locales/{de-DE → de}/hue-config.html +2 -2
  42. package/nodes/locales/{de-DE → de}/knxUltimate-config.html +10 -19
  43. package/nodes/locales/{de-DE → de}/knxUltimate.html +24 -30
  44. package/nodes/locales/{de-DE → de}/knxUltimateAlerter.html +6 -10
  45. package/nodes/locales/{de-DE → de}/knxUltimateAutoResponder.html +22 -25
  46. package/nodes/locales/de/knxUltimateGarageDoorBarrierOpener.html +27 -0
  47. package/nodes/locales/{de-DE → de}/knxUltimateGlobalContext.html +10 -12
  48. package/nodes/locales/{de-DE → de}/knxUltimateHATranslator.html +1 -2
  49. package/nodes/locales/de/knxUltimateHueBattery.html +25 -0
  50. package/nodes/locales/de/knxUltimateHueBattery.json +18 -6
  51. package/nodes/locales/de/knxUltimateHueButton.html +53 -0
  52. package/nodes/locales/de/knxUltimateHueButton.json +21 -2
  53. package/nodes/locales/de/knxUltimateHueCameraMotion.html +41 -0
  54. package/nodes/locales/de/knxUltimateHueCameraMotion.json +30 -0
  55. package/nodes/locales/{de-DE → de}/knxUltimateHueContactSensor.html +1 -1
  56. package/nodes/locales/de/knxUltimateHueContactSensor.json +13 -2
  57. package/nodes/locales/de/knxUltimateHueHumiditySensor.html +27 -0
  58. package/nodes/locales/de/knxUltimateHueHumiditySensor.json +30 -0
  59. package/nodes/locales/{de-DE → de}/knxUltimateHueLight.html +17 -16
  60. package/nodes/locales/de/knxUltimateHueLight.json +13 -3
  61. package/nodes/locales/{de-DE → de}/knxUltimateHueLightSensor.html +1 -1
  62. package/nodes/locales/de/knxUltimateHueMotion.html +29 -0
  63. package/nodes/locales/de/knxUltimateHueMotion.json +16 -5
  64. package/nodes/locales/de/knxUltimateHuePlug.html +41 -0
  65. package/nodes/locales/de/knxUltimateHuePlug.json +33 -0
  66. package/nodes/locales/de/knxUltimateHueScene.html +50 -0
  67. package/nodes/locales/de/knxUltimateHueScene.json +16 -3
  68. package/nodes/locales/de/knxUltimateHueTapDial.html +45 -0
  69. package/nodes/locales/de/knxUltimateHueTapDial.json +14 -2
  70. package/nodes/locales/{de-DE → de}/knxUltimateHueTemperatureSensor.html +1 -1
  71. package/nodes/locales/de/knxUltimateHueTemperatureSensor.json +18 -5
  72. package/nodes/locales/{de-DE → de}/knxUltimateHueZigbeeConnectivity.html +4 -4
  73. package/nodes/locales/de/knxUltimateHueZigbeeConnectivity.json +18 -6
  74. package/nodes/locales/{de-DE → de}/knxUltimateHuedevice_software_update.html +4 -4
  75. package/nodes/locales/de/knxUltimateHuedevice_software_update.json +12 -0
  76. package/nodes/locales/{de-DE → de}/knxUltimateLoadControl.html +2 -2
  77. package/nodes/locales/{de-DE → de}/knxUltimateLogger.html +8 -3
  78. package/nodes/locales/{de-DE → de}/knxUltimateSceneController.html +8 -6
  79. package/nodes/locales/{de-DE → de}/knxUltimateViewer.html +7 -10
  80. package/nodes/locales/de/knxUltimateWatchDog.html +158 -0
  81. package/nodes/locales/{en-US → en}/hue-config.html +2 -3
  82. package/nodes/locales/{en-US → en}/knxUltimate-config.html +21 -33
  83. package/nodes/locales/{en-US → en}/knxUltimate.html +91 -98
  84. package/nodes/locales/{en-US → en}/knxUltimateAlerter.html +2 -11
  85. package/nodes/locales/{en-US → en}/knxUltimateAutoResponder.html +23 -30
  86. package/nodes/locales/en/knxUltimateGarageDoorBarrierOpener.html +27 -0
  87. package/nodes/locales/{en-US → en}/knxUltimateGlobalContext.html +13 -22
  88. package/nodes/locales/{en-US → en}/knxUltimateHATranslator.html +1 -2
  89. package/nodes/locales/en/knxUltimateHueBattery.html +25 -0
  90. package/nodes/locales/en/knxUltimateHueBattery.json +30 -0
  91. package/nodes/locales/en/knxUltimateHueButton.html +39 -0
  92. package/nodes/locales/en/knxUltimateHueButton.json +34 -0
  93. package/nodes/locales/en/knxUltimateHueCameraMotion.html +27 -0
  94. package/nodes/locales/en/knxUltimateHueCameraMotion.json +30 -0
  95. package/nodes/locales/en/knxUltimateHueContactSensor.json +26 -0
  96. package/nodes/locales/en/knxUltimateHueHumiditySensor.html +27 -0
  97. package/nodes/locales/en/knxUltimateHueHumiditySensor.json +30 -0
  98. package/nodes/locales/en/knxUltimateHueLight.html +101 -0
  99. package/nodes/locales/{en-US → en}/knxUltimateHueLight.json +13 -3
  100. package/nodes/locales/{en-US → en}/knxUltimateHueLightSensor.html +1 -1
  101. package/nodes/locales/en/knxUltimateHueMotion.html +29 -0
  102. package/nodes/locales/en/knxUltimateHueMotion.json +27 -0
  103. package/nodes/locales/en/knxUltimateHuePlug.html +41 -0
  104. package/nodes/locales/en/knxUltimateHuePlug.json +33 -0
  105. package/nodes/locales/en/knxUltimateHueScene.html +36 -0
  106. package/nodes/locales/en/knxUltimateHueScene.json +41 -0
  107. package/nodes/locales/en/knxUltimateHueTapDial.html +31 -0
  108. package/nodes/locales/en/knxUltimateHueTapDial.json +28 -0
  109. package/nodes/locales/{en-US → en}/knxUltimateHueTemperatureSensor.html +1 -1
  110. package/nodes/locales/en/knxUltimateHueTemperatureSensor.json +30 -0
  111. package/nodes/locales/{en-US → en}/knxUltimateHueZigbeeConnectivity.html +4 -4
  112. package/nodes/locales/en/knxUltimateHueZigbeeConnectivity.json +30 -0
  113. package/nodes/locales/{en-US → en}/knxUltimateHuedevice_software_update.html +4 -4
  114. package/nodes/locales/en/knxUltimateHuedevice_software_update.json +30 -0
  115. package/nodes/locales/{en-US → en}/knxUltimateLoadControl.html +5 -6
  116. package/nodes/locales/{en-US → en}/knxUltimateLogger.html +6 -15
  117. package/nodes/locales/{en-US → en}/knxUltimateSceneController.html +15 -23
  118. package/nodes/locales/{en-US → en}/knxUltimateViewer.html +11 -13
  119. package/nodes/locales/en/knxUltimateWatchDog.html +233 -0
  120. package/nodes/locales/es/common.json +12 -0
  121. package/nodes/locales/es/hue-config.html +20 -0
  122. package/nodes/locales/es/hue-config.json +19 -0
  123. package/nodes/locales/es/knxUltimate-config.html +138 -0
  124. package/nodes/locales/es/knxUltimate-config.json +104 -0
  125. package/nodes/locales/es/knxUltimate.html +545 -0
  126. package/nodes/locales/es/knxUltimate.json +105 -0
  127. package/nodes/locales/es/knxUltimateAlerter.html +124 -0
  128. package/nodes/locales/es/knxUltimateAlerter.json +24 -0
  129. package/nodes/locales/es/knxUltimateAutoResponder.html +55 -0
  130. package/nodes/locales/es/knxUltimateAutoResponder.json +5 -0
  131. package/nodes/locales/es/knxUltimateGarageDoorBarrierOpener.json +11 -0
  132. package/nodes/locales/es/knxUltimateGlobalContext.html +114 -0
  133. package/nodes/locales/es/knxUltimateGlobalContext.json +21 -0
  134. package/nodes/locales/es/knxUltimateHATranslator.html +15 -0
  135. package/nodes/locales/es/knxUltimateHATranslator.json +5 -0
  136. package/nodes/locales/es/knxUltimateHueBattery.html +25 -0
  137. package/nodes/locales/es/knxUltimateHueBattery.json +30 -0
  138. package/nodes/locales/es/knxUltimateHueButton.html +39 -0
  139. package/nodes/locales/es/knxUltimateHueButton.json +34 -0
  140. package/nodes/locales/es/knxUltimateHueCameraMotion.html +27 -0
  141. package/nodes/locales/es/knxUltimateHueCameraMotion.json +30 -0
  142. package/nodes/locales/es/knxUltimateHueContactSensor.html +25 -0
  143. package/nodes/locales/es/knxUltimateHueContactSensor.json +26 -0
  144. package/nodes/locales/es/knxUltimateHueHumiditySensor.html +27 -0
  145. package/nodes/locales/es/knxUltimateHueHumiditySensor.json +30 -0
  146. package/nodes/locales/es/knxUltimateHueLight.html +101 -0
  147. package/nodes/locales/es/knxUltimateHueLight.json +84 -0
  148. package/nodes/locales/es/knxUltimateHueLightSensor.html +27 -0
  149. package/nodes/locales/es/knxUltimateHueLightSensor.json +19 -0
  150. package/nodes/locales/es/knxUltimateHueMotion.html +29 -0
  151. package/nodes/locales/es/knxUltimateHueMotion.json +27 -0
  152. package/nodes/locales/es/knxUltimateHuePlug.html +41 -0
  153. package/nodes/locales/es/knxUltimateHuePlug.json +33 -0
  154. package/nodes/locales/es/knxUltimateHueScene.html +36 -0
  155. package/nodes/locales/es/knxUltimateHueScene.json +41 -0
  156. package/nodes/locales/es/knxUltimateHueTapDial.html +31 -0
  157. package/nodes/locales/es/knxUltimateHueTapDial.json +28 -0
  158. package/nodes/locales/es/knxUltimateHueTemperatureSensor.html +27 -0
  159. package/nodes/locales/es/knxUltimateHueTemperatureSensor.json +30 -0
  160. package/nodes/locales/es/knxUltimateHueZigbeeConnectivity.html +28 -0
  161. package/nodes/locales/es/knxUltimateHueZigbeeConnectivity.json +30 -0
  162. package/nodes/locales/es/knxUltimateHuedevice_software_update.html +25 -0
  163. package/nodes/locales/es/knxUltimateHuedevice_software_update.json +30 -0
  164. package/nodes/locales/es/knxUltimateLoadControl.html +61 -0
  165. package/nodes/locales/es/knxUltimateLoadControl.json +21 -0
  166. package/nodes/locales/es/knxUltimateLogger.html +120 -0
  167. package/nodes/locales/es/knxUltimateLogger.json +19 -0
  168. package/nodes/locales/es/knxUltimateSceneController.html +85 -0
  169. package/nodes/locales/es/knxUltimateSceneController.json +29 -0
  170. package/nodes/locales/es/knxUltimateViewer.html +441 -0
  171. package/nodes/locales/es/knxUltimateViewer.json +11 -0
  172. package/nodes/locales/es/knxUltimateWatchDog.html +179 -0
  173. package/nodes/locales/es/knxUltimateWatchDog.json +23 -0
  174. package/nodes/locales/fr/common.json +12 -0
  175. package/nodes/locales/fr/hue-config.html +20 -0
  176. package/nodes/locales/fr/hue-config.json +19 -0
  177. package/nodes/locales/fr/knxUltimate-config.html +149 -0
  178. package/nodes/locales/fr/knxUltimate-config.json +104 -0
  179. package/nodes/locales/fr/knxUltimate.html +543 -0
  180. package/nodes/locales/fr/knxUltimate.json +105 -0
  181. package/nodes/locales/fr/knxUltimateAlerter.html +124 -0
  182. package/nodes/locales/fr/knxUltimateAlerter.json +24 -0
  183. package/nodes/locales/fr/knxUltimateAutoResponder.html +67 -0
  184. package/nodes/locales/fr/knxUltimateAutoResponder.json +5 -0
  185. package/nodes/locales/fr/knxUltimateGarageDoorBarrierOpener.json +11 -0
  186. package/nodes/locales/fr/knxUltimateGlobalContext.html +113 -0
  187. package/nodes/locales/fr/knxUltimateGlobalContext.json +21 -0
  188. package/nodes/locales/fr/knxUltimateHATranslator.html +15 -0
  189. package/nodes/locales/fr/knxUltimateHATranslator.json +5 -0
  190. package/nodes/locales/fr/knxUltimateHueBattery.html +25 -0
  191. package/nodes/locales/fr/knxUltimateHueBattery.json +30 -0
  192. package/nodes/locales/fr/knxUltimateHueButton.html +39 -0
  193. package/nodes/locales/fr/knxUltimateHueButton.json +34 -0
  194. package/nodes/locales/fr/knxUltimateHueCameraMotion.html +27 -0
  195. package/nodes/locales/fr/knxUltimateHueCameraMotion.json +30 -0
  196. package/nodes/locales/fr/knxUltimateHueContactSensor.html +25 -0
  197. package/nodes/locales/fr/knxUltimateHueContactSensor.json +26 -0
  198. package/nodes/locales/fr/knxUltimateHueHumiditySensor.html +27 -0
  199. package/nodes/locales/fr/knxUltimateHueHumiditySensor.json +30 -0
  200. package/nodes/locales/fr/knxUltimateHueLight.html +101 -0
  201. package/nodes/locales/fr/knxUltimateHueLight.json +84 -0
  202. package/nodes/locales/fr/knxUltimateHueLightSensor.html +27 -0
  203. package/nodes/locales/fr/knxUltimateHueLightSensor.json +19 -0
  204. package/nodes/locales/fr/knxUltimateHueMotion.html +29 -0
  205. package/nodes/locales/fr/knxUltimateHueMotion.json +27 -0
  206. package/nodes/locales/fr/knxUltimateHuePlug.html +41 -0
  207. package/nodes/locales/fr/knxUltimateHuePlug.json +33 -0
  208. package/nodes/locales/fr/knxUltimateHueScene.html +36 -0
  209. package/nodes/locales/fr/knxUltimateHueScene.json +41 -0
  210. package/nodes/locales/fr/knxUltimateHueTapDial.html +31 -0
  211. package/nodes/locales/fr/knxUltimateHueTapDial.json +28 -0
  212. package/nodes/locales/fr/knxUltimateHueTemperatureSensor.html +27 -0
  213. package/nodes/locales/fr/knxUltimateHueTemperatureSensor.json +30 -0
  214. package/nodes/locales/fr/knxUltimateHueZigbeeConnectivity.html +28 -0
  215. package/nodes/locales/fr/knxUltimateHueZigbeeConnectivity.json +30 -0
  216. package/nodes/locales/fr/knxUltimateHuedevice_software_update.html +25 -0
  217. package/nodes/locales/fr/knxUltimateHuedevice_software_update.json +30 -0
  218. package/nodes/locales/fr/knxUltimateLoadControl.html +61 -0
  219. package/nodes/locales/fr/knxUltimateLoadControl.json +21 -0
  220. package/nodes/locales/fr/knxUltimateLogger.html +118 -0
  221. package/nodes/locales/fr/knxUltimateLogger.json +19 -0
  222. package/nodes/locales/fr/knxUltimateSceneController.html +87 -0
  223. package/nodes/locales/fr/knxUltimateSceneController.json +29 -0
  224. package/nodes/locales/fr/knxUltimateViewer.html +441 -0
  225. package/nodes/locales/fr/knxUltimateViewer.json +11 -0
  226. package/nodes/locales/fr/knxUltimateWatchDog.html +177 -0
  227. package/nodes/locales/fr/knxUltimateWatchDog.json +23 -0
  228. package/nodes/locales/{it-IT → it}/hue-config.html +6 -6
  229. package/nodes/locales/{it-IT → it}/knxUltimate-config.html +21 -29
  230. package/nodes/locales/{it-IT → it}/knxUltimate.html +33 -40
  231. package/nodes/locales/{it-IT → it}/knxUltimateAlerter.html +13 -17
  232. package/nodes/locales/{it-IT → it}/knxUltimateAutoResponder.html +23 -26
  233. package/nodes/locales/it/knxUltimateGarageDoorBarrierOpener.html +27 -0
  234. package/nodes/locales/{it-IT → it}/knxUltimateGlobalContext.html +12 -14
  235. package/nodes/locales/{it-IT → it}/knxUltimateHATranslator.html +1 -2
  236. package/nodes/locales/it/knxUltimateHueBattery.html +25 -0
  237. package/nodes/locales/it/knxUltimateHueBattery.json +18 -6
  238. package/nodes/locales/it/knxUltimateHueButton.html +53 -0
  239. package/nodes/locales/it/knxUltimateHueButton.json +21 -2
  240. package/nodes/locales/it/knxUltimateHueCameraMotion.html +41 -0
  241. package/nodes/locales/it/knxUltimateHueCameraMotion.json +30 -0
  242. package/nodes/locales/{it-IT → it}/knxUltimateHueContactSensor.html +3 -3
  243. package/nodes/locales/it/knxUltimateHueContactSensor.json +13 -2
  244. package/nodes/locales/it/knxUltimateHueHumiditySensor 2.html +11 -0
  245. package/nodes/locales/it/knxUltimateHueHumiditySensor.html +27 -0
  246. package/nodes/locales/it/knxUltimateHueHumiditySensor.json +30 -0
  247. package/nodes/locales/{it-IT → it}/knxUltimateHueLight.html +28 -29
  248. package/nodes/locales/it/knxUltimateHueLight.json +13 -3
  249. package/nodes/locales/{it-IT → it}/knxUltimateHueLightSensor.html +2 -2
  250. package/nodes/locales/it/knxUltimateHueMotion.html +29 -0
  251. package/nodes/locales/it/knxUltimateHueMotion.json +16 -5
  252. package/nodes/locales/it/knxUltimateHuePlug.html +41 -0
  253. package/nodes/locales/it/knxUltimateHuePlug.json +33 -0
  254. package/nodes/locales/it/knxUltimateHueScene.html +50 -0
  255. package/nodes/locales/it/knxUltimateHueScene.json +16 -3
  256. package/nodes/locales/it/knxUltimateHueTapDial.html +45 -0
  257. package/nodes/locales/it/knxUltimateHueTapDial.json +14 -2
  258. package/nodes/locales/{it-IT → it}/knxUltimateHueTemperatureSensor.html +2 -2
  259. package/nodes/locales/it/knxUltimateHueTemperatureSensor.json +18 -6
  260. package/nodes/locales/{it-IT → it}/knxUltimateHueZigbeeConnectivity.html +5 -5
  261. package/nodes/locales/it/knxUltimateHueZigbeeConnectivity.json +18 -6
  262. package/nodes/locales/{it-IT → it}/knxUltimateHuedevice_software_update.html +4 -4
  263. package/nodes/locales/it/knxUltimateHuedevice_software_update.json +12 -0
  264. package/nodes/locales/{it-IT → it}/knxUltimateLoadControl.html +6 -7
  265. package/nodes/locales/{it-IT → it}/knxUltimateLogger.html +13 -8
  266. package/nodes/locales/{it-IT → it}/knxUltimateSceneController.html +14 -12
  267. package/nodes/locales/{it-IT → it}/knxUltimateViewer.html +7 -10
  268. package/nodes/locales/it/knxUltimateWatchDog.html +173 -0
  269. package/nodes/locales/zh-CN/hue-config.html +2 -2
  270. package/nodes/locales/zh-CN/knxUltimate-config.html +11 -20
  271. package/nodes/locales/zh-CN/knxUltimate.html +25 -31
  272. package/nodes/locales/zh-CN/knxUltimateAlerter.html +5 -9
  273. package/nodes/locales/zh-CN/knxUltimateAutoResponder.html +22 -27
  274. package/nodes/locales/zh-CN/knxUltimateGarageDoorBarrierOpener.html +6 -42
  275. package/nodes/locales/zh-CN/knxUltimateGlobalContext.html +9 -11
  276. package/nodes/locales/zh-CN/knxUltimateHATranslator.html +2 -3
  277. package/nodes/locales/zh-CN/knxUltimateHueBattery.html +14 -7
  278. package/nodes/locales/zh-CN/knxUltimateHueBattery.json +18 -6
  279. package/nodes/locales/zh-CN/knxUltimateHueButton.html +39 -23
  280. package/nodes/locales/zh-CN/knxUltimateHueButton.json +21 -2
  281. package/nodes/locales/zh-CN/knxUltimateHueCameraMotion.html +41 -0
  282. package/nodes/locales/zh-CN/knxUltimateHueCameraMotion.json +30 -0
  283. package/nodes/locales/zh-CN/knxUltimateHueContactSensor.html +2 -2
  284. package/nodes/locales/zh-CN/knxUltimateHueContactSensor.json +13 -2
  285. package/nodes/locales/zh-CN/knxUltimateHueHumiditySensor.html +27 -0
  286. package/nodes/locales/zh-CN/knxUltimateHueHumiditySensor.json +30 -0
  287. package/nodes/locales/zh-CN/knxUltimateHueLight.html +33 -32
  288. package/nodes/locales/zh-CN/knxUltimateHueLight.json +13 -3
  289. package/nodes/locales/zh-CN/knxUltimateHueLightSensor.html +3 -3
  290. package/nodes/locales/zh-CN/knxUltimateHueMotion.html +17 -14
  291. package/nodes/locales/zh-CN/knxUltimateHueMotion.json +16 -5
  292. package/nodes/locales/zh-CN/knxUltimateHuePlug.html +41 -0
  293. package/nodes/locales/zh-CN/knxUltimateHuePlug.json +33 -0
  294. package/nodes/locales/zh-CN/knxUltimateHueScene.html +48 -42
  295. package/nodes/locales/zh-CN/knxUltimateHueScene.json +15 -2
  296. package/nodes/locales/zh-CN/knxUltimateHueTapDial.html +33 -18
  297. package/nodes/locales/zh-CN/knxUltimateHueTapDial.json +14 -2
  298. package/nodes/locales/zh-CN/knxUltimateHueTemperatureSensor.html +1 -1
  299. package/nodes/locales/zh-CN/knxUltimateHueTemperatureSensor.json +19 -6
  300. package/nodes/locales/zh-CN/knxUltimateHueZigbeeConnectivity.html +4 -4
  301. package/nodes/locales/zh-CN/knxUltimateHueZigbeeConnectivity.json +18 -6
  302. package/nodes/locales/zh-CN/knxUltimateHuedevice_software_update.html +5 -5
  303. package/nodes/locales/zh-CN/knxUltimateHuedevice_software_update.json +12 -0
  304. package/nodes/locales/zh-CN/knxUltimateLoadControl.html +8 -9
  305. package/nodes/locales/zh-CN/knxUltimateLogger.html +8 -3
  306. package/nodes/locales/zh-CN/knxUltimateSceneController.html +8 -6
  307. package/nodes/locales/zh-CN/knxUltimateViewer.html +9 -13
  308. package/nodes/locales/zh-CN/knxUltimateWatchDog.html +158 -0
  309. package/nodes/utils/hueEngine.mjs +14 -8
  310. package/package.json +6 -3
  311. package/resources/htmlUtils.js +27 -0
  312. package/scripts/manual_translate_fr_es.py +149 -0
  313. package/scripts/sync-help-from-wiki.js +98 -0
  314. package/scripts/update-help-from-wiki.js +116 -0
  315. package/tutorial/HUE Api/Hue CLIP API.html +47356 -0
  316. package/tutorial/HUE Api/Hue CLIP API_files/bootstrap.min.css +6 -0
  317. package/tutorial/HUE Api/Hue CLIP API_files/bootstrap.min.js +6 -0
  318. package/tutorial/HUE Api/Hue CLIP API_files/default.min.css +1 -0
  319. package/tutorial/HUE Api/Hue CLIP API_files/highlight.min.js +1296 -0
  320. package/tutorial/HUE Api/Hue CLIP API_files/jquery-3.5.1.min.js +2 -0
  321. package/nodes/locales/de-DE/knxUltimateGarageDoorBarrierOpener.html +0 -63
  322. package/nodes/locales/de-DE/knxUltimateHueBattery.html +0 -18
  323. package/nodes/locales/de-DE/knxUltimateHueButton.html +0 -37
  324. package/nodes/locales/de-DE/knxUltimateHueMotion.html +0 -26
  325. package/nodes/locales/de-DE/knxUltimateHueScene.html +0 -44
  326. package/nodes/locales/de-DE/knxUltimateHueTapDial.html +0 -30
  327. package/nodes/locales/en-US/knxUltimateGarageDoorBarrierOpener.html +0 -63
  328. package/nodes/locales/en-US/knxUltimateHueBattery.html +0 -18
  329. package/nodes/locales/en-US/knxUltimateHueBattery.json +0 -18
  330. package/nodes/locales/en-US/knxUltimateHueButton.html +0 -37
  331. package/nodes/locales/en-US/knxUltimateHueButton.json +0 -15
  332. package/nodes/locales/en-US/knxUltimateHueContactSensor.json +0 -15
  333. package/nodes/locales/en-US/knxUltimateHueLight.html +0 -102
  334. package/nodes/locales/en-US/knxUltimateHueMotion.html +0 -26
  335. package/nodes/locales/en-US/knxUltimateHueMotion.json +0 -16
  336. package/nodes/locales/en-US/knxUltimateHueScene.html +0 -44
  337. package/nodes/locales/en-US/knxUltimateHueScene.json +0 -28
  338. package/nodes/locales/en-US/knxUltimateHueTapDial.html +0 -30
  339. package/nodes/locales/en-US/knxUltimateHueTapDial.json +0 -16
  340. package/nodes/locales/en-US/knxUltimateHueTemperatureSensor.json +0 -18
  341. package/nodes/locales/en-US/knxUltimateHueZigbeeConnectivity.json +0 -18
  342. package/nodes/locales/en-US/knxUltimateHuedevice_software_update.json +0 -18
  343. package/nodes/locales/it-IT/knxUltimateGarageDoorBarrierOpener.html +0 -63
  344. package/nodes/locales/it-IT/knxUltimateHueBattery.html +0 -18
  345. package/nodes/locales/it-IT/knxUltimateHueButton.html +0 -36
  346. package/nodes/locales/it-IT/knxUltimateHueMotion.html +0 -26
  347. package/nodes/locales/it-IT/knxUltimateHueScene.html +0 -44
  348. package/nodes/locales/it-IT/knxUltimateHueTapDial.html +0 -30
  349. /package/nodes/locales/{en-US → en}/common.json +0 -0
  350. /package/nodes/locales/{en-US → en}/hue-config.json +0 -0
  351. /package/nodes/locales/{en-US → en}/knxUltimate-config.json +0 -0
  352. /package/nodes/locales/{en-US → en}/knxUltimate.json +0 -0
  353. /package/nodes/locales/{en-US → en}/knxUltimateAlerter.json +0 -0
  354. /package/nodes/locales/{en-US → en}/knxUltimateAutoResponder.json +0 -0
  355. /package/nodes/locales/{en-US → en}/knxUltimateGarageDoorBarrierOpener.json +0 -0
  356. /package/nodes/locales/{en-US → en}/knxUltimateGlobalContext.json +0 -0
  357. /package/nodes/locales/{en-US → en}/knxUltimateHATranslator.json +0 -0
  358. /package/nodes/locales/{en-US → en}/knxUltimateHueContactSensor.html +0 -0
  359. /package/nodes/locales/{en-US → en}/knxUltimateHueLightSensor.json +0 -0
  360. /package/nodes/locales/{en-US → en}/knxUltimateLoadControl.json +0 -0
  361. /package/nodes/locales/{en-US → en}/knxUltimateLogger.json +0 -0
  362. /package/nodes/locales/{en-US → en}/knxUltimateSceneController.json +0 -0
  363. /package/nodes/locales/{en-US → en}/knxUltimateViewer.json +0 -0
  364. /package/nodes/locales/{en-US → en}/knxUltimateWatchDog.json +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,20 @@
6
6
 
7
7
  # CHANGELOG
8
8
 
9
+ **Version 4.0.11** - October 2025<br/>
10
+ - HUE nodes: hardened KNX telegram handling with a shared safe-send guard so editor events no longer ceases to function, when the KNX gateway is offline.<br/>
11
+ - HUE Contact Sensor node: placeholders now leverage i18n translations with graceful fallback when translation keys are missing.<br/>
12
+ - Editor polish: unified the default width of the `name` input across KNX and Hue nodes for a consistent layout.<br/>
13
+ - KNX Scene Controller, Alerter and Load Control nodes: GA autocompletes now open their suggestion list immediately on focus/click to speed up GA selection.<br/>
14
+ - Docs: audited external links; Hue API references require developer login but all other anchors resolve correctly.<br/>
15
+ - HUE Light node: added configuration UI and runtime support for Hue lamp dynamic effects (candle, fireplace, etc.) with KNX mappings and status feedback.<br/>
16
+ - NEW: Added Hue Plug/Outlet node to map KNX on/off control to Philips Hue smart plugs.<br/>
17
+ - NEW: Added Hue Humidity Sensor node to expose relative humidity readings from Hue bridges to KNX.<br/>
18
+ - NEW: Added Hue Camera Motion node to forward Hue camera motion detections to KNX, with optional flow output pins.<br/>
19
+ - Hue Button node: refreshed editor layout and switched to Hue `button.button_report.event` instead of the deprecated `last_event`.<br/>
20
+ - Hue Battery, Motion, Temperature, Light Sensor and Zigbee Connectivity nodes now share the unified editor layout with refresh icon, KNX-aware tabs and optional flow pin toggles.<br/>
21
+ - Docs: cleaned bold markdown spacing across KNX Ultimate help translations to avoid rendering glitches.<br/>
22
+
9
23
  **Version 4.0.10** - October 2025<br/>
10
24
  - KNX Config node: you can now choose wether to display only the errors in the node statuses only errors.<br/>
11
25
 
@@ -1961,4 +1975,3 @@ This is an interim version, to quick fix some issues. Please report any issue wi
1961
1975
 
1962
1976
  **Version 0.0.1 BETA**<br/>
1963
1977
  - Initial release<br/>
1964
-
@@ -168,7 +168,7 @@
168
168
  <div id="waitWindow" hidden>
169
169
  <br/><br/>
170
170
  <p align="center">
171
- <i class="fa-solid fa-hourglass-start fa-spin-pulse fa-4x"></i><br/><br/>
171
+ <i class="fa-solid fa-hourglass-start fa-spin-pulse fa-2x"></i><br/><br/>
172
172
  <span data-i18n="hue-config.properties.wait_message"></span>
173
173
  </p>
174
174
  </div>
@@ -231,4 +231,4 @@
231
231
  </div>
232
232
 
233
233
 
234
- </script>
234
+ </script>
@@ -246,6 +246,9 @@ module.exports = (RED) => {
246
246
  let allResources;
247
247
  if (_rtype === "light" || _rtype === "grouped_light") {
248
248
  allResources = node.hueAllResources.filter((a) => a.type === "light" || a.type === "grouped_light");
249
+ } else if (_rtype === "plug") {
250
+ allResources = node.hueAllResources.filter((a) => a.type === "plug" || a.type === "smartplug" || a.type === "smart_plug");
251
+ console.log('getResources plug raw resources', allResources.map((res) => ({ id: res.id, type: res.type, owner: res.owner?.rtype })));
249
252
  } else {
250
253
  allResources = node.hueAllResources.filter((a) => a.type === _rtype);
251
254
  }
@@ -324,6 +327,19 @@ module.exports = (RED) => {
324
327
  id: resource.id,
325
328
  });
326
329
  }
330
+ if (_rtype === "plug") {
331
+ const linkedDevice = node.hueAllResources.find((dev) => dev.type === "device" && dev.services.find((serv) => serv.rid === resource.id));
332
+ const room = node.hueAllRooms?.find((roomItem) => roomItem.children?.find((child) => child.rid === linkedDevice?.id));
333
+ const plugName = linkedDevice?.metadata?.name || resource.metadata?.name || "Unnamed Plug";
334
+ const stateLabel = resource?.on?.on === true ? "on" : "off";
335
+ console.log('getResources plug direct resource', { id: resource.id, type: resource.type, name: plugName, linkedDevice: linkedDevice?.id });
336
+ retArray.push({
337
+ name: `Plug: ${plugName}${room !== undefined ? `, room ${room.metadata.name}` : ""} [${stateLabel}]`,
338
+ id: resource.id,
339
+ type: resource.type,
340
+ deviceObject: resource,
341
+ });
342
+ }
327
343
  if (_rtype === "temperature") {
328
344
  const Room = node.hueAllRooms.find((room) => room.children.find((child) => child.rid === resource.owner.rid));
329
345
  const linkedDevName = node.hueAllResources.find((dev) => dev.type === "device" && dev.services.find((serv) => serv.rid === resource.id)).metadata.name || "";
@@ -332,6 +348,14 @@ module.exports = (RED) => {
332
348
  id: resource.id,
333
349
  });
334
350
  }
351
+ if (_rtype === "humidity") {
352
+ const Room = node.hueAllRooms.find((room) => room.children.find((child) => child.rid === resource.owner.rid));
353
+ const linkedDevName = node.hueAllResources.find((dev) => dev.type === "device" && dev.services.find((serv) => serv.rid === resource.id)).metadata.name || "";
354
+ retArray.push({
355
+ name: `Humidity: ${linkedDevName}${Room !== undefined ? `, room ${Room.metadata.name}` : ""}`,
356
+ id: resource.id,
357
+ });
358
+ }
335
359
  if (_rtype === "device_power") {
336
360
  const Room = node.hueAllRooms.find((room) => room.children.find((child) => child.rid === resource.owner.rid));
337
361
  const linkedDevName = node.hueAllResources.find((dev) => dev.type === "device" && dev.services.find((serv) => serv.rid === resource.id)).metadata.name || "";
@@ -379,6 +403,38 @@ module.exports = (RED) => {
379
403
  });
380
404
  }
381
405
  }
406
+ if (_rtype === "plug" && retArray.length === 0) {
407
+ const plugDevices = node.hueAllResources.filter((dev) => {
408
+ if (dev.type !== "device" || !Array.isArray(dev.services)) return false;
409
+ const archetypePlug = dev.product_data?.product_archetype === 'plug' || dev.metadata?.archetype === 'plug' || /plug/i.test(dev.product_data?.product_name || '') || /plug/i.test(dev.metadata?.name || '');
410
+ const hasService = dev.services.some((serv) => ['plug', 'smartplug', 'smart_plug', 'light'].includes(serv.rtype || ''));
411
+ return archetypePlug && hasService;
412
+ });
413
+ plugDevices.forEach((device) => {
414
+ try {
415
+ const plugService = device.services.find((serv) => ['plug', 'smartplug', 'smart_plug', 'light'].includes(serv.rtype || ''));
416
+ if (!plugService) return;
417
+ const plugResource = node.hueAllResources.find((res) => res.id === plugService.rid) || {};
418
+ const room = node.hueAllRooms?.find((roomItem) => roomItem.children?.find((child) => child.rid === device.id));
419
+ const plugName = device.metadata?.name || plugResource.metadata?.name || "Unnamed Plug";
420
+ const stateLabel = plugResource?.on?.on === true ? "on" : (plugResource?.on?.on === false ? "off" : "");
421
+ retArray.push({
422
+ name: `Plug: ${plugName}${room !== undefined ? `, room ${room.metadata.name}` : ""}${stateLabel ? ` [${stateLabel}]` : ""}`,
423
+ id: plugService.rid || device.id,
424
+ type: plugService.rtype || plugResource.type || 'light',
425
+ deviceObject: plugResource.on ? plugResource : {
426
+ id: plugService.rid || device.id,
427
+ type: plugService.rtype || plugResource.type || 'light',
428
+ on: plugResource.on,
429
+ owner: { rid: device.id, rtype: 'device' },
430
+ },
431
+ });
432
+ } catch (err) {
433
+ node.sysLogger?.warn(`KNXUltimateHue: getResources plug fallback error ${err.message}`);
434
+ }
435
+ });
436
+ }
437
+ node.sysLogger?.debug(`getResources plug returning ${retArray.length}`);
382
438
  return { devices: retArray };
383
439
  } catch (error) {
384
440
  node.sysLogger?.error(`KNXUltimateHue: hueEngine: classHUE: getResources: error ${error.message}`);
@@ -161,16 +161,97 @@
161
161
  })
162
162
  }
163
163
 
164
+ const applyEditorOptions = (editor) => {
165
+ try {
166
+ if (!editor) return;
167
+ if (typeof editor.updateOptions === 'function') {
168
+ editor.updateOptions({ lineNumbers: 'off', minimap: { enabled: false }, scrollbar: { verticalScrollbarSize: 8, horizontalScrollbarSize: 8 } });
169
+ } else if (editor.renderer && typeof editor.renderer.setShowGutter === 'function') {
170
+ editor.renderer.setShowGutter(false);
171
+ }
172
+ if (typeof editor.setShowPrintMargin === 'function') editor.setShowPrintMargin(false);
173
+ } catch (error) { }
174
+ };
175
+
176
+ const highlightEditor = (editor, active) => {
177
+ if (!editor) return;
178
+ try {
179
+ if (editor.renderer && editor.renderer.scroller) {
180
+ editor.renderer.scroller.style.backgroundColor = active ? '#e6ffe6' : '';
181
+ }
182
+ if (editor.renderer && editor.renderer.content) {
183
+ editor.renderer.content.style.backgroundColor = active ? '#e6ffe6' : '';
184
+ }
185
+ if (typeof editor.getDomNode === 'function') {
186
+ const dom = editor.getDomNode();
187
+ if (dom) dom.style.backgroundColor = active ? '#e6ffe6' : '';
188
+ } else if (editor.container) {
189
+ editor.container.style.backgroundColor = active ? '#e6ffe6' : '';
190
+ }
191
+ } catch (error) { }
192
+ };
193
+
194
+ const attachFocusHandlers = (editor) => {
195
+ if (!editor) return;
196
+ try {
197
+ if (typeof editor.on === 'function' && editor.renderer) {
198
+ editor.on('focus', () => { node.activeCodeEditor = editor; highlightEditor(editor, true); });
199
+ editor.on('blur', () => highlightEditor(editor, false));
200
+ } else if (typeof editor.onDidFocusEditorWidget === 'function') {
201
+ editor.onDidFocusEditorWidget(() => { node.activeCodeEditor = editor; highlightEditor(editor, true); });
202
+ if (typeof editor.onDidBlurEditorWidget === 'function') {
203
+ editor.onDidBlurEditorWidget(() => highlightEditor(editor, false));
204
+ }
205
+ }
206
+ } catch (error) { }
207
+ };
208
+
209
+ const insertTextIntoEditor = (editor, text) => {
210
+ if (!editor || !text) return;
211
+ try {
212
+ if (editor.session && typeof editor.session.insert === 'function') {
213
+ editor.focus();
214
+ editor.session.insert(editor.getCursorPosition(), text);
215
+ return;
216
+ }
217
+ if (typeof editor.executeEdits === 'function' && typeof editor.getPosition === 'function' && typeof monaco !== 'undefined') {
218
+ const position = editor.getPosition();
219
+ if (!position) return;
220
+ const range = new monaco.Range(position.lineNumber, position.column, position.lineNumber, position.column);
221
+ editor.executeEdits('knxInsertGA', [{ range, text, forceMoveMarkers: true }]);
222
+ editor.setPosition({ lineNumber: position.lineNumber, column: position.column + text.length });
223
+ editor.focus();
224
+ }
225
+ } catch (error) { }
226
+ };
227
+
164
228
  node.sendMsgToKNXCodeEditor = RED.editor.createEditor({
165
229
  id: 'sendMsgToKNXCode-editor',
166
230
  mode: 'ace/mode/nrjavascript',
167
231
  value: node.sendMsgToKNXCode
168
232
  });
233
+ applyEditorOptions(node.sendMsgToKNXCodeEditor);
169
234
  node.receiveMsgFromKNXCodeEditor = RED.editor.createEditor({
170
235
  id: 'receiveMsgFromKNXCode-editor',
171
236
  mode: 'ace/mode/nrjavascript',
172
237
  value: node.receiveMsgFromKNXCode
173
238
  });
239
+ applyEditorOptions(node.receiveMsgFromKNXCodeEditor);
240
+ node.activeCodeEditor = null;
241
+ attachFocusHandlers(node.sendMsgToKNXCodeEditor);
242
+ attachFocusHandlers(node.receiveMsgFromKNXCodeEditor);
243
+
244
+ $("#btn-insert-knxFunctionGA").off('click').on('click', function () {
245
+ const value = $("#node-input-knxFunctionHelperGAList").val();
246
+ if (!value || value.trim() === '') {
247
+ $("#node-input-knxFunctionHelperGAList").focus();
248
+ return;
249
+ }
250
+ const editor = node.activeCodeEditor || node.sendMsgToKNXCodeEditor || node.receiveMsgFromKNXCodeEditor;
251
+ if (!editor) return;
252
+ insertTextIntoEditor(editor, value);
253
+ });
254
+
174
255
  const configureSnippetPicker = (snippets, inputSelector, datalistSelector, applySnippet) => {
175
256
  const inputEl = $(inputSelector)
176
257
  const datalistEl = $(datalistSelector)
@@ -718,7 +799,7 @@
718
799
  <i class="fa fa-tag"></i>
719
800
  <span data-i18n="knxUltimate.properties.node-input-name"></span>
720
801
  </label>
721
- <input style="width:220px;" type="text" id="node-input-name"
802
+ <input style="flex:1 1 240px; min-width:240px; max-width:240px;" type="text" id="node-input-name"
722
803
  data-i18n="[placeholder]knxUltimate.properties.node-input-name" />
723
804
  </div>
724
805
  <div class="form-row" id="divTopic">
@@ -897,7 +978,11 @@
897
978
  <i class="fa fa-search"></i> <span data-i18n="knxUltimate.snippets.searchGA"></span>
898
979
  </label>
899
980
  <input type="text" id="node-input-knxFunctionHelperGAList"
900
- data-i18n="[placeholder]knxUltimate.placeholder.search" />
981
+ data-i18n="[placeholder]knxUltimate.placeholder.search" style="max-width:260px;" />
982
+ <button type="button" class="red-ui-button" id="btn-insert-knxFunctionGA" title="Insert"
983
+ style="margin-left:4px;">
984
+ <i class="fa fa-level-down"></i>
985
+ </button>
901
986
  </div>
902
987
 
903
988
 
@@ -119,8 +119,11 @@
119
119
  }
120
120
 
121
121
  }
122
- }).focus(function () {
123
- $(this).autocomplete('search', $(this).val() + 'exactmatch');
122
+ });
123
+ oTopicField.on('focus.knxUltimateAlerter click.knxUltimateAlerter', function () {
124
+ try {
125
+ $(this).autocomplete('search', '');
126
+ } catch (error) { /* empty */ }
124
127
  });
125
128
  try { if (oNodeServer && oNodeServer.id) KNX_enableSecureFormatting(oTopicField, oNodeServer.id); } catch (e) {}
126
129
 
@@ -202,7 +205,7 @@
202
205
 
203
206
  <div class="form-row">
204
207
  <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="knxUltimateAlerter.properties.node-input-name"></span> </label>
205
- <input type="text" id="node-input-name" data-i18n="[placeholder]knxUltimateAlerter.properties.node-input-name">
208
+ <input type="text" id="node-input-name" data-i18n="[placeholder]knxUltimateAlerter.properties.node-input-name" style="flex:1 1 240px; min-width:240px; max-width:240px;">
206
209
  </div>
207
210
 
208
211
  <div class="form-row">
@@ -242,5 +245,3 @@
242
245
  </div>
243
246
 
244
247
  </script>
245
-
246
-
@@ -87,7 +87,7 @@
87
87
  <label for="node-input-name" >
88
88
  <i class="fa fa-tag"></i> Name
89
89
  </label>
90
- <input type="text" id="node-input-name" data-i18n="[placeholder]knxUltimateAutoResponder.node-input-name" />
90
+ <input type="text" id="node-input-name" data-i18n="[placeholder]knxUltimateAutoResponder.node-input-name" style="flex:1 1 240px; min-width:240px; max-width:240px;" />
91
91
  </div>
92
92
 
93
93
  <div class="form-row">
@@ -97,4 +97,3 @@
97
97
 
98
98
  </script>
99
99
 
100
-
@@ -86,7 +86,7 @@
86
86
  <i class="fa fa-tag"></i>
87
87
  <span data-i18n="knxUltimateGlobalContext.node-input-name"></span>
88
88
  </label>
89
- <input style="width:35%;" type="text" id="node-input-name" data-i18n="[placeholder]knxUltimateGlobalContext.node-input-name" />
89
+ <input style="flex:1 1 240px; min-width:240px; max-width:240px;" type="text" id="node-input-name" data-i18n="[placeholder]knxUltimateGlobalContext.node-input-name" />
90
90
  </div>
91
91
 
92
92
  <div class="form-row">
@@ -123,4 +123,3 @@
123
123
  </div>
124
124
 
125
125
  </script>
126
-