zigbee-herdsman-converters 20.44.0 → 21.0.0-pre.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 (349) hide show
  1. package/converters/fromZigbee.d.ts +4 -6
  2. package/converters/fromZigbee.d.ts.map +1 -1
  3. package/converters/fromZigbee.js +3 -32
  4. package/converters/fromZigbee.js.map +1 -1
  5. package/converters/toZigbee.d.ts +1 -49
  6. package/converters/toZigbee.d.ts.map +1 -1
  7. package/converters/toZigbee.js +38 -46
  8. package/converters/toZigbee.js.map +1 -1
  9. package/devices/adeo.d.ts.map +1 -1
  10. package/devices/adeo.js +1 -2
  11. package/devices/adeo.js.map +1 -1
  12. package/devices/adurosmart.d.ts.map +1 -1
  13. package/devices/adurosmart.js +1 -2
  14. package/devices/adurosmart.js.map +1 -1
  15. package/devices/aeotec.js +1 -1
  16. package/devices/aeotec.js.map +1 -1
  17. package/devices/airam.d.ts.map +1 -1
  18. package/devices/airam.js +1 -13
  19. package/devices/airam.js.map +1 -1
  20. package/devices/amina.d.ts.map +1 -1
  21. package/devices/amina.js +1 -2
  22. package/devices/amina.js.map +1 -1
  23. package/devices/aurora_lighting.d.ts.map +1 -1
  24. package/devices/aurora_lighting.js +2 -3
  25. package/devices/aurora_lighting.js.map +1 -1
  26. package/devices/bitron.d.ts.map +1 -1
  27. package/devices/bitron.js +1 -2
  28. package/devices/bitron.js.map +1 -1
  29. package/devices/bosch.d.ts.map +1 -1
  30. package/devices/bosch.js +10 -9
  31. package/devices/bosch.js.map +1 -1
  32. package/devices/bticino.d.ts.map +1 -1
  33. package/devices/bticino.js +2 -3
  34. package/devices/bticino.js.map +1 -1
  35. package/devices/busch_jaeger.d.ts.map +1 -1
  36. package/devices/busch_jaeger.js +1 -11
  37. package/devices/busch_jaeger.js.map +1 -1
  38. package/devices/chacon.js +1 -1
  39. package/devices/chacon.js.map +1 -1
  40. package/devices/ctm.d.ts.map +1 -1
  41. package/devices/ctm.js +5 -8
  42. package/devices/ctm.js.map +1 -1
  43. package/devices/custom_devices_diy.d.ts.map +1 -1
  44. package/devices/custom_devices_diy.js +6 -10
  45. package/devices/custom_devices_diy.js.map +1 -1
  46. package/devices/danalock.d.ts.map +1 -1
  47. package/devices/danalock.js +1 -2
  48. package/devices/danalock.js.map +1 -1
  49. package/devices/danfoss.d.ts.map +1 -1
  50. package/devices/danfoss.js +1 -2
  51. package/devices/danfoss.js.map +1 -1
  52. package/devices/datek.d.ts.map +1 -1
  53. package/devices/datek.js +2 -5
  54. package/devices/datek.js.map +1 -1
  55. package/devices/develco.d.ts.map +1 -1
  56. package/devices/develco.js +19 -20
  57. package/devices/develco.js.map +1 -1
  58. package/devices/diyruz.d.ts.map +1 -1
  59. package/devices/diyruz.js +1 -2
  60. package/devices/diyruz.js.map +1 -1
  61. package/devices/dresden_elektronik.d.ts.map +1 -1
  62. package/devices/dresden_elektronik.js +3 -27
  63. package/devices/dresden_elektronik.js.map +1 -1
  64. package/devices/ecodim.d.ts.map +1 -1
  65. package/devices/ecodim.js +1 -2
  66. package/devices/ecodim.js.map +1 -1
  67. package/devices/ecozy.d.ts.map +1 -1
  68. package/devices/ecozy.js +1 -2
  69. package/devices/ecozy.js.map +1 -1
  70. package/devices/eurotronic.d.ts.map +1 -1
  71. package/devices/eurotronic.js +1 -2
  72. package/devices/eurotronic.js.map +1 -1
  73. package/devices/fantem.d.ts.map +1 -1
  74. package/devices/fantem.js +0 -1
  75. package/devices/fantem.js.map +1 -1
  76. package/devices/frient.js +1 -1
  77. package/devices/frient.js.map +1 -1
  78. package/devices/futurehome.d.ts.map +1 -1
  79. package/devices/futurehome.js +1 -2
  80. package/devices/futurehome.js.map +1 -1
  81. package/devices/gledopto.d.ts.map +1 -1
  82. package/devices/gledopto.js +30 -31
  83. package/devices/gledopto.js.map +1 -1
  84. package/devices/gmmts.d.ts.map +1 -1
  85. package/devices/gmmts.js +1 -2
  86. package/devices/gmmts.js.map +1 -1
  87. package/devices/heiman.d.ts.map +1 -1
  88. package/devices/heiman.js +3 -4
  89. package/devices/heiman.js.map +1 -1
  90. package/devices/heimgard_technologies.d.ts.map +1 -1
  91. package/devices/heimgard_technologies.js +5 -6
  92. package/devices/heimgard_technologies.js.map +1 -1
  93. package/devices/icasa.d.ts.map +1 -1
  94. package/devices/icasa.js +2 -25
  95. package/devices/icasa.js.map +1 -1
  96. package/devices/ikea.d.ts.map +1 -1
  97. package/devices/ikea.js +37 -51
  98. package/devices/ikea.js.map +1 -1
  99. package/devices/iluminize.d.ts.map +1 -1
  100. package/devices/iluminize.js +1 -2
  101. package/devices/iluminize.js.map +1 -1
  102. package/devices/immax.d.ts.map +1 -1
  103. package/devices/immax.js +3 -4
  104. package/devices/immax.js.map +1 -1
  105. package/devices/index.d.ts +1 -0
  106. package/devices/index.d.ts.map +1 -1
  107. package/devices/innr.d.ts.map +1 -1
  108. package/devices/innr.js +34 -35
  109. package/devices/innr.js.map +1 -1
  110. package/devices/inovelli.d.ts.map +1 -1
  111. package/devices/inovelli.js +3 -11
  112. package/devices/inovelli.js.map +1 -1
  113. package/devices/insta.d.ts.map +1 -1
  114. package/devices/insta.js +3 -12
  115. package/devices/insta.js.map +1 -1
  116. package/devices/javis.js +1 -1
  117. package/devices/javis.js.map +1 -1
  118. package/devices/jethome.d.ts.map +1 -1
  119. package/devices/jethome.js +1 -2
  120. package/devices/jethome.js.map +1 -1
  121. package/devices/kmpcil.d.ts.map +1 -1
  122. package/devices/kmpcil.js +1 -10
  123. package/devices/kmpcil.js.map +1 -1
  124. package/devices/konke.d.ts.map +1 -1
  125. package/devices/konke.js +2 -3
  126. package/devices/konke.js.map +1 -1
  127. package/devices/leedarson.d.ts.map +1 -1
  128. package/devices/leedarson.js +3 -11
  129. package/devices/leedarson.js.map +1 -1
  130. package/devices/legrand.d.ts.map +1 -1
  131. package/devices/legrand.js +30 -32
  132. package/devices/legrand.js.map +1 -1
  133. package/devices/leviton.d.ts.map +1 -1
  134. package/devices/leviton.js +1 -2
  135. package/devices/leviton.js.map +1 -1
  136. package/devices/lidl.d.ts.map +1 -1
  137. package/devices/lidl.js +1 -2
  138. package/devices/lidl.js.map +1 -1
  139. package/devices/lixee.d.ts.map +1 -1
  140. package/devices/lixee.js +1 -2
  141. package/devices/lixee.js.map +1 -1
  142. package/devices/lumi.d.ts.map +1 -1
  143. package/devices/lumi.js +19 -82
  144. package/devices/lumi.js.map +1 -1
  145. package/devices/lupus.d.ts.map +1 -1
  146. package/devices/lupus.js +3 -4
  147. package/devices/lupus.js.map +1 -1
  148. package/devices/lutron.d.ts.map +1 -1
  149. package/devices/lutron.js +7 -5
  150. package/devices/lutron.js.map +1 -1
  151. package/devices/lytko.d.ts.map +1 -1
  152. package/devices/lytko.js +6 -7
  153. package/devices/lytko.js.map +1 -1
  154. package/devices/meazon.d.ts.map +1 -1
  155. package/devices/meazon.js +2 -3
  156. package/devices/meazon.js.map +1 -1
  157. package/devices/moes.js +2 -2
  158. package/devices/moes.js.map +1 -1
  159. package/devices/muller_licht.d.ts.map +1 -1
  160. package/devices/muller_licht.js +5 -6
  161. package/devices/muller_licht.js.map +1 -1
  162. package/devices/namron.d.ts.map +1 -1
  163. package/devices/namron.js +17 -18
  164. package/devices/namron.js.map +1 -1
  165. package/devices/net2grid.d.ts.map +1 -1
  166. package/devices/net2grid.js +1 -2
  167. package/devices/net2grid.js.map +1 -1
  168. package/devices/nodon.d.ts.map +1 -1
  169. package/devices/nodon.js +13 -14
  170. package/devices/nodon.js.map +1 -1
  171. package/devices/nue_3a.d.ts.map +1 -1
  172. package/devices/nue_3a.js +3 -4
  173. package/devices/nue_3a.js.map +1 -1
  174. package/devices/osram.d.ts.map +1 -1
  175. package/devices/osram.js +20 -27
  176. package/devices/osram.js.map +1 -1
  177. package/devices/owon.d.ts.map +1 -1
  178. package/devices/owon.js +2 -3
  179. package/devices/owon.js.map +1 -1
  180. package/devices/perenio.d.ts.map +1 -1
  181. package/devices/perenio.js +3 -4
  182. package/devices/perenio.js.map +1 -1
  183. package/devices/philips.d.ts.map +1 -1
  184. package/devices/philips.js +10 -16
  185. package/devices/philips.js.map +1 -1
  186. package/devices/pushok.d.ts.map +1 -1
  187. package/devices/pushok.js +13 -11
  188. package/devices/pushok.js.map +1 -1
  189. package/devices/salus_controls.d.ts.map +1 -1
  190. package/devices/salus_controls.js +9 -10
  191. package/devices/salus_controls.js.map +1 -1
  192. package/devices/saswell.js +1 -1
  193. package/devices/schneider_electric.d.ts.map +1 -1
  194. package/devices/schneider_electric.js +14 -17
  195. package/devices/schneider_electric.js.map +1 -1
  196. package/devices/securifi.d.ts.map +1 -1
  197. package/devices/securifi.js +1 -2
  198. package/devices/securifi.js.map +1 -1
  199. package/devices/sengled.d.ts.map +1 -1
  200. package/devices/sengled.js +46 -27
  201. package/devices/sengled.js.map +1 -1
  202. package/devices/shinasystem.d.ts.map +1 -1
  203. package/devices/shinasystem.js +22 -23
  204. package/devices/shinasystem.js.map +1 -1
  205. package/devices/sinope.d.ts.map +1 -1
  206. package/devices/sinope.js +17 -19
  207. package/devices/sinope.js.map +1 -1
  208. package/devices/smartthings.d.ts.map +1 -1
  209. package/devices/smartthings.js +3 -10
  210. package/devices/smartthings.js.map +1 -1
  211. package/devices/sonoff.d.ts.map +1 -1
  212. package/devices/sonoff.js +14 -11
  213. package/devices/sonoff.js.map +1 -1
  214. package/devices/stelpro.d.ts.map +1 -1
  215. package/devices/stelpro.js +4 -5
  216. package/devices/stelpro.js.map +1 -1
  217. package/devices/sunricher.d.ts.map +1 -1
  218. package/devices/sunricher.js +1 -14
  219. package/devices/sunricher.js.map +1 -1
  220. package/devices/swann.d.ts.map +1 -1
  221. package/devices/swann.js +1 -2
  222. package/devices/swann.js.map +1 -1
  223. package/devices/sylvania.d.ts.map +1 -1
  224. package/devices/sylvania.js +2 -11
  225. package/devices/sylvania.js.map +1 -1
  226. package/devices/terncy.d.ts.map +1 -1
  227. package/devices/terncy.js +5 -7
  228. package/devices/terncy.js.map +1 -1
  229. package/devices/third_reality.d.ts.map +1 -1
  230. package/devices/third_reality.js +18 -19
  231. package/devices/third_reality.js.map +1 -1
  232. package/devices/tplink.js +1 -1
  233. package/devices/tplink.js.map +1 -1
  234. package/devices/trust.d.ts.map +1 -1
  235. package/devices/trust.js +1 -2
  236. package/devices/trust.js.map +1 -1
  237. package/devices/tuya.d.ts.map +1 -1
  238. package/devices/tuya.js +61 -63
  239. package/devices/tuya.js.map +1 -1
  240. package/devices/ubisys.d.ts.map +1 -1
  241. package/devices/ubisys.js +8 -9
  242. package/devices/ubisys.js.map +1 -1
  243. package/devices/uhome.d.ts.map +1 -1
  244. package/devices/uhome.js +1 -2
  245. package/devices/uhome.js.map +1 -1
  246. package/devices/viessmann.d.ts.map +1 -1
  247. package/devices/viessmann.js +1 -2
  248. package/devices/viessmann.js.map +1 -1
  249. package/devices/weiser.d.ts.map +1 -1
  250. package/devices/weiser.js +0 -2
  251. package/devices/weiser.js.map +1 -1
  252. package/devices/wirenboard.d.ts.map +1 -1
  253. package/devices/wirenboard.js +3 -4
  254. package/devices/wirenboard.js.map +1 -1
  255. package/devices/xyzroe.d.ts.map +1 -1
  256. package/devices/xyzroe.js +1 -4
  257. package/devices/xyzroe.js.map +1 -1
  258. package/devices/zen.d.ts.map +1 -1
  259. package/devices/zen.js +2 -4
  260. package/devices/zen.js.map +1 -1
  261. package/devices/zigbeetlc.d.ts +1 -0
  262. package/devices/zigbeetlc.d.ts.map +1 -1
  263. package/devices/zigbeetlc.js +3 -3
  264. package/devices/zigbeetlc.js.map +1 -1
  265. package/index.d.ts +4 -3
  266. package/index.d.ts.map +1 -1
  267. package/index.js +15 -13
  268. package/index.js.map +1 -1
  269. package/lib/exposes.d.ts +2 -5
  270. package/lib/exposes.d.ts.map +1 -1
  271. package/lib/exposes.js +4 -9
  272. package/lib/exposes.js.map +1 -1
  273. package/lib/ikea.d.ts +1 -49
  274. package/lib/ikea.d.ts.map +1 -1
  275. package/lib/ikea.js +3 -72
  276. package/lib/ikea.js.map +1 -1
  277. package/lib/ledvance.d.ts.map +1 -1
  278. package/lib/ledvance.js +5 -3
  279. package/lib/ledvance.js.map +1 -1
  280. package/lib/legacy.d.ts +182 -915
  281. package/lib/legacy.d.ts.map +1 -1
  282. package/lib/legacy.js +177 -1924
  283. package/lib/legacy.js.map +1 -1
  284. package/lib/lumi.d.ts +0 -142
  285. package/lib/lumi.d.ts.map +1 -1
  286. package/lib/lumi.js +7 -293
  287. package/lib/lumi.js.map +1 -1
  288. package/lib/modernExtend.d.ts +3 -7
  289. package/lib/modernExtend.d.ts.map +1 -1
  290. package/lib/modernExtend.js +4 -73
  291. package/lib/modernExtend.js.map +1 -1
  292. package/lib/ota.d.ts +71 -0
  293. package/lib/ota.d.ts.map +1 -0
  294. package/lib/ota.js +663 -0
  295. package/lib/ota.js.map +1 -0
  296. package/lib/philips.d.ts.map +1 -1
  297. package/lib/philips.js +2 -3
  298. package/lib/philips.js.map +1 -1
  299. package/lib/types.d.ts +41 -30
  300. package/lib/types.d.ts.map +1 -1
  301. package/lib/utils.d.ts +0 -1
  302. package/lib/utils.d.ts.map +1 -1
  303. package/lib/utils.js +1 -7
  304. package/lib/utils.js.map +1 -1
  305. package/package.json +23 -9
  306. package/lib/ota/common.d.ts +0 -31
  307. package/lib/ota/common.d.ts.map +0 -1
  308. package/lib/ota/common.js +0 -630
  309. package/lib/ota/common.js.map +0 -1
  310. package/lib/ota/gmmts.d.ts +0 -8
  311. package/lib/ota/gmmts.d.ts.map +0 -1
  312. package/lib/ota/gmmts.js +0 -62
  313. package/lib/ota/gmmts.js.map +0 -1
  314. package/lib/ota/index.d.ts +0 -15
  315. package/lib/ota/index.d.ts.map +0 -1
  316. package/lib/ota/index.js +0 -48
  317. package/lib/ota/index.js.map +0 -1
  318. package/lib/ota/inovelli.d.ts +0 -8
  319. package/lib/ota/inovelli.d.ts.map +0 -1
  320. package/lib/ota/inovelli.js +0 -91
  321. package/lib/ota/inovelli.js.map +0 -1
  322. package/lib/ota/jethome.d.ts +0 -9
  323. package/lib/ota/jethome.d.ts.map +0 -1
  324. package/lib/ota/jethome.js +0 -92
  325. package/lib/ota/jethome.js.map +0 -1
  326. package/lib/ota/ledvance.d.ts +0 -11
  327. package/lib/ota/ledvance.d.ts.map +0 -1
  328. package/lib/ota/ledvance.js +0 -75
  329. package/lib/ota/ledvance.js.map +0 -1
  330. package/lib/ota/salus.d.ts +0 -11
  331. package/lib/ota/salus.d.ts.map +0 -1
  332. package/lib/ota/salus.js +0 -99
  333. package/lib/ota/salus.js.map +0 -1
  334. package/lib/ota/securifi.d.ts +0 -4
  335. package/lib/ota/securifi.d.ts.map +0 -1
  336. package/lib/ota/securifi.js +0 -48
  337. package/lib/ota/securifi.js.map +0 -1
  338. package/lib/ota/tradfri.d.ts +0 -13
  339. package/lib/ota/tradfri.d.ts.map +0 -1
  340. package/lib/ota/tradfri.js +0 -72
  341. package/lib/ota/tradfri.js.map +0 -1
  342. package/lib/ota/ubisys.d.ts +0 -20
  343. package/lib/ota/ubisys.d.ts.map +0 -1
  344. package/lib/ota/ubisys.js +0 -93
  345. package/lib/ota/ubisys.js.map +0 -1
  346. package/lib/ota/zigbeeOTA.d.ts +0 -12
  347. package/lib/ota/zigbeeOTA.d.ts.map +0 -1
  348. package/lib/ota/zigbeeOTA.js +0 -143
  349. package/lib/ota/zigbeeOTA.js.map +0 -1
package/lib/ota/salus.js DELETED
@@ -1,99 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.getImageMeta = getImageMeta;
30
- exports.isUpdateAvailable = isUpdateAvailable;
31
- exports.updateToLatest = updateToLatest;
32
- const tar_stream_1 = __importDefault(require("tar-stream"));
33
- const logger_1 = require("../logger");
34
- const common = __importStar(require("./common"));
35
- const url = 'https://eu.salusconnect.io/demo/default/status/firmware?timestamp=0';
36
- const NS = 'zhc:ota:salus';
37
- const axios = common.getAxios();
38
- /**
39
- * Helper functions
40
- */
41
- async function getImageMeta(current, device) {
42
- logger_1.logger.debug(`Call getImageMeta for ${device.modelID}`, NS);
43
- const { data } = await axios.get(url);
44
- if (!data?.versions?.length) {
45
- throw new Error(`SalusOTA: Error getting firmware page at ${url}`);
46
- }
47
- const image = data.versions.find((i) => i.model === device.modelID);
48
- if (!image) {
49
- return null;
50
- }
51
- return {
52
- fileVersion: parseInt(image.version, 16),
53
- url: image.url.replace(/^http:\/\//, 'https://'),
54
- };
55
- }
56
- async function untar(tarStream) {
57
- return await new Promise((resolve, reject) => {
58
- const extract = tar_stream_1.default.extract();
59
- const result = [];
60
- extract.on('error', reject);
61
- extract.on('entry', (headers, stream, next) => {
62
- const buffers = [];
63
- stream.on('data', function (data) {
64
- buffers.push(data);
65
- });
66
- stream.on('end', function () {
67
- result.push({
68
- headers,
69
- data: Buffer.concat(buffers),
70
- });
71
- next();
72
- });
73
- stream.resume();
74
- });
75
- extract.on('finish', () => {
76
- resolve(result);
77
- });
78
- tarStream.pipe(extract);
79
- });
80
- }
81
- async function downloadImage(meta) {
82
- const download = await axios.get(meta.url, { responseType: 'stream' });
83
- const files = await untar(download.data);
84
- // @ts-expect-error ignore
85
- const imageFile = files.find((file) => file.headers.name.endsWith('.ota'));
86
- return imageFile;
87
- }
88
- /**
89
- * Interface implementation
90
- */
91
- async function isUpdateAvailable(device, requestPayload = null) {
92
- return await common.isUpdateAvailable(device, requestPayload, common.isNewImageAvailable, getImageMeta);
93
- }
94
- async function updateToLatest(device, onProgress) {
95
- return await common.updateToLatest(device, onProgress, common.getNewImage, getImageMeta, downloadImage);
96
- }
97
- exports.isUpdateAvailable = isUpdateAvailable;
98
- exports.updateToLatest = updateToLatest;
99
- //# sourceMappingURL=salus.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"salus.js","sourceRoot":"","sources":["../../src/lib/ota/salus.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { Ota, Zh } from '../types';
2
- export declare function isUpdateAvailable(device: Zh.Device, requestPayload?: Ota.ImageInfo): Promise<import("../types").OtaUpdateAvailableResult>;
3
- export declare function updateToLatest(device: Zh.Device, onProgress: Ota.OnProgress): Promise<number>;
4
- //# sourceMappingURL=securifi.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"securifi.d.ts","sourceRoot":"","sources":["../../src/lib/ota/securifi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAE,EAAE,EAAC,MAAM,UAAU,CAAC;AAIjC,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,cAAc,GAAE,GAAG,CAAC,SAAgB,wDAO9F;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,mBAOjF"}
@@ -1,48 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.isUpdateAvailable = isUpdateAvailable;
27
- exports.updateToLatest = updateToLatest;
28
- const common = __importStar(require("./common"));
29
- const zigbeeOTA = __importStar(require("./zigbeeOTA"));
30
- async function isUpdateAvailable(device, requestPayload = null) {
31
- if (device.modelID === 'PP-WHT-US') {
32
- // see https://github.com/Koenkk/zigbee-OTA/pull/14
33
- const scenesEndpoint = device.endpoints.find((e) => e.supportsOutputCluster('genScenes'));
34
- await scenesEndpoint.write('genScenes', { currentGroup: 49502 });
35
- }
36
- return await common.isUpdateAvailable(device, requestPayload, common.isNewImageAvailable, zigbeeOTA.getImageMeta);
37
- }
38
- async function updateToLatest(device, onProgress) {
39
- if (device.modelID === 'PP-WHT-US') {
40
- // see https://github.com/Koenkk/zigbee-OTA/pull/14
41
- const scenesEndpoint = device.endpoints.find((e) => e.supportsOutputCluster('genScenes'));
42
- await scenesEndpoint.write('genScenes', { currentGroup: 49502 });
43
- }
44
- return await common.updateToLatest(device, onProgress, common.getNewImage, zigbeeOTA.getImageMeta);
45
- }
46
- exports.isUpdateAvailable = isUpdateAvailable;
47
- exports.updateToLatest = updateToLatest;
48
- //# sourceMappingURL=securifi.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"securifi.js","sourceRoot":"","sources":["../../src/lib/ota/securifi.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,8CAOC;AAED,wCAOC;AAnBD,iDAAmC;AACnC,uDAAyC;AAElC,KAAK,UAAU,iBAAiB,CAAC,MAAiB,EAAE,iBAAgC,IAAI;IAC3F,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACjC,mDAAmD;QACnD,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC;QAC1F,MAAM,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,EAAC,YAAY,EAAE,KAAK,EAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,mBAAmB,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;AACtH,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,MAAiB,EAAE,UAA0B;IAC9E,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACjC,mDAAmD;QACnD,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC;QAC1F,MAAM,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,EAAC,YAAY,EAAE,KAAK,EAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;AACvG,CAAC;AAED,OAAO,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAC9C,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC"}
@@ -1,13 +0,0 @@
1
- import { Ota, Zh } from '../types';
2
- /**
3
- * Helper functions
4
- */
5
- export declare function getImageMeta(current: Ota.ImageInfo, device: Zh.Device): Promise<Ota.ImageMeta>;
6
- /**
7
- * Interface implementation
8
- */
9
- export declare function isUpdateAvailable(device: Zh.Device, requestPayload?: Ota.ImageInfo): Promise<import("../types").OtaUpdateAvailableResult>;
10
- export declare function updateToLatest(device: Zh.Device, onProgress: Ota.OnProgress): Promise<number>;
11
- declare const useTestURL_: () => void;
12
- export { useTestURL_ as useTestURL };
13
- //# sourceMappingURL=tradfri.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tradfri.d.ts","sourceRoot":"","sources":["../../src/lib/ota/tradfri.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,GAAG,EAAE,EAAE,EAAC,MAAM,UAAU,CAAC;AAU3C;;GAEG;AAEH,wBAAsB,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAmBpG;AAED;;GAEG;AAEH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,cAAc,GAAE,GAAG,CAAC,SAAgB,wDAE9F;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,mBAEjF;AAED,QAAA,MAAM,WAAW,YAEhB,CAAC;AAEF,OAAO,EAAC,WAAW,IAAI,UAAU,EAAC,CAAC"}
@@ -1,72 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.useTestURL = void 0;
27
- exports.getImageMeta = getImageMeta;
28
- exports.isUpdateAvailable = isUpdateAvailable;
29
- exports.updateToLatest = updateToLatest;
30
- const logger_1 = require("../logger");
31
- const common = __importStar(require("./common"));
32
- const productionURL = 'http://fw.ota.homesmart.ikea.net/feed/version_info.json';
33
- const testURL = 'http://fw.test.ota.homesmart.ikea.net/feed/version_info.json';
34
- const NS = 'zhc:ota:tradfri';
35
- const axios = common.getAxios();
36
- let useTestURL = false;
37
- /**
38
- * Helper functions
39
- */
40
- async function getImageMeta(current, device) {
41
- logger_1.logger.debug(`Call getImageMeta for ${device.modelID}`, NS);
42
- const url = useTestURL ? testURL : productionURL;
43
- const { data: images } = await axios.get(url);
44
- if (!images?.length) {
45
- throw new Error(`TradfriOTA: Error getting firmware page at ${url}`);
46
- }
47
- const image = images.find((i) => i.fw_image_type === current.imageType);
48
- if (!image) {
49
- return null;
50
- }
51
- return {
52
- fileVersion: (image.fw_file_version_MSB << 16) | image.fw_file_version_LSB,
53
- url: image.fw_binary_url,
54
- };
55
- }
56
- /**
57
- * Interface implementation
58
- */
59
- async function isUpdateAvailable(device, requestPayload = null) {
60
- return await common.isUpdateAvailable(device, requestPayload, common.isNewImageAvailable, getImageMeta);
61
- }
62
- async function updateToLatest(device, onProgress) {
63
- return await common.updateToLatest(device, onProgress, common.getNewImage, getImageMeta);
64
- }
65
- const useTestURL_ = () => {
66
- useTestURL = true;
67
- };
68
- exports.useTestURL = useTestURL_;
69
- exports.isUpdateAvailable = isUpdateAvailable;
70
- exports.updateToLatest = updateToLatest;
71
- exports.useTestURL = useTestURL_;
72
- //# sourceMappingURL=tradfri.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tradfri.js","sourceRoot":"","sources":["../../src/lib/ota/tradfri.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,oCAmBC;AAMD,8CAEC;AAED,wCAEC;AA9CD,sCAAiC;AAEjC,iDAAmC;AAEnC,MAAM,aAAa,GAAG,yDAAyD,CAAC;AAChF,MAAM,OAAO,GAAG,8DAA8D,CAAC;AAE/E,MAAM,EAAE,GAAG,iBAAiB,CAAC;AAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;AAChC,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB;;GAEG;AAEI,KAAK,UAAU,YAAY,CAAC,OAAsB,EAAE,MAAiB;IACxE,eAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;IACjD,MAAM,EAAC,IAAI,EAAE,MAAM,EAAC,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,8CAA8C,GAAG,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAElF,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO;QACH,WAAW,EAAE,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,mBAAmB;QAC1E,GAAG,EAAE,KAAK,CAAC,aAAa;KAC3B,CAAC;AACN,CAAC;AAED;;GAEG;AAEI,KAAK,UAAU,iBAAiB,CAAC,MAAiB,EAAE,iBAAgC,IAAI;IAC3F,OAAO,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;AAC5G,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,MAAiB,EAAE,UAA0B;IAC9E,OAAO,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,WAAW,GAAG,GAAG,EAAE;IACrB,UAAU,GAAG,IAAI,CAAC;AACtB,CAAC,CAAC;AAEqB,iCAAU;AAEjC,OAAO,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAC9C,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;AACxC,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC"}
@@ -1,20 +0,0 @@
1
- import { Ota, Zh } from '../types';
2
- /**
3
- * Ubisys switched firmware format when the switched to their newer
4
- * `Ubisys Compact7B Stack` (I think it was 7B, could have bene earlier)
5
- *
6
- * Their firmware index lists a *.ota1.zigbee firmware for those devices that
7
- * is in the old firmware format that will update the device to use the new
8
- * format. The matching logisch seems to generally work, however as reported in
9
- * Koenkk/zigbee-OTA#329 there still seems to be a bug lurking somewhere.
10
- */
11
- /**
12
- * Helper functions
13
- */
14
- export declare function getImageMeta(current: Ota.ImageInfo, device: Zh.Device): Promise<Ota.ImageMeta>;
15
- /**
16
- * Interface implementation
17
- */
18
- export declare function isUpdateAvailable(device: Zh.Device, requestPayload?: Ota.ImageInfo): Promise<import("../types").OtaUpdateAvailableResult>;
19
- export declare function updateToLatest(device: Zh.Device, onProgress: Ota.OnProgress): Promise<number>;
20
- //# sourceMappingURL=ubisys.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ubisys.d.ts","sourceRoot":"","sources":["../../src/lib/ota/ubisys.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,GAAG,EAAE,EAAE,EAAC,MAAM,UAAU,CAAC;AASjC;;;;;;;;GAQG;AAEH;;GAEG;AAEH,wBAAsB,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAsCpG;AAED;;GAEG;AAEH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,cAAc,GAAE,GAAG,CAAC,SAAgB,wDAE9F;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,mBAEjF"}
package/lib/ota/ubisys.js DELETED
@@ -1,93 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.getImageMeta = getImageMeta;
30
- exports.isUpdateAvailable = isUpdateAvailable;
31
- exports.updateToLatest = updateToLatest;
32
- const url_1 = __importDefault(require("url"));
33
- const logger_1 = require("../logger");
34
- const common = __importStar(require("./common"));
35
- const firmwareHtmlPageUrl = 'http://fwu.ubisys.de/smarthome/OTA/release/index';
36
- const imageRegex = /10F2-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{8})\S*ota1?\.zigbee/gi;
37
- const NS = 'zhc:ota:ubisys';
38
- const axios = common.getAxios();
39
- /**
40
- * Ubisys switched firmware format when the switched to their newer
41
- * `Ubisys Compact7B Stack` (I think it was 7B, could have bene earlier)
42
- *
43
- * Their firmware index lists a *.ota1.zigbee firmware for those devices that
44
- * is in the old firmware format that will update the device to use the new
45
- * format. The matching logisch seems to generally work, however as reported in
46
- * Koenkk/zigbee-OTA#329 there still seems to be a bug lurking somewhere.
47
- */
48
- /**
49
- * Helper functions
50
- */
51
- async function getImageMeta(current, device) {
52
- logger_1.logger.debug(`Call getImageMeta for ${device.modelID}`, NS);
53
- const { status, data: pageHtml } = await axios.get(firmwareHtmlPageUrl, { maxContentLength: -1 });
54
- if (status !== 200 || !pageHtml?.length) {
55
- throw new Error(`UbisysOTA: Error getting firmware page at ${firmwareHtmlPageUrl}`);
56
- }
57
- logger_1.logger.debug(`Got firmware page, status: ${status}, data.length: ${pageHtml.length}`, NS);
58
- imageRegex.lastIndex = 0; // reset (global) regex for next exec to match from the beginning again
59
- let imageMatch = imageRegex.exec(pageHtml);
60
- let highestMatch = null;
61
- while (imageMatch != null) {
62
- logger_1.logger.debug(`Image found: ${imageMatch[0]}`, NS);
63
- if (parseInt(imageMatch[1], 16) === current.imageType &&
64
- parseInt(imageMatch[2], 16) <= device.hardwareVersion &&
65
- device.hardwareVersion <= parseInt(imageMatch[3], 16)) {
66
- if (highestMatch === null || parseInt(highestMatch[4], 16) < parseInt(imageMatch[4], 16)) {
67
- highestMatch = imageMatch;
68
- }
69
- }
70
- imageMatch = imageRegex.exec(pageHtml);
71
- }
72
- if (!highestMatch) {
73
- return null;
74
- }
75
- return {
76
- hardwareVersionMin: parseInt(highestMatch[2], 16),
77
- hardwareVersionMax: parseInt(highestMatch[3], 16),
78
- fileVersion: parseInt(highestMatch[4], 16),
79
- url: url_1.default.resolve(firmwareHtmlPageUrl, highestMatch[0]),
80
- };
81
- }
82
- /**
83
- * Interface implementation
84
- */
85
- async function isUpdateAvailable(device, requestPayload = null) {
86
- return await common.isUpdateAvailable(device, requestPayload, common.isNewImageAvailable, getImageMeta);
87
- }
88
- async function updateToLatest(device, onProgress) {
89
- return await common.updateToLatest(device, onProgress, common.getNewImage, getImageMeta);
90
- }
91
- exports.isUpdateAvailable = isUpdateAvailable;
92
- exports.updateToLatest = updateToLatest;
93
- //# sourceMappingURL=ubisys.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ubisys.js","sourceRoot":"","sources":["../../src/lib/ota/ubisys.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import { KeyValueAny, Ota, Zh } from '../types';
2
- export declare function getImageMeta(current: Ota.ImageInfo, device: Zh.Device): Promise<Ota.ImageMeta>;
3
- export declare function getFirmwareFile(image: KeyValueAny): Promise<import("axios").AxiosResponse<any, any> | {
4
- data: Buffer;
5
- }>;
6
- /**
7
- * Interface implementation
8
- */
9
- export declare function isUpdateAvailable(device: Zh.Device, requestPayload?: Ota.ImageInfo): Promise<import("../types").OtaUpdateAvailableResult>;
10
- export declare function updateToLatest(device: Zh.Device, onProgress: Ota.OnProgress): Promise<number>;
11
- export declare const useIndexOverride: (indexFileName: string) => void;
12
- //# sourceMappingURL=zigbeeOTA.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"zigbeeOTA.d.ts","sourceRoot":"","sources":["../../src/lib/ota/zigbeeOTA.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAE,GAAG,EAAE,EAAE,EAAC,MAAM,UAAU,CAAC;AAwD9C,wBAAsB,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CA4BpG;AAgBD,wBAAsB,eAAe,CAAC,KAAK,EAAE,WAAW;;GAavD;AAED;;GAEG;AAEH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,cAAc,GAAE,GAAG,CAAC,SAAgB,wDAE9F;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,mBAEjF;AAED,eAAO,MAAM,gBAAgB,kBAAmB,MAAM,SAErD,CAAC"}
@@ -1,143 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.useIndexOverride = void 0;
27
- exports.getImageMeta = getImageMeta;
28
- exports.getFirmwareFile = getFirmwareFile;
29
- exports.isUpdateAvailable = isUpdateAvailable;
30
- exports.updateToLatest = updateToLatest;
31
- const logger_1 = require("../logger");
32
- const common = __importStar(require("./common"));
33
- const url = 'https://raw.githubusercontent.com/Koenkk/zigbee-OTA/master/index.json';
34
- const caBundleUrl = 'https://raw.githubusercontent.com/Koenkk/zigbee-OTA/master/cacerts.pem';
35
- const NS = 'zhc:ota';
36
- const axios = common.getAxios();
37
- let overrideIndexFileName = null;
38
- /**
39
- * Helper functions
40
- */
41
- function fillImageInfo(meta) {
42
- // Web-hosted images must come with all fields filled already
43
- if (common.isValidUrl(meta.url)) {
44
- return meta;
45
- }
46
- // Nothing to do if needed fields were filled already
47
- if (meta.imageType !== undefined && meta.manufacturerCode !== undefined && meta.fileVersion !== undefined) {
48
- return meta;
49
- }
50
- // If no fields provided - get them from the image file
51
- const buffer = common.readLocalFile(meta.url);
52
- const start = buffer.indexOf(common.UPGRADE_FILE_IDENTIFIER);
53
- const image = common.parseImage(buffer.subarray(start));
54
- // Will fill only those fields that were absent
55
- if (meta.imageType === undefined)
56
- meta.imageType = image.header.imageType;
57
- if (meta.manufacturerCode === undefined)
58
- meta.manufacturerCode = image.header.manufacturerCode;
59
- if (meta.fileVersion === undefined)
60
- meta.fileVersion = image.header.fileVersion;
61
- return meta;
62
- }
63
- async function getIndex() {
64
- const { data: mainIndex } = await axios.get(url);
65
- if (!mainIndex) {
66
- throw new Error(`ZigbeeOTA: Error getting firmware page at '${url}'`);
67
- }
68
- logger_1.logger.debug(`Downloaded main index`, NS);
69
- if (overrideIndexFileName) {
70
- logger_1.logger.debug(`Loading override index '${overrideIndexFileName}'`, NS);
71
- const localIndex = await common.getOverrideIndexFile(overrideIndexFileName);
72
- // Resulting index will have overridden items first
73
- return localIndex.concat(mainIndex).map((item) => (common.isValidUrl(item.url) ? item : fillImageInfo(item)));
74
- }
75
- return mainIndex;
76
- }
77
- async function getImageMeta(current, device) {
78
- logger_1.logger.debug(`Getting image metadata for '${device.modelID}'`, NS);
79
- const images = await getIndex();
80
- // NOTE: Officially an image can be determined with a combination of manufacturerCode and imageType.
81
- // However Gledopto pro products use the same imageType (0) for every device while the image is different.
82
- // For this case additional identification through the modelId is done.
83
- // In the case of Tuya and Moes, additional identification is carried out through the manufacturerName.
84
- const image = images.find((i) => i.imageType === current.imageType &&
85
- i.manufacturerCode === current.manufacturerCode &&
86
- (!i.minFileVersion || current.fileVersion >= i.minFileVersion) &&
87
- (!i.maxFileVersion || current.fileVersion <= i.maxFileVersion) &&
88
- (!i.modelId || i.modelId === device.modelID) &&
89
- (!i.manufacturerName || i.manufacturerName.includes(device.manufacturerName)));
90
- if (!image) {
91
- return null;
92
- }
93
- return {
94
- fileVersion: image.fileVersion,
95
- fileSize: image.fileSize,
96
- url: image.url,
97
- sha512: image.sha512,
98
- force: image.force,
99
- };
100
- }
101
- async function isNewImageAvailable(current, device, getImageMeta) {
102
- if (['lumi.airrtc.agl001', 'lumi.curtain.acn003', 'lumi.curtain.agl001'].includes(device.modelID)) {
103
- // The current.fileVersion which comes from the device is wrong.
104
- // Use the `lumiFileVersion` which comes from the manuSpecificLumi.attributeReport instead.
105
- // https://github.com/Koenkk/zigbee2mqtt/issues/16345#issuecomment-1454835056
106
- // https://github.com/Koenkk/zigbee2mqtt/issues/16345 doesn't seem to be needed for all
107
- // https://github.com/Koenkk/zigbee2mqtt/issues/15745
108
- if (device.meta.lumiFileVersion) {
109
- current = { ...current, fileVersion: device.meta.lumiFileVersion };
110
- }
111
- }
112
- return await common.isNewImageAvailable(current, device, getImageMeta);
113
- }
114
- async function getFirmwareFile(image) {
115
- const urlOrName = image.url;
116
- // First try to download firmware file with the URL provided
117
- if (common.isValidUrl(urlOrName)) {
118
- logger_1.logger.debug(`Downloading firmware image from '${urlOrName}' using the zigbeeOTA custom CA certificates`, NS);
119
- const otaCaBundle = await common.processCustomCaBundle(caBundleUrl);
120
- const response = await common.getAxios(otaCaBundle).get(urlOrName, { responseType: 'arraybuffer' });
121
- return response;
122
- }
123
- logger_1.logger.debug(`Trying to read firmware image from local file '${urlOrName}'`, NS);
124
- return { data: common.readLocalFile(urlOrName) };
125
- }
126
- /**
127
- * Interface implementation
128
- */
129
- async function isUpdateAvailable(device, requestPayload = null) {
130
- return await common.isUpdateAvailable(device, requestPayload, isNewImageAvailable, getImageMeta);
131
- }
132
- async function updateToLatest(device, onProgress) {
133
- return await common.updateToLatest(device, onProgress, common.getNewImage, getImageMeta, getFirmwareFile);
134
- }
135
- const useIndexOverride = (indexFileName) => {
136
- overrideIndexFileName = indexFileName;
137
- };
138
- exports.useIndexOverride = useIndexOverride;
139
- exports.getImageMeta = getImageMeta;
140
- exports.isUpdateAvailable = isUpdateAvailable;
141
- exports.updateToLatest = updateToLatest;
142
- exports.useIndexOverride = exports.useIndexOverride;
143
- //# sourceMappingURL=zigbeeOTA.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"zigbeeOTA.js","sourceRoot":"","sources":["../../src/lib/ota/zigbeeOTA.ts"],"names":[],"mappings":"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"}