zigbee-herdsman-converters 14.0.381 → 14.0.385
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.
- package/converters/fromZigbee.js +5 -4
- package/devices/aurora_lighting.js +1 -1
- package/devices/cleode.js +20 -0
- package/devices/danalock.js +4 -3
- package/devices/gledopto.js +7 -0
- package/devices/philips.js +19 -1
- package/devices/tubeszb.js +20 -0
- package/devices/tuya.js +6 -1
- package/devices/xiaomi.js +6 -10
- package/devices/zemismart.js +22 -0
- package/lib/ota/common.js +6 -1
- package/lib/ota/zigbeeOTA.js +37 -8
- package/lib/reporting.js +1 -1
- package/npm-shrinkwrap.json +1 -1
- package/package.json +1 -1
package/converters/fromZigbee.js
CHANGED
|
@@ -8115,14 +8115,15 @@ const converters = {
|
|
|
8115
8115
|
convert: (model, msg, publish, options, meta) => null,
|
|
8116
8116
|
},
|
|
8117
8117
|
ignore_metering: {
|
|
8118
|
-
/**
|
|
8119
|
-
* When using this converter also add the following to the configure method of the device:
|
|
8120
|
-
* await readMeteringPowerConverterAttributes(endpoint);
|
|
8121
|
-
*/
|
|
8122
8118
|
cluster: 'seMetering',
|
|
8123
8119
|
type: ['attributeReport', 'readResponse'],
|
|
8124
8120
|
convert: (model, msg, publish, options, meta) => null,
|
|
8125
8121
|
},
|
|
8122
|
+
ignore_electrical_measurement: {
|
|
8123
|
+
cluster: 'haElectricalMeasurement',
|
|
8124
|
+
type: ['attributeReport', 'readResponse'],
|
|
8125
|
+
convert: (model, msg, publish, options, meta) => null,
|
|
8126
|
+
},
|
|
8126
8127
|
// #endregion
|
|
8127
8128
|
};
|
|
8128
8129
|
|
|
@@ -68,7 +68,7 @@ module.exports = [
|
|
|
68
68
|
extend: extend.light_onoff_brightness_colortemp_color(),
|
|
69
69
|
},
|
|
70
70
|
{
|
|
71
|
-
zigbeeModel: ['RGBBulb01UK', 'RGBBulb02UK'],
|
|
71
|
+
zigbeeModel: ['RGBBulb01UK', 'RGBBulb02UK', 'RGBBulb51AU'],
|
|
72
72
|
model: 'AU-A1GSZ9RGBW_HV-GSCXZB269K',
|
|
73
73
|
vendor: 'Aurora Lighting',
|
|
74
74
|
description: 'AOne 9.5W smart RGBW GLS E27/B22',
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const exposes = require('../lib/exposes');
|
|
2
|
+
const reporting = require('../lib/reporting');
|
|
3
|
+
const e = exposes.presets;
|
|
4
|
+
const extend = require('../lib/extend');
|
|
5
|
+
|
|
6
|
+
module.exports = [
|
|
7
|
+
{
|
|
8
|
+
zigbeeModel: ['ZPLUG'],
|
|
9
|
+
model: 'ZPLUG_Boost',
|
|
10
|
+
vendor: 'CLEODE',
|
|
11
|
+
description: 'ZPlug boost',
|
|
12
|
+
extend: extend.switch(),
|
|
13
|
+
exposes: [e.switch(), e.power()],
|
|
14
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
15
|
+
const endpoint = device.getEndpoint(1);
|
|
16
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'seMetering']);
|
|
17
|
+
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
];
|
package/devices/danalock.js
CHANGED
|
@@ -10,14 +10,15 @@ module.exports = [
|
|
|
10
10
|
model: 'V3-BTZB/V3-BTZBE',
|
|
11
11
|
vendor: 'Danalock',
|
|
12
12
|
description: 'BT/ZB smartlock',
|
|
13
|
-
fromZigbee: [fz.lock, fz.lock_operation_event, fz.battery],
|
|
14
|
-
toZigbee: [tz.lock],
|
|
13
|
+
fromZigbee: [fz.lock, fz.lock_operation_event, fz.battery, fz.lock_programming_event, fz.lock_pin_code_response],
|
|
14
|
+
toZigbee: [tz.lock, tz.pincode_lock, tz.lock_userstatus],
|
|
15
|
+
meta: {pinCodeCount: 20},
|
|
15
16
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
16
17
|
const endpoint = device.getEndpoint(1);
|
|
17
18
|
await reporting.bind(endpoint, coordinatorEndpoint, ['closuresDoorLock', 'genPowerCfg']);
|
|
18
19
|
await reporting.lockState(endpoint);
|
|
19
20
|
await reporting.batteryPercentageRemaining(endpoint);
|
|
20
21
|
},
|
|
21
|
-
exposes: [e.lock(), e.battery()],
|
|
22
|
+
exposes: [e.lock(), e.battery(), e.pincode()],
|
|
22
23
|
},
|
|
23
24
|
];
|
package/devices/gledopto.js
CHANGED
|
@@ -508,6 +508,13 @@ module.exports = [
|
|
|
508
508
|
description: 'Zigbee 10W Floodlight RGB+CCT',
|
|
509
509
|
extend: gledoptoExtend.light_onoff_brightness_colortemp_color(),
|
|
510
510
|
},
|
|
511
|
+
{
|
|
512
|
+
zigbeeModel: ['GL-B-003P'],
|
|
513
|
+
model: 'GL-B-003P',
|
|
514
|
+
vendor: 'Gledopto',
|
|
515
|
+
description: 'Zigbee 7W E26/E27 Bulb RGB+CCT (pro)',
|
|
516
|
+
extend: extend.light_onoff_brightness_colortemp({colorTempRange: [155, 495]}),
|
|
517
|
+
},
|
|
511
518
|
{
|
|
512
519
|
zigbeeModel: ['GL-FL-004TZS'],
|
|
513
520
|
model: 'GL-FL-004TZS',
|
package/devices/philips.js
CHANGED
|
@@ -29,6 +29,24 @@ const hueExtend = {
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
module.exports = [
|
|
32
|
+
{
|
|
33
|
+
zigbeeModel: ['929003056901'],
|
|
34
|
+
model: '929003056901',
|
|
35
|
+
vendor: 'Philips',
|
|
36
|
+
description: 'Hue Struana 27W',
|
|
37
|
+
meta: {turnsOffAtBrightness1: true},
|
|
38
|
+
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
39
|
+
ota: ota.zigbeeOTA,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
zigbeeModel: ['LWA018'],
|
|
43
|
+
model: '9290024693',
|
|
44
|
+
vendor: 'Philips',
|
|
45
|
+
description: 'Hue white A60 bulb B22 1055lm with Bluetooth',
|
|
46
|
+
meta: {turnsOffAtBrightness1: true},
|
|
47
|
+
extend: extend.light_onoff_brightness(),
|
|
48
|
+
ota: ota.zigbeeOTA,
|
|
49
|
+
},
|
|
32
50
|
{
|
|
33
51
|
zigbeeModel: ['LCX004'],
|
|
34
52
|
model: '929002994901',
|
|
@@ -920,7 +938,7 @@ module.exports = [
|
|
|
920
938
|
vendor: 'Philips',
|
|
921
939
|
description: 'Hue white ambiance E14 (with Bluetooth)',
|
|
922
940
|
meta: {turnsOffAtBrightness1: true},
|
|
923
|
-
extend: hueExtend.light_onoff_brightness_colortemp(),
|
|
941
|
+
extend: hueExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 454]}),
|
|
924
942
|
ota: ota.zigbeeOTA,
|
|
925
943
|
},
|
|
926
944
|
{
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const fz = {...require('../converters/fromZigbee'), legacy: require('../lib/legacy').fromZigbee};
|
|
2
|
+
const reporting = require('../lib/reporting');
|
|
3
|
+
|
|
4
|
+
module.exports = [
|
|
5
|
+
{
|
|
6
|
+
zigbeeModel: ['tubeszb.router'],
|
|
7
|
+
model: 'tubeszb.router',
|
|
8
|
+
vendor: 'TubesZB',
|
|
9
|
+
description: '[CC2652 Router](https://github.com/tube0013/tube_gateways/tree/main/tube_cc_router)',
|
|
10
|
+
fromZigbee: [fz.linkquality_from_basic],
|
|
11
|
+
toZigbee: [],
|
|
12
|
+
exposes: [],
|
|
13
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
14
|
+
const endpoint = device.getEndpoint(8);
|
|
15
|
+
const payload = [{attribute: 'zclVersion', minimumReportInterval: 0, maximumReportInterval: 3600, reportableChange: 0}];
|
|
16
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic']);
|
|
17
|
+
await endpoint.configureReporting('genBasic', payload);
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
];
|
package/devices/tuya.js
CHANGED
|
@@ -163,6 +163,7 @@ module.exports = [
|
|
|
163
163
|
{modelID: 'TS0505B', manufacturerName: '_TZ3210_bicjqpg4'},
|
|
164
164
|
{modelID: 'TS0505B', manufacturerName: '_TZ3000_cmaky9gq'},
|
|
165
165
|
{modelID: 'TS0505B', manufacturerName: '_TZ3000_tza2vjxx'},
|
|
166
|
+
{modelID: 'TS0505B', manufacturerName: '_TZ3210_k1pe6ibm'},
|
|
166
167
|
{modelID: 'TS0505B', manufacturerName: '_TZ3210_bfwvfyx1'}],
|
|
167
168
|
model: 'TS0505B',
|
|
168
169
|
vendor: 'TuYa',
|
|
@@ -179,7 +180,8 @@ module.exports = [
|
|
|
179
180
|
fingerprint: [{modelID: 'TS0503B', manufacturerName: '_TZ3000_i8l0nqdu'},
|
|
180
181
|
{modelID: 'TS0503B', manufacturerName: '_TZ3210_a5fxguxr'},
|
|
181
182
|
{modelID: 'TS0503B', manufacturerName: '_TZ3210_778drfdt'},
|
|
182
|
-
{modelID: 'TS0503B', manufacturerName: '_TZ3000_g5xawfcq'}
|
|
183
|
+
{modelID: 'TS0503B', manufacturerName: '_TZ3000_g5xawfcq'},
|
|
184
|
+
{modelID: 'TS0503B', manufacturerName: '_TZ3210_trm3l2aw'}],
|
|
183
185
|
model: 'TS0503B',
|
|
184
186
|
vendor: 'TuYa',
|
|
185
187
|
description: 'Zigbee RGB light',
|
|
@@ -221,9 +223,11 @@ module.exports = [
|
|
|
221
223
|
{modelID: 'TS0202', manufacturerName: '_TZ3000_kmh5qpmb'},
|
|
222
224
|
{modelID: 'TS0202', manufacturerName: '_TYZB01_zwvaj5wy'},
|
|
223
225
|
{modelID: 'TS0202', manufacturerName: '_TZ3000_mcxw5ehu'},
|
|
226
|
+
{modelID: 'TS0202', manufacturerName: '_TZ3000_bsvqrxru'},
|
|
224
227
|
{modelID: 'TS0202', manufacturerName: '_TZ3000_msl6wxk9'},
|
|
225
228
|
{modelID: 'TS0202', manufacturerName: '_TYZB01_tv3wxhcz'},
|
|
226
229
|
{modelID: 'TS0202', manufacturerName: '_TYZB01_hqbdru35'},
|
|
230
|
+
{modelID: 'TS0202', manufacturerName: '_TZ3000_tiwq83wk'},
|
|
227
231
|
{modelID: 'WHD02', manufacturerName: '_TZ3000_hktqahrq'}],
|
|
228
232
|
model: 'TS0202',
|
|
229
233
|
vendor: 'TuYa',
|
|
@@ -504,6 +508,7 @@ module.exports = [
|
|
|
504
508
|
{modelID: 'TS0502B', manufacturerName: '_TZ3210_psgq7ysz'},
|
|
505
509
|
{modelID: 'TS0502B', manufacturerName: '_TZ3000_zw7wr5uo'},
|
|
506
510
|
{modelID: 'TS0502B', manufacturerName: '_TZ3210_pz9zmxjj'},
|
|
511
|
+
{modelID: 'TS0502B', manufacturerName: '_TZ3000_fzwhym79'},
|
|
507
512
|
],
|
|
508
513
|
model: 'TS0502B',
|
|
509
514
|
vendor: 'TuYa',
|
package/devices/xiaomi.js
CHANGED
|
@@ -81,11 +81,11 @@ module.exports = [
|
|
|
81
81
|
model: 'ZNLDP12LM',
|
|
82
82
|
vendor: 'Xiaomi',
|
|
83
83
|
description: 'Aqara smart LED bulb',
|
|
84
|
-
toZigbee: xiaomiExtend.light_onoff_brightness_colortemp().toZigbee.concat([
|
|
84
|
+
toZigbee: xiaomiExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}).toZigbee.concat([
|
|
85
85
|
tz.xiaomi_light_power_outage_memory]),
|
|
86
|
-
fromZigbee: xiaomiExtend.light_onoff_brightness_colortemp().fromZigbee,
|
|
86
|
+
fromZigbee: xiaomiExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}).fromZigbee,
|
|
87
87
|
// power_on_behavior 'toggle' does not seem to be supported
|
|
88
|
-
exposes: xiaomiExtend.light_onoff_brightness_colortemp().exposes.concat([
|
|
88
|
+
exposes: xiaomiExtend.light_onoff_brightness_colortemp({colorTempRange: [153, 370]}).exposes.concat([
|
|
89
89
|
e.power_outage_memory().withAccess(ea.STATE_SET)]),
|
|
90
90
|
ota: ota.zigbeeOTA,
|
|
91
91
|
},
|
|
@@ -1403,18 +1403,14 @@ module.exports = [
|
|
|
1403
1403
|
vendor: 'Xiaomi',
|
|
1404
1404
|
description: 'Aqara single switch module T1 (with neutral)',
|
|
1405
1405
|
// Ignore energy metering reports, rely on aqara_opple: https://github.com/Koenkk/zigbee2mqtt/issues/10709
|
|
1406
|
-
fromZigbee: [fz.on_off, fz.
|
|
1406
|
+
fromZigbee: [fz.on_off, fz.device_temperature, fz.aqara_opple, fz.ignore_metering, fz.ignore_electrical_measurement,
|
|
1407
|
+
fz.xiaomi_power],
|
|
1407
1408
|
exposes: [e.switch(), e.energy(), e.power(), e.device_temperature(), e.power_outage_memory(), e.switch_type()],
|
|
1408
1409
|
toZigbee: [tz.xiaomi_switch_type, tz.on_off, tz.xiaomi_switch_power_outage_memory],
|
|
1409
1410
|
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1410
1411
|
const endpoint = device.getEndpoint(1);
|
|
1411
|
-
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', '
|
|
1412
|
+
await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'genDeviceTempCfg']);
|
|
1412
1413
|
await reporting.onOff(endpoint);
|
|
1413
|
-
// Gives UNSUPPORTED_ATTRIBUTE on reporting.readEletricalMeasurementMultiplierDivisors.
|
|
1414
|
-
await endpoint.read('haElectricalMeasurement', ['acPowerMultiplier', 'acPowerDivisor']);
|
|
1415
|
-
await reporting.readMeteringMultiplierDivisor(endpoint);
|
|
1416
|
-
await reporting.currentSummDelivered(endpoint);
|
|
1417
|
-
await reporting.activePower(endpoint, {min: 5, max: 600, change: 10});
|
|
1418
1414
|
await reporting.deviceTemperature(endpoint);
|
|
1419
1415
|
device.powerSource = 'Mains (single phase)';
|
|
1420
1416
|
device.save();
|
package/devices/zemismart.js
CHANGED
|
@@ -5,6 +5,7 @@ const reporting = require('../lib/reporting');
|
|
|
5
5
|
const extend = require('../lib/extend');
|
|
6
6
|
const e = exposes.presets;
|
|
7
7
|
const tuya = require('../lib/tuya');
|
|
8
|
+
const ea = exposes.access;
|
|
8
9
|
|
|
9
10
|
const fzLocal = {
|
|
10
11
|
ZMRM02: {
|
|
@@ -102,4 +103,25 @@ module.exports = [
|
|
|
102
103
|
'button_5_hold', 'button_5_single', 'button_5_double',
|
|
103
104
|
'button_6_hold', 'button_6_single', 'button_6_double'])],
|
|
104
105
|
},
|
|
106
|
+
{
|
|
107
|
+
fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_zigisuyh'}],
|
|
108
|
+
model: 'ZIGBEE-B09-UK',
|
|
109
|
+
vendor: 'Zemismart',
|
|
110
|
+
description: 'Zigbee smart outlet universal socket with USB port',
|
|
111
|
+
fromZigbee: [fz.on_off, fz.tuya_switch_power_outage_memory],
|
|
112
|
+
toZigbee: [tz.on_off, tz.tuya_switch_power_outage_memory],
|
|
113
|
+
exposes: [e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2'),
|
|
114
|
+
exposes.enum('power_outage_memory', ea.STATE_SET, ['on', 'off', 'restore'])
|
|
115
|
+
.withDescription('Recover state after power outage')],
|
|
116
|
+
endpoint: (device) => {
|
|
117
|
+
return {'l1': 1, 'l2': 2};
|
|
118
|
+
},
|
|
119
|
+
meta: {multiEndpoint: true},
|
|
120
|
+
configure: async (device, coordinatorEndpoint, logger) => {
|
|
121
|
+
await reporting.bind(device.getEndpoint(1), coordinatorEndpoint, ['genOnOff']);
|
|
122
|
+
await reporting.bind(device.getEndpoint(2), coordinatorEndpoint, ['genOnOff']);
|
|
123
|
+
await reporting.onOff(device.getEndpoint(1));
|
|
124
|
+
await reporting.onOff(device.getEndpoint(2));
|
|
125
|
+
},
|
|
126
|
+
},
|
|
105
127
|
];
|
package/lib/ota/common.js
CHANGED
|
@@ -265,6 +265,11 @@ async function isNewImageAvailable(current, logger, device, getImageMeta) {
|
|
|
265
265
|
const meta = await getImageMeta(current, logger, device);
|
|
266
266
|
const [currentS, metaS] = [JSON.stringify(current), JSON.stringify(meta)];
|
|
267
267
|
logger.debug(`Is new image available for '${device.ieeeAddr}', current '${currentS}', latest meta '${metaS}'`);
|
|
268
|
+
|
|
269
|
+
if (meta.force) {
|
|
270
|
+
return -1; // Negative number means the new firmware is 'newer' than current one
|
|
271
|
+
}
|
|
272
|
+
|
|
268
273
|
return Math.sign(current.fileVersion - meta.fileVersion);
|
|
269
274
|
}
|
|
270
275
|
|
|
@@ -411,7 +416,7 @@ async function updateToLatest(device, logger, onProgress, getNewImage, getImageM
|
|
|
411
416
|
async function getNewImage(current, logger, device, getImageMeta, downloadImage) {
|
|
412
417
|
const meta = await getImageMeta(current, logger, device);
|
|
413
418
|
logger.debug(`getNewImage for '${device.ieeeAddr}', meta ${JSON.stringify(meta)}`);
|
|
414
|
-
assert(meta.fileVersion > current.fileVersion, 'No new image available');
|
|
419
|
+
assert(meta.fileVersion > current.fileVersion || meta.force, 'No new image available');
|
|
415
420
|
|
|
416
421
|
const download = downloadImage ? await downloadImage(meta, logger) :
|
|
417
422
|
await getAxios().get(meta.url, {responseType: 'arraybuffer'});
|
package/lib/ota/zigbeeOTA.js
CHANGED
|
@@ -32,8 +32,18 @@ async function getIndexFile(urlOrName) {
|
|
|
32
32
|
return JSON.parse(fs.readFileSync(urlOrName));
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
function readLocalFile(fileName, logger) {
|
|
36
|
+
// If the file name is not a full path, then treat it as a relative to the data directory
|
|
37
|
+
if (!path.isAbsolute(fileName) && dataDir) {
|
|
38
|
+
fileName = path.join(dataDir, fileName);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
logger.debug(`ZigbeeOTA: getting local firmware file ${fileName}`);
|
|
42
|
+
return fs.readFileSync(fileName);
|
|
43
|
+
}
|
|
44
|
+
|
|
35
45
|
async function getFirmwareFile(image, logger) {
|
|
36
|
-
|
|
46
|
+
const urlOrName = image.url;
|
|
37
47
|
|
|
38
48
|
// First try to download firmware file with the URL provided
|
|
39
49
|
if (isValidUrl(urlOrName)) {
|
|
@@ -41,15 +51,33 @@ async function getFirmwareFile(image, logger) {
|
|
|
41
51
|
return await axios.get(urlOrName, {responseType: 'arraybuffer'});
|
|
42
52
|
}
|
|
43
53
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
54
|
+
return {data: readLocalFile(urlOrName, logger)};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function fillImageInfo(meta, logger) {
|
|
58
|
+
// Web-hosted images must come with all fields filled already
|
|
59
|
+
if (isValidUrl(meta.url)) {
|
|
60
|
+
return meta;
|
|
47
61
|
}
|
|
48
62
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
63
|
+
// Nothing to do if needed fields were filled already
|
|
64
|
+
if (meta.hasOwnProperty('imageType') &&
|
|
65
|
+
meta.hasOwnProperty('manufacturerCode') &&
|
|
66
|
+
meta.hasOwnProperty('fileVersion')) {
|
|
67
|
+
return meta;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// If no fields provided - get them from the image file
|
|
71
|
+
const buffer = readLocalFile(meta.url, logger);
|
|
72
|
+
const start = buffer.indexOf(common.upgradeFileIdentifier);
|
|
73
|
+
const image = common.parseImage(buffer.slice(start));
|
|
52
74
|
|
|
75
|
+
// Will fill only those fields that were absent
|
|
76
|
+
if (!meta.hasOwnProperty('imageType')) meta.imageType = image.header.imageType;
|
|
77
|
+
if (!meta.hasOwnProperty('manufacturerCode')) meta.manufacturerCode = image.header.manufacturerCode;
|
|
78
|
+
if (!meta.hasOwnProperty('fileVersion')) meta.fileVersion = image.header.fileVersion;
|
|
79
|
+
return meta;
|
|
80
|
+
}
|
|
53
81
|
|
|
54
82
|
async function getIndex(logger) {
|
|
55
83
|
const index = (await axios.get(url)).data;
|
|
@@ -61,7 +89,7 @@ async function getIndex(logger) {
|
|
|
61
89
|
const localIndex = await getIndexFile(overrideIndexFileName);
|
|
62
90
|
|
|
63
91
|
// Resulting index will have overriden items first
|
|
64
|
-
return localIndex.concat(index);
|
|
92
|
+
return localIndex.concat(index).map((item) => isValidUrl(item.url) ? item : fillImageInfo(item, logger));
|
|
65
93
|
}
|
|
66
94
|
|
|
67
95
|
return index;
|
|
@@ -88,6 +116,7 @@ async function getImageMeta(current, logger, device) {
|
|
|
88
116
|
fileSize: image.fileSize,
|
|
89
117
|
url: image.url,
|
|
90
118
|
sha512: image.sha512,
|
|
119
|
+
force: image.force,
|
|
91
120
|
};
|
|
92
121
|
}
|
|
93
122
|
|
package/lib/reporting.js
CHANGED
|
@@ -84,7 +84,7 @@ module.exports = {
|
|
|
84
84
|
await endpoint.configureReporting('msTemperatureMeasurement', p);
|
|
85
85
|
},
|
|
86
86
|
deviceTemperature: async (endpoint, overrides) => {
|
|
87
|
-
const p = payload('currentTemperature',
|
|
87
|
+
const p = payload('currentTemperature', 300, repInterval.HOUR, 1, overrides);
|
|
88
88
|
await endpoint.configureReporting('genDeviceTempCfg', p);
|
|
89
89
|
},
|
|
90
90
|
pressure: async (endpoint, overrides) => {
|
package/npm-shrinkwrap.json
CHANGED