zigbee-herdsman-converters 14.0.385 → 14.0.386

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.
@@ -7956,6 +7956,81 @@ const converters = {
7956
7956
  return {action};
7957
7957
  },
7958
7958
  },
7959
+ ZMAM02: {
7960
+ cluster: 'manuSpecificTuya',
7961
+ type: ['commandDataResponse', 'commandDataReport', 'commandSetDataresponse'],
7962
+ convert: (model, msg, publish, options, meta) => {
7963
+ const result = {};
7964
+ // let value = tuya.getDataValue(dpValue);
7965
+ // let result = null;
7966
+ for (const dpValue of msg.data.dpValues) {
7967
+ const value = tuya.getDataValue(dpValue);
7968
+ switch (dpValue.dp) {
7969
+ case tuya.dataPoints.AM02Control:
7970
+ result.control = tuya.ZMAM02.AM02Control[value];
7971
+ break;
7972
+ case tuya.dataPoints.AM02PercentControl:
7973
+ result.percent_control = value;
7974
+ break;
7975
+ case tuya.dataPoints.AM02ControlBackMode:
7976
+ result.control_back_mode = tuya.ZMAM02.AM02Direction[value];
7977
+ break;
7978
+ case tuya.dataPoints.AM02MotorWorkingMode:
7979
+ switch (value) {
7980
+ case 0: // continuous 1
7981
+ result.motor_working_mode = 'continuous';
7982
+ break;
7983
+ case 1: // intermittently
7984
+ result.motor_working_mode = 'intermittently';
7985
+ break;
7986
+ default:
7987
+ meta.logger.warn('zigbee-herdsman-converters:ZM_AM_02: ' +
7988
+ `Mode ${value} is not recognized.`);
7989
+ break;
7990
+ }
7991
+ break;
7992
+ case tuya.dataPoints.AM02Border:
7993
+ switch (value) {
7994
+ case 0: // up
7995
+ result.border = 'up';
7996
+ break;
7997
+ case 1: // down
7998
+ result.border = 'down';
7999
+ break;
8000
+ case 2: // down_delete
8001
+ result.border = 'down_delete';
8002
+ break;
8003
+ default:
8004
+ meta.logger.warn('zigbee-herdsman-converters:ZM_AM_02: ' +
8005
+ `Mode ${value} is not recognized.`);
8006
+ break;
8007
+ }
8008
+ break;
8009
+ case tuya.dataPoints.AM02PercentState:
8010
+ result.percent_state = value;
8011
+ break;
8012
+ case tuya.dataPoints.AM02Mode:
8013
+ switch (value) {
8014
+ case 0: // morning
8015
+ result.mode = 'morning';
8016
+ break;
8017
+ case 1: // night
8018
+ result.mode = 'night';
8019
+ break;
8020
+ default:
8021
+ meta.logger.warn('zigbee-herdsman-converters:ZM_AM_02: ' +
8022
+ `Mode ${value} is not recognized.`);
8023
+ break;
8024
+ }
8025
+ break;
8026
+ default:
8027
+ meta.logger.warn(`fromZigbee.Zemismart Shader Konverter (Zm_AM02): NOT RECOGNIZED ` +
8028
+ `DP #${dpValue.dp} with data ${JSON.stringify(dpValue)}`);
8029
+ }
8030
+ }
8031
+ return result;
8032
+ },
8033
+ },
7959
8034
  // #endregion
7960
8035
 
7961
8036
  // #region Ignore converters (these message dont need parsing).
@@ -6592,6 +6592,33 @@ const converters = {
6592
6592
  }
6593
6593
  },
6594
6594
  },
6595
+ ZMAM02: {
6596
+ key: ['control', 'percent_control', 'mode', 'control_back_mode', 'border', 'motor_working_mode'],
6597
+ convertSet: async (entity, key, value, meta) => {
6598
+ switch (key) {
6599
+ case 'control':
6600
+ await tuya.sendDataPointEnum(entity, tuya.dataPoints.AM02Control, utils.getKey(tuya.ZMAM02.AM02Control, value));
6601
+ break;
6602
+ case 'percent_control':
6603
+ await tuya.sendDataPointValue(entity, tuya.dataPoints.AM02PercentState, value);
6604
+ break;
6605
+ case 'mode':
6606
+ await tuya.sendDataPointEnum(entity, tuya.dataPoints.AM02Mode, utils.getKey(tuya.ZMAM02.AM02Mode, value));
6607
+ break;
6608
+ case 'control_back_mode':
6609
+ await tuya.sendDataPointEnum(entity, tuya.dataPoints.AM02ControlBackMode, utils.getKey(tuya.ZMAM02.AM02Direction, value));
6610
+ break;
6611
+ case 'border':
6612
+ await tuya.sendDataPointEnum(entity, tuya.dataPoints.AM02Border, utils.getKey(tuya.ZMAM02.AM02Border, value));
6613
+ break;
6614
+ case 'motor_working_mode':
6615
+ await tuya.sendDataPointEnum(entity, tuya.dataPoints.AM02MotorWorkingMode, utils.getKey(tuya.ZMAM02.AM02MotorMode, value));
6616
+ break;
6617
+ default: // Unknown Key
6618
+ meta.logger.warn(`toZigbee.ZMAM02: Unhandled Key ${key}`);
6619
+ }
6620
+ },
6621
+ },
6595
6622
  // #endregion
6596
6623
 
6597
6624
  // #region Ignore converters
package/devices/ikea.js CHANGED
@@ -252,7 +252,7 @@ module.exports = [
252
252
  extend: tradfriExtend.light_onoff_brightness_colortemp(),
253
253
  },
254
254
  {
255
- zigbeeModel: ['TRADFRI bulb E27 WS clear 950lm', 'TRADFRI bulb E26 WS clear 950lm'],
255
+ zigbeeModel: ['TRADFRI bulb E27 WS clear 950lm', 'TRADFRI bulb E26 WS clear 950lm', 'TRADFRI bulb E27 WS\uFFFDclear 950lm'],
256
256
  model: 'LED1546G12',
257
257
  vendor: 'IKEA',
258
258
  description: 'TRADFRI LED bulb E26/E27 950 lumen, dimmable, white spectrum, clear',
@@ -4,6 +4,7 @@ const tz = require('../converters/toZigbee');
4
4
  const e = exposes.presets;
5
5
  const ea = exposes.access;
6
6
  const extend = require('../lib/extend');
7
+ const tuya = require('../lib/tuya');
7
8
 
8
9
  module.exports = [
9
10
  {
@@ -21,11 +22,13 @@ module.exports = [
21
22
  ],
22
23
  },
23
24
  {
24
- fingerprint: [{modelID: 'TS0501B', manufacturerName: '_TZ3210_dxroobu3'}],
25
+ fingerprint: [{modelID: 'TS0501B', manufacturerName: '_TZ3210_dxroobu3'},
26
+ {modelID: 'TS0501B', manufacturerName: '_TZ3210_dbilpfqk'}],
25
27
  model: 'FUT036Z',
26
28
  description: 'Single color LED controller',
27
29
  vendor: 'Miboxer',
28
30
  extend: extend.light_onoff_brightness(),
31
+ onEvent: tuya.onEventSetTime,
29
32
  },
30
33
  {
31
34
  fingerprint: [{modelID: 'TS0502B', manufacturerName: '_TZ3210_frm6149r'}],
@@ -1543,6 +1543,15 @@ module.exports = [
1543
1543
  extend: hueExtend.light_onoff_brightness_colortemp_color(),
1544
1544
  ota: ota.zigbeeOTA,
1545
1545
  },
1546
+ {
1547
+ zigbeeModel: ['LCF003', '4080248P7'],
1548
+ model: '4080248P7',
1549
+ vendor: 'Philips',
1550
+ description: 'Hue Signe floor light',
1551
+ meta: {turnsOffAtBrightness1: true},
1552
+ extend: hueExtend.light_onoff_brightness_colortemp_color({colorTempRange: [153, 500]}),
1553
+ ota: ota.zigbeeOTA,
1554
+ },
1546
1555
  {
1547
1556
  zigbeeModel: ['4080248U9'],
1548
1557
  model: '4080248U9',
package/devices/tuya.js CHANGED
@@ -845,7 +845,6 @@ module.exports = [
845
845
  {modelID: 'TS0601', manufacturerName: '_TZE200_fzo2pocs'},
846
846
  {modelID: 'TS0601', manufacturerName: '_TZE200_5sbebbzs'},
847
847
  {modelID: 'TS0601', manufacturerName: '_TZE200_zuz7f94z'},
848
- {modelID: 'TS0601', manufacturerName: '_TZE200_iossyxra'},
849
848
  ],
850
849
  model: 'TS0601_cover',
851
850
  vendor: 'TuYa',
@@ -124,4 +124,26 @@ module.exports = [
124
124
  await reporting.onOff(device.getEndpoint(2));
125
125
  },
126
126
  },
127
+ {
128
+ fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_iossyxra'}],
129
+ model: 'ZM-AM02',
130
+ vendor: 'Zemismart',
131
+ description: 'Zigbee/RF curtain converter',
132
+ fromZigbee: [fz.ZMAM02],
133
+ toZigbee: [tz.ZMAM02],
134
+ exposes: [exposes.enum('motor_working_mode', ea.STATE_SET, Object.values(tuya.ZMAM02.AM02MotorMode)),
135
+ exposes.enum('control', ea.STATE_SET, Object.values(tuya.ZMAM02.AM02Control)),
136
+ exposes.numeric('percent_state', ea.STATE).withValueMin(0).withValueMax(100).withValueStep(1).withUnit('%'),
137
+ exposes.enum('mode', ea.STATE_SET, Object.values(tuya.ZMAM02.AM02Mode)),
138
+ exposes.enum('control_back_mode', ea.STATE_SET, Object.values(tuya.ZMAM02.AM02Direction)),
139
+ exposes.enum('border', ea.STATE_SET, Object.values(tuya.ZMAM02.AM02Border)),
140
+ // ---------------------------------------------------------------------------------
141
+ // DP exists, but not used at the moment
142
+ // exposes.numeric('percent_control', ea.STATE_SET).withValueMin(0).withValueMax(100).withValueStep(1).withUnit('%'),
143
+ // exposes.enum('work_state', ea.STATE, Object.values(tuya.ZMAM02.AM02WorkState)),
144
+ // exposes.numeric('countdown_left', ea.STATE).withUnit('s'),
145
+ // exposes.numeric('time_total', ea.STATE).withUnit('ms'),
146
+ // exposes.enum('situation_set', ea.STATE, Object.values(tuya.ZMAM02.AM02Situation)),
147
+ ],
148
+ },
127
149
  ];
package/lib/tuya.js CHANGED
@@ -537,6 +537,20 @@ const dataPoints = {
537
537
  evanellLocalTemp: 5,
538
538
  evanellBattery: 6,
539
539
  evanellChildLock: 8,
540
+ // ZMAM02 Zemismart RF Courtain Converter
541
+ AM02Control: 1,
542
+ AM02PercentControl: 2,
543
+ AM02PercentState: 3,
544
+ AM02Mode: 4,
545
+ AM02ControlBackMode: 5,
546
+ AM02WorkState: 7,
547
+ AM02CountdownLeft: 9,
548
+ AM02TimeTotal: 10,
549
+ AM02SituationSet: 11,
550
+ AM02Fault: 12,
551
+ AM02Border: 16,
552
+ AM02MotorWorkingMode: 20,
553
+ AM02AddRemoter: 101,
540
554
  };
541
555
 
542
556
  const thermostatWeekFormat = {
@@ -650,6 +664,40 @@ const tvThermostatPreset = {
650
664
  1: 'manual',
651
665
  3: 'holiday',
652
666
  };
667
+ // Zemismart ZM_AM02 Roller Shade Converter
668
+ const ZMAM02 = {
669
+ AM02Mode: {
670
+ 0: 'morning',
671
+ 1: 'night',
672
+ },
673
+ AM02Control: {
674
+ 0: 'open',
675
+ 1: 'stop',
676
+ 2: 'close',
677
+ 3: 'continue',
678
+ },
679
+ AM02Direction: {
680
+ 0: 'forward',
681
+ 1: 'back',
682
+ },
683
+ AM02WorkState: {
684
+ 0: 'opening',
685
+ 1: 'closing',
686
+ },
687
+ AM02Border: {
688
+ 0: 'up',
689
+ 1: 'down',
690
+ 2: 'down_delete',
691
+ },
692
+ AM02Situation: {
693
+ 0: 'fully_open',
694
+ 1: 'fully_close',
695
+ },
696
+ AM02MotorMode: {
697
+ 0: 'continuous',
698
+ 1: 'intermittently',
699
+ },
700
+ };
653
701
 
654
702
  // Return `seq` - transaction ID for handling concrete response
655
703
  async function sendDataPoints(entity, dpValues, cmd, seq=undefined) {
@@ -800,4 +848,5 @@ module.exports = {
800
848
  tvThermostatMode,
801
849
  tvThermostatPreset,
802
850
  tuyaRadar,
851
+ ZMAM02,
803
852
  };