zigbee-herdsman-converters 14.0.267 → 14.0.268
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/toZigbee.js +21 -33
- package/lib/utils.js +27 -2
- package/npm-shrinkwrap.json +1 -1
- package/package.json +1 -1
package/converters/toZigbee.js
CHANGED
|
@@ -4625,17 +4625,23 @@ const converters = {
|
|
|
4625
4625
|
convertSet: async (entity, key, value, meta) => {
|
|
4626
4626
|
const isGroup = entity.constructor.name === 'Group';
|
|
4627
4627
|
const groupid = isGroup ? entity.groupID : 0;
|
|
4628
|
-
|
|
4628
|
+
let sceneid = value;
|
|
4629
|
+
let scenename = null;
|
|
4630
|
+
if (typeof value === 'object') {
|
|
4631
|
+
sceneid = value.ID;
|
|
4632
|
+
scenename = value.name;
|
|
4633
|
+
}
|
|
4634
|
+
|
|
4629
4635
|
const response = await entity.command('genScenes', 'store', {groupid, sceneid}, utils.getOptions(meta.mapped));
|
|
4630
4636
|
|
|
4631
4637
|
if (isGroup) {
|
|
4632
4638
|
if (meta.membersState) {
|
|
4633
4639
|
for (const member of entity.members) {
|
|
4634
|
-
utils.saveSceneState(member, sceneid, groupid, meta.membersState[member.getDevice().ieeeAddr]);
|
|
4640
|
+
utils.saveSceneState(member, sceneid, groupid, meta.membersState[member.getDevice().ieeeAddr], scenename);
|
|
4635
4641
|
}
|
|
4636
4642
|
}
|
|
4637
4643
|
} else if (response.status === 0) {
|
|
4638
|
-
utils.saveSceneState(entity, sceneid, groupid, meta.state);
|
|
4644
|
+
utils.saveSceneState(entity, sceneid, groupid, meta.state, scenename);
|
|
4639
4645
|
} else {
|
|
4640
4646
|
throw new Error(`Scene add not succesfull ('${herdsman.Zcl.Status[response.status]}')`);
|
|
4641
4647
|
}
|
|
@@ -4665,15 +4671,11 @@ const converters = {
|
|
|
4665
4671
|
};
|
|
4666
4672
|
|
|
4667
4673
|
const isGroup = entity.constructor.name === 'Group';
|
|
4668
|
-
const metaKey = `${sceneid}_${groupid}`;
|
|
4669
4674
|
if (isGroup) {
|
|
4670
4675
|
const membersState = {};
|
|
4671
4676
|
for (const member of entity.members) {
|
|
4672
|
-
|
|
4673
|
-
|
|
4674
|
-
|
|
4675
|
-
let recalledState = member.meta.scenes[metaKey].state;
|
|
4676
|
-
|
|
4677
|
+
let recalledState = utils.getSceneState(member, sceneid, groupid);
|
|
4678
|
+
if (recalledState) {
|
|
4677
4679
|
// add color_mode if saved state does not contain it
|
|
4678
4680
|
if (!recalledState.hasOwnProperty('color_mode')) {
|
|
4679
4681
|
recalledState = addColorMode(recalledState);
|
|
@@ -4688,9 +4690,8 @@ const converters = {
|
|
|
4688
4690
|
}
|
|
4689
4691
|
return {membersState};
|
|
4690
4692
|
} else {
|
|
4691
|
-
|
|
4692
|
-
|
|
4693
|
-
|
|
4693
|
+
let recalledState = utils.getSceneState(entity, sceneid, groupid);
|
|
4694
|
+
if (recalledState) {
|
|
4694
4695
|
// add color_mode if saved state does not contain it
|
|
4695
4696
|
if (!recalledState.hasOwnProperty('color_mode')) {
|
|
4696
4697
|
recalledState = addColorMode(recalledState);
|
|
@@ -4724,7 +4725,7 @@ const converters = {
|
|
|
4724
4725
|
const isGroup = entity.constructor.name === 'Group';
|
|
4725
4726
|
const groupid = isGroup ? entity.groupID : 0;
|
|
4726
4727
|
const sceneid = value.ID;
|
|
4727
|
-
const scenename =
|
|
4728
|
+
const scenename = value.name;
|
|
4728
4729
|
const transtime = value.hasOwnProperty('transition') ? value.transition : 0;
|
|
4729
4730
|
|
|
4730
4731
|
const state = {};
|
|
@@ -4826,17 +4827,17 @@ const converters = {
|
|
|
4826
4827
|
|
|
4827
4828
|
if (isGroup || (removeresp.status === 0 || removeresp.status == 133 || removeresp.status == 139)) {
|
|
4828
4829
|
const response = await entity.command(
|
|
4829
|
-
'genScenes', 'add', {groupid, sceneid, scenename, transtime, extensionfieldsets}, utils.getOptions(meta.mapped),
|
|
4830
|
+
'genScenes', 'add', {groupid, sceneid, scenename: '', transtime, extensionfieldsets}, utils.getOptions(meta.mapped),
|
|
4830
4831
|
);
|
|
4831
4832
|
|
|
4832
4833
|
if (isGroup) {
|
|
4833
4834
|
if (meta.membersState) {
|
|
4834
4835
|
for (const member of entity.members) {
|
|
4835
|
-
utils.saveSceneState(member, sceneid, groupid, state);
|
|
4836
|
+
utils.saveSceneState(member, sceneid, groupid, state, scenename);
|
|
4836
4837
|
}
|
|
4837
4838
|
}
|
|
4838
4839
|
} else if (response.status === 0) {
|
|
4839
|
-
utils.saveSceneState(entity, sceneid, groupid, state);
|
|
4840
|
+
utils.saveSceneState(entity, sceneid, groupid, state, scenename);
|
|
4840
4841
|
} else {
|
|
4841
4842
|
throw new Error(`Scene add not succesfull ('${herdsman.Zcl.Status[response.status]}')`);
|
|
4842
4843
|
}
|
|
@@ -4857,21 +4858,14 @@ const converters = {
|
|
|
4857
4858
|
);
|
|
4858
4859
|
|
|
4859
4860
|
const isGroup = entity.constructor.name === 'Group';
|
|
4860
|
-
const metaKey = `${sceneid}_${groupid}`;
|
|
4861
4861
|
if (isGroup) {
|
|
4862
4862
|
if (meta.membersState) {
|
|
4863
4863
|
for (const member of entity.members) {
|
|
4864
|
-
|
|
4865
|
-
delete member.meta.scenes[metaKey];
|
|
4866
|
-
member.save();
|
|
4867
|
-
}
|
|
4864
|
+
utils.deleteSceneState(member, sceneid, groupid);
|
|
4868
4865
|
}
|
|
4869
4866
|
}
|
|
4870
4867
|
} else if (response.status === 0) {
|
|
4871
|
-
|
|
4872
|
-
delete entity.meta.scenes[metaKey];
|
|
4873
|
-
entity.save();
|
|
4874
|
-
}
|
|
4868
|
+
utils.deleteSceneState(entity, sceneid, groupid);
|
|
4875
4869
|
} else {
|
|
4876
4870
|
throw new Error(`Scene remove not succesfull ('${herdsman.Zcl.Status[response.status]}')`);
|
|
4877
4871
|
}
|
|
@@ -4889,17 +4883,11 @@ const converters = {
|
|
|
4889
4883
|
if (isGroup) {
|
|
4890
4884
|
if (meta.membersState) {
|
|
4891
4885
|
for (const member of entity.members) {
|
|
4892
|
-
|
|
4893
|
-
member.meta.scenes = {};
|
|
4894
|
-
member.save();
|
|
4895
|
-
}
|
|
4886
|
+
utils.deleteSceneState(member);
|
|
4896
4887
|
}
|
|
4897
4888
|
}
|
|
4898
4889
|
} else if (response.status === 0) {
|
|
4899
|
-
|
|
4900
|
-
entity.meta.scenes = {};
|
|
4901
|
-
entity.save();
|
|
4902
|
-
}
|
|
4890
|
+
utils.deleteSceneState(entity);
|
|
4903
4891
|
} else {
|
|
4904
4892
|
throw new Error(`Scene remove all not succesfull ('${herdsman.Zcl.Status[response.status]}')`);
|
|
4905
4893
|
}
|
package/lib/utils.js
CHANGED
|
@@ -271,14 +271,37 @@ function toCamelCase(value) {
|
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
273
|
|
|
274
|
-
function saveSceneState(entity, sceneID, groupID, state) {
|
|
274
|
+
function saveSceneState(entity, sceneID, groupID, state, name) {
|
|
275
275
|
const attributes = ['state', 'brightness', 'color', 'color_temp', 'color_mode'];
|
|
276
276
|
if (!entity.meta.hasOwnProperty('scenes')) entity.meta.scenes = {};
|
|
277
277
|
const metaKey = `${sceneID}_${groupID}`;
|
|
278
|
-
entity.meta.scenes[metaKey] = {state: filterObject(state, attributes)};
|
|
278
|
+
entity.meta.scenes[metaKey] = {name, state: filterObject(state, attributes)};
|
|
279
279
|
entity.save();
|
|
280
280
|
}
|
|
281
281
|
|
|
282
|
+
function deleteSceneState(entity, sceneID=null, groupID=null) {
|
|
283
|
+
if (entity.meta.scenes) {
|
|
284
|
+
if (sceneID == null && groupID == null) {
|
|
285
|
+
entity.meta.scenes = {};
|
|
286
|
+
} else {
|
|
287
|
+
const metaKey = `${sceneID}_${groupID}`;
|
|
288
|
+
if (entity.meta.scenes.hasOwnProperty(metaKey)) {
|
|
289
|
+
delete entity.meta.scenes[metaKey];
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
entity.save();
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
function getSceneState(entity, sceneID, groupID) {
|
|
297
|
+
const metaKey = `${sceneID}_${groupID}`;
|
|
298
|
+
if (entity.meta.hasOwnProperty('scenes') && entity.meta.scenes.hasOwnProperty(metaKey)) {
|
|
299
|
+
return entity.meta.scenes[metaKey].state;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return null;
|
|
303
|
+
}
|
|
304
|
+
|
|
282
305
|
function getEntityOrFirstGroupMember(entity) {
|
|
283
306
|
if (entity.constructor.name === 'Group') {
|
|
284
307
|
return entity.members.length > 0 ? entity.members[0] : null;
|
|
@@ -381,4 +404,6 @@ module.exports = {
|
|
|
381
404
|
toSnakeCase,
|
|
382
405
|
toCamelCase,
|
|
383
406
|
normalizeCelsiusVersionOfFahrenheit,
|
|
407
|
+
deleteSceneState,
|
|
408
|
+
getSceneState,
|
|
384
409
|
};
|
package/npm-shrinkwrap.json
CHANGED