zigbee-herdsman-converters 20.13.0 → 20.14.1

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 (531) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/converters/fromZigbee.d.ts.map +1 -1
  3. package/converters/fromZigbee.js +345 -334
  4. package/converters/fromZigbee.js.map +1 -1
  5. package/converters/toZigbee.d.ts +1 -1
  6. package/converters/toZigbee.d.ts.map +1 -1
  7. package/converters/toZigbee.js +80 -82
  8. package/converters/toZigbee.js.map +1 -1
  9. package/devices/ITCommander.d.ts.map +1 -1
  10. package/devices/ITCommander.js +1 -1
  11. package/devices/ITCommander.js.map +1 -1
  12. package/devices/acova.d.ts.map +1 -1
  13. package/devices/acova.js.map +1 -1
  14. package/devices/akuvox.d.ts.map +1 -1
  15. package/devices/akuvox.js.map +1 -1
  16. package/devices/aldi.d.ts.map +1 -1
  17. package/devices/aldi.js.map +1 -1
  18. package/devices/alecto.d.ts.map +1 -1
  19. package/devices/alecto.js.map +1 -1
  20. package/devices/atlantic.d.ts.map +1 -1
  21. package/devices/atlantic.js.map +1 -1
  22. package/devices/aubess.d.ts.map +1 -1
  23. package/devices/aubess.js.map +1 -1
  24. package/devices/aurora_lighting.d.ts.map +1 -1
  25. package/devices/aurora_lighting.js +2 -2
  26. package/devices/aurora_lighting.js.map +1 -1
  27. package/devices/avatto.js +0 -1
  28. package/devices/avatto.js.map +1 -1
  29. package/devices/axis.d.ts.map +1 -1
  30. package/devices/axis.js.map +1 -1
  31. package/devices/bitron.d.ts.map +1 -1
  32. package/devices/bitron.js +9 -9
  33. package/devices/bitron.js.map +1 -1
  34. package/devices/bituo_technik.d.ts.map +1 -1
  35. package/devices/bituo_technik.js +2 -2
  36. package/devices/bituo_technik.js.map +1 -1
  37. package/devices/blaupunkt.d.ts.map +1 -1
  38. package/devices/blaupunkt.js +1 -1
  39. package/devices/blaupunkt.js.map +1 -1
  40. package/devices/blitzwolf.d.ts.map +1 -1
  41. package/devices/blitzwolf.js.map +1 -1
  42. package/devices/bosch.d.ts.map +1 -1
  43. package/devices/bosch.js +25 -25
  44. package/devices/bosch.js.map +1 -1
  45. package/devices/brimate.d.ts.map +1 -1
  46. package/devices/brimate.js.map +1 -1
  47. package/devices/bseed.d.ts.map +1 -1
  48. package/devices/bseed.js.map +1 -1
  49. package/devices/bticino.d.ts.map +1 -1
  50. package/devices/bticino.js.map +1 -1
  51. package/devices/busch_jaeger.d.ts.map +1 -1
  52. package/devices/busch_jaeger.js.map +1 -1
  53. package/devices/byun.d.ts.map +1 -1
  54. package/devices/byun.js.map +1 -1
  55. package/devices/casaia.d.ts.map +1 -1
  56. package/devices/casaia.js +2 -2
  57. package/devices/casaia.js.map +1 -1
  58. package/devices/centralite.d.ts.map +1 -1
  59. package/devices/centralite.js +5 -5
  60. package/devices/centralite.js.map +1 -1
  61. package/devices/cleverio.d.ts.map +1 -1
  62. package/devices/cleverio.js.map +1 -1
  63. package/devices/ctm.d.ts.map +1 -1
  64. package/devices/ctm.js +62 -62
  65. package/devices/ctm.js.map +1 -1
  66. package/devices/current_products_corp.d.ts.map +1 -1
  67. package/devices/current_products_corp.js.map +1 -1
  68. package/devices/custom_devices_diy.d.ts.map +1 -1
  69. package/devices/custom_devices_diy.js +12 -12
  70. package/devices/custom_devices_diy.js.map +1 -1
  71. package/devices/danalock.d.ts.map +1 -1
  72. package/devices/danalock.js.map +1 -1
  73. package/devices/danfoss.d.ts.map +1 -1
  74. package/devices/danfoss.js +2 -2
  75. package/devices/danfoss.js.map +1 -1
  76. package/devices/datek.d.ts.map +1 -1
  77. package/devices/datek.js +1 -1
  78. package/devices/datek.js.map +1 -1
  79. package/devices/dawon_dns.d.ts.map +1 -1
  80. package/devices/dawon_dns.js.map +1 -1
  81. package/devices/develco.d.ts.map +1 -1
  82. package/devices/develco.js +15 -14
  83. package/devices/develco.js.map +1 -1
  84. package/devices/digi.d.ts.map +1 -1
  85. package/devices/digi.js.map +1 -1
  86. package/devices/dlink.d.ts.map +1 -1
  87. package/devices/dlink.js.map +1 -1
  88. package/devices/easyaccess.d.ts.map +1 -1
  89. package/devices/easyaccess.js.map +1 -1
  90. package/devices/easyiot.d.ts.map +1 -1
  91. package/devices/easyiot.js.map +1 -1
  92. package/devices/echostar.d.ts.map +1 -1
  93. package/devices/echostar.js.map +1 -1
  94. package/devices/ecodim.d.ts.map +1 -1
  95. package/devices/ecodim.js +1 -1
  96. package/devices/ecodim.js.map +1 -1
  97. package/devices/ecolink.d.ts.map +1 -1
  98. package/devices/ecolink.js.map +1 -1
  99. package/devices/ecozy.d.ts.map +1 -1
  100. package/devices/ecozy.js.map +1 -1
  101. package/devices/enocean.d.ts.map +1 -1
  102. package/devices/enocean.js.map +1 -1
  103. package/devices/envilar.d.ts.map +1 -1
  104. package/devices/envilar.js +2 -2
  105. package/devices/envilar.js.map +1 -1
  106. package/devices/eurotronic.d.ts.map +1 -1
  107. package/devices/eurotronic.js.map +1 -1
  108. package/devices/evanell.d.ts.map +1 -1
  109. package/devices/evanell.js.map +1 -1
  110. package/devices/evology.d.ts.map +1 -1
  111. package/devices/evology.js.map +1 -1
  112. package/devices/ewelink.d.ts.map +1 -1
  113. package/devices/ewelink.js +1 -1
  114. package/devices/ewelink.js.map +1 -1
  115. package/devices/fantem.d.ts.map +1 -1
  116. package/devices/fantem.js +2 -2
  117. package/devices/fantem.js.map +1 -1
  118. package/devices/fireangel.d.ts.map +1 -1
  119. package/devices/fireangel.js.map +1 -1
  120. package/devices/frankever.d.ts.map +1 -1
  121. package/devices/frankever.js.map +1 -1
  122. package/devices/frient.d.ts.map +1 -1
  123. package/devices/frient.js.map +1 -1
  124. package/devices/gewiss.d.ts.map +1 -1
  125. package/devices/gewiss.js.map +1 -1
  126. package/devices/giex.d.ts.map +1 -1
  127. package/devices/giex.js.map +1 -1
  128. package/devices/gledopto.js +2 -2
  129. package/devices/gledopto.js.map +1 -1
  130. package/devices/gmmts.d.ts.map +1 -1
  131. package/devices/gmmts.js +23 -23
  132. package/devices/gmmts.js.map +1 -1
  133. package/devices/gumax.d.ts +4 -0
  134. package/devices/gumax.d.ts.map +1 -0
  135. package/devices/gumax.js +15 -0
  136. package/devices/gumax.js.map +1 -0
  137. package/devices/heiman.d.ts.map +1 -1
  138. package/devices/heiman.js +2 -2
  139. package/devices/heiman.js.map +1 -1
  140. package/devices/heimgard_technologies.d.ts.map +1 -1
  141. package/devices/heimgard_technologies.js +2 -2
  142. package/devices/heimgard_technologies.js.map +1 -1
  143. package/devices/hive.js +1 -1
  144. package/devices/hive.js.map +1 -1
  145. package/devices/hommyn.d.ts.map +1 -1
  146. package/devices/hommyn.js.map +1 -1
  147. package/devices/hzc.d.ts.map +1 -1
  148. package/devices/hzc.js.map +1 -1
  149. package/devices/hzc_electric.d.ts.map +1 -1
  150. package/devices/hzc_electric.js.map +1 -1
  151. package/devices/ihorn.d.ts.map +1 -1
  152. package/devices/ihorn.js.map +1 -1
  153. package/devices/imhotepcreation.d.ts.map +1 -1
  154. package/devices/index.d.ts.map +1 -1
  155. package/devices/index.js +4 -2
  156. package/devices/index.js.map +1 -1
  157. package/devices/innr.d.ts.map +1 -1
  158. package/devices/innr.js +2 -2
  159. package/devices/innr.js.map +1 -1
  160. package/devices/inovelli.d.ts.map +1 -1
  161. package/devices/inovelli.js +38 -38
  162. package/devices/inovelli.js.map +1 -1
  163. package/devices/insta.d.ts.map +1 -1
  164. package/devices/insta.js.map +1 -1
  165. package/devices/iotperfect.d.ts.map +1 -1
  166. package/devices/iotperfect.js.map +1 -1
  167. package/devices/iris.d.ts.map +1 -1
  168. package/devices/iris.js +1 -1
  169. package/devices/iris.js.map +1 -1
  170. package/devices/javis.d.ts.map +1 -1
  171. package/devices/javis.js.map +1 -1
  172. package/devices/jxuan.d.ts.map +1 -1
  173. package/devices/jxuan.js +2 -2
  174. package/devices/jxuan.js.map +1 -1
  175. package/devices/kami.d.ts.map +1 -1
  176. package/devices/kami.js.map +1 -1
  177. package/devices/keen_home.d.ts.map +1 -1
  178. package/devices/keen_home.js.map +1 -1
  179. package/devices/kmpcil.d.ts.map +1 -1
  180. package/devices/kmpcil.js +5 -5
  181. package/devices/kmpcil.js.map +1 -1
  182. package/devices/kwikset.d.ts.map +1 -1
  183. package/devices/kwikset.js.map +1 -1
  184. package/devices/led_trading.d.ts.map +1 -1
  185. package/devices/led_trading.js +1 -8
  186. package/devices/led_trading.js.map +1 -1
  187. package/devices/legrand.d.ts.map +1 -1
  188. package/devices/legrand.js +2 -2
  189. package/devices/legrand.js.map +1 -1
  190. package/devices/lellki.d.ts.map +1 -1
  191. package/devices/lellki.js +2 -2
  192. package/devices/lellki.js.map +1 -1
  193. package/devices/letv.d.ts.map +1 -1
  194. package/devices/letv.js.map +1 -1
  195. package/devices/leviton.d.ts.map +1 -1
  196. package/devices/leviton.js +1 -1
  197. package/devices/leviton.js.map +1 -1
  198. package/devices/lidl.d.ts.map +1 -1
  199. package/devices/lidl.js +15 -15
  200. package/devices/lidl.js.map +1 -1
  201. package/devices/lifecontrol.d.ts.map +1 -1
  202. package/devices/lifecontrol.js +1 -1
  203. package/devices/lifecontrol.js.map +1 -1
  204. package/devices/linkind.d.ts.map +1 -1
  205. package/devices/linkind.js +2 -2
  206. package/devices/linkind.js.map +1 -1
  207. package/devices/linptech.d.ts.map +1 -1
  208. package/devices/linptech.js +5 -5
  209. package/devices/linptech.js.map +1 -1
  210. package/devices/livolo.d.ts.map +1 -1
  211. package/devices/livolo.js +1 -1
  212. package/devices/livolo.js.map +1 -1
  213. package/devices/lixee.d.ts.map +1 -1
  214. package/devices/lixee.js +29 -28
  215. package/devices/lixee.js.map +1 -1
  216. package/devices/ls.d.ts.map +1 -1
  217. package/devices/ls.js.map +1 -1
  218. package/devices/lumi.d.ts.map +1 -1
  219. package/devices/lumi.js +7 -7
  220. package/devices/lumi.js.map +1 -1
  221. package/devices/lupus.d.ts.map +1 -1
  222. package/devices/lupus.js +2 -2
  223. package/devices/lupus.js.map +1 -1
  224. package/devices/lutron.d.ts.map +1 -1
  225. package/devices/lutron.js.map +1 -1
  226. package/devices/lux.d.ts.map +1 -1
  227. package/devices/lux.js.map +1 -1
  228. package/devices/lytko.js +6 -6
  229. package/devices/lytko.js.map +1 -1
  230. package/devices/meazon.d.ts.map +1 -1
  231. package/devices/meazon.js.map +1 -1
  232. package/devices/mercator.d.ts.map +1 -1
  233. package/devices/mercator.js +2 -2
  234. package/devices/mercator.js.map +1 -1
  235. package/devices/miboxer.d.ts.map +1 -1
  236. package/devices/miboxer.js +1 -1
  237. package/devices/miboxer.js.map +1 -1
  238. package/devices/moes.d.ts.map +1 -1
  239. package/devices/moes.js +3 -3
  240. package/devices/moes.js.map +1 -1
  241. package/devices/multiterm.js +1 -1
  242. package/devices/multiterm.js.map +1 -1
  243. package/devices/namron.js +6 -6
  244. package/devices/namron.js.map +1 -1
  245. package/devices/neo.d.ts.map +1 -1
  246. package/devices/neo.js +1 -1
  247. package/devices/neo.js.map +1 -1
  248. package/devices/net2grid.d.ts.map +1 -1
  249. package/devices/net2grid.js.map +1 -1
  250. package/devices/netvox.d.ts.map +1 -1
  251. package/devices/netvox.js.map +1 -1
  252. package/devices/niko.d.ts.map +1 -1
  253. package/devices/niko.js +10 -10
  254. package/devices/niko.js.map +1 -1
  255. package/devices/ninja_blocks.d.ts.map +1 -1
  256. package/devices/ninja_blocks.js.map +1 -1
  257. package/devices/nodon.d.ts.map +1 -1
  258. package/devices/nodon.js +2 -2
  259. package/devices/nodon.js.map +1 -1
  260. package/devices/nous.d.ts.map +1 -1
  261. package/devices/nous.js.map +1 -1
  262. package/devices/novo.d.ts.map +1 -1
  263. package/devices/novo.js.map +1 -1
  264. package/devices/nue_3a.js +2 -2
  265. package/devices/nue_3a.js.map +1 -1
  266. package/devices/nyce.d.ts.map +1 -1
  267. package/devices/nyce.js.map +1 -1
  268. package/devices/onesti.d.ts.map +1 -1
  269. package/devices/onesti.js.map +1 -1
  270. package/devices/openlumi.d.ts.map +1 -1
  271. package/devices/openlumi.js.map +1 -1
  272. package/devices/oujiabao.d.ts.map +1 -1
  273. package/devices/oujiabao.js.map +1 -1
  274. package/devices/owon.d.ts.map +1 -1
  275. package/devices/owon.js +35 -26
  276. package/devices/owon.js.map +1 -1
  277. package/devices/peq.d.ts.map +1 -1
  278. package/devices/peq.js.map +1 -1
  279. package/devices/perenio.d.ts.map +1 -1
  280. package/devices/perenio.js +21 -21
  281. package/devices/perenio.js.map +1 -1
  282. package/devices/philips.d.ts.map +1 -1
  283. package/devices/philips.js +28 -0
  284. package/devices/philips.js.map +1 -1
  285. package/devices/plaid.d.ts.map +1 -1
  286. package/devices/plaid.js.map +1 -1
  287. package/devices/plugwise.d.ts.map +1 -1
  288. package/devices/plugwise.js +1 -1
  289. package/devices/plugwise.js.map +1 -1
  290. package/devices/qa.d.ts.map +1 -1
  291. package/devices/qa.js.map +1 -1
  292. package/devices/qmotion.d.ts.map +1 -1
  293. package/devices/qmotion.js +1 -1
  294. package/devices/qmotion.js.map +1 -1
  295. package/devices/qoto.d.ts.map +1 -1
  296. package/devices/qoto.js.map +1 -1
  297. package/devices/rgb_genie.d.ts.map +1 -1
  298. package/devices/rgb_genie.js +2 -2
  299. package/devices/rgb_genie.js.map +1 -1
  300. package/devices/roome.d.ts.map +1 -1
  301. package/devices/roome.js.map +1 -1
  302. package/devices/rtx.d.ts.map +1 -1
  303. package/devices/rtx.js.map +1 -1
  304. package/devices/salus_controls.d.ts.map +1 -1
  305. package/devices/salus_controls.js.map +1 -1
  306. package/devices/saswell.d.ts.map +1 -1
  307. package/devices/saswell.js +1 -1
  308. package/devices/saswell.js.map +1 -1
  309. package/devices/sber.d.ts.map +1 -1
  310. package/devices/sber.js.map +1 -1
  311. package/devices/schlage.d.ts.map +1 -1
  312. package/devices/schlage.js.map +1 -1
  313. package/devices/schneider_electric.d.ts.map +1 -1
  314. package/devices/schneider_electric.js +22 -22
  315. package/devices/schneider_electric.js.map +1 -1
  316. package/devices/securifi.d.ts.map +1 -1
  317. package/devices/securifi.js.map +1 -1
  318. package/devices/sengled.d.ts.map +1 -1
  319. package/devices/sercomm.d.ts.map +1 -1
  320. package/devices/sercomm.js.map +1 -1
  321. package/devices/shade_control.d.ts.map +1 -1
  322. package/devices/shade_control.js.map +1 -1
  323. package/devices/shinasystem.js +1 -1
  324. package/devices/shinasystem.js.map +1 -1
  325. package/devices/siglis.d.ts.map +1 -1
  326. package/devices/siglis.js +4 -5
  327. package/devices/siglis.js.map +1 -1
  328. package/devices/sinope.d.ts.map +1 -1
  329. package/devices/sinope.js +76 -84
  330. package/devices/sinope.js.map +1 -1
  331. package/devices/siterwell.d.ts.map +1 -1
  332. package/devices/siterwell.js.map +1 -1
  333. package/devices/skydance.d.ts.map +1 -1
  334. package/devices/skydance.js.map +1 -1
  335. package/devices/smart9.d.ts.map +1 -1
  336. package/devices/smart9.js.map +1 -1
  337. package/devices/smartenit.d.ts.map +1 -1
  338. package/devices/smartenit.js.map +1 -1
  339. package/devices/smartthings.js +1 -1
  340. package/devices/smartthings.js.map +1 -1
  341. package/devices/smartwings.d.ts.map +1 -1
  342. package/devices/smartwings.js.map +1 -1
  343. package/devices/somgoms.d.ts.map +1 -1
  344. package/devices/somgoms.js.map +1 -1
  345. package/devices/sonoff.d.ts.map +1 -1
  346. package/devices/sonoff.js +2 -2
  347. package/devices/sonoff.js.map +1 -1
  348. package/devices/stelpro.d.ts.map +1 -1
  349. package/devices/stelpro.js +3 -3
  350. package/devices/stelpro.js.map +1 -1
  351. package/devices/sunricher.d.ts.map +1 -1
  352. package/devices/sunricher.js +3 -8
  353. package/devices/sunricher.js.map +1 -1
  354. package/devices/swann.d.ts.map +1 -1
  355. package/devices/swann.js.map +1 -1
  356. package/devices/tapestry.d.ts.map +1 -1
  357. package/devices/tapestry.js.map +1 -1
  358. package/devices/technicolor.d.ts.map +1 -1
  359. package/devices/technicolor.js.map +1 -1
  360. package/devices/third_reality.d.ts.map +1 -1
  361. package/devices/third_reality.js +166 -15
  362. package/devices/third_reality.js.map +1 -1
  363. package/devices/titan_products.d.ts.map +1 -1
  364. package/devices/titan_products.js.map +1 -1
  365. package/devices/tplink.d.ts.map +1 -1
  366. package/devices/tplink.js.map +1 -1
  367. package/devices/tuya.d.ts.map +1 -1
  368. package/devices/tuya.js +20 -20
  369. package/devices/tuya.js.map +1 -1
  370. package/devices/ubisys.d.ts.map +1 -1
  371. package/devices/ubisys.js +30 -27
  372. package/devices/ubisys.js.map +1 -1
  373. package/devices/uhome.d.ts.map +1 -1
  374. package/devices/uhome.js.map +1 -1
  375. package/devices/universal_electronics_inc.d.ts.map +1 -1
  376. package/devices/universal_electronics_inc.js +1 -1
  377. package/devices/universal_electronics_inc.js.map +1 -1
  378. package/devices/vesternet.d.ts.map +1 -1
  379. package/devices/vesternet.js.map +1 -1
  380. package/devices/viessmann.d.ts.map +1 -1
  381. package/devices/viessmann.js.map +1 -1
  382. package/devices/vimar.d.ts.map +1 -1
  383. package/devices/vimar.js.map +1 -1
  384. package/devices/visonic.d.ts.map +1 -1
  385. package/devices/visonic.js.map +1 -1
  386. package/devices/wally.d.ts.map +1 -1
  387. package/devices/wally.js.map +1 -1
  388. package/devices/waxman.d.ts.map +1 -1
  389. package/devices/waxman.js.map +1 -1
  390. package/devices/weiser.d.ts.map +1 -1
  391. package/devices/weiser.js.map +1 -1
  392. package/devices/wirenboard.d.ts.map +1 -1
  393. package/devices/wirenboard.js +11 -11
  394. package/devices/wirenboard.js.map +1 -1
  395. package/devices/woolley.d.ts.map +1 -1
  396. package/devices/woolley.js +1 -1
  397. package/devices/woolley.js.map +1 -1
  398. package/devices/woox.d.ts.map +1 -1
  399. package/devices/woox.js.map +1 -1
  400. package/devices/wyze.d.ts.map +1 -1
  401. package/devices/wyze.js.map +1 -1
  402. package/devices/xyzroe.d.ts.map +1 -1
  403. package/devices/xyzroe.js +6 -6
  404. package/devices/xyzroe.js.map +1 -1
  405. package/devices/yale.d.ts.map +1 -1
  406. package/devices/yale.js +3 -3
  407. package/devices/yale.js.map +1 -1
  408. package/devices/yookee.d.ts.map +1 -1
  409. package/devices/yookee.js.map +1 -1
  410. package/devices/zemismart.d.ts.map +1 -1
  411. package/devices/zemismart.js +2 -2
  412. package/devices/zemismart.js.map +1 -1
  413. package/devices/zen.d.ts.map +1 -1
  414. package/devices/zen.js.map +1 -1
  415. package/index.d.ts +5 -5
  416. package/index.d.ts.map +1 -1
  417. package/index.js +31 -16
  418. package/index.js.map +1 -1
  419. package/lib/color.d.ts +1 -1
  420. package/lib/color.d.ts.map +1 -1
  421. package/lib/color.js +47 -50
  422. package/lib/color.js.map +1 -1
  423. package/lib/configureKey.js +2 -2
  424. package/lib/configureKey.js.map +1 -1
  425. package/lib/develco.d.ts.map +1 -1
  426. package/lib/develco.js +5 -6
  427. package/lib/develco.js.map +1 -1
  428. package/lib/ewelink.d.ts.map +1 -1
  429. package/lib/exposes.js +1 -1
  430. package/lib/exposes.js.map +1 -1
  431. package/lib/ikea.d.ts +1 -1
  432. package/lib/ikea.d.ts.map +1 -1
  433. package/lib/ikea.js +10 -10
  434. package/lib/ikea.js.map +1 -1
  435. package/lib/ledvance.d.ts +1 -1
  436. package/lib/ledvance.d.ts.map +1 -1
  437. package/lib/legacy.d.ts +3 -16
  438. package/lib/legacy.d.ts.map +1 -1
  439. package/lib/legacy.js +121 -131
  440. package/lib/legacy.js.map +1 -1
  441. package/lib/legrand.d.ts +1 -1
  442. package/lib/legrand.d.ts.map +1 -1
  443. package/lib/legrand.js +4 -4
  444. package/lib/legrand.js.map +1 -1
  445. package/lib/light.d.ts +1 -1
  446. package/lib/light.js +5 -5
  447. package/lib/light.js.map +1 -1
  448. package/lib/logger.d.ts.map +1 -1
  449. package/lib/logger.js +4 -4
  450. package/lib/logger.js.map +1 -1
  451. package/lib/lumi.d.ts +1 -1
  452. package/lib/lumi.d.ts.map +1 -1
  453. package/lib/lumi.js +90 -92
  454. package/lib/lumi.js.map +1 -1
  455. package/lib/modernExtend.d.ts +1 -1
  456. package/lib/modernExtend.d.ts.map +1 -1
  457. package/lib/modernExtend.js +15 -15
  458. package/lib/modernExtend.js.map +1 -1
  459. package/lib/ota/common.d.ts +1 -1
  460. package/lib/ota/common.d.ts.map +1 -1
  461. package/lib/ota/common.js +5 -5
  462. package/lib/ota/common.js.map +1 -1
  463. package/lib/ota/gmmts.d.ts +1 -1
  464. package/lib/ota/gmmts.d.ts.map +1 -1
  465. package/lib/ota/gmmts.js +2 -2
  466. package/lib/ota/gmmts.js.map +1 -1
  467. package/lib/ota/index.d.ts +5 -5
  468. package/lib/ota/index.d.ts.map +1 -1
  469. package/lib/ota/index.js +7 -7
  470. package/lib/ota/index.js.map +1 -1
  471. package/lib/ota/inovelli.d.ts +1 -6
  472. package/lib/ota/inovelli.d.ts.map +1 -1
  473. package/lib/ota/inovelli.js +11 -11
  474. package/lib/ota/inovelli.js.map +1 -1
  475. package/lib/ota/jethome.d.ts +1 -1
  476. package/lib/ota/jethome.d.ts.map +1 -1
  477. package/lib/ota/jethome.js +4 -4
  478. package/lib/ota/jethome.js.map +1 -1
  479. package/lib/ota/ledvance.d.ts +1 -1
  480. package/lib/ota/ledvance.d.ts.map +1 -1
  481. package/lib/ota/ledvance.js +4 -4
  482. package/lib/ota/ledvance.js.map +1 -1
  483. package/lib/ota/lixee.d.ts +1 -1
  484. package/lib/ota/lixee.d.ts.map +1 -1
  485. package/lib/ota/lixee.js +3 -3
  486. package/lib/ota/lixee.js.map +1 -1
  487. package/lib/ota/salus.d.ts +1 -1
  488. package/lib/ota/salus.d.ts.map +1 -1
  489. package/lib/ota/salus.js +5 -5
  490. package/lib/ota/salus.js.map +1 -1
  491. package/lib/ota/securifi.d.ts +1 -1
  492. package/lib/ota/securifi.d.ts.map +1 -1
  493. package/lib/ota/securifi.js +2 -2
  494. package/lib/ota/securifi.js.map +1 -1
  495. package/lib/ota/tradfri.d.ts.map +1 -1
  496. package/lib/ota/tradfri.js +4 -4
  497. package/lib/ota/tradfri.js.map +1 -1
  498. package/lib/ota/ubisys.d.ts.map +1 -1
  499. package/lib/ota/ubisys.js +4 -4
  500. package/lib/ota/ubisys.js.map +1 -1
  501. package/lib/ota/zigbeeOTA.d.ts +1 -1
  502. package/lib/ota/zigbeeOTA.d.ts.map +1 -1
  503. package/lib/ota/zigbeeOTA.js +9 -9
  504. package/lib/ota/zigbeeOTA.js.map +1 -1
  505. package/lib/philips.js +12 -12
  506. package/lib/philips.js.map +1 -1
  507. package/lib/reporting.d.ts +1 -1
  508. package/lib/reporting.d.ts.map +1 -1
  509. package/lib/reporting.js +7 -7
  510. package/lib/reporting.js.map +1 -1
  511. package/lib/store.d.ts +1 -1
  512. package/lib/store.d.ts.map +1 -1
  513. package/lib/store.js +2 -2
  514. package/lib/store.js.map +1 -1
  515. package/lib/tuya.d.ts +1 -1
  516. package/lib/tuya.d.ts.map +1 -1
  517. package/lib/tuya.js +24 -56
  518. package/lib/tuya.js.map +1 -1
  519. package/lib/types.d.ts +4 -4
  520. package/lib/types.d.ts.map +1 -1
  521. package/lib/types.js +1 -0
  522. package/lib/types.js.map +1 -1
  523. package/lib/ubisys.d.ts +1 -1
  524. package/lib/ubisys.d.ts.map +1 -1
  525. package/lib/ubisys.js +1 -1
  526. package/lib/ubisys.js.map +1 -1
  527. package/lib/utils.d.ts +1 -1
  528. package/lib/utils.d.ts.map +1 -1
  529. package/lib/utils.js +26 -26
  530. package/lib/utils.js.map +1 -1
  531. package/package.json +8 -9
@@ -1,5 +1,5 @@
1
1
  import * as exposes from '../lib/exposes';
2
- import { Tz, KeyValueAny } from '../lib/types';
2
+ import { KeyValueAny, Tz } from '../lib/types';
3
3
  declare const converters: {
4
4
  light_onoff_restorable_brightness: {
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"toZigbee.d.ts","sourceRoot":"","sources":["../src/converters/toZigbee.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAK1C,OAAO,EAAC,EAAE,EAAY,WAAW,EAAC,MAAM,cAAc,CAAC;AA65IvD,QAAA,MAAM,UAAU;;QAlKR;;;WAGG;;;;mBApnG8B,WAAW;;;;;;;;;mBAAX,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAX,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAX,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAX,WAAW;;;;;;;;;;;;;;;QA4C5C;;;;;;;;;;;WAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mKAywEoC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAm9BS,CAAC;AAEpE,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"toZigbee.d.ts","sourceRoot":"","sources":["../src/converters/toZigbee.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAK1C,OAAO,EAAW,WAAW,EAAE,EAAE,EAAC,MAAM,cAAc,CAAC;AA45IvD,QAAA,MAAM,UAAU;;QAlKR;;;WAGG;;;;mBApnG8B,WAAW;;;;;;;;;mBAAX,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAX,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAX,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAX,WAAW;;;;;;;;;;;;;;;QA4C5C;;;;;;;;;;;WAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mKAywEoC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAm9BS,CAAC;AAEpE,eAAe,UAAU,CAAC"}
@@ -52,9 +52,9 @@ const converters1 = {
52
52
  convertSet: async (entity, key, value, meta) => {
53
53
  const state = utils.isString(meta.message.state) ? meta.message.state.toLowerCase() : null;
54
54
  utils.validateValue(state, ['toggle', 'off', 'on']);
55
- if (state === 'on' && (meta.message.hasOwnProperty('on_time') || meta.message.hasOwnProperty('off_wait_time'))) {
56
- const onTime = meta.message.hasOwnProperty('on_time') ? meta.message.on_time : 0;
57
- const offWaitTime = meta.message.hasOwnProperty('off_wait_time') ? meta.message.off_wait_time : 0;
55
+ if (state === 'on' && (meta.message.on_time !== undefined || meta.message.off_wait_time !== undefined)) {
56
+ const onTime = meta.message.on_time !== undefined ? meta.message.on_time : 0;
57
+ const offWaitTime = meta.message.off_wait_time !== undefined ? meta.message.off_wait_time : 0;
58
58
  if (typeof onTime !== 'number') {
59
59
  throw Error('The on_time value must be a number!');
60
60
  }
@@ -122,7 +122,7 @@ const converters1 = {
122
122
  else {
123
123
  zclData.hue = utils.mapNumberRange(hsvCorrected.hue, 0, 360, 0, 254);
124
124
  }
125
- // @ts-expect-error
125
+ // @ts-expect-error ignore
126
126
  zclData.direction = value.direction || 0;
127
127
  }
128
128
  if (hsv.saturation != null) {
@@ -130,7 +130,7 @@ const converters1 = {
130
130
  }
131
131
  if (hsv.value !== null) {
132
132
  // fallthrough to genLevelCtrl
133
- // @ts-expect-error
133
+ // @ts-expect-error ignore
134
134
  value.brightness = utils.mapNumberRange(hsvCorrected.value, 0, 100, 0, 254);
135
135
  }
136
136
  if (hsv.hue !== null && hsv.saturation !== null) {
@@ -153,10 +153,8 @@ const converters1 = {
153
153
  command = 'moveToSaturation';
154
154
  }
155
155
  }
156
- if (value.hasOwnProperty('brightness')) {
157
- await entity.command('genLevelCtrl', 'moveToLevelWithOnOff',
158
- // @ts-expect-error
159
- { level: Number(value.brightness), transtime: utils.getTransition(entity, key, meta).time }, utils.getOptions(meta.mapped, entity));
156
+ if (utils.isObject(value) && value.brightness !== undefined) {
157
+ await entity.command('genLevelCtrl', 'moveToLevelWithOnOff', { level: Number(value.brightness), transtime: utils.getTransition(entity, key, meta).time }, utils.getOptions(meta.mapped, entity));
160
158
  }
161
159
  await entity.command('lightingColorCtrl', command, zclData, utils.getOptions(meta.mapped, entity));
162
160
  return { state: libColor.syncColorState(newState, meta.state, entity, meta.options), readAfterWriteTime: zclData.transtime * 100 };
@@ -202,9 +200,9 @@ const converters2 = {
202
200
  key: ['read'],
203
201
  convertSet: async (entity, key, value, meta) => {
204
202
  utils.assertObject(value, key);
205
- const result = await entity.read(value.cluster, value.attributes, value.hasOwnProperty('options') ? value.options : {});
203
+ const result = await entity.read(value.cluster, value.attributes, value.options !== undefined ? value.options : {});
206
204
  logger_1.logger.info(`Read result of '${value.cluster}': ${JSON.stringify(result)}`, NS);
207
- if (value.hasOwnProperty('state_property')) {
205
+ if (value.state_property !== undefined) {
208
206
  return { state: { [value.state_property]: result } };
209
207
  }
210
208
  },
@@ -214,7 +212,7 @@ const converters2 = {
214
212
  convertSet: async (entity, key, value, meta) => {
215
213
  utils.assertObject(value, key);
216
214
  const options = utils.getOptions(meta.mapped, entity);
217
- if (value.hasOwnProperty('options')) {
215
+ if (value.options !== undefined) {
218
216
  Object.assign(options, value.options);
219
217
  }
220
218
  await entity.write(value.cluster, value.payload, options);
@@ -226,7 +224,7 @@ const converters2 = {
226
224
  convertSet: async (entity, key, value, meta) => {
227
225
  utils.assertObject(value, key);
228
226
  const options = utils.getOptions(meta.mapped, entity);
229
- await entity.command(value.cluster, value.command, value.hasOwnProperty('payload') ? value.payload : {}, options);
227
+ await entity.command(value.cluster, value.command, value.payload !== undefined ? value.payload : {}, options);
230
228
  logger_1.logger.info(`Invoked '${value.cluster}.${value.command}' with payload '${JSON.stringify(value.payload)}'`, NS);
231
229
  },
232
230
  },
@@ -249,9 +247,9 @@ const converters2 = {
249
247
  key: ['zclcommand'],
250
248
  convertSet: async (entity, key, value, meta) => {
251
249
  utils.assertObject(value, key);
252
- const payload = value.hasOwnProperty('payload') ? value.payload : {};
250
+ const payload = value.payload !== undefined ? value.payload : {};
253
251
  utils.assertEndpoint(entity);
254
- await entity.zclCommand(value.cluster, value.command, payload, value.hasOwnProperty('options') ? value.options : {});
252
+ await entity.zclCommand(value.cluster, value.command, payload, value.options !== undefined ? value.options : {});
255
253
  logger_1.logger.info(`Invoked ZCL command ${value.cluster}.${value.command} with payload '${JSON.stringify(payload)}'`, NS);
256
254
  },
257
255
  },
@@ -262,7 +260,7 @@ const converters2 = {
262
260
  utils.assertObject(value, key);
263
261
  if (Array.isArray(meta.mapped))
264
262
  throw new Error(`Not supported for groups`);
265
- const isNotification = value.hasOwnProperty('transaction');
263
+ const isNotification = value.transaction !== undefined;
266
264
  const modeSrc = isNotification ? constants.armNotification : constants.armMode;
267
265
  const mode = utils.getKey(modeSrc, value.mode, undefined, Number);
268
266
  if (mode === undefined) {
@@ -319,7 +317,7 @@ const converters2 = {
319
317
  key: ['color_options'],
320
318
  convertSet: async (entity, key, value, meta) => {
321
319
  utils.assertObject(value, key);
322
- const options = value.hasOwnProperty('execute_if_off') && value.execute_if_off ? 1 : 0;
320
+ const options = value.execute_if_off !== undefined && value.execute_if_off ? 1 : 0;
323
321
  await entity.write('lightingColorCtrl', { options }, utils.getOptions(meta.mapped, entity));
324
322
  return { state: { color_options: value } };
325
323
  },
@@ -366,7 +364,7 @@ const converters2 = {
366
364
  utils.assertObject(value, key);
367
365
  const user = value.user;
368
366
  const userType = value.user_type || 'unrestricted';
369
- const userEnabled = value.hasOwnProperty('user_enabled') ? value.user_enabled : true;
367
+ const userEnabled = value.user_enabled !== undefined ? value.user_enabled : true;
370
368
  const pinCode = value.pin_code;
371
369
  if (isNaN(user))
372
370
  throw new Error('user must be numbers');
@@ -390,7 +388,7 @@ const converters2 = {
390
388
  }
391
389
  },
392
390
  convertGet: async (entity, key, meta) => {
393
- // @ts-expect-error
391
+ // @ts-expect-error ignore
394
392
  const user = meta && meta.message && meta.message.pin_code ? meta.message.pin_code.user : undefined;
395
393
  if (user === undefined) {
396
394
  const max = utils.getMetaValue(entity, meta.mapped, 'pinCodeCount');
@@ -434,7 +432,7 @@ const converters2 = {
434
432
  }, utils.getOptions(meta.mapped, entity));
435
433
  },
436
434
  convertGet: async (entity, key, meta) => {
437
- // @ts-expect-error
435
+ // @ts-expect-error ignore
438
436
  const user = meta && meta.message && meta.message.user_status ? meta.message.user_status.user : undefined;
439
437
  const pinCodeCount = utils.getMetaValue(entity, meta.mapped, 'pinCodeCount');
440
438
  if (user === undefined) {
@@ -489,18 +487,18 @@ const converters2 = {
489
487
  const level = { low: 0, medium: 1, high: 2, very_high: 3 };
490
488
  const strobeLevel = { low: 0, medium: 1, high: 2, very_high: 3 };
491
489
  const values = {
492
- // @ts-expect-error
490
+ // @ts-expect-error ignore
493
491
  mode: value.mode || 'emergency',
494
- // @ts-expect-error
492
+ // @ts-expect-error ignore
495
493
  level: value.level || 'medium',
496
- // @ts-expect-error
497
- strobe: value.hasOwnProperty('strobe') ? value.strobe : true,
498
- // @ts-expect-error
499
- duration: value.hasOwnProperty('duration') ? value.duration : 10,
500
- // @ts-expect-error
501
- strobeDutyCycle: value.hasOwnProperty('strobe_duty_cycle') ? value.strobe_duty_cycle * 10 : 0,
502
- // @ts-expect-error
503
- strobeLevel: value.hasOwnProperty('strobe_level') ? utils.getFromLookup(value.strobe_level, strobeLevel) : 1,
494
+ // @ts-expect-error ignore
495
+ strobe: value.strobe !== undefined ? value.strobe : true,
496
+ // @ts-expect-error ignore
497
+ duration: value.duration !== undefined ? value.duration : 10,
498
+ // @ts-expect-error ignore
499
+ strobeDutyCycle: value.strobe_duty_cycle !== undefined ? value.strobe_duty_cycle * 10 : 0,
500
+ // @ts-expect-error ignore
501
+ strobeLevel: value.strobe_level !== undefined ? utils.getFromLookup(value.strobe_level, strobeLevel) : 1,
504
502
  };
505
503
  let info;
506
504
  // https://github.com/Koenkk/zigbee2mqtt/issues/8310 some devices require the info to be reversed.
@@ -551,7 +549,7 @@ const converters2 = {
551
549
  const values = {
552
550
  state: value.state,
553
551
  level: value.level || 'very_high',
554
- strobe: value.hasOwnProperty('strobe') ? value.strobe : false,
552
+ strobe: value.strobe !== undefined ? value.strobe : false,
555
553
  };
556
554
  const info = utils.getFromLookup(values.state, state) + ((values.strobe ? 1 : 0) << 4) + (utils.getFromLookup(values.level, level) << 6);
557
555
  await entity.command('ssIasWd', 'squawk', { squawkinfo: info }, utils.getOptions(meta.mapped, entity));
@@ -632,13 +630,13 @@ const converters2 = {
632
630
  try {
633
631
  value = JSON.parse(value);
634
632
  }
635
- catch (e) {
633
+ catch {
636
634
  throw new Error('Payload is not valid JSON');
637
635
  }
638
636
  }
639
637
  utils.assertObject(value, key);
640
638
  // onOffTransitionTime - range 0x0000 to 0xffff - optional
641
- if (value.hasOwnProperty('on_off_transition_time')) {
639
+ if (value.on_off_transition_time !== undefined) {
642
640
  let onOffTransitionTimeValue = Number(value.on_off_transition_time);
643
641
  if (onOffTransitionTimeValue > 65535)
644
642
  onOffTransitionTimeValue = 65535;
@@ -649,7 +647,7 @@ const converters2 = {
649
647
  }
650
648
  // onTransitionTime - range 0x0000 to 0xffff - optional
651
649
  // 0xffff = use onOffTransitionTime
652
- if (value.hasOwnProperty('on_transition_time')) {
650
+ if (value.on_transition_time !== undefined) {
653
651
  let onTransitionTimeValue = value.on_transition_time;
654
652
  if (typeof onTransitionTimeValue === 'string' && onTransitionTimeValue.toLowerCase() == 'disabled') {
655
653
  onTransitionTimeValue = 65535;
@@ -670,7 +668,7 @@ const converters2 = {
670
668
  }
671
669
  // offTransitionTime - range 0x0000 to 0xffff - optional
672
670
  // 0xffff = use onOffTransitionTime
673
- if (value.hasOwnProperty('off_transition_time')) {
671
+ if (value.off_transition_time !== undefined) {
674
672
  let offTransitionTimeValue = value.off_transition_time;
675
673
  if (typeof offTransitionTimeValue === 'string' && offTransitionTimeValue.toLowerCase() == 'disabled') {
676
674
  offTransitionTimeValue = 65535;
@@ -692,7 +690,7 @@ const converters2 = {
692
690
  // startUpCurrentLevel - range 0x00 to 0xff - optional
693
691
  // 0x00 = return to minimum supported level
694
692
  // 0xff = return to previous previous
695
- if (value.hasOwnProperty('current_level_startup')) {
693
+ if (value.current_level_startup !== undefined) {
696
694
  let startUpCurrentLevelValue = value.current_level_startup;
697
695
  if (typeof startUpCurrentLevelValue === 'string' && startUpCurrentLevelValue.toLowerCase() == 'previous') {
698
696
  startUpCurrentLevelValue = 255;
@@ -719,7 +717,7 @@ const converters2 = {
719
717
  }
720
718
  // onLevel - range 0x00 to 0xff - optional
721
719
  // Any value outside of MinLevel to MaxLevel, including 0xff and 0x00, is interpreted as "previous".
722
- if (value.hasOwnProperty('on_level')) {
720
+ if (value.on_level !== undefined) {
723
721
  let onLevel = value.on_level;
724
722
  if (typeof onLevel === 'string' && onLevel.toLowerCase() == 'previous') {
725
723
  onLevel = 255;
@@ -739,7 +737,7 @@ const converters2 = {
739
737
  // when 1, CurrentLevel can be changed while the device is off.
740
738
  // bit 1: CoupleColorTempToLevel - when 1, changes to level also change color temperature.
741
739
  // (What this means is not defined, but it's most likely to be "dim to warm".)
742
- if (value.hasOwnProperty('execute_if_off')) {
740
+ if (value.execute_if_off !== undefined) {
743
741
  const executeIfOffValue = !!value.execute_if_off;
744
742
  await entity.write('genLevelCtrl', { options: executeIfOffValue ? 1 : 0 }, utils.getOptions(meta.mapped, entity));
745
743
  Object.assign(state, { execute_if_off: executeIfOffValue });
@@ -753,7 +751,7 @@ const converters2 = {
753
751
  try {
754
752
  await entity.read('genLevelCtrl', [attribute]);
755
753
  }
756
- catch (ex) {
754
+ catch {
757
755
  // continue regardless of error, all these are optional in ZCL
758
756
  }
759
757
  }
@@ -800,10 +798,10 @@ const converters2 = {
800
798
  'lamp_burn_hours_trip_point',
801
799
  ]) {
802
800
  try {
803
- // @ts-expect-error
801
+ // @ts-expect-error ignore
804
802
  result = { ...result, ...(await entity.read('lightingBallastCfg', [utils.toCamelCase(attrName)])) };
805
803
  }
806
- catch (ex) {
804
+ catch {
807
805
  // continue regardless of error
808
806
  }
809
807
  }
@@ -824,7 +822,7 @@ const converters2 = {
824
822
  const transition = utils.getTransition(entity, key, meta).time;
825
823
  const payload = { stepmode: mode, stepsize: Math.abs(value), transtime: transition };
826
824
  await entity.command('genLevelCtrl', command, payload, utils.getOptions(meta.mapped, entity));
827
- if (meta.state.hasOwnProperty('brightness')) {
825
+ if (meta.state.brightness !== undefined) {
828
826
  utils.assertNumber(meta.state.brightness);
829
827
  let brightness = onOff || meta.state.state === 'ON' ? meta.state.brightness + value : meta.state.brightness;
830
828
  if (value === 0) {
@@ -920,7 +918,7 @@ const converters2 = {
920
918
  const stop = (val) => ['stop', 'release', '0'].some((el) => val.includes(el));
921
919
  const up = (val) => ['1', 'up'].some((el) => val.includes(el));
922
920
  const arr = [value.toString()];
923
- const moverate = meta.message.hasOwnProperty('rate') ? Number(meta.message.rate) : 55;
921
+ const moverate = meta.message.rate !== undefined ? Number(meta.message.rate) : 55;
924
922
  payload.rate = moverate;
925
923
  if (arr.filter(stop).length) {
926
924
  payload.movemode = 0;
@@ -1014,12 +1012,12 @@ const converters2 = {
1014
1012
  const { message } = meta;
1015
1013
  const transition = utils.getTransition(entity, 'brightness', meta);
1016
1014
  const turnsOffAtBrightness1 = utils.getMetaValue(entity, meta.mapped, 'turnsOffAtBrightness1', 'allEqual', false);
1017
- let state = message.hasOwnProperty('state') ? (typeof message.state === 'string' ? message.state.toLowerCase() : null) : undefined;
1015
+ let state = message.state !== undefined ? (typeof message.state === 'string' ? message.state.toLowerCase() : null) : undefined;
1018
1016
  let brightness = undefined;
1019
- if (message.hasOwnProperty('brightness')) {
1017
+ if (message.brightness !== undefined) {
1020
1018
  brightness = Number(message.brightness);
1021
1019
  }
1022
- else if (message.hasOwnProperty('brightness_percent')) {
1020
+ else if (message.brightness_percent !== undefined) {
1023
1021
  brightness = utils.mapNumberRange(Number(message.brightness_percent), 0, 100, 0, 255);
1024
1022
  }
1025
1023
  if (brightness === 255) {
@@ -1055,7 +1053,7 @@ const converters2 = {
1055
1053
  logger_1.logger.debug(`Supressing OFF transition since entity has noOffTransition=true`, NS);
1056
1054
  brightness = undefined;
1057
1055
  }
1058
- if (meta.state.hasOwnProperty('brightness') && meta.state.state === 'ON') {
1056
+ if (meta.state.brightness !== undefined && meta.state.state === 'ON') {
1059
1057
  // The light's current level gets clobbered in two cases:
1060
1058
  // 1. when 'Off' has a transition, in which case it is really 'MoveToLevelWithOnOff'
1061
1059
  // https://github.com/Koenkk/zigbee-herdsman-converters/issues/1073
@@ -1079,11 +1077,11 @@ const converters2 = {
1079
1077
  try {
1080
1078
  const attributeRead = await entity.read('genLevelCtrl', ['onLevel']);
1081
1079
  if (attributeRead !== undefined) {
1082
- // @ts-expect-error
1080
+ // @ts-expect-error ignore
1083
1081
  onLevel = attributeRead['onLevel'];
1084
1082
  }
1085
1083
  }
1086
- catch (e) {
1084
+ catch {
1087
1085
  // OnLevel not supported
1088
1086
  }
1089
1087
  }
@@ -1288,10 +1286,10 @@ const converters2 = {
1288
1286
  // transform transition payload values if needed
1289
1287
  for (const elem of payload.transitions) {
1290
1288
  // update payload.mode if needed
1291
- if (elem.hasOwnProperty('heatSetpoint') && !payload.mode.includes('heat')) {
1289
+ if (elem.heatSetpoint !== undefined && !payload.mode.includes('heat')) {
1292
1290
  payload.mode.push('heat');
1293
1291
  }
1294
- if (elem.hasOwnProperty('coolSetpoint') && !payload.mode.includes('cool')) {
1292
+ if (elem.coolSetpoint !== undefined && !payload.mode.includes('cool')) {
1295
1293
  payload.mode.push('cool');
1296
1294
  }
1297
1295
  // transform setpoint values if numeric
@@ -1314,7 +1312,7 @@ const converters2 = {
1314
1312
  }
1315
1313
  }
1316
1314
  else if (typeof elem['transitionTime'] === 'object') {
1317
- if (!elem['transitionTime'].hasOwnProperty('hour') || !elem['transitionTime'].hasOwnProperty('minute')) {
1315
+ if (elem['transitionTime'].hour === undefined || elem['transitionTime'].minute === undefined) {
1318
1316
  throw new Error('weekly_schedule: expected 24h time object (e.g. {"hour": 19, "minute": 30}), ' +
1319
1317
  `but got '${JSON.stringify(elem['transitionTime'])}'!`);
1320
1318
  }
@@ -1349,7 +1347,7 @@ const converters2 = {
1349
1347
  let dayofweek = 0;
1350
1348
  for (let d of payload.dayofweek) {
1351
1349
  if (typeof d === 'object') {
1352
- if (!d.hasOwnProperty('day')) {
1350
+ if (d.day === undefined) {
1353
1351
  throw new Error('weekly_schedule: expected dayofweek to be string or {"day": "str"}, ' + `but got '${JSON.stringify(d)}'!`);
1354
1352
  }
1355
1353
  d = d.day;
@@ -2096,7 +2094,7 @@ const converters2 = {
2096
2094
  writeUndiv: true,
2097
2095
  transactionSequenceNumber: 0xe9,
2098
2096
  };
2099
- if (value.hasOwnProperty('motor_direction')) {
2097
+ if (value.motor_direction !== undefined) {
2100
2098
  let direction;
2101
2099
  switch (value.motor_direction) {
2102
2100
  case 'FORWARD':
@@ -2112,7 +2110,7 @@ const converters2 = {
2112
2110
  const payload = { 0x1301: { value: [direction, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] } };
2113
2111
  await entity.write('genPowerCfg', payload, options);
2114
2112
  }
2115
- if (value.hasOwnProperty('motor_speed')) {
2113
+ if (value.motor_speed !== undefined) {
2116
2114
  if (value.motor_speed < 20 || value.motor_speed > 40) {
2117
2115
  throw new Error('livolo_cover_options: Motor speed is out of range (20-40)');
2118
2116
  }
@@ -2169,7 +2167,7 @@ const converters2 = {
2169
2167
  utils.assertString(value, key);
2170
2168
  utils.validateValue(value, ['toggle', 'off', 'on']);
2171
2169
  if (value === 'toggle') {
2172
- if (!meta.state.hasOwnProperty('state')) {
2170
+ if (meta.state.state === undefined) {
2173
2171
  throw new Error('Cannot toggle, state not known yet');
2174
2172
  }
2175
2173
  else {
@@ -2495,9 +2493,9 @@ const converters2 = {
2495
2493
  key: ['position', 'tilt'],
2496
2494
  convertSet: async (entity, key, value, meta) => {
2497
2495
  utils.assertNumber(value, key);
2498
- if (meta.options.hasOwnProperty('time_close') && meta.options.hasOwnProperty('time_open')) {
2496
+ if (meta.options.time_close !== undefined && meta.options.time_open !== undefined) {
2499
2497
  const sleepSeconds = async (s) => {
2500
- return new Promise((resolve) => setTimeout(resolve, s * 1000));
2498
+ return await new Promise((resolve) => setTimeout(resolve, s * 1000));
2501
2499
  };
2502
2500
  const oldPosition = meta.state.position;
2503
2501
  if (value == 100) {
@@ -2693,8 +2691,8 @@ const converters2 = {
2693
2691
  convertSet: async (entity, key, value, meta) => {
2694
2692
  if (key === 'brightness' &&
2695
2693
  meta.state.color_mode == constants.colorModeLookup[2] &&
2696
- !meta.message.hasOwnProperty('color') &&
2697
- !meta.message.hasOwnProperty('color_temp')) {
2694
+ meta.message.color === undefined &&
2695
+ meta.message.color_temp === undefined) {
2698
2696
  const zclData = { level: Number(value), transtime: 0 };
2699
2697
  await entity.command('genLevelCtrl', 'moveToLevel', zclData, utils.getOptions(meta.mapped, entity));
2700
2698
  globalStore.putValue(entity, 'brightness', zclData.level);
@@ -2730,9 +2728,9 @@ const converters2 = {
2730
2728
  }
2731
2729
  const zclData = {
2732
2730
  brightness: globalStore.getValue(entity, 'brightness') || 100,
2733
- // @ts-expect-error
2731
+ // @ts-expect-error ignore
2734
2732
  hue: utils.mapNumberRange(meta.state.color.h, 0, 360, 0, 254) || 100,
2735
- // @ts-expect-error
2733
+ // @ts-expect-error ignore
2736
2734
  saturation: utils.mapNumberRange(meta.state.color.s, 0, 100, 0, 254) || 100,
2737
2735
  transtime: 0,
2738
2736
  };
@@ -2759,7 +2757,7 @@ const converters2 = {
2759
2757
  zclData.brightness = value;
2760
2758
  }
2761
2759
  }
2762
- if (meta.message.hasOwnProperty('color')) {
2760
+ if (meta.message.color !== undefined) {
2763
2761
  if (utils.isObject(meta.message.color)) {
2764
2762
  if (meta.message.color.h) {
2765
2763
  zclData.hue = utils.mapNumberRange(meta.message.color.h, 0, 360, 0, 254);
@@ -3290,7 +3288,7 @@ const converters2 = {
3290
3288
  };
3291
3289
  let value = utils.getFromLookup(rawValue, lookup, Number(rawValue));
3292
3290
  if (key == 'sensors_type') {
3293
- // @ts-expect-error
3291
+ // @ts-expect-error ignore
3294
3292
  value = utils.getFromLookup(rawValue, sensorsTypeLookup, Number(rawValue));
3295
3293
  }
3296
3294
  const payloads = {
@@ -3357,7 +3355,7 @@ const converters2 = {
3357
3355
  const modeOpenLookup = { never: '0', once: '1', always: '2', drop: '3' };
3358
3356
  let value = utils.getFromLookup(rawValue, lookup, Number(rawValue));
3359
3357
  if (key == 'mode') {
3360
- // @ts-expect-error
3358
+ // @ts-expect-error ignore
3361
3359
  value = utils.getFromLookup(rawValue, modeOpenLookup, Number(rawValue));
3362
3360
  }
3363
3361
  const payloads = {
@@ -3426,7 +3424,7 @@ const converters2 = {
3426
3424
  const options = {
3427
3425
  // Don't send a manufacturerCode (otherwise set in herdsman):
3428
3426
  // https://github.com/Koenkk/zigbee-herdsman-converters/pull/2827
3429
- // @ts-expect-error
3427
+ // @ts-expect-error ignore
3430
3428
  manufacturerCode: null,
3431
3429
  ...utils.getOptions(meta.mapped, entity),
3432
3430
  };
@@ -3479,13 +3477,13 @@ const converters2 = {
3479
3477
  utils.saveSceneState(member, sceneid, groupid, meta.membersState[member.getDevice().ieeeAddr], scenename);
3480
3478
  }
3481
3479
  }
3482
- // @ts-expect-error
3480
+ // @ts-expect-error ignore
3483
3481
  }
3484
3482
  else if (response.status === 0) {
3485
3483
  utils.saveSceneState(entity, sceneid, groupid, meta.state, scenename);
3486
3484
  }
3487
3485
  else {
3488
- // @ts-expect-error
3486
+ // @ts-expect-error ignore
3489
3487
  throw new Error(`Scene add not successful ('${zigbee_herdsman_1.Zcl.Status[response.status]}')`);
3490
3488
  }
3491
3489
  logger_1.logger.info('Successfully stored scene', NS);
@@ -3500,11 +3498,11 @@ const converters2 = {
3500
3498
  const sceneid = value;
3501
3499
  await entity.command('genScenes', 'recall', { groupid, sceneid }, utils.getOptions(meta.mapped, entity));
3502
3500
  const addColorMode = (newState) => {
3503
- if (newState.hasOwnProperty('color_temp')) {
3501
+ if (newState.color_temp !== undefined) {
3504
3502
  newState.color_mode = constants.colorModeLookup[2];
3505
3503
  }
3506
- else if (newState.hasOwnProperty('color')) {
3507
- if (newState.color.hasOwnProperty('x')) {
3504
+ else if (newState.color !== undefined) {
3505
+ if (newState.color.x !== undefined) {
3508
3506
  newState.color_mode = constants.colorModeLookup[1];
3509
3507
  }
3510
3508
  else {
@@ -3519,7 +3517,7 @@ const converters2 = {
3519
3517
  let recalledState = utils.getSceneState(member, sceneid, groupid);
3520
3518
  if (recalledState) {
3521
3519
  // add color_mode if saved state does not contain it
3522
- if (!recalledState.hasOwnProperty('color_mode')) {
3520
+ if (recalledState.color_mode === undefined) {
3523
3521
  recalledState = addColorMode(recalledState);
3524
3522
  }
3525
3523
  Object.assign(recalledState, libColor.syncColorState(recalledState, meta.state, entity, meta.options));
@@ -3537,7 +3535,7 @@ const converters2 = {
3537
3535
  let recalledState = utils.getSceneState(entity, sceneid, groupid);
3538
3536
  if (recalledState) {
3539
3537
  // add color_mode if saved state does not contain it
3540
- if (!recalledState.hasOwnProperty('color_mode')) {
3538
+ if (recalledState.color_mode === undefined) {
3541
3539
  recalledState = addColorMode(recalledState);
3542
3540
  }
3543
3541
  Object.assign(recalledState, libColor.syncColorState(recalledState, meta.state, entity, meta.options));
@@ -3711,13 +3709,13 @@ const converters2 = {
3711
3709
  utils.deleteSceneState(member, sceneid, groupid);
3712
3710
  }
3713
3711
  }
3714
- // @ts-expect-error
3712
+ // @ts-expect-error ignore
3715
3713
  }
3716
3714
  else if (response.status === 0) {
3717
3715
  utils.deleteSceneState(entity, sceneid, groupid);
3718
3716
  }
3719
3717
  else {
3720
- // @ts-expect-error
3718
+ // @ts-expect-error ignore
3721
3719
  throw new Error(`Scene remove not successful ('${zigbee_herdsman_1.Zcl.Status[response.status]}')`);
3722
3720
  }
3723
3721
  logger_1.logger.info('Successfully removed scene', NS);
@@ -3752,7 +3750,7 @@ const converters2 = {
3752
3750
  const isGroup = utils.isGroup(entity);
3753
3751
  const sceneid = value.ID;
3754
3752
  const scenename = value.name;
3755
- const groupid = isGroup ? entity.groupID : value.hasOwnProperty('group_id') ? value.group_id : 0;
3753
+ const groupid = isGroup ? entity.groupID : value.group_id !== undefined ? value.group_id : 0;
3756
3754
  if (isGroup) {
3757
3755
  if (meta.membersState) {
3758
3756
  for (const member of entity.members) {
@@ -4238,7 +4236,7 @@ const converters3 = {
4238
4236
  const deviceState = meta.state || {};
4239
4237
  const message = meta.message;
4240
4238
  const state = utils.isString(message.state) ? message.state.toLowerCase() : null;
4241
- const hasBrightness = message.hasOwnProperty('brightness') || message.hasOwnProperty('brightness_percent');
4239
+ const hasBrightness = message.brightness !== undefined || message.brightness_percent !== undefined;
4242
4240
  // Add brightness if command is 'on' and we can restore previous value
4243
4241
  if (state === 'on' && !hasBrightness && utils.isNumber(deviceState.brightness) && deviceState.brightness > 0) {
4244
4242
  message.brightness = deviceState.brightness;
@@ -4308,10 +4306,10 @@ const converters3 = {
4308
4306
  if (entity.supportsInputCluster(cluster) || entity.supportsOutputCluster(cluster)) {
4309
4307
  const message = meta.message;
4310
4308
  let brightness = undefined;
4311
- if (message.hasOwnProperty('brightness')) {
4309
+ if (message.brightness !== undefined) {
4312
4310
  brightness = Number(message.brightness);
4313
4311
  }
4314
- else if (message.hasOwnProperty('brightness_percent'))
4312
+ else if (message.brightness_percent !== undefined)
4315
4313
  brightness = Math.round(Number(message.brightness_percent) * 2.55);
4316
4314
  if (brightness !== undefined && brightness === 0) {
4317
4315
  message.state = 'off';
@@ -4365,10 +4363,10 @@ const converters3 = {
4365
4363
  key: ['state', 'brightness'],
4366
4364
  convertSet: async (entity, key, value, meta) => {
4367
4365
  const { message, state } = meta;
4368
- if (message.state === 'OFF' || (message.hasOwnProperty('state') && !message.hasOwnProperty('brightness'))) {
4366
+ if (message.state === 'OFF' || (message.state !== undefined && message.brightness === undefined)) {
4369
4367
  return await converters1.on_off.convertSet(entity, key, value, meta);
4370
4368
  }
4371
- else if (message.hasOwnProperty('brightness')) {
4369
+ else if (message.brightness !== undefined) {
4372
4370
  // set brightness
4373
4371
  if (state.state === 'OFF') {
4374
4372
  await entity.command('genOnOff', 'on', {}, utils.getOptions(meta.mapped, entity));
@@ -4395,7 +4393,7 @@ const converters3 = {
4395
4393
  // https://github.com/Koenkk/zigbee2mqtt/issues/15902#issuecomment-1382848150
4396
4394
  await entity.command('genOnOff', 'on', {}, utils.getOptions(meta.mapped, entity));
4397
4395
  }
4398
- return converters2.light_onoff_brightness.convertSet(entity, key, value, meta);
4396
+ return await converters2.light_onoff_brightness.convertSet(entity, key, value, meta);
4399
4397
  },
4400
4398
  },
4401
4399
  };