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.
@@ -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
- const sceneid = value;
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
- if (member.meta.hasOwnProperty('scenes') && member.meta.scenes.hasOwnProperty(metaKey)) {
4673
- membersState[member.getDevice().ieeeAddr] = addColorMode(member.meta.scenes[metaKey].state);
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
- if (entity.meta.hasOwnProperty('scenes') && entity.meta.scenes.hasOwnProperty(metaKey)) {
4692
- let recalledState = entity.meta.scenes[metaKey].state;
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
- if (member.meta.scenes && member.meta.scenes.hasOwnProperty(metaKey)) {
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
- if (entity.meta.scenes && entity.meta.scenes.hasOwnProperty(metaKey)) {
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
- if (member.meta.scenes) {
4893
- member.meta.scenes = {};
4894
- member.save();
4895
- }
4886
+ utils.deleteSceneState(member);
4896
4887
  }
4897
4888
  }
4898
4889
  } else if (response.status === 0) {
4899
- if (entity.meta.scenes) {
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
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.267",
3
+ "version": "14.0.268",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zigbee-herdsman-converters",
3
- "version": "14.0.267",
3
+ "version": "14.0.268",
4
4
  "description": "Collection of device converters to be used with zigbee-herdsman",
5
5
  "main": "index.js",
6
6
  "files": [