Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
2,436
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 232.09 KB | None | 0 0
  1. 'use strict';
  2.  
  3. const debug = require('debug')('zigbee-shepherd-converters:devices');
  4. const fz = require('./converters/fromZigbee');
  5. const tz = require('./converters/toZigbee');
  6.  
  7. const repInterval = {
  8. MAX: 62000,
  9. HOUR: 3600,
  10. MINUTE: 60,
  11. };
  12.  
  13. const defaultIgnoreConverters = [
  14. fz.ignore_genGroups_devChange, fz.ignore_genIdentify_change, fz.ignore_genScenes_change,
  15. fz.ignore_diagnostic_change, fz.ignore_lightLink_change, fz.ignore_basic_change,
  16. ];
  17.  
  18. const generic = {
  19. light_onoff_brightness: {
  20. supports: 'on/off, brightness',
  21. fromZigbee: [
  22. fz.ignore_light_brightness_change, fz.state_change, fz.state, fz.brightness_report,
  23. ].concat(defaultIgnoreConverters),
  24. toZigbee: [tz.light_onoff_brightness, tz.ignore_transition, tz.light_alert],
  25. },
  26. light_onoff_brightness_colortemp: {
  27. supports: 'on/off, brightness, color temperature',
  28. fromZigbee: [
  29. fz.ignore_light_brightness_change, fz.color_colortemp, fz.state_change, fz.state,
  30. fz.brightness_report, fz.color_colortemp_report,
  31. ].concat(defaultIgnoreConverters),
  32. toZigbee: [tz.light_onoff_brightness, tz.light_colortemp, tz.ignore_transition, tz.light_alert],
  33. },
  34. light_onoff_brightness_colorxy: {
  35. supports: 'on/off, brightness, color xy',
  36. fromZigbee: [
  37. fz.ignore_light_brightness_change, fz.color_colortemp, fz.state_change, fz.state,
  38. fz.brightness_report, fz.color_colortemp_report,
  39. ].concat(defaultIgnoreConverters),
  40. toZigbee: [tz.light_onoff_brightness, tz.light_color, tz.ignore_transition, tz.light_alert],
  41. },
  42. light_onoff_brightness_colortemp_colorxy: {
  43. supports: 'on/off, brightness, color temperature, color xy',
  44. fromZigbee: [
  45. fz.ignore_light_brightness_change, fz.color_colortemp, fz.state_change, fz.state,
  46. fz.brightness_report, fz.color_colortemp_report,
  47. ].concat(defaultIgnoreConverters),
  48. toZigbee: [
  49. tz.light_onoff_brightness, tz.light_color_colortemp, tz.ignore_transition,
  50. tz.light_alert,
  51. ],
  52. },
  53. };
  54.  
  55. const gledopto = {
  56. light_onoff_brightness: {
  57. supports: generic.light_onoff_brightness.supports,
  58. fromZigbee: generic.light_onoff_brightness.fromZigbee,
  59. toZigbee: [tz.gledopto_light_onoff_brightness, tz.ignore_transition, tz.light_alert],
  60. },
  61. light_onoff_brightness_colortemp: {
  62. supports: generic.light_onoff_brightness_colortemp.supports,
  63. fromZigbee: generic.light_onoff_brightness_colortemp.fromZigbee,
  64. toZigbee: [
  65. tz.gledopto_light_onoff_brightness, tz.gledopto_light_colortemp, tz.ignore_transition,
  66. tz.light_alert,
  67. ],
  68. },
  69. light_onoff_brightness_colortemp_colorxy: {
  70. supports: generic.light_onoff_brightness_colortemp_colorxy.supports,
  71. fromZigbee: generic.light_onoff_brightness_colortemp_colorxy.fromZigbee,
  72. toZigbee: [
  73. tz.gledopto_light_onoff_brightness, tz.gledopto_light_color_colortemp, tz.ignore_transition,
  74. tz.light_alert,
  75. ],
  76. },
  77. };
  78.  
  79. const tzHuePowerOnBehavior = [tz.hue_power_on_behavior, tz.hue_power_on_brightness, tz.hue_power_on_color_temperature];
  80. const hue = {
  81. light_onoff_brightness: {
  82. supports: generic.light_onoff_brightness.supports + ', power-on behavior',
  83. fromZigbee: generic.light_onoff_brightness.fromZigbee,
  84. toZigbee: generic.light_onoff_brightness.toZigbee.concat(tzHuePowerOnBehavior),
  85. },
  86. light_onoff_brightness_colortemp: {
  87. supports: generic.light_onoff_brightness_colortemp.supports + ', power-on behavior',
  88. fromZigbee: generic.light_onoff_brightness_colortemp.fromZigbee,
  89. toZigbee: generic.light_onoff_brightness_colortemp.toZigbee.concat(tzHuePowerOnBehavior),
  90. },
  91. light_onoff_brightness_colorxy: {
  92. supports: generic.light_onoff_brightness_colorxy.supports + ', power-on behavior',
  93. fromZigbee: generic.light_onoff_brightness_colorxy.fromZigbee,
  94. toZigbee: generic.light_onoff_brightness_colorxy.toZigbee.concat(tzHuePowerOnBehavior),
  95. },
  96. light_onoff_brightness_colortemp_colorxy: {
  97. supports: generic.light_onoff_brightness_colortemp_colorxy.supports + ', power-on behavior',
  98. fromZigbee: generic.light_onoff_brightness_colortemp_colorxy.fromZigbee,
  99. toZigbee: generic.light_onoff_brightness_colortemp_colorxy.toZigbee.concat(tzHuePowerOnBehavior),
  100. },
  101. };
  102.  
  103. const foundationCfg = {manufSpec: 0, disDefaultRsp: 0};
  104.  
  105. const execute = (device, actions, callback, delay) => {
  106. if (!device) {
  107. callback(false, 'No device');
  108. return;
  109. }
  110. delay || (delay = 300);
  111. const len = actions.length;
  112. let nextActionIndex = 0;
  113.  
  114. const next = () => {
  115. if (nextActionIndex === len) {
  116. callback(true, '');
  117. return;
  118. }
  119.  
  120. const nextAction = actions[nextActionIndex++];
  121.  
  122. setTimeout(nextAction,
  123. delay,
  124. (error) => {
  125. debug(`Configured '${nextAction.toString()}' with result '${error ? error : 'OK'}'`);
  126. if (error) {
  127. callback(false, error);
  128. return;
  129. }
  130. next();
  131. }
  132. );
  133. };
  134.  
  135. next();
  136. };
  137.  
  138. const devices = [
  139. // Xiaomi
  140. {
  141. zigbeeModel: ['lumi.light.aqcn02'],
  142. model: 'ZNLDP12LM',
  143. vendor: 'Xiaomi',
  144. description: 'Aqara smart LED bulb',
  145. extend: generic.light_onoff_brightness_colortemp,
  146. fromZigbee: [
  147. fz.brightness, fz.color_colortemp, fz.state_report, fz.xiaomi_bulb_interval,
  148. fz.ignore_light_brightness_report, fz.ignore_light_color_colortemp_report, fz.ignore_onoff_change,
  149. fz.ignore_basic_change, fz.ignore_occupancy_report, fz.ignore_temperature_change,
  150. fz.ignore_humidity_change, fz.ignore_pressure_change, fz.ignore_humidity_report,
  151. fz.ignore_pressure_report, fz.ignore_temperature_report,
  152. ],
  153. },
  154. {
  155. zigbeeModel: ['lumi.sensor_switch'],
  156. model: 'WXKG01LM',
  157. vendor: 'Xiaomi',
  158. description: 'MiJia wireless switch',
  159. supports: 'single, double, triple, quadruple, many, long, long_release click',
  160. fromZigbee: [fz.xiaomi_battery_3v, fz.WXKG01LM_click, fz.ignore_onoff_change, fz.ignore_basic_change],
  161. toZigbee: [],
  162. },
  163. {
  164. zigbeeModel: ['lumi.sensor_switch.aq2', 'lumi.remote.b1acn01\u0000\u0000\u0000\u0000\u0000\u0000'],
  165. model: 'WXKG11LM',
  166. vendor: 'Xiaomi',
  167. description: 'Aqara wireless switch',
  168. supports: 'single, double click (and triple, quadruple, hold, release depending on model)',
  169. fromZigbee: [
  170. fz.xiaomi_battery_3v, fz.WXKG11LM_click, fz.ignore_onoff_change, fz.ignore_basic_change,
  171. fz.xiaomi_action_click_multistate, fz.ignore_multistate_change,
  172. ],
  173. toZigbee: [],
  174. },
  175. {
  176. zigbeeModel: ['lumi.sensor_switch.aq3', 'lumi.sensor_swit'],
  177. model: 'WXKG12LM',
  178. vendor: 'Xiaomi',
  179. description: 'Aqara wireless switch (with gyroscope)',
  180. supports: 'single, double, shake, hold, release',
  181. fromZigbee: [
  182. fz.xiaomi_battery_3v, fz.WXKG12LM_action_click_multistate, fz.ignore_onoff_change,
  183. fz.ignore_basic_change, fz.ignore_multistate_change,
  184. ],
  185. toZigbee: [],
  186. },
  187. {
  188. zigbeeModel: ['lumi.sensor_86sw1\u0000lu', 'lumi.remote.b186acn01\u0000\u0000\u0000'],
  189. model: 'WXKG03LM',
  190. vendor: 'Xiaomi',
  191. description: 'Aqara single key wireless wall switch',
  192. supports: 'single (and double, hold, release and long click depending on model)',
  193. fromZigbee: [
  194. fz.xiaomi_battery_3v, fz.WXKG03LM_click, fz.ignore_basic_change,
  195. fz.xiaomi_action_click_multistate, fz.ignore_multistate_change,
  196. ],
  197. toZigbee: [],
  198. },
  199. {
  200. zigbeeModel: ['lumi.sensor_86sw2\u0000Un', 'lumi.sensor_86sw2.es1', 'lumi.remote.b286acn01\u0000\u0000\u0000'],
  201. model: 'WXKG02LM',
  202. vendor: 'Xiaomi',
  203. description: 'Aqara double key wireless wall switch',
  204. supports: 'left, right, both click (and double, long click for left, right and both depending on model)',
  205. fromZigbee: [
  206. fz.xiaomi_battery_3v, fz.WXKG02LM_click, fz.ignore_basic_change,
  207. fz.WXKG02LM_click_multistate, fz.ignore_multistate_change,
  208. ],
  209. toZigbee: [],
  210. ep: (device) => {
  211. return {'left': 1, 'right': 2, 'both': 3};
  212. },
  213. },
  214. {
  215. zigbeeModel: ['lumi.ctrl_neutral1'],
  216. model: 'QBKG04LM',
  217. vendor: 'Xiaomi',
  218. // eslint-disable-next-line
  219. description: 'Aqara single key wired wall switch without neutral wire. Doesn\'t work as a router and doesn\'t support power meter',
  220. supports: 'release/hold, on/off',
  221. fromZigbee: [
  222. fz.QBKG04LM_QBKG11LM_state, fz.QBKG04LM_buttons,
  223. fz.QBKG04LM_QBKG11LM_operation_mode, fz.ignore_basic_report,
  224. ],
  225. toZigbee: [tz.on_off, tz.xiaomi_switch_operation_mode],
  226. ep: (device) => {
  227. return {'system': 1, 'default': 2};
  228. },
  229. },
  230. {
  231. zigbeeModel: ['lumi.ctrl_ln1.aq1', 'lumi.ctrl_ln1'],
  232. model: 'QBKG11LM',
  233. vendor: 'Xiaomi',
  234. description: 'Aqara single key wired wall switch',
  235. supports: 'on/off, power measurement',
  236. fromZigbee: [
  237. fz.QBKG04LM_QBKG11LM_state, fz.QBKG11LM_power, fz.QBKG04LM_QBKG11LM_operation_mode,
  238. fz.ignore_onoff_change, fz.ignore_basic_change, fz.QBKG11LM_click,
  239. fz.ignore_multistate_report, fz.ignore_multistate_change, fz.ignore_analog_change, fz.xiaomi_power,
  240. ],
  241. toZigbee: [tz.on_off, tz.xiaomi_switch_operation_mode],
  242. },
  243. {
  244. zigbeeModel: ['lumi.ctrl_neutral2'],
  245. model: 'QBKG03LM',
  246. vendor: 'Xiaomi',
  247. // eslint-disable-next-line
  248. description: 'Aqara double key wired wall switch without neutral wire. Doesn\'t work as a router and doesn\'t support power meter',
  249. supports: 'release/hold, on/off, temperature',
  250. fromZigbee: [
  251. fz.QBKG03LM_QBKG12LM_LLKZMK11LM_state, fz.QBKG03LM_buttons,
  252. fz.QBKG03LM_QBKG12LM_operation_mode, fz.ignore_basic_report,
  253. fz.generic_device_temperature,
  254. ],
  255. toZigbee: [tz.on_off, tz.xiaomi_switch_operation_mode],
  256. ep: (device) => {
  257. return {'system': 1, 'left': 2, 'right': 3};
  258. },
  259. },
  260. {
  261. zigbeeModel: ['lumi.ctrl_ln2.aq1'],
  262. model: 'QBKG12LM',
  263. vendor: 'Xiaomi',
  264. description: 'Aqara double key wired wall switch',
  265. supports: 'on/off, power measurement',
  266. fromZigbee: [
  267. fz.QBKG03LM_QBKG12LM_LLKZMK11LM_state, fz.QBKG12LM_LLKZMK11LM_power, fz.QBKG03LM_QBKG12LM_operation_mode,
  268. fz.ignore_analog_change, fz.ignore_basic_change, fz.QBKG12LM_click,
  269. fz.ignore_multistate_report, fz.ignore_multistate_change, fz.ignore_onoff_change, fz.xiaomi_power,
  270. ],
  271. toZigbee: [tz.on_off, tz.xiaomi_switch_operation_mode],
  272. ep: (device) => {
  273. return {'left': 1, 'right': 2};
  274. },
  275. },
  276. {
  277. zigbeeModel: ['lumi.sens', 'lumi.sensor_ht'],
  278. model: 'WSDCGQ01LM',
  279. vendor: 'Xiaomi',
  280. description: 'MiJia temperature & humidity sensor',
  281. supports: 'temperature and humidity',
  282. fromZigbee: [
  283. fz.xiaomi_battery_3v, fz.WSDCGQ01LM_WSDCGQ11LM_interval, fz.xiaomi_temperature, fz.generic_humidity,
  284. fz.ignore_basic_change,
  285. ],
  286. toZigbee: [],
  287. },
  288. {
  289. zigbeeModel: ['lumi.weather'],
  290. model: 'WSDCGQ11LM',
  291. vendor: 'Xiaomi',
  292. description: 'Aqara temperature, humidity and pressure sensor',
  293. supports: 'temperature, humidity and pressure',
  294. fromZigbee: [
  295. fz.xiaomi_battery_3v, fz.xiaomi_temperature, fz.generic_humidity, fz.generic_pressure,
  296. fz.ignore_basic_change, fz.ignore_temperature_change, fz.ignore_humidity_change,
  297. fz.ignore_pressure_change, fz.WSDCGQ01LM_WSDCGQ11LM_interval,
  298. ],
  299. toZigbee: [],
  300. },
  301. {
  302. zigbeeModel: ['lumi.sensor_motion'],
  303. model: 'RTCGQ01LM',
  304. vendor: 'Xiaomi',
  305. description: 'MiJia human body movement sensor',
  306. supports: 'occupancy',
  307. fromZigbee: [fz.xiaomi_battery_3v, fz.generic_occupancy_no_off_msg, fz.ignore_basic_change],
  308. toZigbee: [],
  309. },
  310. {
  311. zigbeeModel: ['lumi.sensor_motion.aq2'],
  312. model: 'RTCGQ11LM',
  313. vendor: 'Xiaomi',
  314. description: 'Aqara human body movement and illuminance sensor',
  315. supports: 'occupancy and illuminance',
  316. fromZigbee: [
  317. fz.xiaomi_battery_3v, fz.generic_occupancy_no_off_msg, fz.generic_illuminance, fz.ignore_basic_change,
  318. fz.ignore_illuminance_change, fz.ignore_occupancy_change, fz.RTCGQ11LM_interval,
  319. ],
  320. toZigbee: [],
  321. },
  322. {
  323. zigbeeModel: ['lumi.sensor_magnet'],
  324. model: 'MCCGQ01LM',
  325. vendor: 'Xiaomi',
  326. description: 'MiJia door & window contact sensor',
  327. supports: 'contact',
  328. fromZigbee: [
  329. fz.xiaomi_battery_3v, fz.xiaomi_contact, fz.ignore_onoff_change,
  330. fz.ignore_basic_change,
  331. ],
  332. toZigbee: [],
  333. },
  334. {
  335. zigbeeModel: ['lumi.sensor_magnet.aq2'],
  336. model: 'MCCGQ11LM',
  337. vendor: 'Xiaomi',
  338. description: 'Aqara door & window contact sensor',
  339. supports: 'contact',
  340. fromZigbee: [
  341. fz.xiaomi_battery_3v, fz.xiaomi_contact, fz.xiaomi_contact_interval, fz.ignore_onoff_change,
  342. fz.ignore_basic_change,
  343. ],
  344. toZigbee: [],
  345. },
  346. {
  347. zigbeeModel: ['lumi.sensor_wleak.aq1'],
  348. model: 'SJCGQ11LM',
  349. vendor: 'Xiaomi',
  350. description: 'Aqara water leak sensor',
  351. supports: 'water leak true/false',
  352. fromZigbee: [
  353. fz.xiaomi_battery_3v, fz.SJCGQ11LM_water_leak_iaszone,
  354. fz.SJCGQ11LM_water_leak_interval, fz.ignore_basic_change,
  355. ],
  356. toZigbee: [],
  357. },
  358. {
  359. zigbeeModel: ['lumi.sensor_cube', 'lumi.sensor_cube.aqgl01'],
  360. model: 'MFKZQ01LM',
  361. vendor: 'Xiaomi',
  362. description: 'Mi/Aqara smart home cube',
  363. supports: 'shake, wakeup, fall, tap, slide, flip180, flip90, rotate_left and rotate_right',
  364. fromZigbee: [
  365. fz.xiaomi_battery_3v, fz.MFKZQ01LM_action_multistate, fz.MFKZQ01LM_action_analog,
  366. fz.ignore_analog_change, fz.ignore_multistate_change, fz.ignore_basic_change,
  367. ],
  368. toZigbee: [],
  369. },
  370. {
  371. zigbeeModel: ['lumi.plug'],
  372. model: 'ZNCZ02LM',
  373. description: 'Mi power plug ZigBee',
  374. supports: 'on/off, power measurement',
  375. vendor: 'Xiaomi',
  376. fromZigbee: [
  377. fz.state, fz.xiaomi_power, fz.xiaomi_plug_state, fz.ignore_onoff_change,
  378. fz.ignore_basic_change, fz.ignore_analog_change, fz.ignore_occupancy_report,
  379. fz.ignore_illuminance_report, fz.ignore_temperature_change,
  380. fz.ignore_humidity_change, fz.ignore_pressure_change,
  381. ],
  382. toZigbee: [tz.on_off],
  383. },
  384. {
  385. zigbeeModel: ['lumi.plug.mitw01'],
  386. model: 'ZNCZ03LM',
  387. description: 'Mi power plug ZigBee TW',
  388. supports: 'on/off, power measurement',
  389. vendor: 'Xiaomi',
  390. fromZigbee: [
  391. fz.state, fz.xiaomi_power, fz.xiaomi_plug_state, fz.ignore_onoff_change,
  392. fz.ignore_basic_change, fz.ignore_analog_change, fz.ignore_occupancy_report,
  393. fz.ignore_illuminance_report, fz.ignore_temperature_change,
  394. fz.ignore_humidity_change, fz.ignore_pressure_change,
  395. ],
  396. toZigbee: [tz.on_off],
  397. },
  398. {
  399. zigbeeModel: ['lumi.ctrl_86plug', 'lumi.ctrl_86plug.aq1'],
  400. model: 'QBCZ11LM',
  401. description: 'Aqara socket Zigbee',
  402. supports: 'on/off, power measurement',
  403. vendor: 'Xiaomi',
  404. fromZigbee: [
  405. fz.state, fz.xiaomi_power, fz.xiaomi_plug_state, fz.ignore_onoff_change,
  406. fz.ignore_basic_change, fz.ignore_analog_change,
  407. ],
  408. toZigbee: [tz.on_off],
  409. },
  410. {
  411. zigbeeModel: ['lumi.sensor_smoke'],
  412. model: 'JTYJ-GD-01LM/BW',
  413. description: 'MiJia Honeywell smoke detector',
  414. supports: 'smoke',
  415. vendor: 'Xiaomi',
  416. fromZigbee: [fz.xiaomi_battery_3v, fz.JTYJGD01LMBW_smoke, fz.ignore_basic_change],
  417. toZigbee: [],
  418. },
  419. {
  420. zigbeeModel: ['lumi.sensor_natgas'],
  421. model: 'JTQJ-BF-01LM/BW',
  422. vendor: 'Xiaomi',
  423. description: 'MiJia gas leak detector ',
  424. supports: 'gas',
  425. fromZigbee: [
  426. fz.JTQJBF01LMBW_gas,
  427. fz.JTQJBF01LMBW_sensitivity,
  428. fz.JTQJBF01LMBW_gas_density,
  429. fz.ignore_basic_change,
  430. ],
  431. toZigbee: [tz.JTQJBF01LMBW_sensitivity, tz.JTQJBF01LMBW_selfest],
  432. },
  433. {
  434. zigbeeModel: ['lumi.lock.v1'],
  435. model: 'A6121',
  436. vendor: 'Xiaomi',
  437. description: 'Vima Smart Lock',
  438. supports: 'inserted, forgotten, key error',
  439. fromZigbee: [fz.xiaomi_lock_report, fz.ignore_basic_change],
  440. toZigbee: [],
  441. },
  442. {
  443. zigbeeModel: ['lumi.vibration.aq1'],
  444. model: 'DJT11LM',
  445. vendor: 'Xiaomi',
  446. description: 'Aqara vibration sensor',
  447. supports: 'drop, tilt and touch',
  448. fromZigbee: [
  449. fz.xiaomi_battery_3v, fz.DJT11LM_vibration, fz.ignore_basic_change, fz.ignore_doorlock_change,
  450. ],
  451. toZigbee: [tz.DJT11LM_vibration_sensitivity],
  452. },
  453. {
  454. zigbeeModel: ['lumi.curtain'],
  455. model: 'ZNCLDJ11LM',
  456. description: 'Aqara curtain motor',
  457. supports: 'open, close, stop, position',
  458. vendor: 'Xiaomi',
  459. fromZigbee: [
  460. fz.ZNCLDJ11LM_curtain_genAnalogOutput_change, fz.ZNCLDJ11LM_curtain_genAnalogOutput_report,
  461. fz.ignore_closuresWindowCovering_change, fz.closuresWindowCovering_report,
  462. fz.ignore_basic_change, fz.ignore_basic_report,
  463. ],
  464. toZigbee: [tz.ZNCLDJ11LM_control],
  465. },
  466. {
  467. zigbeeModel: ['lumi.relay.c2acn01'],
  468. model: 'LLKZMK11LM',
  469. vendor: 'Xiaomi',
  470. description: 'Aqara wireless relay controller',
  471. supports: 'on/off, power measurement',
  472. fromZigbee: [
  473. fz.QBKG03LM_QBKG12LM_LLKZMK11LM_state, fz.QBKG12LM_LLKZMK11LM_power, fz.xiaomi_power,
  474. fz.ignore_analog_change, fz.ignore_basic_change,
  475. fz.ignore_multistate_report, fz.ignore_multistate_change, fz.ignore_onoff_change,
  476. ],
  477. toZigbee: [tz.on_off],
  478. ep: (device) => {
  479. return {'l1': 1, 'l2': 2};
  480. },
  481. },
  482. {
  483. zigbeeModel: ['lumi.lock.acn02'],
  484. model: 'ZNMS12LM',
  485. description: 'Aqara S2 Lock',
  486. supports: 'report: open, close, operation',
  487. vendor: 'Xiaomi',
  488. fromZigbee: [
  489. fz.ZNMS12LM_ZNMS13LM_closuresDoorLock_report, fz.ignore_basic_report,
  490. fz.ignore_doorlock_change, fz.ignore_basic_change,
  491. ],
  492. toZigbee: [],
  493. },
  494. {
  495. zigbeeModel: ['lumi.lock.acn03'],
  496. model: 'ZNMS13LM',
  497. description: 'Aqara S2 Lock Pro',
  498. supports: 'report: open, close, operation',
  499. vendor: 'Xiaomi',
  500. fromZigbee: [
  501. fz.ZNMS12LM_ZNMS13LM_closuresDoorLock_report, fz.ignore_basic_report,
  502. fz.ignore_doorlock_change, fz.ignore_basic_change,
  503. ],
  504. toZigbee: [],
  505. },
  506. // IKEA
  507. {
  508. zigbeeModel: [
  509. 'TRADFRI bulb E27 WS opal 980lm', 'TRADFRI bulb E26 WS opal 980lm',
  510. 'TRADFRI bulb E27 WS\uFFFDopal 980lm',
  511. ],
  512. model: 'LED1545G12',
  513. vendor: 'IKEA',
  514. description: 'TRADFRI LED bulb E26/E27 980 lumen, dimmable, white spectrum, opal white',
  515. extend: generic.light_onoff_brightness_colortemp,
  516. },
  517. {
  518. zigbeeModel: ['TRADFRI bulb E27 WS clear 950lm', 'TRADFRI bulb E26 WS clear 950lm'],
  519. model: 'LED1546G12',
  520. vendor: 'IKEA',
  521. description: 'TRADFRI LED bulb E26/E27 950 lumen, dimmable, white spectrum, clear',
  522. extend: generic.light_onoff_brightness_colortemp,
  523. },
  524. {
  525. zigbeeModel: ['TRADFRI bulb E27 opal 1000lm', 'TRADFRI bulb E27 W opal 1000lm'],
  526. model: 'LED1623G12',
  527. vendor: 'IKEA',
  528. description: 'TRADFRI LED bulb E27 1000 lumen, dimmable, opal white',
  529. extend: generic.light_onoff_brightness,
  530. },
  531. {
  532. zigbeeModel: ['TRADFRI bulb GU10 WS 400lm'],
  533. model: 'LED1537R6',
  534. vendor: 'IKEA',
  535. description: 'TRADFRI LED bulb GU10 400 lumen, dimmable, white spectrum',
  536. extend: generic.light_onoff_brightness_colortemp,
  537. },
  538. {
  539. zigbeeModel: ['TRADFRI bulb GU10 W 400lm'],
  540. model: 'LED1650R5',
  541. vendor: 'IKEA',
  542. description: 'TRADFRI LED bulb GU10 400 lumen, dimmable',
  543. extend: generic.light_onoff_brightness,
  544. },
  545. {
  546. zigbeeModel: ['TRADFRI bulb E14 WS opal 400lm', 'TRADFRI bulb E12 WS opal 400lm'],
  547. model: 'LED1536G5',
  548. vendor: 'IKEA',
  549. description: 'TRADFRI LED bulb E12/E14 400 lumen, dimmable, white spectrum, opal white',
  550. extend: generic.light_onoff_brightness_colortemp,
  551. },
  552. {
  553. zigbeeModel: ['TRADFRI bulb GU10 WW 400lm'],
  554. model: 'LED1837R5',
  555. vendor: 'IKEA',
  556. description: 'TRADFRI LED bulb GU10 400 lumen, dimmable',
  557. extend: generic.light_onoff_brightness,
  558. },
  559. {
  560. zigbeeModel: ['TRADFRI bulb E27 WW clear 250lm'],
  561. model: 'LED1842G3',
  562. vendor: 'IKEA',
  563. description: 'TRADFRI LED bulb E27 WW clear 250 lumen, dimmable',
  564. extend: generic.light_onoff_brightness,
  565. },
  566. {
  567. zigbeeModel: ['TRADFRI bulb E14 WS opal 600lm'],
  568. model: 'LED1733G7',
  569. vendor: 'IKEA',
  570. description: 'TRADFRI LED bulb E14 600 lumen, dimmable, white spectrum, opal white',
  571. extend: generic.light_onoff_brightness_colortemp,
  572. },
  573. {
  574. zigbeeModel: ['TRADFRI bulb E26 opal 1000lm', 'TRADFRI bulb E26 W opal 1000lm'],
  575. model: 'LED1622G12',
  576. vendor: 'IKEA',
  577. description: 'TRADFRI LED bulb E26 1000 lumen, dimmable, opal white',
  578. extend: generic.light_onoff_brightness,
  579. },
  580. {
  581. zigbeeModel: [
  582. 'TRADFRI bulb E27 CWS opal 600lm',
  583. 'TRADFRI bulb E26 CWS opal 600lm',
  584. 'TRADFRI bulb E14 CWS opal 600lm'],
  585. model: 'LED1624G9',
  586. vendor: 'IKEA',
  587. description: 'TRADFRI LED bulb E14/E26/E27 600 lumen, dimmable, color, opal white',
  588. extend: generic.light_onoff_brightness_colorxy,
  589. },
  590. {
  591. zigbeeModel: [
  592. 'TRADFRI bulb E14 W op/ch 400lm', 'TRADFRI bulb E12 W op/ch 400lm',
  593. 'TRADFRI bulb E17 W op/ch 400lm',
  594. ],
  595. model: 'LED1649C5',
  596. vendor: 'IKEA',
  597. description: 'TRADFRI LED bulb E12/E14/E17 400 lumen, dimmable warm white, chandelier opal',
  598. extend: generic.light_onoff_brightness,
  599. },
  600. {
  601. zigbeeModel: ['TRADFRI bulb E27 WS opal 1000lm'],
  602. model: 'LED1732G11',
  603. vendor: 'IKEA',
  604. description: 'TRADFRI LED bulb E27 1000 lumen, dimmable, white spectrum, opal white',
  605. extend: generic.light_onoff_brightness_colortemp,
  606. },
  607. {
  608. zigbeeModel: ['TRADFRI bulb E27 WW 806lm'],
  609. model: 'LED1836G9',
  610. vendor: 'IKEA',
  611. description: 'TRADFRI LED bulb E27 806 lumen, dimmable, warm white',
  612. extend: generic.light_onoff_brightness,
  613. },
  614. {
  615. zigbeeModel: ['TRADFRI bulb E27 WS clear 806lm'],
  616. model: 'LED1736G9',
  617. vendor: 'IKEA',
  618. description: 'TRADFRI LED bulb E27 806 lumen, dimmable, white spectrum, clear',
  619. extend: generic.light_onoff_brightness_colortemp,
  620. },
  621. {
  622. zigbeeModel: ['TRADFRI wireless dimmer'],
  623. model: 'ICTC-G-1',
  624. vendor: 'IKEA',
  625. description: 'TRADFRI wireless dimmer',
  626. supports: 'brightness [0-255] (quick rotate for instant 0/255), action',
  627. fromZigbee: [
  628. fz.cmd_move, fz.cmd_move_with_onoff, fz.cmd_stop, fz.cmd_stop_with_onoff,
  629. fz.cmd_move_to_level_with_onoff, fz.generic_battery, fz.ignore_power_change,
  630. ],
  631. toZigbee: [],
  632. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  633. const device = shepherd.find(ieeeAddr, 1);
  634. const cfg = {
  635. direction: 0, attrId: 33, dataType: 32, minRepIntval: 0, maxRepIntval: repInterval.MAX, repChange: 0,
  636. };
  637.  
  638. const actions = [
  639. (cb) => device.bind('genLevelCtrl', coordinator, cb),
  640. (cb) => device.bind('genPowerCfg', coordinator, cb),
  641. (cb) => device.foundation('genPowerCfg', 'configReport', [cfg], foundationCfg, cb),
  642. ];
  643. execute(device, actions, callback);
  644. },
  645. },
  646. {
  647. zigbeeModel: ['TRADFRI transformer 10W', 'TRADFRI Driver 10W'],
  648. model: 'ICPSHC24-10EU-IL-1',
  649. vendor: 'IKEA',
  650. description: 'TRADFRI driver for wireless control (10 watt)',
  651. extend: generic.light_onoff_brightness,
  652. },
  653. {
  654. zigbeeModel: ['TRADFRI transformer 30W', 'TRADFRI Driver 30W'],
  655. model: 'ICPSHC24-30EU-IL-1',
  656. vendor: 'IKEA',
  657. description: 'TRADFRI driver for wireless control (30 watt)',
  658. extend: generic.light_onoff_brightness,
  659. },
  660. {
  661. zigbeeModel: ['FLOALT panel WS 30x30'],
  662. model: 'L1527',
  663. vendor: 'IKEA',
  664. description: 'FLOALT LED light panel, dimmable, white spectrum (30x30 cm)',
  665. extend: generic.light_onoff_brightness_colortemp,
  666. },
  667. {
  668. zigbeeModel: ['FLOALT panel WS 60x60'],
  669. model: 'L1529',
  670. vendor: 'IKEA',
  671. description: 'FLOALT LED light panel, dimmable, white spectrum (60x60 cm)',
  672. extend: generic.light_onoff_brightness_colortemp,
  673. },
  674. {
  675. zigbeeModel: ['FLOALT panel WS 30x90'],
  676. model: 'L1528',
  677. vendor: 'IKEA',
  678. description: 'FLOALT LED light panel, dimmable, white spectrum (30x90 cm)',
  679. extend: generic.light_onoff_brightness_colortemp,
  680. },
  681. {
  682. zigbeeModel: ['SURTE door WS 38x64'],
  683. model: 'L1531',
  684. vendor: 'IKEA',
  685. description: 'SURTE door light panel, dimmable, white spectrum (38x64 cm)',
  686. extend: generic.light_onoff_brightness_colortemp,
  687. },
  688. {
  689. zigbeeModel: ['TRADFRI control outlet'],
  690. model: 'E1603/E1702',
  691. description: 'TRADFRI control outlet',
  692. supports: 'on/off',
  693. vendor: 'IKEA',
  694. fromZigbee: [fz.ignore_onoff_change, fz.state, fz.ignore_genLevelCtrl_report],
  695. toZigbee: [tz.on_off],
  696. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  697. const device = shepherd.find(ieeeAddr, 1);
  698. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  699. const actions = [
  700. (cb) => device.bind('genOnOff', coordinator, cb),
  701. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  702. ];
  703.  
  704. execute(device, actions, callback);
  705. },
  706. },
  707. {
  708. zigbeeModel: ['TRADFRI remote control'],
  709. model: 'E1524/E1810',
  710. description: 'TRADFRI remote control',
  711. supports:
  712. 'toggle, arrow left/right click/hold/release, brightness up/down click/hold/release',
  713. vendor: 'IKEA',
  714. fromZigbee: [
  715. fz.cmdToggle, fz.E1524_arrow_click, fz.E1524_arrow_hold, fz.E1524_arrow_release,
  716. fz.E1524_brightness_up_click, fz.E1524_brightness_down_click, fz.E1524_brightness_up_hold,
  717. fz.E1524_brightness_up_release, fz.E1524_brightness_down_hold, fz.E1524_brightness_down_release,
  718. fz.generic_battery, fz.ignore_power_change, fz.ignore_basic_change, fz.E1524_hold,
  719. ],
  720. toZigbee: [],
  721. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  722. const device = shepherd.find(ieeeAddr, 1);
  723. const cfg = {
  724. direction: 0, attrId: 33, dataType: 32, minRepIntval: 0, maxRepIntval: repInterval.MAX, repChange: 0,
  725. };
  726.  
  727. const actions = [
  728. (cb) => device.bind('genPowerCfg', coordinator, cb),
  729. (cb) => device.foundation('genPowerCfg', 'configReport', [cfg], foundationCfg, cb),
  730. ];
  731.  
  732. execute(device, actions, callback);
  733. },
  734. },
  735. {
  736. zigbeeModel: ['TRADFRI on/off switch'],
  737. model: 'E1743',
  738. vendor: 'IKEA',
  739. description: 'TRADFRI ON/OFF switch',
  740. supports: 'on, off, brightness up/down/stop',
  741. fromZigbee: [
  742. fz.genOnOff_cmdOn, fz.genOnOff_cmdOff, fz.E1743_brightness_up, fz.E1743_brightness_down,
  743. fz.E1743_brightness_stop, fz.generic_battery, fz.ignore_power_change,
  744. ],
  745. toZigbee: [],
  746. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  747. const device = shepherd.find(ieeeAddr, 1);
  748. const cfg = {
  749. direction: 0, attrId: 33, dataType: 32, minRepIntval: 0, maxRepIntval: repInterval.MAX, repChange: 0,
  750. };
  751.  
  752. const actions = [
  753. (cb) => device.bind('genPowerCfg', coordinator, cb),
  754. (cb) => device.foundation('genPowerCfg', 'configReport', [cfg], foundationCfg, cb),
  755. ];
  756.  
  757. execute(device, actions, callback);
  758. },
  759. },
  760. {
  761. zigbeeModel: ['TRADFRI motion sensor'],
  762. model: 'E1525',
  763. vendor: 'IKEA',
  764. description: 'TRADFRI motion sensor',
  765. supports: 'occupancy',
  766. fromZigbee: [fz.generic_battery, fz.ignore_power_change, fz.E1525_occupancy, fz.ignore_basic_change],
  767. toZigbee: [],
  768. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  769. const device = shepherd.find(ieeeAddr, 1);
  770. const cfg = {
  771. direction: 0, attrId: 33, dataType: 32, minRepIntval: 0, maxRepIntval: repInterval.MAX, repChange: 0,
  772. };
  773.  
  774. const actions = [
  775. (cb) => device.bind('genPowerCfg', coordinator, cb),
  776. (cb) => device.foundation('genPowerCfg', 'configReport', [cfg], foundationCfg, cb),
  777. ];
  778.  
  779. execute(device, actions, callback);
  780. },
  781. },
  782. {
  783. zigbeeModel: ['TRADFRI signal repeater'],
  784. model: 'E1746',
  785. description: 'TRADFRI signal repeater',
  786. supports: 'linkquality',
  787. vendor: 'IKEA',
  788. fromZigbee: [fz.ignore_basic_change, fz.ignore_diagnostic_change, fz.E1746_linkquality],
  789. toZigbee: [],
  790. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  791. const device = shepherd.find(ieeeAddr, 1);
  792.  
  793. const actions = [
  794. (cb) => device.report('genBasic', 'modelId', 3600, 14400, 0, cb),
  795. ];
  796.  
  797. execute(device, actions, callback);
  798. },
  799. },
  800. {
  801. zigbeeModel: ['GUNNARP panel 40*40'],
  802. model: 'T1829',
  803. description: 'GUNNARP panel 40*40',
  804. vendor: 'IKEA',
  805. extend: generic.light_onoff_brightness_colortemp,
  806. },
  807.  
  808. // Philips
  809. {
  810. zigbeeModel: ['LTC012'],
  811. model: '3306431P7',
  812. vendor: 'Philips',
  813. description: 'Hue Struana',
  814. extend: hue.light_onoff_brightness_colortemp,
  815. },
  816. {
  817. zigbeeModel: ['LLC012', 'LLC011'],
  818. model: '7299760PH',
  819. vendor: 'Philips',
  820. description: 'Hue Bloom',
  821. extend: hue.light_onoff_brightness_colorxy,
  822. },
  823. {
  824. zigbeeModel: ['LLC020'],
  825. model: '7146060PH',
  826. vendor: 'Philips',
  827. description: 'Hue Go',
  828. extend: hue.light_onoff_brightness_colortemp_colorxy,
  829. },
  830. {
  831. zigbeeModel: ['LCC001'],
  832. model: '4090531P7',
  833. vendor: 'Philips',
  834. description: 'Hue Flourish white and color ambiance ceiling light',
  835. extend: hue.light_onoff_brightness_colortemp_colorxy,
  836. },
  837. {
  838. zigbeeModel: ['LCG002'],
  839. model: '929001953101',
  840. vendor: 'Philips',
  841. description: 'Hue White and Color Ambiance GU10',
  842. extend: hue.light_onoff_brightness_colortemp_colorxy,
  843. },
  844. {
  845. zigbeeModel: ['LWA004'],
  846. model: '8718699688820',
  847. vendor: 'Philips',
  848. description: 'Hue Filament Standard A60/E27 bluetooth',
  849. extend: hue.light_onoff_brightness,
  850. },
  851. {
  852. zigbeeModel: ['LWB004'],
  853. model: '433714',
  854. vendor: 'Philips',
  855. description: 'Hue Lux A19 bulb E27',
  856. extend: hue.light_onoff_brightness,
  857. },
  858. {
  859. zigbeeModel: ['LWB006', 'LWB014'],
  860. model: '9290011370',
  861. vendor: 'Philips',
  862. description: 'Hue white A60 bulb E27',
  863. extend: hue.light_onoff_brightness,
  864. },
  865. {
  866. zigbeeModel: ['LWB010'],
  867. model: '8718696449691',
  868. vendor: 'Philips',
  869. description: 'Hue White Single bulb B22',
  870. extend: hue.light_onoff_brightness,
  871. },
  872. {
  873. zigbeeModel: ['LWG001'],
  874. model: '9290018195',
  875. vendor: 'Philips',
  876. description: 'Hue white GU10',
  877. extend: hue.light_onoff_brightness,
  878. },
  879. {
  880. zigbeeModel: ['LWG004'],
  881. model: 'LWG004',
  882. vendor: 'Philips',
  883. description: 'Hue white GU10 bluetooth',
  884. extend: hue.light_onoff_brightness,
  885. },
  886. {
  887. zigbeeModel: ['LST001'],
  888. model: '7299355PH',
  889. vendor: 'Philips',
  890. description: 'Hue white and color ambiance LightStrip',
  891. extend: hue.light_onoff_brightness_colorxy,
  892. },
  893. {
  894. zigbeeModel: ['LST002'],
  895. model: '915005106701',
  896. vendor: 'Philips',
  897. description: 'Hue white and color ambiance LightStrip plus',
  898. extend: hue.light_onoff_brightness_colortemp_colorxy,
  899. },
  900. {
  901. zigbeeModel: ['LST003', 'LST004'],
  902. model: '9290018187B',
  903. vendor: 'Philips',
  904. description: 'Hue white and color ambiance LightStrip Outdoor',
  905. extend: hue.light_onoff_brightness_colortemp_colorxy,
  906. },
  907. {
  908. zigbeeModel: ['LCA002'],
  909. model: '9290022166',
  910. vendor: 'Philips',
  911. description: 'Hue white and color ambiance E26',
  912. extend: hue.light_onoff_brightness_colortemp_colorxy,
  913. },
  914. {
  915. zigbeeModel: ['LCT001', 'LCT007', 'LCT010', 'LCT012', 'LCT014', 'LCT015', 'LCT016'],
  916. model: '9290012573A',
  917. vendor: 'Philips',
  918. description: 'Hue white and color ambiance E26/E27/E14',
  919. extend: hue.light_onoff_brightness_colortemp_colorxy,
  920. },
  921. {
  922. zigbeeModel: ['LCT002'],
  923. model: '9290002579A',
  924. vendor: 'Philips',
  925. description: 'Hue white and color ambiance BR30',
  926. extend: hue.light_onoff_brightness_colortemp_colorxy,
  927. },
  928. {
  929. zigbeeModel: ['LCT003'],
  930. model: '8718696485880',
  931. vendor: 'Philips',
  932. description: 'Hue white and color ambiance GU10',
  933. extend: hue.light_onoff_brightness_colortemp_colorxy,
  934. },
  935. {
  936. zigbeeModel: ['LCT024'],
  937. model: '915005733701',
  938. vendor: 'Philips',
  939. description: 'Hue White and color ambiance Play Lightbar',
  940. extend: hue.light_onoff_brightness_colortemp_colorxy,
  941. },
  942. {
  943. zigbeeModel: ['LTW011'],
  944. model: '464800',
  945. vendor: 'Philips',
  946. description: 'Hue white ambiance BR30 flood light',
  947. extend: hue.light_onoff_brightness_colortemp,
  948. },
  949. {
  950. zigbeeModel: ['LTW012'],
  951. model: '8718696695203',
  952. vendor: 'Philips',
  953. description: 'Hue white ambiance E14',
  954. extend: hue.light_onoff_brightness_colortemp,
  955. },
  956. {
  957. zigbeeModel: ['LWE002'],
  958. model: '9290020399',
  959. vendor: 'Philips',
  960. description: 'Hue white E14',
  961. extend: hue.light_onoff_brightness,
  962. },
  963. {
  964. zigbeeModel: ['LTW013'],
  965. model: '8718696598283',
  966. vendor: 'Philips',
  967. description: 'Hue white ambiance GU10',
  968. extend: hue.light_onoff_brightness_colortemp,
  969. },
  970. {
  971. zigbeeModel: ['LTW015'],
  972. model: '9290011998B',
  973. vendor: 'Philips',
  974. description: 'Hue white ambiance E26',
  975. extend: hue.light_onoff_brightness_colortemp,
  976. },
  977. {
  978. zigbeeModel: ['LTA002'],
  979. model: '9290022167',
  980. vendor: 'Philips',
  981. description: 'Hue white ambiance E26 with Bluetooth',
  982. extend: hue.light_onoff_brightness_colortemp,
  983. },
  984. {
  985. zigbeeModel: ['LTW010', 'LTW001', 'LTW004'],
  986. model: '8718696548738',
  987. vendor: 'Philips',
  988. description: 'Hue white ambiance E26/E27',
  989. extend: hue.light_onoff_brightness_colortemp,
  990. },
  991. {
  992. zigbeeModel: ['LTW017'],
  993. model: '915005587401',
  994. vendor: 'Philips',
  995. description: 'Hue white ambiance Adore light',
  996. extend: hue.light_onoff_brightness_colortemp,
  997. },
  998. {
  999. zigbeeModel: ['LCW001'],
  1000. model: '4090130P7',
  1001. vendor: 'Philips',
  1002. description: 'Hue Sana',
  1003. extend: hue.light_onoff_brightness_colortemp_colorxy,
  1004. },
  1005. {
  1006. zigbeeModel: ['LTC001'],
  1007. model: '3261030P7',
  1008. vendor: 'Philips',
  1009. description: 'Hue Being',
  1010. extend: hue.light_onoff_brightness_colortemp,
  1011. },
  1012. {
  1013. zigbeeModel: ['LTC003'],
  1014. model: '3261331P7',
  1015. vendor: 'Philips',
  1016. description: 'Hue white ambiance Still',
  1017. extend: hue.light_onoff_brightness_colortemp,
  1018. },
  1019. {
  1020. zigbeeModel: ['LTC011'],
  1021. model: '4096730U7',
  1022. vendor: 'Philips',
  1023. description: 'Hue Cher ceiling light',
  1024. extend: hue.light_onoff_brightness_colortemp,
  1025. },
  1026. {
  1027. zigbeeModel: ['LTC013'],
  1028. model: '3216131P5',
  1029. vendor: 'Philips',
  1030. description: 'Hue white ambiance Aurelle square panel light',
  1031. extend: hue.light_onoff_brightness_colortemp,
  1032. },
  1033. {
  1034. zigbeeModel: ['LTC015'],
  1035. model: '3216331P5',
  1036. vendor: 'Philips',
  1037. description: 'Hue white ambiance Aurelle rectangle panel light',
  1038. extend: hue.light_onoff_brightness_colortemp,
  1039. },
  1040. {
  1041. zigbeeModel: ['LTC016'],
  1042. model: '3216431P5',
  1043. vendor: 'Philips',
  1044. description: 'Hue white ambiance Aurelle round panel light',
  1045. extend: hue.light_onoff_brightness_colortemp,
  1046. },
  1047. {
  1048. zigbeeModel: ['LTP003', 'LTP001'],
  1049. model: '4033930P7',
  1050. vendor: 'Philips',
  1051. description: 'Hue white ambiance suspension Fair',
  1052. extend: hue.light_onoff_brightness_colortemp,
  1053. },
  1054. {
  1055. zigbeeModel: ['LWF002'],
  1056. model: '9290011370B',
  1057. vendor: 'Philips',
  1058. description: 'Hue white A60 bulb E27',
  1059. extend: hue.light_onoff_brightness,
  1060. },
  1061. {
  1062. zigbeeModel: ['LWB015'],
  1063. model: '046677476816',
  1064. vendor: 'Philips',
  1065. description: 'Hue white PAR38 outdoor',
  1066. extend: hue.light_onoff_brightness,
  1067. },
  1068. {
  1069. zigbeeModel: ['LLC010'],
  1070. model: '7199960PH',
  1071. vendor: 'Philips',
  1072. description: 'Hue Iris',
  1073. extend: hue.light_onoff_brightness_colorxy,
  1074. },
  1075. {
  1076. zigbeeModel: ['RWL020', 'RWL021'],
  1077. model: '324131092621',
  1078. vendor: 'Philips',
  1079. description: 'Hue dimmer switch',
  1080. supports: 'on/off, brightness, up/down/hold/release, click count',
  1081. fromZigbee: [
  1082. fz._324131092621_ignore_on, fz._324131092621_ignore_off, fz._324131092621_ignore_step,
  1083. fz._324131092621_ignore_stop, fz._324131092621_notification,
  1084. fz.ignore_power_change, fz.generic_battery_remaining,
  1085. ],
  1086. toZigbee: [],
  1087. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  1088. const ep1 = shepherd.find(ieeeAddr, 1);
  1089. const actions = [
  1090. (cb) => ep1.bind('genOnOff', coordinator, cb),
  1091. (cb) => ep1.bind('genLevelCtrl', coordinator, cb),
  1092. ];
  1093.  
  1094. execute(ep1, actions, (result) => {
  1095. if (result) {
  1096. const ep2 = shepherd.find(ieeeAddr, 2);
  1097. const actions = [
  1098. (cb) => ep2.foundation('genBasic', 'write',
  1099. [{attrId: 0x0031, dataType: 0x19, attrData: 0x000B}],
  1100. {manufSpec: 1, disDefaultRsp: 1, manufCode: 0x100B}, cb),
  1101. (cb) => ep2.bind('manuSpecificPhilips', coordinator, cb),
  1102. (cb) => ep2.bind('genPowerCfg', coordinator, cb),
  1103. (cb) => ep2.report('genPowerCfg', 'batteryPercentageRemaining', 0, 1000, 0, cb),
  1104. ];
  1105.  
  1106. execute(ep2, actions, callback);
  1107. } else {
  1108. callback(result);
  1109. }
  1110. });
  1111. },
  1112. },
  1113. {
  1114. zigbeeModel: ['SML001'],
  1115. model: '9290012607',
  1116. vendor: 'Philips',
  1117. description: 'Hue motion sensor',
  1118. supports: 'occupancy, temperature, illuminance',
  1119. fromZigbee: [
  1120. fz.generic_battery_remaining, fz.generic_occupancy, fz.generic_temperature,
  1121. fz.ignore_occupancy_change, fz.generic_illuminance, fz.ignore_illuminance_change,
  1122. fz.ignore_temperature_change, fz.ignore_basic_change, fz.ignore_basic_report,
  1123. ],
  1124. toZigbee: [tz.occupancy_timeout, tz.hue_motion_sensitivity],
  1125. ep: (device) => {
  1126. return {
  1127. '': 2, // default
  1128. 'ep1': 1,
  1129. 'ep2': 2, // e.g. for write to msOccupancySensing
  1130. };
  1131. },
  1132. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  1133. const device = shepherd.find(ieeeAddr, 2);
  1134.  
  1135. const actions = [
  1136. (cb) => device.bind('genPowerCfg', coordinator, cb),
  1137. (cb) => device.bind('msIlluminanceMeasurement', coordinator, cb),
  1138. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  1139. (cb) => device.bind('msOccupancySensing', coordinator, cb),
  1140. (cb) => device.report('genPowerCfg', 'batteryPercentageRemaining', 0, 1000, 0, cb),
  1141. (cb) => device.report('msOccupancySensing', 'occupancy', 0, 600, null, cb),
  1142. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 30, 600, 1, cb),
  1143. (cb) => device.report('msIlluminanceMeasurement', 'measuredValue', 0, 600, null, cb),
  1144. ];
  1145.  
  1146. execute(device, actions, callback);
  1147. },
  1148. },
  1149. {
  1150. zigbeeModel: ['SML002'],
  1151. model: '9290019758',
  1152. vendor: 'Philips',
  1153. description: 'Hue motion outdoor sensor',
  1154. supports: 'occupancy, temperature, illuminance',
  1155. fromZigbee: [
  1156. fz.generic_battery_remaining, fz.generic_occupancy, fz.generic_temperature,
  1157. fz.ignore_occupancy_change, fz.generic_illuminance, fz.ignore_illuminance_change,
  1158. fz.ignore_temperature_change,
  1159. ],
  1160. toZigbee: [tz.occupancy_timeout, tz.hue_motion_sensitivity],
  1161. ep: (device) => {
  1162. return {
  1163. '': 2, // default
  1164. 'ep1': 1,
  1165. 'ep2': 2, // e.g. for write to msOccupancySensing
  1166. };
  1167. },
  1168. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  1169. const device = shepherd.find(ieeeAddr, 2);
  1170.  
  1171. const actions = [
  1172. (cb) => device.bind('genPowerCfg', coordinator, cb),
  1173. (cb) => device.bind('msIlluminanceMeasurement', coordinator, cb),
  1174. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  1175. (cb) => device.bind('msOccupancySensing', coordinator, cb),
  1176. (cb) => device.report('genPowerCfg', 'batteryPercentageRemaining', 0, 1000, 0, cb),
  1177. (cb) => device.report('msOccupancySensing', 'occupancy', 0, 600, null, cb),
  1178. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 30, 600, 1, cb),
  1179. (cb) => device.report('msIlluminanceMeasurement', 'measuredValue', 0, 600, null, cb),
  1180. ];
  1181.  
  1182. execute(device, actions, callback);
  1183. },
  1184. },
  1185. {
  1186. zigbeeModel: ['LOM001'],
  1187. model: '929002240401',
  1188. vendor: 'Philips',
  1189. description: 'Hue smart plug',
  1190. supports: 'on/off',
  1191. fromZigbee: [fz.ignore_onoff_change, fz.state],
  1192. toZigbee: [tz.on_off],
  1193. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  1194. const device = shepherd.find(ieeeAddr, 11);
  1195. const actions = [
  1196. (cb) => device.bind('genOnOff', coordinator, cb),
  1197. (cb) => device.report('genOnOff', 'onOff', 0, 600, null, cb),
  1198. ];
  1199. execute(device, actions, callback);
  1200. },
  1201. },
  1202. {
  1203. zigbeeModel: ['LLC014'],
  1204. model: '7099860PH',
  1205. vendor: 'Philips',
  1206. description: 'LivingColors Aura',
  1207. extend: hue.light_onoff_brightness_colorxy,
  1208. },
  1209. {
  1210. zigbeeModel: ['LTC014'],
  1211. model: '3216231P5',
  1212. vendor: 'Philips',
  1213. description: 'Hue white ambiance Aurelle rectangle panel light',
  1214. extend: hue.light_onoff_brightness_colortemp,
  1215. },
  1216. {
  1217. zigbeeModel: ['1744530P7'],
  1218. model: '8718696170625',
  1219. vendor: 'Philips',
  1220. description: 'Hue Fuzo outdoor wall light',
  1221. extend: hue.light_onoff_brightness,
  1222. },
  1223. {
  1224. zigbeeModel: ['1743630P7'],
  1225. model: '17436/30/P7',
  1226. vendor: 'Philips',
  1227. description: 'Hue Welcome white flood light',
  1228. extend: hue.light_onoff_brightness,
  1229. },
  1230. {
  1231. zigbeeModel: ['LCS001'],
  1232. model: '1741830P7',
  1233. vendor: 'Philips',
  1234. description: 'Hue Lily outdoor spot light',
  1235. extend: hue.light_onoff_brightness_colortemp_colorxy,
  1236. },
  1237.  
  1238. // Belkin
  1239. {
  1240. zigbeeModel: ['MZ100'],
  1241. model: 'F7C033',
  1242. vendor: 'Belkin',
  1243. description: 'WeMo smart LED bulb',
  1244. fromZigbee: [
  1245. fz.brightness, fz.state_change, fz.state_report, fz.brightness_report,
  1246. fz.ignore_genGroups_devChange, fz.ignore_basic_change,
  1247. ],
  1248. supports: generic.light_onoff_brightness.supports,
  1249. toZigbee: generic.light_onoff_brightness.toZigbee,
  1250. },
  1251.  
  1252. // EDP
  1253. {
  1254. zigbeeModel: ['ZB-SmartPlug-1.0.0'],
  1255. model: 'PLUG EDP RE:DY',
  1256. vendor: 'EDP',
  1257. description: 're:dy plug',
  1258. supports: 'on/off, power measurement',
  1259. fromZigbee: [fz.state, fz.ignore_onoff_change, fz.generic_power, fz.ignore_metering_change],
  1260. toZigbee: [tz.on_off],
  1261. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  1262. const device = shepherd.find(ieeeAddr, 85);
  1263. const actions = [
  1264. (cb) => device.report('seMetering', 'instantaneousDemand', 10, 60, 1, cb),
  1265. (cb) => device.report('genOnOff', 'onOff', 1, 60, 1, cb),
  1266. ];
  1267. execute(device, actions, callback);
  1268. },
  1269. },
  1270. {
  1271. zigbeeModel: ['ZB-RelayControl-1.0.0'],
  1272. model: 'SWITCH EDP RE:DY',
  1273. vendor: 'EDP',
  1274. description: 're:dy switch',
  1275. supports: 'on/off',
  1276. fromZigbee: [fz.state, fz.ignore_onoff_change],
  1277. toZigbee: [tz.on_off],
  1278. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  1279. const device = shepherd.find(ieeeAddr, 85);
  1280. const actions = [
  1281. (cb) => device.report('genOnOff', 'onOff', 1, 60, 1, cb),
  1282. ];
  1283. execute(device, actions, callback);
  1284. },
  1285. },
  1286.  
  1287. // Custom devices (DiY)
  1288. {
  1289. zigbeeModel: ['lumi.router'],
  1290. model: 'CC2530.ROUTER',
  1291. vendor: 'Custom devices (DiY)',
  1292. description: '[CC2530 router](http://ptvo.info/cc2530-based-zigbee-coordinator-and-router-112/)',
  1293. supports: 'state, description, type, rssi',
  1294. fromZigbee: [fz.CC2530ROUTER_state, fz.CC2530ROUTER_meta, fz.ignore_onoff_change],
  1295. toZigbee: [tz.ptvo_switch_trigger],
  1296. },
  1297. {
  1298. zigbeeModel: ['ptvo.switch'],
  1299. model: 'ptvo.switch',
  1300. vendor: 'Custom devices (DiY)',
  1301. description: '[Multi-channel relay switch](https://ptvo.info/zigbee-switch-configurable-firmware-router-199/)',
  1302. supports: 'hold, single, double and triple click, on/off',
  1303. fromZigbee: [fz.ptvo_switch_state, fz.ptvo_switch_buttons,
  1304. fz.ignore_basic_change, fz.ignore_onoff_change, fz.ignore_multistate_change,
  1305. ],
  1306. toZigbee: [tz.on_off, tz.ptvo_switch_trigger],
  1307. ep: (device) => {
  1308. return {'bottom_left': 1, 'bottom_right': 2, 'top_left': 3, 'top_right': 4, 'center': 5};
  1309. },
  1310. },
  1311. {
  1312. zigbeeModel: ['DNCKAT_S001'],
  1313. model: 'DNCKATSW001',
  1314. vendor: 'Custom devices (DiY)',
  1315. description: '[DNCKAT single key wired wall light switch](https://github.com/dzungpv/dnckatsw00x/)',
  1316. supports: 'on/off',
  1317. fromZigbee: [fz.state, fz.ignore_onoff_change],
  1318. toZigbee: [tz.on_off],
  1319. },
  1320. {
  1321. zigbeeModel: ['DNCKAT_S002'],
  1322. model: 'DNCKATSW002',
  1323. vendor: 'Custom devices (DiY)',
  1324. description: '[DNCKAT double key wired wall light switch](https://github.com/dzungpv/dnckatsw00x/)',
  1325. supports: 'hold/release, on/off',
  1326. fromZigbee: [fz.DNCKAT_S00X_state, fz.DNCKAT_S00X_buttons],
  1327. toZigbee: [tz.on_off],
  1328. ep: (device) => {
  1329. return {'left': 1, 'right': 2};
  1330. },
  1331. },
  1332. {
  1333. zigbeeModel: ['DNCKAT_S003'],
  1334. model: 'DNCKATSW003',
  1335. vendor: 'Custom devices (DiY)',
  1336. description: '[DNCKAT triple key wired wall light switch](https://github.com/dzungpv/dnckatsw00x/)',
  1337. supports: 'hold/release, on/off',
  1338. fromZigbee: [fz.DNCKAT_S00X_state, fz.DNCKAT_S00X_buttons],
  1339. toZigbee: [tz.on_off],
  1340. ep: (device) => {
  1341. return {'left': 1, 'center': 2, 'right': 3};
  1342. },
  1343. },
  1344. {
  1345. zigbeeModel: ['DNCKAT_S004'],
  1346. model: 'DNCKATSW004',
  1347. vendor: 'Custom devices (DiY)',
  1348. description: '[DNCKAT quadruple key wired wall light switch](https://github.com/dzungpv/dnckatsw00x/)',
  1349. supports: 'hold/release, on/off',
  1350. fromZigbee: [fz.DNCKAT_S00X_state, fz.DNCKAT_S00X_buttons],
  1351. toZigbee: [tz.on_off],
  1352. ep: (device) => {
  1353. return {'bottom_left': 1, 'bottom_right': 2, 'top_left': 3, 'top_right': 4};
  1354. },
  1355. },
  1356. {
  1357. zigbeeModel: ['ZigUP'],
  1358. model: 'ZigUP',
  1359. vendor: 'Custom devices (DiY)',
  1360. description: '[CC2530 based ZigBee relais, switch, sensor and router](https://github.com/formtapez/ZigUP/)',
  1361. supports: 'relais, RGB-stripe, sensors, S0-counter, ADC, digital I/O',
  1362. fromZigbee: [fz.ZigUP_parse, fz.ignore_onoff_change],
  1363. toZigbee: [tz.on_off, tz.light_color, tz.ZigUP_lock],
  1364. },
  1365. {
  1366. zigbeeModel: ['DIYRuZ_R4_5'],
  1367. model: 'DIYRuZ_R4_5',
  1368. vendor: 'Custom devices (DiY)',
  1369. description: '[DiY 4 Relays + 4 switches + 1 buzzer](http://modkam.ru/?p=1054)',
  1370. supports: 'on/off',
  1371. fromZigbee: [fz.DNCKAT_S00X_state],
  1372. toZigbee: [tz.on_off],
  1373. ep: (device) => {
  1374. return {'bottom_left': 1, 'bottom_right': 2, 'top_left': 3, 'top_right': 4, 'center': 5};
  1375. },
  1376. },
  1377. {
  1378. zigbeeModel: ['DIYRuZ_KEYPAD20'],
  1379. model: 'DIYRuZ_KEYPAD20',
  1380. vendor: 'Custom devices (DiY)',
  1381. description: '[DiY 20 button keypad](http://modkam.ru/?p=1114)',
  1382. supports: 'click',
  1383. fromZigbee: [fz.keypad20states, fz.keypad20_battery],
  1384. toZigbee: [],
  1385. ep: (device) => {
  1386. return {
  1387. 'btn_1': 1, 'btn_2': 2, 'btn_3': 3, 'btn_4': 4, 'btn_5': 5,
  1388. 'btn_6': 6, 'btn_7': 7, 'btn_8': 8, 'btn_9': 9, 'btn_10': 10,
  1389. 'btn_11': 11, 'btn_12': 12, 'btn_13': 13, 'btn_14': 14, 'btn_15': 15,
  1390. 'btn_16': 16, 'btn_17': 17, 'btn_18': 18, 'btn_19': 19, 'btn_20': 20,
  1391. };
  1392. },
  1393. },
  1394. {
  1395. zigbeeModel: ['DIYRuZ_magnet'],
  1396. model: 'DIYRuZ_magnet',
  1397. vendor: 'DIYRuZ',
  1398. description: '[DIYRuZ contact sensor](https://modkam.ru/?p=1220)',
  1399. supports: 'contact',
  1400. fromZigbee: [fz.keypad20_battery, fz.xiaomi_contact],
  1401. toZigbee: [],
  1402. },
  1403. {
  1404. zigbeeModel: ['ZWallRemote0'],
  1405. model: 'ZWallRemote0',
  1406. vendor: 'Custom devices (DiY)',
  1407. description: 'Matts Wall Switch Remote (https://github.com/mattlokes/ZWallRemote)',
  1408. supports: 'on/off',
  1409. fromZigbee: [fz.cmdToggle],
  1410. toZigbee: [],
  1411. },
  1412. {
  1413. zigbeeModel: ['DTB190502A1'],
  1414. model: 'DTB190502A1',
  1415. vendor: 'Custom devices (DiY)',
  1416. description: '[CC2530 based IO Board https://databyte.ch/?portfolio=zigbee-erstes-board-dtb190502a)',
  1417. supports: 'switch, buttons',
  1418. fromZigbee: [fz.DTB190502A1_parse, fz.ignore_onoff_change],
  1419. toZigbee: [tz.DTB190502A1_LED],
  1420. },
  1421.  
  1422. // eCozy
  1423. {
  1424. zigbeeModel: ['Thermostat'],
  1425. model: '1TST-EU',
  1426. vendor: 'eCozy',
  1427. description: 'Smart heating thermostat',
  1428. supports: 'temperature, occupancy, un-/occupied heating, schedule',
  1429. fromZigbee: [
  1430. fz.ignore_basic_change, fz.generic_battery_voltage,
  1431. fz.thermostat_att_report, fz.thermostat_dev_change,
  1432. ],
  1433. toZigbee: [
  1434. tz.factory_reset, tz.thermostat_local_temperature, tz.thermostat_local_temperature_calibration,
  1435. tz.thermostat_occupancy, tz.thermostat_occupied_heating_setpoint,
  1436. tz.thermostat_unoccupied_heating_setpoint, tz.thermostat_setpoint_raise_lower,
  1437. tz.thermostat_remote_sensing, tz.thermostat_control_sequence_of_operation, tz.thermostat_system_mode,
  1438. tz.thermostat_weekly_schedule, tz.thermostat_clear_weekly_schedule, tz.thermostat_weekly_schedule_rsp,
  1439. tz.thermostat_relay_status_log, tz.thermostat_relay_status_log_rsp,
  1440. ],
  1441. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  1442. const device = shepherd.find(ieeeAddr, 3);
  1443. const actions = [
  1444. // from https://github.com/ckpt-martin/Hubitat/blob/master/eCozy/eCozy-ZigBee-Thermostat-Driver.groovy
  1445. (cb) => device.bind('genBasic', coordinator, cb),
  1446. (cb) => device.bind('genPowerCfg', coordinator, cb),
  1447. (cb) => device.bind('genIdentify', coordinator, cb),
  1448. (cb) => device.bind('genTime', coordinator, cb),
  1449. (cb) => device.bind('genPollCtrl', coordinator, cb),
  1450. (cb) => device.bind('hvacThermostat', coordinator, cb),
  1451. (cb) => device.bind('hvacUserInterfaceCfg', coordinator, cb),
  1452. (cb) => device.report('hvacThermostat', 'localTemp', 5, 30, 0, cb),
  1453. ];
  1454.  
  1455. execute(device, actions, callback);
  1456. },
  1457. },
  1458.  
  1459. // OSRAM
  1460. {
  1461. zigbeeModel: ['Outdoor Lantern W RGBW OSRAM'],
  1462. model: '4058075816718',
  1463. vendor: 'OSRAM',
  1464. description: 'SMART+ outdoor wall lantern RGBW',
  1465. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1466. },
  1467. {
  1468. zigbeeModel: ['Classic A60 RGBW'],
  1469. model: 'AA69697',
  1470. vendor: 'OSRAM',
  1471. description: 'Classic A60 RGBW',
  1472. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1473. },
  1474. {
  1475. zigbeeModel: ['CLA60 RGBW OSRAM'],
  1476. model: 'AC03645',
  1477. vendor: 'OSRAM',
  1478. description: 'LIGHTIFY LED CLA60 E27 RGBW',
  1479. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1480. },
  1481. {
  1482. zigbeeModel: ['CLA60 TW OSRAM'],
  1483. model: 'AC03642',
  1484. vendor: 'OSRAM',
  1485. description: 'SMART+ CLASSIC A 60 TW',
  1486. extend: generic.light_onoff_brightness_colortemp,
  1487. },
  1488. {
  1489. zigbeeModel: ['PAR16 DIM Z3'],
  1490. model: 'AC08560',
  1491. vendor: 'OSRAM',
  1492. description: 'SMART+ LED PAR16 GU10',
  1493. extend: generic.light_onoff_brightness,
  1494. },
  1495. {
  1496. zigbeeModel: ['CLA60 RGBW Z3'],
  1497. model: 'AC03647',
  1498. vendor: 'OSRAM',
  1499. description: 'SMART+ LED CLASSIC E27 RGBW',
  1500. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1501. },
  1502. {
  1503. // AA70155 is model number of both bulbs.
  1504. zigbeeModel: ['LIGHTIFY A19 Tunable White', 'Classic A60 TW'],
  1505. model: 'AA70155',
  1506. vendor: 'OSRAM',
  1507. description: 'LIGHTIFY LED A19 tunable white / Classic A60 TW',
  1508. supports: generic.light_onoff_brightness_colortemp.supports,
  1509. toZigbee: generic.light_onoff_brightness_colortemp.toZigbee.concat([tz.osram_cmds]),
  1510. fromZigbee: generic.light_onoff_brightness_colortemp.fromZigbee,
  1511. },
  1512. {
  1513. zigbeeModel: ['PAR16 50 TW'],
  1514. model: 'AA68199',
  1515. vendor: 'OSRAM',
  1516. description: 'LIGHTIFY LED PAR16 50 GU10 tunable white',
  1517. supports: generic.light_onoff_brightness_colortemp.supports,
  1518. toZigbee: generic.light_onoff_brightness_colortemp.toZigbee.concat([tz.osram_cmds]),
  1519. fromZigbee: generic.light_onoff_brightness_colortemp.fromZigbee,
  1520. },
  1521. {
  1522. zigbeeModel: ['Classic B40 TW - LIGHTIFY'],
  1523. model: 'AB32840',
  1524. vendor: 'OSRAM',
  1525. description: 'LIGHTIFY LED Classic B40 tunable white',
  1526. extend: generic.light_onoff_brightness_colortemp,
  1527. },
  1528. {
  1529. zigbeeModel: ['Ceiling TW OSRAM'],
  1530. model: '4058075816794',
  1531. vendor: 'OSRAM',
  1532. description: 'Smart+ Ceiling TW',
  1533. extend: generic.light_onoff_brightness_colortemp,
  1534. },
  1535. {
  1536. zigbeeModel: ['Classic A60 W clear - LIGHTIFY'],
  1537. model: 'AC03641',
  1538. vendor: 'OSRAM',
  1539. description: 'LIGHTIFY LED Classic A60 clear',
  1540. extend: generic.light_onoff_brightness,
  1541. },
  1542. {
  1543. zigbeeModel: ['Surface Light W �C LIGHTIFY'],
  1544. model: '4052899926158',
  1545. vendor: 'OSRAM',
  1546. description: 'LIGHTIFY Surface Light TW',
  1547. extend: generic.light_onoff_brightness,
  1548. },
  1549. {
  1550. zigbeeModel: ['Surface Light TW'],
  1551. model: 'AB401130055',
  1552. vendor: 'OSRAM',
  1553. description: 'LIGHTIFY Surface Light LED Tunable White',
  1554. extend: generic.light_onoff_brightness_colortemp,
  1555. },
  1556. {
  1557. zigbeeModel: ['Plug 01'],
  1558. model: 'AB3257001NJ',
  1559. description: 'Smart+ plug',
  1560. supports: 'on/off',
  1561. vendor: 'OSRAM',
  1562. fromZigbee: [fz.ignore_onoff_change, fz.state],
  1563. toZigbee: [tz.on_off],
  1564. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  1565. const device = shepherd.find(ieeeAddr, 3);
  1566. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  1567. const actions = [
  1568. (cb) => device.bind('genOnOff', coordinator, cb),
  1569. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  1570. ];
  1571.  
  1572. execute(device, actions, callback);
  1573. },
  1574. },
  1575. {
  1576. zigbeeModel: ['Plug Z3'],
  1577. model: 'AC10691',
  1578. description: 'Smart+ plug',
  1579. supports: 'on/off',
  1580. vendor: 'OSRAM',
  1581. fromZigbee: [fz.ignore_onoff_change, fz.state],
  1582. toZigbee: [tz.on_off],
  1583. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  1584. const device = shepherd.find(ieeeAddr, 3);
  1585. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  1586. const actions = [
  1587. (cb) => device.bind('genOnOff', coordinator, cb),
  1588. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  1589. ];
  1590.  
  1591. execute(device, actions, callback);
  1592. },
  1593. },
  1594. {
  1595. zigbeeModel: ['Flex RGBW', 'LIGHTIFY Indoor Flex RGBW', 'LIGHTIFY Flex RGBW'],
  1596. model: '4052899926110',
  1597. vendor: 'OSRAM',
  1598. description: 'Flex RGBW',
  1599. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1600. },
  1601. {
  1602. zigbeeModel: ['LIGHTIFY Outdoor Flex RGBW', 'LIGHTIFY FLEX OUTDOOR RGBW'],
  1603. model: '4058075036185',
  1604. vendor: 'OSRAM',
  1605. description: 'Outdoor Flex RGBW',
  1606. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1607. },
  1608. {
  1609. zigbeeModel: ['Gardenpole RGBW-Lightify'],
  1610. model: '4058075036147',
  1611. vendor: 'OSRAM',
  1612. description: 'Smart+ gardenpole RGBW',
  1613. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1614. },
  1615. {
  1616. zigbeeModel: ['Gardenpole Mini RGBW OSRAM'],
  1617. model: 'AC0363900NJ',
  1618. vendor: 'OSRAM',
  1619. description: 'Smart+ mini gardenpole RGBW',
  1620. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1621. },
  1622. {
  1623. zigbeeModel: ['PAR 16 50 RGBW - LIGHTIFY'],
  1624. model: 'AB35996',
  1625. vendor: 'OSRAM',
  1626. description: 'Smart+ Spot GU10 Multicolor',
  1627. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1628. },
  1629. {
  1630. zigbeeModel: ['PAR16 RGBW Z3'],
  1631. model: 'AC08559',
  1632. vendor: 'OSRAM',
  1633. description: 'SMART+ Spot GU10 Multicolor',
  1634. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1635. },
  1636. {
  1637. zigbeeModel: ['B40 DIM Z3'],
  1638. model: 'AC08562',
  1639. vendor: 'OSRAM',
  1640. description: 'SMART+ Candle E14 Dimmable White',
  1641. extend: generic.light_onoff_brightness,
  1642. },
  1643. {
  1644. zigbeeModel: ['Motion Sensor-A'],
  1645. model: 'AC01353010G',
  1646. vendor: 'OSRAM',
  1647. description: 'SMART+ Motion Sensor',
  1648. supports: 'occupancy and temperature',
  1649. fromZigbee: [
  1650. fz.generic_temperature, fz.ignore_temperature_change, fz.ias_zone_motion_dev_change,
  1651. fz.ias_zone_motion_status_change,
  1652. ],
  1653. toZigbee: [],
  1654. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  1655. const device = shepherd.find(ieeeAddr, 1);
  1656. const actions = [
  1657. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  1658. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  1659. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  1660. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 30, 600, 1, cb),
  1661. (cb) => device.bind('genPowerCfg', coordinator, cb),
  1662. (cb) => device.report('genPowerCfg', 'batteryPercentageRemaining', 0, 1000, 0, cb),
  1663. ];
  1664. execute(device, actions, callback);
  1665. },
  1666. },
  1667. {
  1668. zigbeeModel: ['MR16 TW OSRAM'],
  1669. model: 'AC03648',
  1670. vendor: 'OSRAM',
  1671. description: 'SMART+ spot GU5.3 tunable white',
  1672. extend: generic.light_onoff_brightness_colortemp,
  1673. },
  1674. {
  1675. zigbeeModel: ['Lightify Switch Mini', 'Lightify Switch Mini\u0000'],
  1676. model: 'AC0251100NJ',
  1677. vendor: 'OSRAM',
  1678. description: 'Smart+ switch mini',
  1679. supports: 'circle, up, down and hold/release',
  1680. fromZigbee: [
  1681. fz.AC0251100NJ_cmdOn, fz.AC0251100NJ_cmdMoveWithOnOff, fz.AC0251100NJ_cmdStop,
  1682. fz.AC0251100NJ_cmdMoveToColorTemp, fz.AC0251100NJ_cmdMoveHue, fz.AC0251100NJ_cmdMoveToSaturation,
  1683. fz.AC0251100NJ_cmdOff, fz.AC0251100NJ_cmdMove, fz.generic_batteryvoltage_3000_2500,
  1684. fz.AC0251100NJ_cmdMoveToLevelWithOnOff,
  1685. ],
  1686. toZigbee: [],
  1687. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  1688. const ep1 = shepherd.find(ieeeAddr, 1);
  1689. const ep2 = shepherd.find(ieeeAddr, 2);
  1690. const ep3 = shepherd.find(ieeeAddr, 3);
  1691.  
  1692. const actions = [
  1693. (cb) => ep1.bind('genOnOff', coordinator, cb),
  1694. (cb) => ep1.bind('genLevelCtrl', coordinator, cb),
  1695. (cb) => ep2.bind('genOnOff', coordinator, cb),
  1696. (cb) => ep2.bind('genLevelCtrl', coordinator, cb),
  1697. (cb) => ep3.bind('genLevelCtrl', coordinator, cb),
  1698. (cb) => ep3.bind('lightingColorCtrl', coordinator, cb),
  1699. (cb) => ep1.bind('genPowerCfg', coordinator, cb),
  1700. (cb) => ep1.report('genPowerCfg', 'batteryVoltage', 900, 3600, 0, cb),
  1701. ];
  1702. execute(ep1, actions, callback);
  1703. },
  1704.  
  1705. },
  1706. {
  1707. zigbeeModel: ['SubstiTube'],
  1708. model: 'ST8AU-CON',
  1709. vendor: 'OSRAM',
  1710. description: 'OSRAM SubstiTUBE T8 Advanced UO Connected',
  1711. extend: generic.light_onoff_brightness,
  1712. },
  1713.  
  1714.  
  1715. // Hive
  1716. {
  1717. zigbeeModel: ['FWBulb01'],
  1718. model: 'HALIGHTDIMWWE27',
  1719. vendor: 'Hive',
  1720. description: 'Active smart bulb white LED (E27)',
  1721. extend: generic.light_onoff_brightness,
  1722. },
  1723. {
  1724. zigbeeModel: ['FWBulb02UK'],
  1725. model: 'HALIGHTDIMWWB22',
  1726. vendor: 'Hive',
  1727. description: 'Active smart bulb white LED (B22)',
  1728. extend: generic.light_onoff_brightness,
  1729. },
  1730. {
  1731. zigbeeModel: ['SLP2b', 'SLP2c'],
  1732. model: '1613V',
  1733. vendor: 'Hive',
  1734. description: 'Active plug',
  1735. supports: 'on/off, power measurement',
  1736. fromZigbee: [
  1737. fz.state, fz.ignore_onoff_change, fz.generic_power, fz.ignore_metering_change,
  1738. fz.generic_temperature, fz.ignore_temperature_change,
  1739. ],
  1740. toZigbee: [tz.on_off],
  1741. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  1742. const device = shepherd.find(ieeeAddr, 9);
  1743. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  1744. const actions = [
  1745. (cb) => device.bind('genOnOff', coordinator, cb),
  1746. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  1747. (cb) => device.report('seMetering', 'instantaneousDemand', 10, 60, 1, cb),
  1748. ];
  1749. execute(device, actions, callback);
  1750. },
  1751. },
  1752. {
  1753. zigbeeModel: ['TWBulb01US'],
  1754. model: 'HV-GSCXZB269',
  1755. vendor: 'Hive',
  1756. description: 'Active light cool to warm white (E26) ',
  1757. extend: generic.light_onoff_brightness_colortemp,
  1758. },
  1759. {
  1760. zigbeeModel: ['TWBulb01UK'],
  1761. model: 'HV-GSCXZB279_HV-GSCXZB229',
  1762. vendor: 'Hive',
  1763. description: 'Active light, warm to cool white (E27 & B22)',
  1764. extend: generic.light_onoff_brightness_colortemp,
  1765. },
  1766. {
  1767. zigbeeModel: ['TWGU10Bulb01UK'],
  1768. model: 'HV-GUCXZB5',
  1769. vendor: 'Hive',
  1770. description: 'Active light, warm to cool white (GU10)',
  1771. extend: generic.light_onoff_brightness_colortemp,
  1772. },
  1773.  
  1774. // Innr
  1775. {
  1776. zigbeeModel: ['RB 185 C'],
  1777. model: 'RB 185 C',
  1778. vendor: 'Innr',
  1779. description: 'E27 bulb RGBW',
  1780. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1781. },
  1782. {
  1783. zigbeeModel: ['BY 185 C'],
  1784. model: 'BY 185 C',
  1785. vendor: 'Innr',
  1786. description: 'B22 bulb RGBW',
  1787. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1788. },
  1789. {
  1790. zigbeeModel: ['RB 250 C'],
  1791. model: 'RB 250 C',
  1792. vendor: 'Innr',
  1793. description: 'E14 bulb RGBW',
  1794. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1795. },
  1796. {
  1797. zigbeeModel: ['RB 265'],
  1798. model: 'RB 265',
  1799. vendor: 'Innr',
  1800. description: 'E27 bulb',
  1801. extend: generic.light_onoff_brightness,
  1802. },
  1803. {
  1804. zigbeeModel: ['RF 265'],
  1805. model: 'RF 265',
  1806. vendor: 'Innr',
  1807. description: 'E27 bulb filament clear',
  1808. extend: generic.light_onoff_brightness,
  1809. },
  1810. {
  1811. zigbeeModel: ['RB 278 T'],
  1812. model: 'RB 278 T',
  1813. vendor: 'Innr',
  1814. description: 'E27 bulb',
  1815. extend: generic.light_onoff_brightness,
  1816. },
  1817. {
  1818. zigbeeModel: ['RB 285 C'],
  1819. model: 'RB 285 C',
  1820. vendor: 'Innr',
  1821. description: 'E27 bulb RGBW',
  1822. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1823. },
  1824. {
  1825. zigbeeModel: ['BY 285 C'],
  1826. model: 'BY 285 C',
  1827. vendor: 'Innr',
  1828. description: 'B22 bulb RGBW',
  1829. extend: generic.light_onoff_brightness_colortemp_colorxy,
  1830. },
  1831. {
  1832. zigbeeModel: ['RB 165'],
  1833. model: 'RB 165',
  1834. vendor: 'Innr',
  1835. description: 'E27 bulb',
  1836. extend: generic.light_onoff_brightness,
  1837. },
  1838. {
  1839. zigbeeModel: ['RB 175 W'],
  1840. model: 'RB 175 W',
  1841. vendor: 'Innr',
  1842. description: 'E27 bulb warm dimming',
  1843. extend: generic.light_onoff_brightness,
  1844. },
  1845. {
  1846. zigbeeModel: ['RB 178 T'],
  1847. model: 'RB 178 T',
  1848. vendor: 'Innr',
  1849. description: 'Smart bulb tunable white E27',
  1850. extend: generic.light_onoff_brightness_colortemp,
  1851. },
  1852. {
  1853. zigbeeModel: ['RS 122'],
  1854. model: 'RS 122',
  1855. vendor: 'Innr',
  1856. description: 'GU10 spot',
  1857. extend: generic.light_onoff_brightness,
  1858. },
  1859. {
  1860. zigbeeModel: ['RS 125'],
  1861. model: 'RS 125',
  1862. vendor: 'Innr',
  1863. description: 'GU10 spot',
  1864. extend: generic.light_onoff_brightness,
  1865. },
  1866. {
  1867. zigbeeModel: ['RS 225'],
  1868. model: 'RS 225',
  1869. vendor: 'Innr',
  1870. description: 'GU10 Spot',
  1871. extend: generic.light_onoff_brightness,
  1872. },
  1873. {
  1874. zigbeeModel: ['RS 128 T'],
  1875. model: 'RS 128 T',
  1876. vendor: 'Innr',
  1877. description: 'GU10 spot 350 lm, dimmable, white spectrum',
  1878. extend: generic.light_onoff_brightness_colortemp,
  1879. },
  1880. {
  1881. zigbeeModel: ['RS 228 T'],
  1882. model: 'RS 228 T',
  1883. vendor: 'Innr',
  1884. description: 'GU10 spot 350 lm, dimmable, white spectrum',
  1885. extend: generic.light_onoff_brightness_colortemp,
  1886. },
  1887. {
  1888. zigbeeModel: ['RB 145'],
  1889. model: 'RB 145',
  1890. vendor: 'Innr',
  1891. description: 'E14 candle',
  1892. extend: generic.light_onoff_brightness,
  1893. },
  1894. {
  1895. zigbeeModel: ['RB 245'],
  1896. model: 'RB 245',
  1897. vendor: 'Innr',
  1898. description: 'E14 candle',
  1899. extend: generic.light_onoff_brightness,
  1900. },
  1901. {
  1902. zigbeeModel: ['RB 248 T'],
  1903. model: 'RB 248 T',
  1904. vendor: 'Innr',
  1905. description: 'E14 candle with white spectrum',
  1906. extend: generic.light_onoff_brightness_colortemp,
  1907. },
  1908. {
  1909. zigbeeModel: ['RF 263'],
  1910. model: 'RF 263',
  1911. vendor: 'Innr',
  1912. description: 'E27 filament bulb dimmable',
  1913. extend: generic.light_onoff_brightness,
  1914. },
  1915. {
  1916. zigbeeModel: ['BY 165', 'BY 265'],
  1917. model: 'BY 165',
  1918. vendor: 'Innr',
  1919. description: 'B22 bulb dimmable',
  1920. extend: generic.light_onoff_brightness,
  1921. },
  1922. {
  1923. zigbeeModel: ['PL 110'],
  1924. model: 'PL 110',
  1925. vendor: 'Innr',
  1926. description: 'Puck Light',
  1927. extend: generic.light_onoff_brightness,
  1928. },
  1929. {
  1930. zigbeeModel: ['ST 110'],
  1931. model: 'ST 110',
  1932. vendor: 'Innr',
  1933. description: 'Strip Light',
  1934. extend: generic.light_onoff_brightness,
  1935. },
  1936. {
  1937. zigbeeModel: ['UC 110'],
  1938. model: 'UC 110',
  1939. vendor: 'Innr',
  1940. description: 'Under cabinet light',
  1941. extend: generic.light_onoff_brightness,
  1942. },
  1943. {
  1944. zigbeeModel: ['DL 110 N'],
  1945. model: 'DL 110 N',
  1946. vendor: 'Innr',
  1947. description: 'Spot narrow',
  1948. extend: generic.light_onoff_brightness,
  1949. },
  1950. {
  1951. zigbeeModel: ['DL 110 W'],
  1952. model: 'DL 110 W',
  1953. vendor: 'Innr',
  1954. description: 'Spot wide',
  1955. extend: generic.light_onoff_brightness,
  1956. },
  1957. {
  1958. zigbeeModel: ['SL 110 N'],
  1959. model: 'SL 110 N',
  1960. vendor: 'Innr',
  1961. description: 'Spot Flex narrow',
  1962. extend: generic.light_onoff_brightness,
  1963. },
  1964. {
  1965. zigbeeModel: ['SL 110 M'],
  1966. model: 'SL 110 M',
  1967. vendor: 'Innr',
  1968. description: 'Spot Flex medium',
  1969. extend: generic.light_onoff_brightness,
  1970. },
  1971. {
  1972. zigbeeModel: ['SL 110 W'],
  1973. model: 'SL 110 W',
  1974. vendor: 'Innr',
  1975. description: 'Spot Flex wide',
  1976. extend: generic.light_onoff_brightness,
  1977. },
  1978. {
  1979. zigbeeModel: ['SP 120'],
  1980. model: 'SP 120',
  1981. vendor: 'Innr',
  1982. description: 'Smart plug',
  1983. supports: 'on/off, power measurement',
  1984. fromZigbee: [fz.ignore_electrical_change, fz.SP120_power, fz.state, fz.ignore_onoff_change],
  1985. toZigbee: [tz.on_off],
  1986. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  1987. const device = shepherd.find(ieeeAddr, 1);
  1988. const onOff = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  1989. const activePower = {
  1990. direction: 0, attrId: 1291, dataType: 41, minRepIntval: 1, maxRepIntval: 300, repChange: 1,
  1991. };
  1992.  
  1993. const rmsCurrent = {
  1994. direction: 0, attrId: 1288, dataType: 33, minRepIntval: 1, maxRepIntval: 300, repChange: 100,
  1995. };
  1996.  
  1997. const rmsVoltage = {
  1998. direction: 0, attrId: 1285, dataType: 33, minRepIntval: 1, maxRepIntval: 300, repChange: 1,
  1999. };
  2000.  
  2001. const electricalCfg = [rmsCurrent, rmsVoltage, activePower];
  2002. const actions = [
  2003. (cb) => device.foundation('genOnOff', 'configReport', [onOff], foundationCfg, cb),
  2004. (cb) => device.bind('genOnOff', coordinator, cb),
  2005. (cb) => device.foundation('haElectricalMeasurement', 'configReport', electricalCfg, foundationCfg, cb),
  2006. (cb) => device.bind('haElectricalMeasurement', coordinator, cb),
  2007. ];
  2008.  
  2009. execute(device, actions, callback);
  2010. },
  2011. },
  2012.  
  2013. // Sylvania
  2014. {
  2015. zigbeeModel: ['LIGHTIFY RT Tunable White'],
  2016. model: '73742',
  2017. vendor: 'Sylvania',
  2018. description: 'LIGHTIFY LED adjustable white RT 5/6',
  2019. extend: generic.light_onoff_brightness_colortemp,
  2020. },
  2021. {
  2022. zigbeeModel: ['RT RGBW'],
  2023. model: '73741',
  2024. vendor: 'Sylvania',
  2025. description: 'LIGHTIFY LED adjustable color RT 5/6',
  2026. extend: generic.light_onoff_brightness_colortemp_colorxy,
  2027. },
  2028. {
  2029. zigbeeModel: ['LIGHTIFY BR Tunable White'],
  2030. model: '73740',
  2031. vendor: 'Sylvania',
  2032. description: 'LIGHTIFY LED adjustable white BR30',
  2033. extend: generic.light_onoff_brightness_colortemp,
  2034. },
  2035. {
  2036. zigbeeModel: ['LIGHTIFY BR RGBW', 'BR30 RGBW'],
  2037. model: '73739',
  2038. vendor: 'Sylvania',
  2039. description: 'LIGHTIFY LED RGBW BR30',
  2040. supports: generic.light_onoff_brightness_colortemp_colorxy.supports,
  2041. toZigbee: generic.light_onoff_brightness_colortemp_colorxy.toZigbee.concat([tz.osram_cmds]),
  2042. fromZigbee: generic.light_onoff_brightness_colortemp_colorxy.fromZigbee.concat([
  2043. fz.ignore_genIdentify_change,
  2044. fz.ignore_diagnostic_change,
  2045. fz.ignore_genScenes_change,
  2046. ]),
  2047. },
  2048. {
  2049. zigbeeModel: ['LIGHTIFY A19 RGBW', 'A19 RGBW'],
  2050. model: '73693',
  2051. vendor: 'Sylvania',
  2052. description: 'LIGHTIFY LED RGBW A19',
  2053. supports: generic.light_onoff_brightness_colortemp_colorxy.supports,
  2054. toZigbee: generic.light_onoff_brightness_colortemp_colorxy.toZigbee.concat([tz.osram_cmds]),
  2055. fromZigbee: generic.light_onoff_brightness_colortemp_colorxy.fromZigbee,
  2056. },
  2057. {
  2058. zigbeeModel: ['LIGHTIFY A19 ON/OFF/DIM', 'LIGHTIFY A19 ON/OFF/DIM 10 Year'],
  2059. model: '74283',
  2060. vendor: 'Sylvania',
  2061. description: 'LIGHTIFY LED soft white dimmable A19',
  2062. extend: generic.light_onoff_brightness,
  2063. },
  2064. {
  2065. zigbeeModel: ['A19 W 10 year'],
  2066. model: '74696',
  2067. vendor: 'Sylvania',
  2068. description: 'LIGHTIFY LED soft white dimmable A19',
  2069. supports: generic.light_onoff_brightness.supports,
  2070. toZigbee: generic.light_onoff_brightness.toZigbee.concat([tz.osram_cmds]),
  2071. fromZigbee: generic.light_onoff_brightness.fromZigbee.concat([
  2072. fz.ignore_genIdentify_change,
  2073. fz.ignore_diagnostic_change,
  2074. fz.ignore_genScenes_change,
  2075. fz.ignore_light_color_colortemp_report,
  2076. ]),
  2077. },
  2078. {
  2079. zigbeeModel: ['PLUG'],
  2080. model: '72922-A',
  2081. vendor: 'Sylvania',
  2082. description: 'SMART+ Smart Plug',
  2083. supports: 'on/off',
  2084. fromZigbee: [fz.ignore_onoff_change, fz.state],
  2085. toZigbee: [tz.on_off],
  2086. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2087. const device = shepherd.find(ieeeAddr, 1);
  2088. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  2089. const actions = [
  2090. (cb) => device.bind('genOnOff', coordinator, cb),
  2091. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  2092. ];
  2093.  
  2094. execute(device, actions, callback);
  2095. },
  2096. },
  2097. {
  2098. zigbeeModel: ['A19 TW 10 year'],
  2099. model: '71831',
  2100. vendor: 'Sylvania',
  2101. description: 'Smart Home adjustable white A19 LED bulb',
  2102. extend: generic.light_onoff_brightness_colortemp,
  2103. },
  2104. {
  2105. zigbeeModel: ['MR16 TW'],
  2106. model: '74282',
  2107. vendor: 'Sylvania',
  2108. description: 'Smart Home adjustable white MR16 LED bulb',
  2109. extend: generic.light_onoff_brightness_colortemp,
  2110. },
  2111. {
  2112. zigbeeModel: ['LIGHTIFY Gardenspot RGB'],
  2113. model: 'LTFY004',
  2114. vendor: 'Sylvania',
  2115. description: 'LIGHTIFY LED gardenspot mini RGB',
  2116. extend: generic.light_onoff_brightness_colorxy,
  2117. },
  2118. {
  2119. zigbeeModel: ['PAR38 W 10 year'],
  2120. model: '74580',
  2121. vendor: 'Sylvania',
  2122. description: 'Smart Home soft white PAR38 outdoor bulb',
  2123. extend: generic.light_onoff_brightness,
  2124. },
  2125.  
  2126. // GE
  2127. {
  2128. zigbeeModel: ['SoftWhite'],
  2129. model: 'PSB19-SW27',
  2130. vendor: 'GE',
  2131. description: 'Link smart LED light bulb, A19 soft white (2700K)',
  2132. extend: generic.light_onoff_brightness,
  2133. },
  2134. {
  2135. zigbeeModel: ['ZLL Light'],
  2136. model: '22670',
  2137. vendor: 'GE',
  2138. description: 'Link smart LED light bulb, A19/BR30 soft white (2700K)',
  2139. extend: generic.light_onoff_brightness,
  2140. },
  2141. {
  2142. zigbeeModel: ['45852'],
  2143. model: '45852GE',
  2144. vendor: 'GE',
  2145. description: 'ZigBee plug-in smart dimmer',
  2146. supports: 'on/off, brightness',
  2147. fromZigbee: [fz.brightness, fz.ignore_onoff_change, fz.state],
  2148. toZigbee: [tz.light_onoff_brightness, tz.ignore_transition],
  2149. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2150. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  2151. const device = shepherd.find(ieeeAddr, 1);
  2152. const actions = [
  2153. (cb) => device.bind('genOnOff', coordinator, cb),
  2154. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  2155. ];
  2156.  
  2157. execute(device, actions, callback);
  2158. },
  2159. },
  2160. {
  2161. zigbeeModel: ['45853'],
  2162. model: '45853GE',
  2163. vendor: 'GE',
  2164. description: 'Plug-in smart switch',
  2165. supports: 'on/off',
  2166. fromZigbee: [fz.state, fz.ignore_onoff_change, fz.generic_power, fz.ignore_metering_change],
  2167. toZigbee: [tz.on_off, tz.ignore_transition],
  2168. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2169. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  2170. const device = shepherd.find(ieeeAddr, 1);
  2171. const actions = [
  2172. (cb) => device.bind('genOnOff', coordinator, cb),
  2173. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  2174. (cb) => device.report('seMetering', 'instantaneousDemand', 10, 60, 1, cb),
  2175. ];
  2176.  
  2177. execute(device, actions, callback);
  2178. },
  2179. },
  2180. {
  2181. zigbeeModel: ['45856'],
  2182. model: '45856GE',
  2183. vendor: 'GE',
  2184. description: 'In-wall smart switch',
  2185. supports: 'on/off',
  2186. fromZigbee: [fz.ignore_onoff_change, fz.state],
  2187. toZigbee: [tz.on_off, tz.ignore_transition],
  2188. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2189. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  2190. const device = shepherd.find(ieeeAddr, 1);
  2191. const actions = [
  2192. (cb) => device.bind('genOnOff', coordinator, cb),
  2193. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  2194. ];
  2195.  
  2196. execute(device, actions, callback);
  2197. },
  2198. },
  2199. {
  2200. zigbeeModel: ['45857'],
  2201. model: '45857GE',
  2202. vendor: 'GE',
  2203. description: 'ZigBee in-wall smart dimmer',
  2204. supports: 'on/off, brightness',
  2205. fromZigbee: [fz.brightness, fz.ignore_onoff_change, fz.state],
  2206. toZigbee: [tz.light_onoff_brightness, tz.ignore_transition],
  2207. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2208. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  2209. const device = shepherd.find(ieeeAddr, 1);
  2210. const actions = [
  2211. (cb) => device.bind('genOnOff', coordinator, cb),
  2212. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  2213. ];
  2214.  
  2215. execute(device, actions, callback);
  2216. },
  2217. },
  2218.  
  2219. // Sengled
  2220. {
  2221. zigbeeModel: ['E11-G13'],
  2222. model: 'E11-G13',
  2223. vendor: 'Sengled',
  2224. description: 'Element Classic (A19)',
  2225. supports: generic.light_onoff_brightness.supports,
  2226. fromZigbee: generic.light_onoff_brightness.fromZigbee.concat([
  2227. fz.ignore_metering_change,
  2228. fz.ignore_diagnostic_change,
  2229. ]),
  2230. toZigbee: generic.light_onoff_brightness.toZigbee,
  2231. },
  2232. {
  2233. zigbeeModel: ['E11-G23', 'E11-G33'],
  2234. model: 'E11-G23/E11-G33',
  2235. vendor: 'Sengled',
  2236. description: 'Element Classic (A60)',
  2237. supports: generic.light_onoff_brightness.supports,
  2238. fromZigbee: generic.light_onoff_brightness.fromZigbee.concat([
  2239. fz.ignore_metering_change,
  2240. fz.ignore_diagnostic_change,
  2241. ]),
  2242. toZigbee: generic.light_onoff_brightness.toZigbee,
  2243. },
  2244. {
  2245. zigbeeModel: ['Z01-CIA19NAE26'],
  2246. model: 'Z01-CIA19NAE26',
  2247. vendor: 'Sengled',
  2248. description: 'Element Touch (A19)',
  2249. supports: generic.light_onoff_brightness.supports,
  2250. fromZigbee: generic.light_onoff_brightness.fromZigbee.concat([
  2251. fz.ignore_metering_change,
  2252. fz.ignore_diagnostic_change,
  2253. ]),
  2254. toZigbee: generic.light_onoff_brightness.toZigbee,
  2255. },
  2256. {
  2257. zigbeeModel: ['Z01-A19NAE26'],
  2258. model: 'Z01-A19NAE26',
  2259. vendor: 'Sengled',
  2260. description: 'Element Plus (A19)',
  2261. supports: generic.light_onoff_brightness_colortemp.supports,
  2262. fromZigbee: generic.light_onoff_brightness_colortemp.fromZigbee.concat([
  2263. fz.ignore_metering_change,
  2264. fz.ignore_diagnostic_change,
  2265. ]),
  2266. toZigbee: generic.light_onoff_brightness_colortemp.toZigbee,
  2267. },
  2268. {
  2269. zigbeeModel: ['Z01-A60EAE27'],
  2270. model: 'Z01-A60EAE27',
  2271. vendor: 'Sengled',
  2272. description: 'Element Plus (A60)',
  2273. supports: generic.light_onoff_brightness_colortemp.supports,
  2274. fromZigbee: generic.light_onoff_brightness_colortemp.fromZigbee.concat([
  2275. fz.ignore_metering_change,
  2276. fz.ignore_diagnostic_change,
  2277. ]),
  2278. toZigbee: generic.light_onoff_brightness_colortemp.toZigbee,
  2279. },
  2280. {
  2281. zigbeeModel: ['E11-N1EA'],
  2282. model: 'E11-N1EA',
  2283. vendor: 'Sengled',
  2284. description: 'Element Plus Color (A19)',
  2285. supports: generic.light_onoff_brightness_colortemp_colorxy.supports,
  2286. fromZigbee: generic.light_onoff_brightness_colortemp_colorxy.fromZigbee.concat([
  2287. fz.ignore_metering_change,
  2288. fz.ignore_diagnostic_change,
  2289. ]),
  2290. toZigbee: generic.light_onoff_brightness_colortemp_colorxy.toZigbee,
  2291. },
  2292. {
  2293. zigbeeModel: ['E12-N14'],
  2294. model: 'E12-N14',
  2295. vendor: 'Sengled',
  2296. description: 'Element Classic (BR30)',
  2297. supports: generic.light_onoff_brightness.supports,
  2298. fromZigbee: generic.light_onoff_brightness.fromZigbee.concat([
  2299. fz.ignore_metering_change,
  2300. fz.ignore_diagnostic_change,
  2301. ]),
  2302. toZigbee: generic.light_onoff_brightness.toZigbee,
  2303. },
  2304. {
  2305. zigbeeModel: ['E1A-AC2'],
  2306. model: 'E1ACA4ABE38A',
  2307. vendor: 'Sengled',
  2308. description: 'Element downlight smart LED bulb',
  2309. extend: generic.light_onoff_brightness,
  2310. },
  2311.  
  2312. // Swann
  2313. {
  2314. zigbeeModel: ['SWO-KEF1PA'],
  2315. model: 'SWO-KEF1PA',
  2316. vendor: 'Swann',
  2317. description: 'Key fob remote',
  2318. supports: 'panic, home, away, sleep',
  2319. fromZigbee: [fz.KEF1PA_arm, fz.KEF1PA_panic],
  2320. toZigbee: [tz.factory_reset],
  2321. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2322. const device = shepherd.find(ieeeAddr, 1);
  2323. const actions = [
  2324. (cb) => device.bind('ssIasZone', coordinator, cb),
  2325. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  2326. ];
  2327.  
  2328. execute(device, actions, callback, 250);
  2329. },
  2330. },
  2331. {
  2332. zigbeeModel: ['SWO-WDS1PA'],
  2333. model: 'SWO-WDS1PA',
  2334. vendor: 'Swann',
  2335. description: 'Window/door sensor',
  2336. supports: 'contact',
  2337. fromZigbee: [fz.ias_contact_dev_change, fz.ias_contact_status_change],
  2338. toZigbee: [],
  2339. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2340. const device = shepherd.find(ieeeAddr, 1);
  2341. const actions = [
  2342. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  2343. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  2344. ];
  2345.  
  2346. execute(device, actions, callback, 1000);
  2347. },
  2348. },
  2349.  
  2350. // JIAWEN
  2351. {
  2352. zigbeeModel: ['FB56-ZCW08KU1.1', 'FB56-ZCW08KU1.0'],
  2353. model: 'K2RGBW01',
  2354. vendor: 'JIAWEN',
  2355. description: 'Wireless Bulb E27 9W RGBW',
  2356. extend: generic.light_onoff_brightness_colortemp_colorxy,
  2357. },
  2358.  
  2359. // Netvox
  2360. {
  2361. zigbeeModel: ['Z809AE3R'],
  2362. model: 'Z809A',
  2363. vendor: 'Netvox',
  2364. description: 'Power socket with power consumption monitoring',
  2365. supports: 'on/off, power measurement',
  2366. fromZigbee: [fz.state, fz.ignore_onoff_change, fz.ignore_electrical_change, fz.Z809A_power],
  2367. toZigbee: [tz.on_off],
  2368. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2369. const device = shepherd.find(ieeeAddr, 1);
  2370. const onOff = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  2371.  
  2372. const rmsVoltage = 1285;
  2373. const rmsCurrent = 1288;
  2374. const activePower = 1291;
  2375. const powerFactor = 1296;
  2376.  
  2377. const electricalCfg = [
  2378. {direction: 0, attrId: rmsVoltage, dataType: 33, minRepIntval: 10, maxRepIntval: 1000, repChange: 1},
  2379. {direction: 0, attrId: rmsCurrent, dataType: 33, minRepIntval: 10, maxRepIntval: 1000, repChange: 1},
  2380. {direction: 0, attrId: activePower, dataType: 41, minRepIntval: 10, maxRepIntval: 1000, repChange: 1},
  2381. {direction: 0, attrId: powerFactor, dataType: 40, minRepIntval: 10, maxRepIntval: 1000, repChange: 1},
  2382. ];
  2383.  
  2384. const actions = [
  2385. (cb) => device.bind('genOnOff', coordinator, cb),
  2386. (cb) => device.foundation('genOnOff', 'configReport', [onOff], foundationCfg, cb),
  2387. (cb) => device.bind('haElectricalMeasurement', coordinator, cb),
  2388. (cb) => device.foundation('haElectricalMeasurement', 'configReport', electricalCfg, foundationCfg, cb),
  2389. ];
  2390.  
  2391. execute(device, actions, callback);
  2392. },
  2393. },
  2394.  
  2395. // Nanoleaf
  2396. {
  2397. zigbeeModel: ['NL08-0800'],
  2398. model: 'NL08-0800',
  2399. vendor: 'Nanoleaf',
  2400. description: 'Smart Ivy Bulb E27',
  2401. extend: generic.light_onoff_brightness,
  2402. },
  2403.  
  2404. // Nue, 3A
  2405. {
  2406. zigbeeModel: ['FTB56+ZSN15HG1.0'],
  2407. model: 'HGZB-1S',
  2408. vendor: 'Nue / 3A',
  2409. description: 'Smart 1 key scene wall switch',
  2410. supports: 'on/off, click',
  2411. toZigbee: [tz.on_off],
  2412. fromZigbee: [fz.nue_click, fz.ignore_power_report, fz.ignore_power_change],
  2413. },
  2414. {
  2415. zigbeeModel: ['FTB56+ZSN16HG1.0'],
  2416. model: 'HGZB-02S',
  2417. vendor: 'Nue / 3A',
  2418. description: 'Smart 2 key scene wall switch',
  2419. supports: 'on/off, click',
  2420. toZigbee: [tz.on_off],
  2421. fromZigbee: [fz.nue_click, fz.ignore_power_report, fz.ignore_power_change],
  2422. },
  2423. {
  2424. zigbeeModel: ['FB56+ZSN08KJ2.3'],
  2425. model: 'HGZB-045',
  2426. vendor: 'Nue / 3A',
  2427. description: 'Smart 4 key scene wall switch',
  2428. supports: 'on/off, click',
  2429. toZigbee: [tz.on_off],
  2430. fromZigbee: [fz.nue_click, fz.ignore_power_report, fz.ignore_power_change],
  2431. },
  2432. {
  2433. zigbeeModel: ['LXN56-DC27LX1.1'],
  2434. model: 'LXZB-02A',
  2435. vendor: 'Nue / 3A',
  2436. description: 'Smart light controller',
  2437. extend: generic.light_onoff_brightness,
  2438. },
  2439. {
  2440. zigbeeModel: ['FNB56-ZSW03LX2.0', 'LXN-3S27LX1.0'],
  2441. model: 'HGZB-43',
  2442. vendor: 'Nue / 3A',
  2443. description: 'Smart light switch - 3 gang v2.0',
  2444. supports: 'on/off',
  2445. fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change],
  2446. toZigbee: [tz.on_off],
  2447. ep: (device) => {
  2448. return {'top': 1, 'center': 2, 'bottom': 3};
  2449. },
  2450. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2451. const ep1 = shepherd.find(ieeeAddr, 1);
  2452. execute(ep1, [(cb) => ep1.bind('genOnOff', coordinator, cb)], () => {
  2453. const ep2 = shepherd.find(ieeeAddr, 2);
  2454. execute(ep2, [(cb) => ep2.bind('genOnOff', coordinator, cb)], () => {
  2455. const ep3 = shepherd.find(ieeeAddr, 3);
  2456. execute(ep3, [(cb) => ep3.bind('genOnOff', coordinator, cb)], callback);
  2457. });
  2458. });
  2459. },
  2460. },
  2461. {
  2462. zigbeeModel: ['FB56+ZSW1IKJ1.7', 'FB56+ZSW1IKJ2.5'],
  2463. model: 'HGZB-043',
  2464. vendor: 'Nue / 3A',
  2465. description: 'Smart light switch - 3 gang',
  2466. supports: 'on/off',
  2467. fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change],
  2468. toZigbee: [tz.on_off],
  2469. ep: (device) => {
  2470. return {'top': 16, 'center': 17, 'bottom': 18};
  2471. },
  2472. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2473. const ep16 = shepherd.find(ieeeAddr, 16);
  2474. execute(ep16, [(cb) => ep16.bind('genOnOff', coordinator, cb)], () => {
  2475. const ep17 = shepherd.find(ieeeAddr, 17);
  2476. execute(ep17, [(cb) => ep17.bind('genOnOff', coordinator, cb)], () => {
  2477. const ep18 = shepherd.find(ieeeAddr, 18);
  2478. execute(ep18, [(cb) => ep18.bind('genOnOff', coordinator, cb)], callback);
  2479. });
  2480. });
  2481. },
  2482. },
  2483. {
  2484. zigbeeModel: ['FB56+ZSC05HG1.0', 'FNB56-ZBW01LX1.2'],
  2485. model: 'HGZB-04D',
  2486. vendor: 'Nue / 3A',
  2487. description: 'Smart dimmer wall switch',
  2488. supports: 'on/off, brightness',
  2489. toZigbee: [tz.on_off, tz.light_brightness],
  2490. fromZigbee: [fz.state, fz.ignore_onoff_change, fz.brightness_report, fz.ignore_light_brightness_change],
  2491. },
  2492. {
  2493. zigbeeModel: ['FB56+ZSW1HKJ1.7', 'FB56+ZSW1HKJ2.5'],
  2494. model: 'HGZB-042',
  2495. vendor: 'Nue / 3A',
  2496. description: 'Smart light switch - 2 gang',
  2497. supports: 'on/off',
  2498. fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change],
  2499. toZigbee: [tz.on_off],
  2500. ep: (device) => {
  2501. return {'top': 16, 'bottom': 17};
  2502. },
  2503. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2504. const ep16 = shepherd.find(ieeeAddr, 16);
  2505. execute(ep16, [(cb) => ep16.bind('genOnOff', coordinator, cb)], () => {
  2506. const ep17 = shepherd.find(ieeeAddr, 17);
  2507. execute(ep17, [(cb) => ep17.bind('genOnOff', coordinator, cb)], callback);
  2508. });
  2509. },
  2510. },
  2511. {
  2512. zigbeeModel: ['FNB56-ZSW02LX2.0', 'LXN-2S27LX1.0'],
  2513. model: 'HGZB-42',
  2514. vendor: 'Nue / 3A',
  2515. description: 'Smart light switch - 2 gang v2.0',
  2516. supports: 'on/off',
  2517. fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change],
  2518. toZigbee: [tz.on_off],
  2519. ep: (device) => {
  2520. return {'top': 11, 'bottom': 12};
  2521. },
  2522. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2523. const ep11 = shepherd.find(ieeeAddr, 11);
  2524. execute(ep11, [(cb) => ep11.bind('genOnOff', coordinator, cb)], () => {
  2525. const ep12 = shepherd.find(ieeeAddr, 12);
  2526. execute(ep12, [(cb) => ep12.bind('genOnOff', coordinator, cb)], callback);
  2527. });
  2528. },
  2529. },
  2530. {
  2531. zigbeeModel: ['FB56+ZSW1GKJ2.5', 'LXN-1S27LX1.0'],
  2532. model: 'HGZB-41',
  2533. vendor: 'Nue / 3A',
  2534. description: 'Smart one gang wall switch',
  2535. supports: 'on/off',
  2536. fromZigbee: [fz.state, fz.ignore_onoff_change],
  2537. toZigbee: [tz.on_off],
  2538. },
  2539. {
  2540. zigbeeModel: ['FNB56-SKT1DHG1.4'],
  2541. model: 'MG-AUWS01',
  2542. vendor: 'Nue / 3A',
  2543. description: 'Smart Double GPO',
  2544. supports: 'on/off',
  2545. fromZigbee: [fz.nue_power_state, fz.ignore_onoff_change],
  2546. toZigbee: [tz.on_off],
  2547. ep: (device) => {
  2548. return {'left': 12, 'right': 11};
  2549. },
  2550. },
  2551. {
  2552. zigbeeModel: ['FNB56-ZCW25FB1.9'],
  2553. model: 'XY12S-15',
  2554. vendor: 'Nue / 3A',
  2555. description: 'Smart light controller RGBW',
  2556. extend: generic.light_onoff_brightness_colortemp_colorxy,
  2557. },
  2558. {
  2559. zigbeeModel: ['FNB56-ZSW23HG1.1', 'LXN56-LC27LX1.1'],
  2560. model: 'HGZB-01A',
  2561. vendor: 'Nue / 3A',
  2562. description: 'Smart in-wall switch',
  2563. supports: 'on/off',
  2564. fromZigbee: [fz.state, fz.ignore_onoff_change],
  2565. toZigbee: [tz.on_off],
  2566. },
  2567. {
  2568. zigbeeModel: ['FNB56-ZSC01LX1.2', 'FB56+ZSW05HG1.2'],
  2569. model: 'HGZB-02A',
  2570. vendor: 'Nue / 3A',
  2571. description: 'Smart light controller',
  2572. extend: generic.light_onoff_brightness,
  2573. },
  2574. {
  2575. zigbeeModel: ['FNB56-ZSW01LX2.0'],
  2576. model: 'HGZB-42-UK / HGZB-41',
  2577. description: 'Smart switch 1 or 2 gang',
  2578. vendor: 'Nue / 3A',
  2579. supports: 'on/off',
  2580. fromZigbee: [fz.ignore_onoff_change, fz.state],
  2581. toZigbee: [tz.on_off],
  2582. },
  2583. {
  2584. zigbeeModel: ['FNB56-ZCW25FB1.6', 'FNB56-ZCW25FB2.1'],
  2585. model: 'HGZB-06A',
  2586. vendor: 'Nue / 3A',
  2587. description: 'Smart 7W E27 light bulb',
  2588. extend: generic.light_onoff_brightness_colortemp_colorxy,
  2589. },
  2590. {
  2591. zigbeeModel: ['LXN56-0S27LX1.1'],
  2592. model: 'HGZB-20-UK',
  2593. vendor: 'Nue / 3A',
  2594. description: 'Power plug',
  2595. supports: 'on/off',
  2596. fromZigbee: [fz.state_change],
  2597. toZigbee: [tz.on_off],
  2598. },
  2599.  
  2600. // Smart Home Pty
  2601. {
  2602. zigbeeModel: ['FB56-ZCW11HG1.2', 'FB56-ZCW11HG1.4'],
  2603. model: 'HGZB-07A',
  2604. vendor: 'Smart Home Pty',
  2605. description: 'RGBW Downlight',
  2606. extend: generic.light_onoff_brightness_colortemp_colorxy,
  2607. },
  2608. {
  2609. zigbeeModel: ['FNB56-SKT1EHG1.2', 'FNB56-SKT1JXN1.0'],
  2610. model: 'HGZB-20-DE',
  2611. vendor: 'Smart Home Pty',
  2612. description: 'Power plug',
  2613. supports: 'on/off',
  2614. fromZigbee: [fz.state_change],
  2615. toZigbee: [tz.on_off],
  2616. },
  2617.  
  2618. // Gledopto
  2619. {
  2620. zigbeeModel: ['GLEDOPTO', 'GL-C-008', 'GL-C-007'],
  2621. model: 'GL-C-008',
  2622. vendor: 'Gledopto',
  2623. description: 'Zigbee LED controller RGB + CCT / RGBW / WWCW / Dimmer',
  2624. extend: gledopto.light_onoff_brightness_colortemp_colorxy,
  2625. ep: (device) => {
  2626. if (device.epList.toString() === '11,12,13') {
  2627. return {'': 12};
  2628. } else if (device.epList.toString() === '10,11,13' || device.epList.toString() === '11,13') {
  2629. return {'': 11};
  2630. } else if (device.epList.toString() === '11,12,13,15') {
  2631. return {
  2632. 'rgb': 12,
  2633. 'white': 15,
  2634. };
  2635. } else if (device.epList.toString() === '11,13,15') {
  2636. return {
  2637. 'rgb': 11,
  2638. 'white': 15,
  2639. };
  2640. } else {
  2641. return {};
  2642. }
  2643. },
  2644. },
  2645. {
  2646. zigbeeModel: ['GL-S-004Z'],
  2647. model: 'GL-S-004Z',
  2648. vendor: 'Gledopto',
  2649. description: 'Zigbee Smart WW/CW GU10',
  2650. extend: gledopto.light_onoff_brightness_colortemp,
  2651. ep: (device) => {
  2652. if (device.epList.toString() === '11,12,13') {
  2653. return {'': 12};
  2654. } else if (device.epList.toString() === '10,11,13' || device.epList.toString() === '11,13') {
  2655. return {'': 11};
  2656. } else {
  2657. return {};
  2658. }
  2659. },
  2660. },
  2661. {
  2662. zigbeeModel: ['GL-C-006', 'GL-C-009'],
  2663. model: 'GL-C-006/GL-C-009',
  2664. vendor: 'Gledopto',
  2665. description: 'Zigbee LED controller WW/CW Dimmer',
  2666. extend: gledopto.light_onoff_brightness_colortemp,
  2667. ep: (device) => {
  2668. if (device.epList.toString() === '11,12,13') {
  2669. return {'': 12};
  2670. } else if (device.epList.toString() === '10,11,13' || device.epList.toString() === '11,13') {
  2671. return {'': 11};
  2672. } else {
  2673. return {};
  2674. }
  2675. },
  2676. },
  2677. {
  2678. zigbeeModel: ['GL-S-007Z'],
  2679. model: 'GL-S-007Z',
  2680. vendor: 'Gledopto',
  2681. description: 'Smart RGBW GU10',
  2682. extend: gledopto.light_onoff_brightness_colortemp_colorxy,
  2683. ep: (device) => {
  2684. if (device.epList.toString() === '11,12,13') {
  2685. return {'': 12};
  2686. } else if (device.epList.toString() === '10,11,13' || device.epList.toString() === '11,13') {
  2687. return {'': 11};
  2688. } else {
  2689. return {};
  2690. }
  2691. },
  2692. },
  2693. {
  2694. zigbeeModel: ['GL-B-001Z'],
  2695. model: 'GL-B-001Z',
  2696. vendor: 'Gledopto',
  2697. description: 'Smart 4W E14 RGB / CW LED bulb',
  2698. extend: gledopto.light_onoff_brightness_colortemp_colorxy,
  2699. ep: (device) => {
  2700. if (device.epList.toString() === '11,12,13') {
  2701. return {'': 12};
  2702. } else if (device.epList.toString() === '10,11,13' || device.epList.toString() === '11,13') {
  2703. return {'': 11};
  2704. } else {
  2705. return {};
  2706. }
  2707. },
  2708. },
  2709. {
  2710. zigbeeModel: ['GL-G-001Z'],
  2711. model: 'GL-G-001Z',
  2712. vendor: 'Gledopto',
  2713. description: 'Smart garden lamp',
  2714. extend: gledopto.light_onoff_brightness_colortemp_colorxy,
  2715. ep: (device) => {
  2716. if (device.epList.toString() === '11,12,13') {
  2717. return {'': 12};
  2718. } else if (device.epList.toString() === '10,11,13' || device.epList.toString() === '11,13') {
  2719. return {'': 11};
  2720. } else {
  2721. return {};
  2722. }
  2723. },
  2724. },
  2725. {
  2726. zigbeeModel: ['GL-B-007Z'],
  2727. model: 'GL-B-007Z',
  2728. vendor: 'Gledopto',
  2729. description: 'Smart 6W E27 RGB / CW LED bulb',
  2730. extend: gledopto.light_onoff_brightness_colortemp_colorxy,
  2731. ep: (device) => {
  2732. if (device.epList.toString() === '11,12,13') {
  2733. return {'': 12};
  2734. } else if (device.epList.toString() === '10,11,13' || device.epList.toString() === '11,13') {
  2735. return {'': 11};
  2736. } else {
  2737. return {};
  2738. }
  2739. },
  2740. },
  2741. {
  2742. zigbeeModel: ['GL-B-008Z'],
  2743. model: 'GL-B-008Z',
  2744. vendor: 'Gledopto',
  2745. description: 'Smart 12W E27 RGB / CW LED bulb',
  2746. extend: gledopto.light_onoff_brightness_colortemp_colorxy,
  2747. ep: (device) => {
  2748. if (device.epList.toString() === '11,12,13') {
  2749. return {'': 12};
  2750. } else if (device.epList.toString() === '10,11,13' || device.epList.toString() === '11,13') {
  2751. return {'': 11};
  2752. } else {
  2753. return {};
  2754. }
  2755. },
  2756. },
  2757. {
  2758. zigbeeModel: ['GL-B-008ZS'],
  2759. model: 'GL-B-008ZS',
  2760. vendor: 'Gledopto',
  2761. description: 'Smart 12W E27 RGB / CW LED bulb',
  2762. extend: gledopto.light_onoff_brightness_colortemp_colorxy,
  2763. },
  2764. {
  2765. zigbeeModel: ['GL-D-003Z', 'GL-D-005Z'],
  2766. model: 'GL-D-003Z',
  2767. vendor: 'Gledopto',
  2768. description: 'LED RGB + CCT downlight ',
  2769. extend: gledopto.light_onoff_brightness_colortemp_colorxy,
  2770. ep: (device) => {
  2771. if (device.epList.toString() === '11,12,13') {
  2772. return {'': 12};
  2773. } else if (device.epList.toString() === '10,11,13') {
  2774. return {'': 11};
  2775. } else {
  2776. return {};
  2777. }
  2778. },
  2779. },
  2780. {
  2781. zigbeeModel: ['GL-S-003Z'],
  2782. model: 'GL-S-003Z',
  2783. vendor: 'Gledopto',
  2784. description: 'Smart RGBW GU10 ',
  2785. extend: gledopto.light_onoff_brightness_colortemp_colorxy,
  2786. ep: (device) => {
  2787. if (device.epList.toString() === '11,12,13') {
  2788. return {'': 12};
  2789. } else if (device.epList.toString() === '10,11,13') {
  2790. return {'': 11};
  2791. } else {
  2792. return {};
  2793. }
  2794. },
  2795. },
  2796. {
  2797. zigbeeModel: ['HOMA2023'],
  2798. model: 'GD-CZ-006',
  2799. vendor: 'Gledopto',
  2800. description: 'Zigbee LED Driver',
  2801. extend: gledopto.light_onoff_brightness,
  2802. },
  2803. {
  2804. zigbeeModel: ['GL-FL-004TZ'],
  2805. model: 'GL-FL-004TZ',
  2806. vendor: 'Gledopto',
  2807. description: 'Zigbee 10W floodlight RGB CCT',
  2808. extend: generic.light_onoff_brightness_colortemp_colorxy,
  2809. ep: (device) => {
  2810. if (device.epList.toString() === '11,12,13') {
  2811. return {'': 12};
  2812. } else if (device.epList.toString() === '10,11,13' || device.epList.toString() === '11,13') {
  2813. return {'': 11};
  2814. } else {
  2815. return {};
  2816. }
  2817. },
  2818. },
  2819.  
  2820. // ROBB
  2821. {
  2822. zigbeeModel: ['ROB_200-004-0'],
  2823. model: 'ROB_200-004-0',
  2824. vendor: 'ROBB',
  2825. description: 'ZigBee AC phase-cut dimmer',
  2826. supports: 'on/off, brightness',
  2827. fromZigbee: [fz.brightness, fz.ignore_onoff_change, fz.state, fz.ignore_light_brightness_report],
  2828. toZigbee: [tz.light_onoff_brightness, tz.ignore_transition],
  2829. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2830. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  2831. const device = shepherd.find(ieeeAddr, 1);
  2832. const actions = [
  2833. (cb) => device.bind('genOnOff', coordinator, cb),
  2834. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  2835. (cb) => device.bind('genLevelCtrl', coordinator, cb),
  2836. ];
  2837.  
  2838. execute(device, actions, callback);
  2839. },
  2840. },
  2841.  
  2842. // SmartThings
  2843. {
  2844. zigbeeModel: ['PGC313'],
  2845. model: 'STSS-MULT-001',
  2846. vendor: 'SmartThings',
  2847. description: 'Multipurpose sensor',
  2848. supports: 'contact',
  2849. fromZigbee: [fz.smartthings_contact],
  2850. toZigbee: [],
  2851. },
  2852. {
  2853. zigbeeModel: ['tagv4'],
  2854. model: 'STS-PRS-251',
  2855. vendor: 'SmartThings',
  2856. description: 'Arrival sensor',
  2857. supports: 'presence',
  2858. fromZigbee: [
  2859. fz.STS_PRS_251_presence, fz.generic_batteryvoltage_3000_2500, fz.ignore_power_change,
  2860. fz.STS_PRS_251_beeping,
  2861. ],
  2862. toZigbee: [tz.STS_PRS_251_beep],
  2863. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2864. const device = shepherd.find(ieeeAddr, 1);
  2865. const actions = [
  2866. (cb) => device.report('genBinaryInput', 'presentValue', 10, 30, 1, cb),
  2867. (cb) => device.report('genPowerCfg', 'batteryVoltage', 1800, 3600, cb),
  2868. ];
  2869.  
  2870. execute(device, actions, callback);
  2871. },
  2872. },
  2873. {
  2874. zigbeeModel: ['3325-S'],
  2875. model: '3325-S',
  2876. vendor: 'SmartThings',
  2877. description: 'Motion sensor (2015 model)',
  2878. supports: 'occupancy and temperature',
  2879. fromZigbee: [
  2880. fz.generic_temperature, fz.ignore_temperature_change, fz.ias_zone_motion_dev_change,
  2881. fz.ias_zone_motion_status_change,
  2882. ],
  2883. toZigbee: [],
  2884. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2885. const device = shepherd.find(ieeeAddr, 1);
  2886. const actions = [
  2887. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  2888. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  2889. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  2890. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 30, 600, 1, cb),
  2891. (cb) => device.bind('genPowerCfg', coordinator, cb),
  2892. (cb) => device.report('genPowerCfg', 'batteryPercentageRemaining', 0, 1000, 0, cb),
  2893. ];
  2894. execute(device, actions, callback);
  2895. },
  2896. },
  2897. {
  2898. zigbeeModel: ['3321-S'],
  2899. model: '3321-S',
  2900. vendor: 'SmartThings',
  2901. description: 'Multi Sensor (2015 model)',
  2902. supports: 'contact and temperature',
  2903. fromZigbee: [
  2904. fz.generic_temperature, fz.ignore_temperature_change, fz.smartsense_multi,
  2905. ],
  2906. toZigbee: [],
  2907. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2908. const device = shepherd.find(ieeeAddr, 1);
  2909. const actions = [
  2910. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  2911. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 300, 600, 1, cb),
  2912. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  2913. (cb) => device.report('ssIasZone', 'zoneStatus', 0, 1000, null, cb),
  2914. (cb) => device.functional('ssIasZone', 'enrollRsp', {
  2915. enrollrspcode: 1,
  2916. zoneid: 23,
  2917. }, cb),
  2918. ];
  2919. execute(device, actions, callback);
  2920. },
  2921. },
  2922. {
  2923. zigbeeModel: ['outlet'],
  2924. model: 'IM6001-OTP05',
  2925. vendor: 'SmartThings',
  2926. description: 'Outlet',
  2927. supports: 'on/off',
  2928. fromZigbee: [fz.state, fz.ignore_onoff_report],
  2929. toZigbee: [tz.on_off],
  2930. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2931. const device = shepherd.find(ieeeAddr, 1);
  2932. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  2933. const actions = [
  2934. (cb) => device.bind('genOnOff', coordinator, cb),
  2935. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  2936. ];
  2937.  
  2938. execute(device, actions, callback);
  2939. },
  2940. },
  2941. {
  2942. zigbeeModel: ['motion'],
  2943. model: 'IM6001-MTP01',
  2944. vendor: 'SmartThings',
  2945. description: 'Motion sensor (2018 model)',
  2946. supports: 'occupancy and temperature',
  2947. fromZigbee: [
  2948. fz.generic_temperature, fz.ignore_temperature_change,
  2949. fz.ignore_iaszone_report, fz.generic_ias_zone_motion_dev_change,
  2950. fz.generic_ias_zone_occupancy_status_change, fz.generic_batteryvoltage_3000_2500,
  2951. ],
  2952. toZigbee: [],
  2953. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2954. const device = shepherd.find(ieeeAddr, 1);
  2955. const actions = [
  2956. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  2957. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  2958. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  2959. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 30, 600, 1, cb),
  2960. (cb) => device.bind('genPowerCfg', coordinator, cb),
  2961. (cb) => device.report('genPowerCfg', 'batteryVoltage', 0, 1000, 0, cb),
  2962. ];
  2963. execute(device, actions, callback);
  2964. },
  2965. },
  2966. {
  2967. zigbeeModel: ['motionv4'],
  2968. model: 'STS-IRM-250',
  2969. vendor: 'SmartThings',
  2970. description: 'Motion sensor (2016 model)',
  2971. supports: 'occupancy and temperature',
  2972. fromZigbee: [
  2973. fz.generic_temperature, fz.ignore_temperature_change, fz.ias_zone_motion_dev_change,
  2974. fz.generic_ias_zone_occupancy_status_change, fz.generic_batteryvoltage_3000_2500,
  2975. ],
  2976. toZigbee: [],
  2977. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  2978. const device = shepherd.find(ieeeAddr, 1);
  2979. const actions = [
  2980. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  2981. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  2982. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  2983. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 30, 600, 1, cb),
  2984. (cb) => device.bind('genPowerCfg', coordinator, cb),
  2985. (cb) => device.report('genPowerCfg', 'batteryVoltage', 0, 1000, 0, cb),
  2986. ];
  2987. execute(device, actions, callback);
  2988. },
  2989. },
  2990. {
  2991. zigbeeModel: ['3305-S'],
  2992. model: '3305-S',
  2993. vendor: 'SmartThings',
  2994. description: 'Motion sensor (2014 model)',
  2995. supports: 'occupancy and temperature',
  2996. fromZigbee: [
  2997. fz.generic_temperature, fz.ignore_temperature_change, fz.ias_zone_motion_dev_change,
  2998. fz.ias_zone_motion_status_change, fz.generic_batteryvoltage_3000_2500, fz.ignore_power_change,
  2999. ],
  3000. toZigbee: [],
  3001. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3002. const device = shepherd.find(ieeeAddr, 1);
  3003. const actions = [
  3004. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3005. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 255}, cb),
  3006. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  3007. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 30, 600, 1, cb),
  3008. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3009. (cb) => device.report('genPowerCfg', 'batteryVoltage', 0, 1000, 0, cb),
  3010. ];
  3011. execute(device, actions, callback);
  3012. },
  3013. },
  3014. {
  3015. zigbeeModel: ['3300-S'],
  3016. model: '3300-S',
  3017. vendor: 'SmartThings',
  3018. description: 'Door sensor',
  3019. supports: 'contact and temperature',
  3020. fromZigbee: [
  3021. fz.generic_temperature, fz.ignore_temperature_change, fz.smartsense_multi,
  3022. fz.ias_contact_status_change, fz.ignore_iaszone_change, fz.generic_batteryvoltage_3000_2500,
  3023. ],
  3024. toZigbee: [],
  3025. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3026. const device = shepherd.find(ieeeAddr, 1);
  3027. const actions = [
  3028. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  3029. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 300, 600, 1, cb),
  3030. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3031. (cb) => device.report('genPowerCfg', 'batteryVoltage', 0, 1000, 0, cb),
  3032. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3033. (cb) => device.report('ssIasZone', 'zoneStatus', 0, 1000, null, cb),
  3034. (cb) => device.functional('ssIasZone', 'enrollRsp', {
  3035. enrollrspcode: 1,
  3036. zoneid: 255,
  3037. }, cb),
  3038. ];
  3039. execute(device, actions, callback);
  3040. },
  3041. },
  3042. {
  3043. zigbeeModel: ['multiv4'],
  3044. model: 'F-MLT-US-2',
  3045. vendor: 'SmartThings',
  3046. description: 'Multipurpose sensor (2016 model)',
  3047. supports: 'contact',
  3048. fromZigbee: [
  3049. fz.generic_temperature, fz.ignore_temperature_change, fz.st_contact_status_change,
  3050. fz.generic_batteryvoltage_3000_2500, fz.ias_contact_dev_change,
  3051. ],
  3052. toZigbee: [],
  3053. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3054. const device = shepherd.find(ieeeAddr, 1);
  3055. const actions = [
  3056. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3057. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3058. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  3059. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 30, 600, 1, cb),
  3060. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3061. (cb) => device.report('genPowerCfg', 'batteryVoltage', 0, 1000, 0, cb),
  3062. ];
  3063. execute(device, actions, callback);
  3064. },
  3065. },
  3066. {
  3067. zigbeeModel: ['multi'],
  3068. model: 'IM6001-MPP01',
  3069. vendor: 'SmartThings',
  3070. description: 'Multipurpose sensor (2018 model)',
  3071. supports: 'contact',
  3072. fromZigbee: [
  3073. fz.generic_temperature, fz.ignore_temperature_change, fz.st_contact_status_change,
  3074. fz.generic_batteryvoltage_3000_2500, fz.ignore_iaszone_change, fz.ignore_iaszone_attreport,
  3075. ],
  3076. toZigbee: [],
  3077. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3078. const device = shepherd.find(ieeeAddr, 1);
  3079. const actions = [
  3080. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3081. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3082. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  3083. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 30, 600, 1, cb),
  3084. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3085. (cb) => device.report('genPowerCfg', 'batteryVoltage', 0, 1000, 0, cb),
  3086. ];
  3087. execute(device, actions, callback);
  3088. },
  3089. },
  3090. {
  3091. /**
  3092. * Note: humidity not (yet) implemented, as this seems to use proprietary cluster
  3093. * see Smartthings device handler (profileID: 0x9194, clusterId: 0xFC45
  3094. * https://github.com/SmartThingsCommunity/SmartThingsPublic/blob/861ec6b88eb45273e341436a23d35274dc367c3b/
  3095. * devicetypes/smartthings/smartsense-temp-humidity-sensor.src/smartsense-temp-humidity-sensor.groovy#L153-L156
  3096. */
  3097. zigbeeModel: ['3310-S'],
  3098. model: '3310-S',
  3099. vendor: 'SmartThings',
  3100. description: 'Temperature and humidity sensor',
  3101. supports: 'temperature',
  3102. fromZigbee: [
  3103. fz.generic_temperature, fz.ignore_temperature_change,
  3104. fz.generic_batteryvoltage_3000_2500,
  3105. ],
  3106. toZigbee: [],
  3107. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3108. const device = shepherd.find(ieeeAddr, 1);
  3109. const actions = [
  3110. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  3111. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 150, 300, 0.5, cb),
  3112. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3113. (cb) => device.report('genPowerCfg', 'batteryVoltage', 0, 1000, 0, cb),
  3114. ];
  3115. execute(device, actions, callback);
  3116. },
  3117. },
  3118. {
  3119. zigbeeModel: ['IM6001-WLP01'],
  3120. model: 'IM6001-WLP01',
  3121. vendor: 'SmartThings',
  3122. description: 'Water leak sensor',
  3123. supports: 'water leak',
  3124. fromZigbee: [
  3125. fz.generic_temperature, fz.ignore_temperature_change, fz.ignore_power_change,
  3126. fz.st_leak, fz.st_leak_change, fz.generic_batteryvoltage_3000_2500, fz.ignore_diagnostic_change,
  3127. ],
  3128. toZigbee: [],
  3129. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3130. const device = shepherd.find(ieeeAddr, 1);
  3131. const actions = [
  3132. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3133. (cb) => device.report('ssIasZone', 'zoneStatus', 0, 30, null, cb),
  3134. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 1, zoneid: 23}, cb),
  3135. ];
  3136.  
  3137. execute(device, actions, callback);
  3138. },
  3139. },
  3140. {
  3141. zigbeeModel: ['3315-S'],
  3142. model: '3315-S',
  3143. vendor: 'SmartThings',
  3144. description: 'Water sensor',
  3145. supports: 'water and temperature',
  3146. fromZigbee: [
  3147. fz.generic_temperature, fz.ignore_temperature_change, fz.ignore_power_change,
  3148. fz.st_leak, fz.st_leak_change, fz.generic_batteryvoltage_3000_2500,
  3149. ],
  3150. toZigbee: [],
  3151. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3152. const device = shepherd.find(ieeeAddr, 1);
  3153. const actions = [
  3154. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  3155. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 300, 600, 1, cb),
  3156. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3157. (cb) => device.report('genPowerCfg', 'batteryVoltage', 0, 1000, 0, cb),
  3158. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3159. (cb) => device.report('ssIasZone', 'zoneStatus', 0, 1000, null, cb),
  3160. (cb) => device.functional('ssIasZone', 'enrollRsp', {
  3161. enrollrspcode: 1,
  3162. zoneid: 255,
  3163. }, cb),
  3164. ];
  3165. execute(device, actions, callback);
  3166. },
  3167. },
  3168. {
  3169. zigbeeModel: ['water'],
  3170. model: 'F-WTR-UK-V2',
  3171. vendor: 'SmartThings',
  3172. description: 'Water leak sensor (2018 model)',
  3173. supports: 'water leak and temperature',
  3174. fromZigbee: [
  3175. fz.generic_temperature, fz.ignore_temperature_change, fz.ignore_power_change,
  3176. fz.st_leak, fz.st_leak_change, fz.generic_batteryvoltage_3000_2500,
  3177. ],
  3178. toZigbee: [],
  3179. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3180. const device = shepherd.find(ieeeAddr, 1);
  3181. const actions = [
  3182. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  3183. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 300, 600, 1, cb),
  3184. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3185. (cb) => device.report('genPowerCfg', 'batteryVoltage', 0, 1000, 0, cb),
  3186. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3187. (cb) => device.report('ssIasZone', 'zoneStatus', 0, 1000, null, cb),
  3188. (cb) => device.functional('ssIasZone', 'enrollRsp', {
  3189. enrollrspcode: 1,
  3190. zoneid: 255,
  3191. }, cb),
  3192. ];
  3193. execute(device, actions, callback);
  3194. },
  3195. },
  3196. {
  3197. zigbeeModel: ['3315-G'],
  3198. model: '3315-G',
  3199. vendor: 'SmartThings',
  3200. description: 'Water sensor',
  3201. supports: 'water and temperature',
  3202. fromZigbee: [
  3203. fz.generic_temperature, fz.ignore_temperature_change, fz.ignore_power_change,
  3204. fz.st_leak, fz.st_leak_change, fz.generic_batteryvoltage_3000_2500,
  3205. ],
  3206. toZigbee: [],
  3207. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3208. const device = shepherd.find(ieeeAddr, 1);
  3209. const actions = [
  3210. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  3211. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 300, 600, 1, cb),
  3212. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3213. (cb) => device.report('genPowerCfg', 'batteryVoltage', 0, 1000, 0, cb),
  3214. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3215. (cb) => device.report('ssIasZone', 'zoneStatus', 0, 1000, null, cb),
  3216. (cb) => device.functional('ssIasZone', 'enrollRsp', {
  3217. enrollrspcode: 1,
  3218. zoneid: 255,
  3219. }, cb),
  3220. ];
  3221. execute(device, actions, callback);
  3222. },
  3223. },
  3224. {
  3225. zigbeeModel: ['button'],
  3226. model: 'IM6001-BTP01',
  3227. vendor: 'SmartThings',
  3228. description: 'Button',
  3229. supports: 'single click, double click, hold and temperature',
  3230. fromZigbee: [
  3231. fz.st_button_state,
  3232. fz.generic_battery_change,
  3233. fz.generic_temperature,
  3234. fz.ignore_basic_change,
  3235. fz.ignore_diagnostic_change,
  3236. fz.ignore_genIdentify_change,
  3237. fz.ignore_iaszone_attreport,
  3238. fz.ignore_iaszone_change,
  3239. fz.ignore_poll_ctrl_change,
  3240. fz.ignore_temperature_change,
  3241. fz.ignore_temperature_report,
  3242. ],
  3243. toZigbee: [],
  3244. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3245. const device = shepherd.find(ieeeAddr, 1);
  3246. const actions = [
  3247. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3248. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3249. ];
  3250. execute(device, actions, callback);
  3251. },
  3252. },
  3253.  
  3254. // Trust
  3255. {
  3256. zigbeeModel: ['\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000'+
  3257. '\u0000\u0000\u0000\u0000\u0000'],
  3258. model: 'ZYCT-202',
  3259. vendor: 'Trust',
  3260. description: 'Remote control',
  3261. supports: 'on, off, stop, up-press, down-press',
  3262. fromZigbee: [
  3263. fz.ZYCT202_on, fz.ZYCT202_off, fz.ZYCT202_stop, fz.ZYCT202_up_down,
  3264. ],
  3265. toZigbee: [],
  3266. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3267. const device = shepherd.find(ieeeAddr, 1);
  3268. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  3269. const actions = [
  3270. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  3271. ];
  3272.  
  3273. execute(device, actions, callback);
  3274. },
  3275. },
  3276. {
  3277. zigbeeModel: ['ZLL-DimmableLigh'],
  3278. model: 'ZLED-2709',
  3279. vendor: 'Trust',
  3280. description: 'Smart Dimmable LED Bulb',
  3281. extend: generic.light_onoff_brightness,
  3282. },
  3283. {
  3284. zigbeeModel: ['ZLL-ColorTempera'],
  3285. model: 'ZLED-TUNE9',
  3286. vendor: 'Trust',
  3287. description: 'Smart tunable LED bulb',
  3288. extend: generic.light_onoff_brightness_colortemp,
  3289. },
  3290. {
  3291. zigbeeModel: ['VMS_ADUROLIGHT'],
  3292. model: 'ZPIR-8000',
  3293. vendor: 'Trust',
  3294. description: 'Motion Sensor',
  3295. supports: 'occupancy',
  3296. fromZigbee: [fz.ias_zone_motion_dev_change, fz.ias_zone_motion_status_change],
  3297. toZigbee: [],
  3298. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3299. const device = shepherd.find(ieeeAddr, 1);
  3300. const actions = [
  3301. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3302. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3303. ];
  3304.  
  3305. execute(device, actions, callback);
  3306. },
  3307. },
  3308. {
  3309. zigbeeModel: ['CSW_ADUROLIGHT'],
  3310. model: 'ZCTS-808',
  3311. vendor: 'Trust',
  3312. description: 'Wireless contact sensor',
  3313. supports: 'contact',
  3314. fromZigbee: [fz.ias_contact_dev_change, fz.ias_contact_status_change, fz.generic_battery_remaining],
  3315. toZigbee: [],
  3316. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3317. const device = shepherd.find(ieeeAddr, 1);
  3318. const actions = [
  3319. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3320. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3321. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3322. (cb) => device.report(
  3323. 'genPowerCfg', 'batteryPercentageRemaining', repInterval.MINUTE, repInterval.MAX, 1, cb
  3324. ),
  3325. ];
  3326.  
  3327. execute(device, actions, callback);
  3328. },
  3329. },
  3330.  
  3331. // Paulmann
  3332. {
  3333. zigbeeModel: ['Switch Controller '],
  3334. model: '50043',
  3335. vendor: 'Paulmann',
  3336. description: 'SmartHome Zigbee Cephei Switch Controller',
  3337. supports: 'on/off',
  3338. fromZigbee: [fz.state, fz.state_change],
  3339. toZigbee: [tz.on_off],
  3340. },
  3341. {
  3342. zigbeeModel: ['Dimmablelight '],
  3343. model: '50045',
  3344. vendor: 'Paulmann',
  3345. description: 'SmartHome Zigbee LED-stripe',
  3346. extend: generic.light_onoff_brightness,
  3347. },
  3348. {
  3349. zigbeeModel: ['RGBW light'],
  3350. model: '50049',
  3351. vendor: 'Paulmann',
  3352. description: 'SmartHome Yourled RGB Controller',
  3353. extend: generic.light_onoff_brightness_colortemp_colorxy,
  3354. },
  3355. {
  3356. zigbeeModel: ['CCT light'],
  3357. model: '50064',
  3358. vendor: 'Paulmann',
  3359. description: 'SmartHome led spot',
  3360. extend: generic.light_onoff_brightness_colortemp,
  3361. },
  3362.  
  3363. // Bitron
  3364. {
  3365. zigbeeModel: ['AV2010/34'],
  3366. model: 'AV2010/34',
  3367. vendor: 'Bitron',
  3368. description: '4-Touch single click buttons',
  3369. supports: 'click',
  3370. fromZigbee: [fz.ignore_power_report, fz.AV2010_34_click],
  3371. toZigbee: [],
  3372. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3373. const device = shepherd.find(ieeeAddr, 1);
  3374. const actions = [
  3375. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3376. ];
  3377. execute(device, actions, callback);
  3378. },
  3379. },
  3380. {
  3381. zigbeeModel: ['902010/22'],
  3382. model: 'AV2010/22',
  3383. vendor: 'Bitron',
  3384. description: 'Wireless motion detector',
  3385. supports: 'occupancy',
  3386. fromZigbee: [fz.bitron_occupancy],
  3387. toZigbee: [],
  3388. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3389. const device = shepherd.find(ieeeAddr, 1);
  3390. const actions = [
  3391. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3392. (cb) => device.report('ssIasZone', 'zoneStatus', 0, 30, null, cb),
  3393. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 1, zoneid: 23}, cb),
  3394. ];
  3395.  
  3396. execute(device, actions, callback);
  3397. },
  3398. },
  3399. {
  3400. zigbeeModel: ['902010/25'],
  3401. model: 'AV2010/25',
  3402. vendor: 'Bitron',
  3403. description: 'Video wireless socket',
  3404. supports: 'on/off, power measurement',
  3405. fromZigbee: [fz.state, fz.ignore_onoff_change, fz.ignore_metering_change, fz.bitron_power],
  3406. toZigbee: [tz.on_off],
  3407. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3408. const device = shepherd.find(ieeeAddr, 1);
  3409. const actions = [
  3410. (cb) => device.report('seMetering', 'instantaneousDemand', 10, 60, 1, cb),
  3411. (cb) => device.bind('genOnOff', coordinator, cb),
  3412. ];
  3413. execute(device, actions, callback);
  3414. },
  3415. },
  3416. {
  3417. zigbeeModel: ['902010/32'],
  3418. model: 'AV2010/32',
  3419. vendor: 'Bitron',
  3420. description: 'Wireless wall thermostat with relay',
  3421. supports: 'temperature, heating/cooling system control',
  3422. fromZigbee: [
  3423. fz.ignore_basic_change, fz.bitron_thermostat_att_report,
  3424. fz.bitron_thermostat_dev_change, fz.bitron_battery_att_report,
  3425. fz.bitron_battery_dev_change,
  3426. ],
  3427. toZigbee: [
  3428. tz.thermostat_occupied_heating_setpoint, tz.thermostat_local_temperature_calibration,
  3429. tz.thermostat_local_temperature, tz.thermostat_running_state,
  3430. tz.thermostat_temperature_display_mode,
  3431. ],
  3432. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3433. const device = shepherd.find(ieeeAddr, 1);
  3434. const actions = [
  3435. (cb) => device.bind('genBasic', coordinator, cb),
  3436. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3437. (cb) => device.bind('genIdentify', coordinator, cb),
  3438. (cb) => device.bind('genPollCtrl', coordinator, cb),
  3439. (cb) => device.bind('hvacThermostat', coordinator, cb),
  3440. (cb) => device.bind('hvacUserInterfaceCfg', coordinator, cb),
  3441. (cb) => device.report('hvacThermostat', 'localTemp', 1200, 3600, 0, cb),
  3442. (cb) => device.report('hvacThermostat', 'localTemperatureCalibration', 1, 0, 0, cb),
  3443. (cb) => device.report('hvacThermostat', 'occupiedHeatingSetpoint', 1, 0, 1, cb),
  3444. (cb) => device.report('hvacThermostat', 'runningState', 1, 0, 0, cb),
  3445. (cb) => device.report('genPowerCfg', 'batteryVoltage', 1800, 43200, 0, cb),
  3446. (cb) => device.report('genPowerCfg', 'batteryAlarmState', 1, 0, 1, cb),
  3447. ];
  3448.  
  3449. execute(device, actions, callback);
  3450. },
  3451. },
  3452.  
  3453. // Iris
  3454. {
  3455. zigbeeModel: ['3210-L'],
  3456. model: '3210-L',
  3457. vendor: 'Iris',
  3458. description: 'Smart plug',
  3459. supports: 'on/off',
  3460. fromZigbee: [fz.ignore_onoff_change, fz.ignore_electrical_change, fz.state, fz.iris_3210L_power],
  3461. toZigbee: [tz.on_off],
  3462. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3463. const device = shepherd.find(ieeeAddr, 1);
  3464. const actions = [
  3465. (cb) => device.report('haElectricalMeasurement', 'activePower', 10, 1000, 1, cb),
  3466. ];
  3467.  
  3468. execute(device, actions, callback);
  3469. },
  3470. },
  3471. {
  3472. zigbeeModel: ['3326-L'],
  3473. model: '3326-L',
  3474. vendor: 'Iris',
  3475. description: 'Motion and temperature sensor',
  3476. supports: 'occupancy and temperature',
  3477. fromZigbee: [
  3478. fz.generic_temperature, fz.ignore_temperature_change, fz.ias_zone_motion_dev_change,
  3479. fz.ias_zone_motion_status_change,
  3480. ],
  3481. toZigbee: [],
  3482. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3483. const device = shepherd.find(ieeeAddr, 1);
  3484. const actions = [
  3485. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3486. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3487. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  3488. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 30, 600, 1, cb),
  3489. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3490. (cb) => device.report('genPowerCfg', 'batteryPercentageRemaining', 0, 1000, 0, cb),
  3491. ];
  3492. execute(device, actions, callback);
  3493. },
  3494. },
  3495. {
  3496. zigbeeModel: ['3320-L'],
  3497. model: '3320-L',
  3498. vendor: 'Iris',
  3499. description: 'Contact sensor',
  3500. supports: 'contact',
  3501. fromZigbee: [fz.iris_3320L_contact],
  3502. toZigbee: [],
  3503. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3504. const device = shepherd.find(ieeeAddr, 1);
  3505. const actions = [
  3506. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3507. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3508. ];
  3509. execute(device, actions, callback, 1000);
  3510. },
  3511. },
  3512.  
  3513. // ksentry
  3514. {
  3515. zigbeeModel: ['Lamp_01'],
  3516. model: 'KS-SM001',
  3517. vendor: 'Ksentry Electronics',
  3518. description: '[Zigbee OnOff Controller](http://ksentry.manufacturer.globalsources.com/si/6008837134660'+
  3519. '/pdtl/ZigBee-module/1162731630/zigbee-on-off-controller-modules.htm)',
  3520. supports: 'on/off',
  3521. fromZigbee: [fz.state_change, fz.state],
  3522. toZigbee: [tz.on_off],
  3523. },
  3524.  
  3525. // Ninja Blocks
  3526. {
  3527. zigbeeModel: ['Ninja Smart plug'],
  3528. model: 'Z809AF',
  3529. vendor: 'Ninja Blocks',
  3530. description: 'Zigbee smart plug with power meter',
  3531. supports: 'on/off, power measurement',
  3532. fromZigbee: [fz.ignore_onoff_change, fz.state, fz.generic_power, fz.ignore_metering_change],
  3533. toZigbee: [tz.on_off],
  3534. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3535. const device = shepherd.find(ieeeAddr, 1);
  3536. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  3537. const actions = [
  3538. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  3539. (cb) => device.bind('genOnOff', coordinator, cb),
  3540. (cb) => device.report('seMetering', 'instantaneousDemand', 10, 60, 1, cb),
  3541. ];
  3542. execute(device, actions, callback);
  3543. },
  3544. },
  3545.  
  3546. // Commercial Electric
  3547. {
  3548. zigbeeModel: ['Zigbee CCT Downlight'],
  3549. model: '53170161',
  3550. vendor: 'Commercial Electric',
  3551. description: 'Matte White Recessed Retrofit Smart Led Downlight - 4 Inch',
  3552. extend: generic.light_onoff_brightness_colortemp,
  3553. },
  3554.  
  3555. // ilux
  3556. {
  3557. zigbeeModel: ['LEColorLight'],
  3558. model: '900008-WW',
  3559. vendor: 'ilux',
  3560. description: 'Dimmable A60 E27 LED Bulb',
  3561. extend: generic.light_onoff_brightness,
  3562. },
  3563.  
  3564. // Dresden Elektronik
  3565. {
  3566. zigbeeModel: ['FLS-PP3'],
  3567. model: 'Mega23M12',
  3568. vendor: 'Dresden Elektronik',
  3569. description: 'ZigBee Light Link wireless electronic ballast',
  3570. extend: generic.light_onoff_brightness_colortemp_colorxy,
  3571. },
  3572. {
  3573. zigbeeModel: ['FLS-CT'],
  3574. model: 'XVV-Mega23M12',
  3575. vendor: 'Dresden Elektronik',
  3576. description: 'ZigBee Light Link wireless electronic ballast color temperature',
  3577. extend: generic.light_onoff_brightness_colortemp,
  3578. },
  3579.  
  3580. // Centralite Swiss Plug
  3581. {
  3582. zigbeeModel: ['4256251-RZHAC', '4257050-RZHAC', '4257050-ZHAC'],
  3583. model: '4256251-RZHAC',
  3584. vendor: 'Centralite',
  3585. description: 'White Swiss power outlet switch with power meter',
  3586. supports: 'switch and power meter',
  3587. fromZigbee: [fz.ignore_onoff_change, fz.state, fz.ignore_electrical_change, fz.RZHAC_4256251_power],
  3588. toZigbee: [tz.on_off],
  3589. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3590. const device = shepherd.find(ieeeAddr, 1);
  3591. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  3592. const actions = [
  3593. (cb) => device.bind('genOnOff', coordinator, cb),
  3594. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  3595. (cb) => device.report('haElectricalMeasurement', 'rmsVoltage', 10, 1000, 1, cb),
  3596. (cb) => device.report('haElectricalMeasurement', 'rmsCurrent', 10, 1000, 1, cb),
  3597. (cb) => device.report('haElectricalMeasurement', 'activePower', 10, 1000, 1, cb),
  3598. ];
  3599.  
  3600. execute(device, actions, callback);
  3601. },
  3602. },
  3603.  
  3604. // Blaupunkt
  3605. {
  3606. zigbeeModel: ['SCM-R_00.00.03.15TC'],
  3607. model: 'SCM-S1',
  3608. vendor: 'Blaupunkt',
  3609. description: 'Roller shutter',
  3610. supports: 'open/close',
  3611. fromZigbee: [fz.cover_position_report, fz.cover_position, fz.cover_state_change, fz.cover_state_report],
  3612. toZigbee: [tz.cover_position, tz.cover_open_close],
  3613. },
  3614.  
  3615. // Lupus
  3616. {
  3617. zigbeeModel: ['SCM_00.00.03.11TC'],
  3618. model: '12031',
  3619. vendor: 'Lupus',
  3620. description: 'Roller shutter',
  3621. supports: 'open/close',
  3622. fromZigbee: [fz.cover_position_report, fz.cover_position, fz.cover_state_change, fz.cover_state_report],
  3623. toZigbee: [tz.cover_position, tz.cover_open_close],
  3624. },
  3625. {
  3626. zigbeeModel: ['PSMP5_00.00.03.11TC'],
  3627. model: '12050',
  3628. vendor: 'Lupus',
  3629. description: 'LUPUSEC mains socket with power meter',
  3630. supports: 'on/off, power measurement',
  3631. fromZigbee: [fz.state, fz.ignore_onoff_change, fz.ignore_metering_change, fz.bitron_power],
  3632. toZigbee: [tz.on_off],
  3633. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3634. const device = shepherd.find(ieeeAddr, 1);
  3635. const actions = [
  3636. (cb) => device.report('seMetering', 'instantaneousDemand', 10, 60, 1, cb),
  3637. (cb) => device.bind('genOnOff', coordinator, cb),
  3638. ];
  3639. execute(device, actions, callback);
  3640. },
  3641. },
  3642.  
  3643. // Climax
  3644. {
  3645. zigbeeModel: ['PSS_00.00.00.15TC'],
  3646. model: 'PSS-23ZBS',
  3647. vendor: 'Climax',
  3648. description: 'Power plug',
  3649. supports: 'on/off',
  3650. fromZigbee: [fz.state_change],
  3651. toZigbee: [tz.on_off],
  3652. },
  3653. {
  3654. zigbeeModel: ['SCM-3_00.00.03.15'],
  3655. model: 'SCM-5ZBS',
  3656. vendor: 'Climax',
  3657. description: 'Roller shutter',
  3658. supports: 'open/close',
  3659. fromZigbee: [fz.cover_position_report, fz.cover_position, fz.cover_state_change, fz.cover_state_report],
  3660. toZigbee: [tz.cover_position, tz.cover_open_close],
  3661. },
  3662. {
  3663. zigbeeModel: ['PSM_00.00.00.35TC'],
  3664. model: 'PSM-29ZBSR',
  3665. vendor: 'Climax',
  3666. description: 'Power plug',
  3667. supports: 'on/off',
  3668. fromZigbee: [fz.state_report, fz.state_change],
  3669. toZigbee: [tz.on_off],
  3670. },
  3671.  
  3672. // HEIMAN
  3673. {
  3674. zigbeeModel: ['CO_V15'],
  3675. model: 'HS1CA-M',
  3676. description: 'Smart carbon monoxide sensor',
  3677. supports: 'carbon monoxide',
  3678. vendor: 'HEIMAN',
  3679. fromZigbee: [fz.heiman_carbon_monoxide, fz.battery_200, fz.ignore_power_change],
  3680. toZigbee: [],
  3681. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3682. const device = shepherd.find(ieeeAddr, 1);
  3683. const actions = [
  3684. (cb) => device.bind('ssIasZone', coordinator, cb),
  3685. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3686. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3687. // Time is in seconds. 65535 means no report. 65534 is max value: 18 hours, 12 minutes 14 seconds.
  3688. (cb) => device.report('genPowerCfg', 'batteryPercentageRemaining', 0, 65534, 0, cb),
  3689. (cb) => device.report('genPowerCfg', 'batteryAlarmState', 1, 65534, 1, cb),
  3690. ];
  3691.  
  3692. execute(device, actions, callback, 1000);
  3693. },
  3694. },
  3695. {
  3696. zigbeeModel: ['PIRSensor-N'],
  3697. model: 'HS3MS',
  3698. vendor: 'HEIMAN',
  3699. description: 'Smart motion sensor',
  3700. supports: 'occupancy',
  3701. fromZigbee: [fz.heiman_pir],
  3702. toZigbee: [],
  3703. },
  3704. {
  3705. zigbeeModel: ['SmartPlug'],
  3706. model: 'HS2SK',
  3707. description: 'Smart metering plug',
  3708. supports: 'on/off, power measurement',
  3709. vendor: 'HEIMAN',
  3710. fromZigbee: [fz.state, fz.ignore_onoff_change, fz.ignore_electrical_change, fz.HS2SK_power],
  3711. toZigbee: [tz.on_off],
  3712. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3713. const device = shepherd.find(ieeeAddr, 1);
  3714. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  3715. const actions = [
  3716. (cb) => device.bind('genOnOff', coordinator, cb),
  3717. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  3718. (cb) => device.report('haElectricalMeasurement', 'rmsVoltage', 1, 1000, 1, cb),
  3719. (cb) => device.report('haElectricalMeasurement', 'rmsCurrent', 1, 1000, 1, cb),
  3720. (cb) => device.report('haElectricalMeasurement', 'activePower', 1, 1000, 1, cb),
  3721. ];
  3722.  
  3723. execute(device, actions, callback);
  3724. },
  3725. },
  3726. {
  3727. zigbeeModel: ['SMOK_V16', 'b5db59bfd81e4f1f95dc57fdbba17931', 'SMOK_YDLV10', 'SmokeSensor-EM'],
  3728. model: 'HS1SA',
  3729. vendor: 'HEIMAN',
  3730. description: 'Smoke detector',
  3731. supports: 'smoke',
  3732. fromZigbee: [
  3733. fz.heiman_smoke,
  3734. fz.battery_200,
  3735. fz.heiman_smoke_enrolled,
  3736. fz.ignore_power_change,
  3737. ],
  3738. toZigbee: [],
  3739. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3740. const device = shepherd.find(ieeeAddr, 1);
  3741. const actions = [
  3742. (cb) => device.bind('ssIasZone', coordinator, cb),
  3743. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3744. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3745. // Time is in seconds. 65535 means no report. 65534 is max value: 18 hours, 12 minutes 14 seconds.
  3746. (cb) => device.report('genPowerCfg', 'batteryPercentageRemaining', 0, 65534, 0, cb),
  3747. (cb) => device.report('genPowerCfg', 'batteryAlarmState', 1, 65534, 1, cb),
  3748. ];
  3749.  
  3750. execute(device, actions, callback, 1000);
  3751. },
  3752. },
  3753. {
  3754. zigbeeModel: ['SmokeSensor-N'],
  3755. model: 'HS3SA',
  3756. vendor: 'HEIMAN',
  3757. description: 'Smoke detector',
  3758. supports: 'smoke',
  3759. fromZigbee: [fz.heiman_smoke, fz.battery_200, fz.ignore_power_change],
  3760. toZigbee: [],
  3761. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3762. const device = shepherd.find(ieeeAddr, 1);
  3763. const cfg = {
  3764. direction: 0, attrId: 33, dataType: 32, minRepIntval: 10, maxRepIntval: repInterval.MAX, repChange: 0,
  3765. };
  3766.  
  3767. const actions = [
  3768. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3769. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3770. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3771. (cb) => device.foundation('genPowerCfg', 'configReport', [cfg], foundationCfg, cb),
  3772. ];
  3773.  
  3774. execute(device, actions, callback, 1000);
  3775. },
  3776. },
  3777. {
  3778. zigbeeModel: ['GASSensor-N'],
  3779. model: 'HS3CG',
  3780. vendor: 'HEIMAN',
  3781. description: 'Combustible gas sensor',
  3782. supports: 'gas',
  3783. fromZigbee: [fz.generic_ias_statuschange_gas, fz.ignore_iaszone_change],
  3784. toZigbee: [],
  3785. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3786. const device = shepherd.find(ieeeAddr, 1);
  3787. const actions = [
  3788. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3789. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3790. ];
  3791.  
  3792. execute(device, actions, callback, 1000);
  3793. },
  3794. },
  3795. {
  3796. zigbeeModel: ['GASSensor-EN'],
  3797. model: 'HS1CG-M',
  3798. vendor: 'HEIMAN',
  3799. description: 'Combustible gas sensor',
  3800. supports: 'gas',
  3801. fromZigbee: [fz.generic_ias_statuschange_gas, fz.ignore_iaszone_change],
  3802. toZigbee: [],
  3803. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3804. const device = shepherd.find(ieeeAddr, 1);
  3805. const actions = [
  3806. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3807. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3808. ];
  3809.  
  3810. execute(device, actions, callback, 1000);
  3811. },
  3812. },
  3813. {
  3814. zigbeeModel: ['DoorSensor-N'],
  3815. model: 'HS1DS/HS3DS',
  3816. vendor: 'HEIMAN',
  3817. description: 'Door sensor',
  3818. supports: 'contact',
  3819. fromZigbee: [fz.heiman_contact],
  3820. toZigbee: [],
  3821. },
  3822. {
  3823. zigbeeModel: ['DOOR_TPV13'],
  3824. model: 'HEIMAN-M1',
  3825. vendor: 'HEIMAN',
  3826. description: 'Door sensor',
  3827. supports: 'contact',
  3828. fromZigbee: [fz.heiman_contact],
  3829. toZigbee: [],
  3830. },
  3831. {
  3832. zigbeeModel: ['DoorSensor-EM'],
  3833. model: 'HS1DS-E',
  3834. vendor: 'HEIMAN',
  3835. description: 'Door sensor',
  3836. supports: 'contact',
  3837. fromZigbee: [fz.heiman_contact],
  3838. toZigbee: [],
  3839. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3840. const device = shepherd.find(ieeeAddr, 1);
  3841. const actions = [
  3842. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3843. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3844. ];
  3845.  
  3846. execute(device, actions, callback, 1000);
  3847. },
  3848. },
  3849. {
  3850. zigbeeModel: ['WaterSensor-N'],
  3851. model: 'HS1WL/HS3WL',
  3852. vendor: 'HEIMAN',
  3853. description: 'Water leakage sensor',
  3854. supports: 'water leak',
  3855. fromZigbee: [fz.heiman_water_leak],
  3856. toZigbee: [],
  3857. },
  3858. {
  3859. zigbeeModel: ['WaterSensor-EM'],
  3860. model: 'HS1-WL-E',
  3861. vendor: 'HEIMAN',
  3862. description: 'Water leakage sensor',
  3863. supports: 'water leak',
  3864. fromZigbee: [fz.heiman_water_leak],
  3865. toZigbee: [],
  3866. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3867. const device = shepherd.find(ieeeAddr, 1);
  3868. const actions = [
  3869. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3870. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3871. ];
  3872.  
  3873. execute(device, actions, callback, 1000);
  3874. },
  3875. },
  3876. {
  3877. zigbeeModel: ['RC_V14'],
  3878. model: 'HS1RC-M',
  3879. vendor: 'HEIMAN',
  3880. description: 'Smart remote controller',
  3881. supports: 'action',
  3882. fromZigbee: [
  3883. fz.battery_200, fz.ignore_power_change,
  3884. fz.heiman_smart_controller_armmode, fz.heiman_smart_controller_emergency,
  3885. ],
  3886. toZigbee: [],
  3887. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3888. const device = shepherd.find(ieeeAddr, 1);
  3889. const actions = [
  3890. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3891. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3892. ];
  3893.  
  3894. execute(device, actions, callback, 1000);
  3895. },
  3896. },
  3897. {
  3898. zigbeeModel: ['COSensor-EM', 'COSensor-N'],
  3899. model: 'HS1CA-E',
  3900. vendor: 'HEIMAN',
  3901. description: 'Smart carbon monoxide sensor',
  3902. supports: 'carbon monoxide',
  3903. fromZigbee: [fz.heiman_carbon_monoxide, fz.battery_200, fz.ignore_power_change, fz.ignore_basic_change],
  3904. toZigbee: [],
  3905. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3906. const device = shepherd.find(ieeeAddr, 1);
  3907. const actions = [
  3908. (cb) => device.bind('ssIasZone', coordinator, cb),
  3909. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3910. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3911. // Time is in seconds. 65535 means no report. 65534 is max value: 18 hours, 12 minutes 14 seconds.
  3912. (cb) => device.report('genPowerCfg', 'batteryPercentageRemaining', 0, 65534, 0, cb),
  3913. (cb) => device.report('genPowerCfg', 'batteryAlarmState', 1, 65534, 1, cb),
  3914. ];
  3915.  
  3916. execute(device, actions, callback, 1000);
  3917. },
  3918. },
  3919. {
  3920. zigbeeModel: ['WarningDevice'],
  3921. model: 'HS2WD-E',
  3922. vendor: 'HEIMAN',
  3923. description: 'Smart siren',
  3924. supports: 'warning',
  3925. fromZigbee: [fz.battery_200, fz.ignore_iaszone_change],
  3926. toZigbee: [tz.warning],
  3927. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3928. const device = shepherd.find(ieeeAddr, 1);
  3929. const actions = [
  3930. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  3931. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 1, zoneid: 23}, cb),
  3932. (cb) => device.bind('genPowerCfg', coordinator, cb),
  3933. (cb) => device.report('genPowerCfg', 'batteryVoltage', 'batteryPercentageRemaining', 0, 3600, 0, cb),
  3934. ];
  3935.  
  3936. execute(device, actions, callback, 1000);
  3937. },
  3938. },
  3939.  
  3940. // Oujiabao
  3941. {
  3942. zigbeeModel: ['OJB-CR701-YZ'],
  3943. model: 'CR701-YZ',
  3944. vendor: 'Oujiabao',
  3945. description: 'Gas and carbon monoxide alarm',
  3946. supports: 'gas and carbon monoxide',
  3947. fromZigbee: [fz.OJBCR701YZ_statuschange],
  3948. toZigbee: [],
  3949. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  3950. const device = shepherd.find(ieeeAddr, 1);
  3951. const actions = [
  3952. (cb) => device.bind('ssIasZone', coordinator, cb),
  3953. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  3954. ];
  3955.  
  3956. execute(device, actions, callback, 1000);
  3957. },
  3958. },
  3959.  
  3960. // Calex
  3961. {
  3962. zigbeeModel: ['EC-Z3.0-CCT'],
  3963. model: '421786',
  3964. vendor: 'Calex',
  3965. description: 'LED A60 Zigbee GLS-lamp',
  3966. extend: generic.light_onoff_brightness,
  3967. },
  3968. {
  3969. zigbeeModel: ['EC-Z3.0-RGBW'],
  3970. model: '421792',
  3971. vendor: 'Calex',
  3972. description: 'LED A60 Zigbee RGB lamp',
  3973. extend: generic.light_onoff_brightness_colortemp_colorxy,
  3974. },
  3975.  
  3976. // EcoSmart
  3977. {
  3978. zigbeeModel: ['zhaRGBW'],
  3979. model: 'D1821',
  3980. vendor: 'EcoSmart',
  3981. description: 'A19 RGB bulb',
  3982. extend: generic.light_onoff_brightness_colortemp_colorxy,
  3983. },
  3984. {
  3985. // eslint-disable-next-line
  3986. zigbeeModel: ['\u0000\u0002\u0000\u0004\u0000\f^I\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e','\u0000\u0002\u0000\u0004^��&\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e'],
  3987. model: 'D1531',
  3988. vendor: 'EcoSmart',
  3989. description: 'A19 bright white bulb',
  3990. extend: generic.light_onoff_brightness,
  3991. },
  3992. {
  3993. // eslint-disable-next-line
  3994. zigbeeModel: ['\u0000\u0002\u0000\u0004\u0012 �P\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e'],
  3995. model: 'D1532',
  3996. vendor: 'EcoSmart',
  3997. description: 'A19 soft white bulb',
  3998. extend: generic.light_onoff_brightness,
  3999. },
  4000. {
  4001. zigbeeModel: ['zhaTunW'],
  4002. model: 'D1542',
  4003. vendor: 'EcoSmart',
  4004. description: 'GU10 adjustable white bulb',
  4005. extend: generic.light_onoff_brightness_colortemp,
  4006. },
  4007.  
  4008. // Airam
  4009. {
  4010. zigbeeModel: ['ZBT-DimmableLight'],
  4011. model: '4713407',
  4012. vendor: 'Airam',
  4013. description: 'LED OP A60 ZB 9W/827 E27',
  4014. extend: generic.light_onoff_brightness,
  4015. fromZigbee: [fz.state_change, fz.brightness_report, fz.brightness, fz.state],
  4016. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4017. const device = shepherd.find(ieeeAddr, 1);
  4018. const cfgOnOff = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  4019. const cfgLevel = {direction: 0, attrId: 0, dataType: 32, minRepIntval: 0, maxRepIntval: 1000, repChange: 1};
  4020. const actions = [
  4021. (cb) => device.bind('genOnOff', coordinator, cb),
  4022. (cb) => device.foundation('genOnOff', 'configReport', [cfgOnOff], foundationCfg, cb),
  4023. (cb) => device.bind('genLevelCtrl', coordinator, cb),
  4024. (cb) => device.foundation('genLevelCtrl', 'configReport', [cfgLevel], foundationCfg, cb),
  4025. ];
  4026.  
  4027. execute(device, actions, callback);
  4028. },
  4029. },
  4030. {
  4031. zigbeeModel: ['ZBT-Remote-EU-DIMV1A2'],
  4032. model: 'AIRAM-CTR.U',
  4033. vendor: 'Airam',
  4034. description: 'CTR.U remote',
  4035. supports: 'on/off, brightness up/down and click/hold/release',
  4036. fromZigbee: [
  4037. fz.genOnOff_cmdOn, fz.genOnOff_cmdOff, fz.CTR_U_brightness_updown_click,
  4038. fz.CTR_U_brightness_updown_hold, fz.CTR_U_brightness_updown_release, fz.CTR_U_scene,
  4039. ],
  4040. toZigbee: [],
  4041. },
  4042.  
  4043. // Paul Neuhaus
  4044. {
  4045. zigbeeModel: ['NLG-CCT light '],
  4046. model: '100.424.11',
  4047. vendor: 'Paul Neuhaus',
  4048. description: 'Q-INIGO LED ceiling light',
  4049. extend: generic.light_onoff_brightness_colortemp,
  4050. },
  4051. {
  4052. zigbeeModel: ['Neuhaus NLG-TW light'],
  4053. model: '100.469.65',
  4054. vendor: 'Paul Neuhaus',
  4055. description: 'Q-INIGO, LED panel, Smart-Home RGB',
  4056. extend: generic.light_onoff_brightness_colortemp,
  4057. },
  4058. {
  4059. zigbeeModel: ['NLG-RGBW light '],
  4060. model: '100.110.39',
  4061. vendor: 'Paul Neuhaus',
  4062. description: 'Q-FLAG LED Panel, Smart-Home RGBW',
  4063. extend: generic.light_onoff_brightness_colortemp_colorxy,
  4064. },
  4065. {
  4066. zigbeeModel: ['NLG-plug '],
  4067. model: '100.425.90',
  4068. vendor: 'Paul Neuhaus',
  4069. description: 'Q-PLUG adapter plug with night orientation light',
  4070. supports: 'on/off',
  4071. fromZigbee: [fz.ignore_basic_change],
  4072. toZigbee: [tz.on_off],
  4073. },
  4074.  
  4075. // iCasa
  4076. {
  4077. zigbeeModel: ['ICZB-IW11D'],
  4078. model: 'ICZB-IW11D',
  4079. vendor: 'iCasa',
  4080. description: 'Zigbee 3.0 Dimmer',
  4081. extend: generic.light_onoff_brightness,
  4082. },
  4083. {
  4084. zigbeeModel: ['ICZB-IW11SW'],
  4085. model: 'ICZB-IW11SW',
  4086. vendor: 'iCasa',
  4087. description: 'Zigbee 3.0 Switch',
  4088. supports: 'on/off',
  4089. fromZigbee: [fz.state],
  4090. toZigbee: [tz.on_off],
  4091. },
  4092.  
  4093. // Busch-Jaeger
  4094. {
  4095. zigbeeModel: ['PU01'],
  4096. model: '6717-84',
  4097. vendor: 'Busch-Jaeger',
  4098. description: 'Adaptor plug',
  4099. supports: 'on/off',
  4100. fromZigbee: [fz.state],
  4101. toZigbee: [tz.on_off],
  4102. },
  4103.  
  4104. // Müller Licht
  4105. {
  4106. zigbeeModel: ['ZBT-ExtendedColor'],
  4107. model: '404000/404005/404012',
  4108. vendor: 'Müller Licht',
  4109. description: 'Tint LED bulb GU10/E14/E27 350/470/806 lumen, dimmable, color, opal white',
  4110. extend: generic.light_onoff_brightness_colortemp_colorxy,
  4111. },
  4112. {
  4113. zigbeeModel: ['ZBT-ColorTemperature'],
  4114. model: '404006/404008/404004',
  4115. vendor: 'Müller Licht',
  4116. description: 'Tint LED bulb GU10/E14/E27 350/470/806 lumen, dimmable, opal white',
  4117. extend: generic.light_onoff_brightness_colortemp,
  4118. },
  4119. {
  4120. zigbeeModel: ['ZBT-Remote-ALL-RGBW'],
  4121. model: 'MLI-404011',
  4122. description: 'Tint remote control',
  4123. supports: 'toggle, brightness, other buttons are not supported yet!',
  4124. vendor: 'Müller Licht',
  4125. fromZigbee: [
  4126. fz.tint404011_on, fz.tint404011_off, fz.cmdToggle, fz.tint404011_brightness_updown_click,
  4127. fz.tint404011_move_to_color_temp, fz.tint404011_move_to_color, fz.tint404011_scene,
  4128. fz.tint404011_brightness_updown_release, fz.tint404011_brightness_updown_hold,
  4129. ],
  4130. toZigbee: [],
  4131. },
  4132.  
  4133. // Salus
  4134. {
  4135. zigbeeModel: ['SP600'],
  4136. model: 'SP600',
  4137. vendor: 'Salus',
  4138. description: 'Smart plug',
  4139. supports: 'on/off, power measurement',
  4140. fromZigbee: [fz.state, fz.ignore_onoff_change, fz.generic_power, fz.ignore_metering_change],
  4141. toZigbee: [tz.on_off],
  4142. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4143. const device = shepherd.find(ieeeAddr, 9);
  4144. const onOff = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 5, repChange: 0};
  4145. const actions = [
  4146. (cb) => device.foundation('genOnOff', 'configReport', [onOff], foundationCfg, cb),
  4147. (cb) => device.bind('genOnOff', coordinator, cb),
  4148. (cb) => device.report('seMetering', 'instantaneousDemand', 1, 5, 1, cb),
  4149. ];
  4150.  
  4151. execute(device, actions, callback);
  4152. },
  4153. },
  4154.  
  4155. // AduroSmart
  4156. {
  4157. zigbeeModel: ['ZLL-ExtendedColo'],
  4158. model: '81809',
  4159. vendor: 'AduroSmart',
  4160. description: 'ERIA colors and white shades smart light bulb A19',
  4161. extend: generic.light_onoff_brightness_colortemp_colorxy,
  4162. ep: (device) => {
  4163. return {
  4164. '': 2,
  4165. };
  4166. },
  4167. },
  4168. {
  4169. zigbeeModel: ['Adurolight_NCC'],
  4170. model: '81825',
  4171. vendor: 'AduroSmart',
  4172. description: 'ERIA smart wireless dimming switch',
  4173. supports: 'on, off, up, down',
  4174. fromZigbee: [fz.eria_81825_on, fz.eria_81825_off, fz.eria_81825_updown],
  4175. toZigbee: [],
  4176. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4177. const device = shepherd.find(ieeeAddr, 1);
  4178. const actions = [
  4179. (cb) => device.bind('genOnOff', coordinator, cb),
  4180. (cb) => device.bind('genLevelCtrl', coordinator, cb),
  4181. ];
  4182.  
  4183. execute(device, actions, callback);
  4184. },
  4185. },
  4186.  
  4187. // Eurotronic
  4188. {
  4189. zigbeeModel: ['SPZB0001'],
  4190. model: 'SPZB0001',
  4191. vendor: 'Eurotronic',
  4192. description: 'Spirit Zigbee wireless heater thermostat',
  4193. supports: 'temperature, heating system control',
  4194. fromZigbee: [
  4195. fz.thermostat_dev_change,
  4196. fz.eurotronic_thermostat_dev_change,
  4197. fz.ignore_thermostat_report, fz.generic_battery_remaining, fz.ignore_power_change,
  4198. ],
  4199. toZigbee: [
  4200. tz.thermostat_occupied_heating_setpoint, tz.thermostat_unoccupied_heating_setpoint,
  4201. tz.thermostat_local_temperature_calibration, tz.thermostat_system_mode,
  4202. tz.eurotronic_system_mode, tz.eurotronic_error_status, tz.thermostat_setpoint_raise_lower,
  4203. tz.thermostat_control_sequence_of_operation, tz.thermostat_remote_sensing,
  4204. tz.eurotronic_current_heating_setpoint, tz.eurotronic_trv_mode, tz.eurotronic_valve_position,
  4205. ],
  4206. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4207. const device = shepherd.find(ieeeAddr, 1);
  4208. const actions = [
  4209. (cb) => device.bind('genPowerCfg', coordinator, cb),
  4210. (cb) => device.bind('hvacThermostat', coordinator, cb),
  4211. (cb) => device.report('hvacThermostat', 'localTemp', 1, 1200, 25, cb),
  4212. (cb) => device.foundation('hvacThermostat', 'configReport', [{
  4213. direction: 0, attrId: 0x4003, dataType: 41, minRepIntval: 0,
  4214. maxRepIntval: 600, repChange: 25}], {manufSpec: 1, manufCode: 4151}, cb),
  4215. ];
  4216.  
  4217. execute(device, actions, callback);
  4218. },
  4219. },
  4220.  
  4221. // Livolo
  4222. {
  4223. zigbeeModel: ['TI0001 '],
  4224. model: 'TI0001',
  4225. description:
  4226. 'Zigbee switch (1 and 2 gang) ' +
  4227. '[work in progress](https://github.com/Koenkk/zigbee2mqtt/issues/592)',
  4228. vendor: 'Livolo',
  4229. supports: 'on/off',
  4230. fromZigbee: [fz.ignore_onoff_report, fz.livolo_switch_dev_change],
  4231. toZigbee: [tz.livolo_switch_on_off],
  4232. },
  4233.  
  4234. // Bosch
  4235. {
  4236. zigbeeModel: ['RFDL-ZB-MS'],
  4237. model: 'RADON TriTech ZB',
  4238. vendor: 'Bosch',
  4239. description: 'Wireless motion detector',
  4240. supports: 'occupancy and temperature',
  4241. fromZigbee: [
  4242. fz.generic_temperature, fz.ignore_temperature_change, fz.generic_batteryvoltage_3000_2500,
  4243. fz.ignore_power_change, fz.generic_ias_zone_occupancy_status_change, fz.ignore_iaszone_change,
  4244. ],
  4245. toZigbee: [],
  4246. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4247. const device = shepherd.find(ieeeAddr, 1);
  4248. const actions = [
  4249. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  4250. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  4251. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  4252. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 60, 58000, 1, cb),
  4253. (cb) => device.bind('genPowerCfg', coordinator, cb),
  4254. (cb) => device.report('genPowerCfg', 'batteryVoltage', 1800, 3600, cb),
  4255. ];
  4256.  
  4257. execute(device, actions, callback);
  4258. },
  4259. },
  4260. {
  4261. zigbeeModel: ['ISW-ZPR1-WP13'],
  4262. model: 'ISW-ZPR1-WP13',
  4263. vendor: 'Bosch',
  4264. description: 'Motion sensor',
  4265. supports: 'occupancy and temperature',
  4266. fromZigbee: [
  4267. fz.generic_temperature, fz.ignore_temperature_change, fz.ignore_power_change,
  4268. fz.generic_batteryvoltage_3000_2500, fz.generic_ias_zone_occupancy_status_change,
  4269. fz.ignore_iaszone_report, fz.ignore_iaszone_change,
  4270. ],
  4271. toZigbee: [],
  4272. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4273. const device = shepherd.find(ieeeAddr, 5);
  4274. const actions = [
  4275. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  4276. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  4277. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  4278. (cb) => device.report(
  4279. 'msTemperatureMeasurement', 'measuredValue', repInterval.MINUTE, repInterval.MAX, 0, cb
  4280. ),
  4281. (cb) => device.bind('genPowerCfg', coordinator, cb),
  4282. (cb) => device.report('genPowerCfg', 'batteryVoltage', repInterval.HOUR, repInterval.MAX, cb),
  4283. ];
  4284.  
  4285. execute(device, actions, callback);
  4286. },
  4287. },
  4288.  
  4289. // Immax
  4290. {
  4291. zigbeeModel: ['IM-Z3.0-DIM'],
  4292. model: 'IM-Z3.0-DIM',
  4293. vendor: 'Immax',
  4294. description: 'LED E14/230V C35 5W TB 440LM ZIGBEE DIM',
  4295. extend: generic.light_onoff_brightness,
  4296. },
  4297.  
  4298. // Yale
  4299. {
  4300. zigbeeModel: ['YRD446 BLE TSDB'],
  4301. model: 'YRD426NRSC',
  4302. vendor: 'Yale',
  4303. description: 'Assure lock',
  4304. supports: 'lock/unlock, battery',
  4305. fromZigbee: [fz.generic_lock, fz.generic_lock_operation_event, fz.battery_200],
  4306. toZigbee: [tz.generic_lock],
  4307. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4308. const device = shepherd.find(ieeeAddr, 1);
  4309. const actions = [
  4310. (cb) => device.report('closuresDoorLock', 'lockState', 0, repInterval.HOUR, 0, cb),
  4311. (cb) => device.report('genPowerCfg', 'batteryPercentageRemaining', 0, repInterval.MAX, 0, cb),
  4312. ];
  4313.  
  4314. execute(device, actions, callback);
  4315. },
  4316. },
  4317. {
  4318. zigbeeModel: ['YRD226 TSDB'],
  4319. model: 'YRD226HA2619',
  4320. vendor: 'Yale',
  4321. description: 'Assure lock',
  4322. supports: 'lock/unlock, battery',
  4323. fromZigbee: [fz.generic_lock, fz.battery_200],
  4324. toZigbee: [tz.generic_lock],
  4325. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4326. const device = shepherd.find(ieeeAddr, 1);
  4327. const actions = [
  4328. (cb) => device.report('closuresDoorLock', 'lockState', 0, repInterval.HOUR, 0, cb),
  4329. (cb) => device.report('genPowerCfg', 'batteryPercentageRemaining', 0, repInterval.MAX, 0, cb),
  4330. ];
  4331.  
  4332. execute(device, actions, callback);
  4333. },
  4334. },
  4335. {
  4336. zigbeeModel: ['YRD256 TSDB'],
  4337. model: 'YRD256HA20BP',
  4338. vendor: 'Yale',
  4339. description: 'Assure lock SL',
  4340. supports: 'lock/unlock, battery',
  4341. fromZigbee: [
  4342. fz.generic_lock,
  4343. fz.generic_lock_operation_event,
  4344. fz.battery_200,
  4345. fz.ignore_power_change,
  4346. ],
  4347. toZigbee: [tz.generic_lock],
  4348. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4349. const device = shepherd.find(ieeeAddr, 1);
  4350. const actions = [
  4351. (cb) => device.report('closuresDoorLock', 'lockState', 0, repInterval.HOUR, 0, cb),
  4352. (cb) => device.report('genPowerCfg', 'batteryPercentageRemaining', 0, repInterval.MAX, 0, cb),
  4353. ];
  4354.  
  4355. execute(device, actions, callback);
  4356. },
  4357. },
  4358. {
  4359. zigbeeModel: ['iZBModule01'],
  4360. model: 'YMF40',
  4361. vendor: 'Yale',
  4362. description: 'Real living lock',
  4363. supports: 'lock/unlock, battery',
  4364. fromZigbee: [fz.generic_lock_operation_event],
  4365. toZigbee: [tz.generic_lock],
  4366. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4367. const device = shepherd.find(ieeeAddr, 1);
  4368.  
  4369. const actions = [
  4370. (cb) => device.report('closuresDoorLock', 'lockState', 0, 3, 0, cb),
  4371. (cb) => device.report('genPowerCfg', 'batteryPercentageRemaining', 0, 3, 0, cb),
  4372. ];
  4373.  
  4374. execute(device, actions, callback);
  4375. },
  4376.  
  4377. },
  4378.  
  4379. // Keen Home
  4380. {
  4381. zigbeeModel: [
  4382. 'SV01-410-MP-1.0', 'SV01-410-MP-1.1', 'SV01-410-MP-1.4', 'SV01-410-MP-1.5', 'SV01-412-MP-1.0',
  4383. 'SV01-610-MP-1.0', 'SV01-612-MP-1.0',
  4384. ],
  4385. model: 'SV01',
  4386. vendor: 'Keen Home',
  4387. description: 'Smart vent',
  4388. supports: 'open, close, position, temperature, pressure, battery',
  4389. fromZigbee: [
  4390. fz.cover_position, fz.cover_position_report, fz.generic_temperature, fz.generic_temperature_change,
  4391. fz.generic_battery, fz.generic_battery_change, fz.keen_home_smart_vent_pressure,
  4392. fz.keen_home_smart_vent_pressure_report, fz.ignore_onoff_change, fz.ignore_onoff_report,
  4393. ],
  4394. toZigbee: [
  4395. tz.cover_open_close,
  4396. tz.cover_position,
  4397. ],
  4398. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4399. const device = shepherd.find(ieeeAddr, 1);
  4400. const actions = [
  4401. (cb) => device.bind('genLevelCtrl', coordinator, cb),
  4402. (cb) => device.bind('genPowerCfg', coordinator, cb),
  4403. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  4404. (cb) => device.bind('msPressureMeasurement', coordinator, cb),
  4405.  
  4406. // eslint-disable-next-line
  4407. // https://github.com/yracine/keenhome.device-type/blob/master/devicetypes/keensmartvent.src/keensmartvent.groovy
  4408. (cb) => device.report(
  4409. 'msTemperatureMeasurement', 'measuredValue', repInterval.MINUTE * 2, repInterval.HOUR, 50, cb
  4410. ),
  4411. (cb) => device.foundation(
  4412. 'msPressureMeasurement',
  4413. 'configReport',
  4414. [{
  4415. direction: 0, attrId: 32, dataType: 34, minRepIntval: repInterval.MINUTE * 5,
  4416. maxRepIntval: repInterval.HOUR, repChange: 500,
  4417. }],
  4418. {manufSpec: 1, manufCode: 4443},
  4419. cb
  4420. ),
  4421. (cb) => device.report(
  4422. 'genPowerCfg', 'batteryPercentageRemaining', repInterval.HOUR, repInterval.HOUR * 12, 0, cb
  4423. ),
  4424. ];
  4425.  
  4426. execute(device, actions, callback);
  4427. },
  4428. },
  4429. {
  4430. zigbeeModel: ['SV02-410-MP-1.3', 'SV02-610-MP-1.3'],
  4431. model: 'SV02',
  4432. vendor: 'Keen Home',
  4433. description: 'Smart vent',
  4434. supports: 'open, close, position, temperature, pressure, battery',
  4435. fromZigbee: [
  4436. fz.cover_position, fz.cover_position_report, fz.generic_temperature, fz.generic_temperature_change,
  4437. fz.generic_battery, fz.generic_battery_change, fz.keen_home_smart_vent_pressure,
  4438. fz.keen_home_smart_vent_pressure_report, fz.ignore_onoff_change, fz.ignore_onoff_report,
  4439. ],
  4440. toZigbee: [
  4441. tz.cover_open_close,
  4442. tz.cover_position,
  4443. ],
  4444. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4445. const device = shepherd.find(ieeeAddr, 1);
  4446. const actions = [
  4447. (cb) => device.bind('genLevelCtrl', coordinator, cb),
  4448. (cb) => device.bind('genPowerCfg', coordinator, cb),
  4449. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  4450. (cb) => device.bind('msPressureMeasurement', coordinator, cb),
  4451.  
  4452. // eslint-disable-next-line
  4453. // https://github.com/yracine/keenhome.device-type/blob/master/devicetypes/keensmartvent.src/keensmartvent.groovy
  4454. (cb) => device.report(
  4455. 'msTemperatureMeasurement', 'measuredValue', repInterval.MINUTE * 2, repInterval.HOUR, 50, cb
  4456. ),
  4457. (cb) => device.foundation(
  4458. 'msPressureMeasurement',
  4459. 'configReport',
  4460. [{
  4461. direction: 0, attrId: 32, dataType: 34, minRepIntval: repInterval.MINUTE * 5,
  4462. maxRepIntval: repInterval.HOUR, repChange: 500,
  4463. }],
  4464. {manufSpec: 1, manufCode: 4443},
  4465. cb
  4466. ),
  4467. (cb) => device.report(
  4468. 'genPowerCfg', 'batteryPercentageRemaining', repInterval.HOUR, repInterval.HOUR * 12, 0, cb
  4469. ),
  4470. ];
  4471.  
  4472. execute(device, actions, callback);
  4473. },
  4474. },
  4475.  
  4476. // AXIS
  4477. {
  4478. zigbeeModel: ['Gear'],
  4479. model: 'GR-ZB01-W',
  4480. vendor: 'AXIS',
  4481. description: 'Gear window shade motor',
  4482. supports: 'open, close, position, battery',
  4483. fromZigbee: [fz.cover_position, fz.cover_position_report, fz.generic_battery, fz.generic_battery_change],
  4484. toZigbee: [tz.cover_open_close, tz.cover_position],
  4485. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4486. const device = shepherd.find(ieeeAddr, 1);
  4487. const actions = [
  4488. (cb) => device.bind('genLevelCtrl', coordinator, cb),
  4489. (cb) => device.bind('genPowerCfg', coordinator, cb),
  4490. (cb) => device.report('genLevelCtrl', 'currentLevel', repInterval.MINUTE, repInterval.HOUR * 12, 0, cb),
  4491. (cb) => device.report(
  4492. 'genPowerCfg', 'batteryPercentageRemaining', repInterval.HOUR, repInterval.HOUR * 12, 0, cb
  4493. ),
  4494. ];
  4495.  
  4496. execute(device, actions, callback);
  4497. },
  4498. },
  4499.  
  4500. // ELKO
  4501. {
  4502. zigbeeModel: ['ElkoDimmerZHA'],
  4503. model: '316GLEDRF',
  4504. vendor: 'ELKO',
  4505. description: 'ZigBee in-wall smart dimmer',
  4506. supports: 'on/off, brightness',
  4507. fromZigbee: [fz.brightness, fz.ignore_onoff_change, fz.state],
  4508. toZigbee: [tz.light_onoff_brightness, tz.ignore_transition],
  4509. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4510. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  4511. const device = shepherd.find(ieeeAddr, 1);
  4512. const actions = [
  4513. (cb) => device.bind('genOnOff', coordinator, cb),
  4514. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  4515. ];
  4516.  
  4517. execute(device, actions, callback);
  4518. },
  4519. options: {
  4520. disFeedbackRsp: true,
  4521. },
  4522. },
  4523.  
  4524. // LivingWise
  4525. {
  4526. zigbeeModel: ['abb71ca5fe1846f185cfbda554046cce'],
  4527. model: 'LVS-ZB500D',
  4528. vendor: 'LivingWise',
  4529. description: 'ZigBee smart dimmer switch',
  4530. supports: 'on/off, brightness',
  4531. toZigbee: [tz.light_onoff_brightness],
  4532. fromZigbee: [
  4533. fz.state, fz.brightness, fz.ignore_light_brightness_report, fz.ignore_onoff_change,
  4534. fz.ignore_genIdentify,
  4535. ],
  4536. },
  4537. {
  4538. zigbeeModel: ['545df2981b704114945f6df1c780515a'],
  4539. model: 'LVS-ZB15S',
  4540. vendor: 'LivingWise',
  4541. description: 'ZigBee smart in-wall switch',
  4542. supports: 'on/off',
  4543. toZigbee: [tz.on_off],
  4544. fromZigbee: [fz.state, fz.ignore_onoff_change, fz.ignore_basic_report, fz.ignore_basic_change],
  4545. },
  4546. {
  4547. zigbeeModel: ['e70f96b3773a4c9283c6862dbafb6a99'],
  4548. model: 'LVS-SM10ZW',
  4549. vendor: 'LivingWise',
  4550. description: 'Door or window contact switch',
  4551. supports: 'contact',
  4552. fromZigbee: [fz.ias_contact_dev_change, fz.ias_contact_status_change],
  4553. toZigbee: [],
  4554. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4555. const device = shepherd.find(ieeeAddr, 1);
  4556. const actions = [
  4557. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  4558. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  4559. ];
  4560.  
  4561. execute(device, actions, callback);
  4562. },
  4563. },
  4564. {
  4565. zigbeeModel: ['895a2d80097f4ae2b2d40500d5e03dcc'],
  4566. model: 'LVS-SN10ZW_SN11',
  4567. vendor: 'LivingWise',
  4568. description: 'Occupancy sensor',
  4569. supports: 'occupancy',
  4570. fromZigbee: [fz.battery_200, fz.generic_ias_zone_occupancy_status_change_no_off_msg],
  4571. toZigbee: [],
  4572. },
  4573. {
  4574. zigbeeModel: ['55e0fa5cdb144ba3a91aefb87c068cff'],
  4575. model: 'LVS-ZB15R',
  4576. vendor: 'LivingWise',
  4577. description: 'Zigbee smart outlet',
  4578. supports: 'on/off',
  4579. fromZigbee: [fz.state, fz.ignore_onoff_change, fz.ignore_basic_report, fz.ignore_basic_change],
  4580. toZigbee: [tz.on_off],
  4581. },
  4582.  
  4583. // Stelpro
  4584. {
  4585. zigbeeModel: ['ST218'],
  4586. model: 'ST218',
  4587. vendor: 'Stelpro',
  4588. description: 'Built-in electronic thermostat',
  4589. supports: 'temperature ',
  4590. fromZigbee: [fz.thermostat_att_report, fz.thermostat_dev_change],
  4591. toZigbee: [
  4592. tz.thermostat_local_temperature, tz.thermostat_occupied_heating_setpoint,
  4593. ],
  4594. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4595. const device = shepherd.find(ieeeAddr, 25);
  4596. const actions = [
  4597. (cb) => device.bind('genBasic', coordinator, cb),
  4598. (cb) => device.bind('genIdentify', coordinator, cb),
  4599. (cb) => device.bind('genGroups', coordinator, cb),
  4600. (cb) => device.bind('hvacThermostat', coordinator, cb),
  4601. (cb) => device.bind('hvacUserInterfaceCfg', coordinator, cb),
  4602. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  4603. (cb) => device.report('hvacThermostat', 'localTemp', 300, 3600, 0, cb),
  4604. ];
  4605. execute(device, actions, callback);
  4606. },
  4607. },
  4608.  
  4609. // Nyce
  4610. {
  4611. zigbeeModel: ['3011'],
  4612. model: 'NCZ-3011-HA',
  4613. vendor: 'Nyce',
  4614. description: 'Door/window sensor',
  4615. supports: 'motion, humidity and temperature',
  4616. fromZigbee: [
  4617. fz.ignore_basic_report,
  4618. fz.ignore_genIdentify, fz.ignore_basic_change, fz.ignore_poll_ctrl,
  4619. fz.generic_battery_change, fz.ignore_iaszone_change,
  4620. fz.ignore_poll_ctrl_change, fz.ignore_genIdentify_change, fz.ignore_iaszone_report,
  4621. fz.ias_zone_motion_status_change, fz.generic_battery, fz.ias_contact_status_change,
  4622. ],
  4623. toZigbee: [],
  4624. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4625. const device = shepherd.find(ieeeAddr, 1);
  4626. const actions = [
  4627. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  4628. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 255}, cb),
  4629. ];
  4630.  
  4631. execute(device, actions, callback);
  4632. },
  4633. },
  4634. {
  4635. zigbeeModel: ['3043'],
  4636. model: 'NCZ-3043-HA',
  4637. vendor: 'Nyce',
  4638. description: 'Ceiling motion sensor',
  4639. supports: 'motion, humidity and temperature',
  4640. fromZigbee: [
  4641. fz.generic_occupancy, fz.generic_humidity, fz.generic_temperature, fz.ignore_basic_report,
  4642. fz.ignore_genIdentify, fz.ignore_basic_change, fz.ignore_poll_ctrl,
  4643. fz.generic_temperature_change, fz.generic_battery_change, fz.ignore_humidity_change,
  4644. fz.ignore_iaszone_change,
  4645. fz.ignore_poll_ctrl_change, fz.ignore_genIdentify_change, fz.ignore_iaszone_report,
  4646. fz.ias_zone_motion_status_change, fz.generic_battery, fz.generic_battery_change,
  4647. ],
  4648. toZigbee: [],
  4649. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4650. const device = shepherd.find(ieeeAddr, 1);
  4651. const actions = [
  4652. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  4653. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 255}, cb),
  4654. ];
  4655.  
  4656. execute(device, actions, callback);
  4657. },
  4658. },
  4659. {
  4660. zigbeeModel: ['3041'],
  4661. model: 'NCZ-3041-HA',
  4662. vendor: 'Nyce',
  4663. description: 'Wall motion sensor',
  4664. supports: 'motion, humidity and temperature',
  4665. fromZigbee: [
  4666. fz.generic_occupancy, fz.generic_humidity, fz.generic_temperature, fz.ignore_basic_report,
  4667. fz.ignore_genIdentify, fz.ignore_basic_change, fz.ignore_poll_ctrl,
  4668. fz.generic_temperature_change, fz.generic_battery_change, fz.ignore_humidity_change,
  4669. fz.ignore_iaszone_change,
  4670. fz.ignore_poll_ctrl_change, fz.ignore_genIdentify_change, fz.ignore_iaszone_report,
  4671. fz.ias_zone_motion_status_change, fz.generic_battery, fz.generic_battery_change,
  4672. ],
  4673. toZigbee: [],
  4674. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4675. const device = shepherd.find(ieeeAddr, 1);
  4676. const actions = [
  4677. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  4678. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 255}, cb),
  4679. ];
  4680.  
  4681. execute(device, actions, callback);
  4682. },
  4683. },
  4684. {
  4685. zigbeeModel: ['3045'],
  4686. model: 'NCZ-3045-HA',
  4687. vendor: 'Nyce',
  4688. description: 'Curtain motion sensor',
  4689. supports: 'motion, humidity and temperature',
  4690. fromZigbee: [
  4691. fz.generic_occupancy, fz.generic_humidity, fz.generic_temperature, fz.ignore_basic_report,
  4692. fz.ignore_genIdentify, fz.ignore_basic_change, fz.ignore_poll_ctrl,
  4693. fz.generic_temperature_change, fz.generic_battery_change, fz.ignore_humidity_change,
  4694. fz.ignore_iaszone_change,
  4695. fz.ignore_poll_ctrl_change, fz.ignore_genIdentify_change, fz.ignore_iaszone_report,
  4696. fz.ias_zone_motion_status_change, fz.generic_battery, fz.generic_battery_change,
  4697. ],
  4698. toZigbee: [],
  4699. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4700. const device = shepherd.find(ieeeAddr, 1);
  4701. const actions = [
  4702. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  4703. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 255}, cb),
  4704. ];
  4705.  
  4706. execute(device, actions, callback);
  4707. },
  4708. },
  4709.  
  4710. // Securifi
  4711. {
  4712. zigbeeModel: ['PP-WHT-US'],
  4713. model: 'PP-WHT-US',
  4714. vendor: 'Securifi',
  4715. description: 'Peanut Smart Plug',
  4716. supports: 'on/off, power measurement',
  4717. fromZigbee: [fz.state, fz.ignore_onoff_change, fz.peanut_electrical, fz.ignore_electrical_change],
  4718. toZigbee: [tz.on_off],
  4719. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4720. const device = shepherd.find(ieeeAddr, 1);
  4721. const onOff = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  4722.  
  4723. // Observed Voltage Multiplier 180 / Divisor 39321 = 0.004578
  4724. // (218.4 units / V = about 22 units per 1/10 V)
  4725. const rmsVoltage = {
  4726. direction: 0, attrId: 1285, dataType: 33,
  4727. minRepIntval: 10, maxRepIntval: 600, repChange: 22,
  4728. };
  4729.  
  4730. // Observed Current Multiplier 72 / Divisor 39321 = 0.001831
  4731. // (546.1 units / A = about 5 units per 1/100 A)
  4732. const rmsCurrent = {
  4733. direction: 0, attrId: 1288, dataType: 33,
  4734. minRepIntval: 10, maxRepIntval: 600, repChange: 5,
  4735. };
  4736.  
  4737. // Observed Power Multiplier 10255 / Divisor 39321 = 0.2608
  4738. // (3.834 units / W = about 1 unit per 1/4 W)
  4739. const activePower = {
  4740. direction: 0, attrId: 1291, dataType: 41,
  4741. minRepIntval: 10, maxRepIntval: 600, repChange: 1,
  4742. };
  4743.  
  4744. // Multipliers and Divisors might never change,
  4745. // but report at max 10 min. to ensure first report comes in reasonably promptly
  4746. const acVoltageMultiplier = {
  4747. direction: 0, attrId: 1536, dataType: 33,
  4748. minRepIntval: 10, maxRepIntval: 600, repChange: 0,
  4749. };
  4750. const acVoltageDivisor = {
  4751. direction: 0, attrId: 1537, dataType: 33,
  4752. minRepIntval: 10, maxRepIntval: 600, repChange: 0,
  4753. };
  4754.  
  4755. const acCurrentMultiplier = {
  4756. direction: 0, attrId: 1538, dataType: 33,
  4757. minRepIntval: 10, maxRepIntval: 600, repChange: 0,
  4758. };
  4759. const acCurrentDivisor = {
  4760. direction: 0, attrId: 1539, dataType: 33,
  4761. minRepIntval: 10, maxRepIntval: 600, repChange: 0,
  4762. };
  4763.  
  4764. const acPowerMultiplier = {
  4765. direction: 0, attrId: 1540, dataType: 33,
  4766. minRepIntval: 10, maxRepIntval: 600, repChange: 0,
  4767. };
  4768. const acPowerDivisor = {
  4769. direction: 0, attrId: 1541, dataType: 33,
  4770. minRepIntval: 10, maxRepIntval: 600, repChange: 0,
  4771. };
  4772.  
  4773. const electricalCfg = [
  4774. rmsVoltage, rmsCurrent, activePower,
  4775. acVoltageMultiplier, acVoltageDivisor,
  4776. acCurrentMultiplier, acCurrentDivisor,
  4777. acPowerMultiplier, acPowerDivisor,
  4778. ];
  4779. const actions = [
  4780. (cb) => device.foundation('genOnOff', 'configReport', [onOff], foundationCfg, cb),
  4781. (cb) => device.bind('genOnOff', coordinator, cb),
  4782. (cb) => device.foundation('haElectricalMeasurement', 'configReport', electricalCfg, foundationCfg, cb),
  4783. (cb) => device.bind('haElectricalMeasurement', coordinator, cb),
  4784. ];
  4785.  
  4786. execute(device, actions, callback);
  4787. },
  4788. },
  4789.  
  4790. // Visonic
  4791. {
  4792. zigbeeModel: ['MCT-350 SMA'],
  4793. model: 'MCT-350 SMA',
  4794. vendor: 'Visonic',
  4795. description: 'Magnetic door & window contact sensor',
  4796. supports: 'contact',
  4797. fromZigbee: [fz.visonic_contact, fz.ignore_power_change],
  4798. toZigbee: [],
  4799. },
  4800. {
  4801. zigbeeModel: ['MCT-340 E'],
  4802. model: 'MCT-340 E',
  4803. vendor: 'Visonic',
  4804. description: 'Magnetic door & window contact sensor',
  4805. supports: 'contact',
  4806. fromZigbee: [fz.visonic_contact, fz.ignore_power_change],
  4807. toZigbee: [],
  4808. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4809. const device = shepherd.find(ieeeAddr, 1);
  4810. const actions = [
  4811. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  4812. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 0}, cb),
  4813. ];
  4814. execute(device, actions, callback);
  4815. },
  4816. },
  4817. {
  4818. zigbeeModel: ['MCT-340 SMA'],
  4819. model: 'MCT-340 SMA',
  4820. vendor: 'Visonic',
  4821. description: 'Magnetic door & window contact sensor',
  4822. supports: 'contact',
  4823. fromZigbee: [fz.visonic_contact, fz.ignore_power_change],
  4824. toZigbee: [],
  4825. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4826. const device = shepherd.find(ieeeAddr, 1);
  4827. const actions = [
  4828. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  4829. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 0}, cb),
  4830. ];
  4831. execute(device, actions, callback);
  4832. },
  4833. },
  4834.  
  4835. // Sunricher
  4836. {
  4837. zigbeeModel: ['ZG9101SAC-HP'],
  4838. model: 'ZG9101SAC-HP',
  4839. vendor: 'Sunricher',
  4840. description: 'ZigBee AC phase-cut dimmer',
  4841. extend: generic.light_onoff_brightness,
  4842. },
  4843. {
  4844. zigbeeModel: ['ZG2833K4_EU06'],
  4845. model: 'SR-ZG9001K4-DIM2',
  4846. vendor: 'Sunricher',
  4847. description: 'ZigBee double key wall switch',
  4848. supports: 'on/off, brightness',
  4849. fromZigbee: [
  4850. fz.genOnOff_cmdOn, fz.genOnOff_cmdOff, fz.cmd_move_with_onoff, fz.cmd_stop_with_onoff, fz.generic_battery,
  4851. fz.ignore_basic_change, fz.ignore_diagnostic_change, fz.ignore_power_change,
  4852. ],
  4853. toZigbee: [],
  4854. },
  4855.  
  4856. // Shenzhen Homa
  4857. {
  4858. zigbeeModel: ['HOMA1008'],
  4859. model: 'HLD812-Z-SC',
  4860. vendor: 'Shenzhen Homa',
  4861. description: 'Smart LED driver',
  4862. extend: generic.light_onoff_brightness,
  4863. },
  4864. {
  4865. zigbeeModel: ['HOMA1002'],
  4866. model: 'HLC610-Z',
  4867. vendor: 'Shenzhen Homa',
  4868. description: 'Wireless dimmable controller',
  4869. extend: generic.light_onoff_brightness,
  4870. },
  4871. {
  4872. zigbeeModel: ['HOMA1031'],
  4873. model: 'HLC821-Z-SC',
  4874. vendor: 'Shenzhen Homa',
  4875. description: 'ZigBee AC phase-cut dimmer',
  4876. extend: generic.light_onoff_brightness,
  4877. },
  4878.  
  4879. // Honyar
  4880. {
  4881. zigbeeModel: ['00500c35'],
  4882. model: 'U86K31ND6',
  4883. vendor: 'Honyar',
  4884. description: '3 gang switch ',
  4885. supports: 'on/off',
  4886. fromZigbee: [],
  4887. toZigbee: [tz.on_off],
  4888. ep: (device) => {
  4889. return {'left': 1, 'center': 2, 'right': 3};
  4890. },
  4891. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4892. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  4893. const ep1 = shepherd.find(ieeeAddr, 1);
  4894. const ep2 = shepherd.find(ieeeAddr, 2);
  4895. const ep3 = shepherd.find(ieeeAddr, 3);
  4896. const actions = [
  4897. (cb) => ep1.bind('genOnOff', coordinator, cb),
  4898. (cb) => ep1.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  4899. (cb) => ep2.bind('genOnOff', coordinator, cb),
  4900. (cb) => ep2.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  4901. (cb) => ep3.bind('genOnOff', coordinator, cb),
  4902. (cb) => ep3.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  4903. ];
  4904.  
  4905. execute(ep1, actions, callback);
  4906. },
  4907. },
  4908.  
  4909. // Danalock
  4910. {
  4911. zigbeeModel: ['V3-BTZB'],
  4912. model: 'V3-BTZB',
  4913. vendor: 'Danalock',
  4914. description: 'BT/ZB smartlock',
  4915. supports: 'lock/unlock, battery',
  4916. fromZigbee: [fz.generic_lock, fz.generic_lock_operation_event, fz.battery_200, fz.ignore_power_change],
  4917. toZigbee: [tz.generic_lock],
  4918. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4919. const device = shepherd.find(ieeeAddr, 1);
  4920. const actions = [
  4921. (cb) => device.report('closuresDoorLock', 'lockState', 0, repInterval.HOUR, 0, cb),
  4922. (cb) => device.report('genPowerCfg', 'batteryPercentageRemaining', 0, repInterval.MAX, 0, cb),
  4923. ];
  4924.  
  4925. execute(device, actions, callback);
  4926. },
  4927. },
  4928.  
  4929. // NET2GRID
  4930. {
  4931. zigbeeModel: ['SP31 '],
  4932. model: 'N2G-SP',
  4933. vendor: 'NET2GRID',
  4934. description: 'White Net2Grid power outlet switch with power meter',
  4935. supports: 'on/off, power and energy measurement',
  4936. fromZigbee: [
  4937. fz.genOnOff_cmdOn, fz.genOnOff_cmdOff, fz.state, fz.ignore_onoff_change,
  4938. fz.ignore_metering_change, fz.generic_power,
  4939. ],
  4940. toZigbee: [tz.on_off],
  4941. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4942. const ep1 = shepherd.find(ieeeAddr, 1);
  4943. const actions = [
  4944. (cb) => ep1.bind('genOnOff', coordinator, cb),
  4945. (cb) => ep1.report('genOnOff', 'onOff', 10, 30, 1, cb),
  4946. ];
  4947.  
  4948. execute(ep1, actions, (result) => {
  4949. if (result) {
  4950. const ep10 = shepherd.find(ieeeAddr, 10);
  4951. const actions = [
  4952. (cb) => ep10.report('seMetering', 'instantaneousDemand', 10, 300, 10, cb),
  4953. (cb) => ep10.report('seMetering', 'currentSummDelivered', 10, 300, [0, 1], cb),
  4954. (cb) => ep10.report('seMetering', 'currentSummReceived', 10, 300, [0, 1], cb),
  4955. (cb) => ep10.read('seMetering', 'unitOfMeasure', cb),
  4956. (cb) => ep10.read('seMetering', 'multiplier', cb),
  4957. (cb) => ep10.read('seMetering', 'divisor', cb),
  4958. ];
  4959.  
  4960. execute(ep10, actions, callback);
  4961. } else {
  4962. callback(result);
  4963. }
  4964. });
  4965. },
  4966. },
  4967.  
  4968. // Third Reality
  4969. {
  4970. zigbeeModel: ['3RSS008Z'],
  4971. model: '3RSS008Z',
  4972. vendor: 'Third Reality',
  4973. description: 'RealitySwitch Plus',
  4974. supports: 'on/off, battery',
  4975. fromZigbee: [
  4976. fz.ignore_onoff_change, fz.state, fz.ignore_genIdentify_change,
  4977. fz.ignore_basic_change,
  4978. ],
  4979. toZigbee: [tz.on_off, tz.ignore_transition],
  4980. },
  4981.  
  4982. // Hampton Bay
  4983. {
  4984. zigbeeModel: ['HDC52EastwindFan', 'HBUniversalCFRemote'],
  4985. model: '99432',
  4986. vendor: 'Hampton Bay',
  4987. description: 'Universal wink enabled white ceiling fan premier remote control',
  4988. supports: 'on/off, brightness, fan_mode and fan_state',
  4989. fromZigbee: generic.light_onoff_brightness.fromZigbee.concat([
  4990. fz.ignore_fan_change, fz.generic_fan_mode,
  4991. ]),
  4992. toZigbee: generic.light_onoff_brightness.toZigbee.concat([tz.fan_mode]),
  4993. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  4994. const device = shepherd.find(ieeeAddr, 1);
  4995. const actions = [
  4996. (cb) => device.bind('genOnOff', coordinator, cb),
  4997. (cb) => device.report('genOnOff', 'onOff', 0, 1000, 0, cb),
  4998. (cb) => device.bind('genLevelCtrl', coordinator, cb),
  4999. (cb) => device.report('genLevelCtrl', 'currentLevel', 0, 1000, 0, cb),
  5000. (cb) => device.bind('hvacFanCtrl', coordinator, cb),
  5001. (cb) => device.report('hvacFanCtrl', 'fanMode', 0, 1000, 0, cb),
  5002. ];
  5003.  
  5004. execute(device, actions, callback);
  5005. },
  5006. options: {
  5007. disFeedbackRsp: true,
  5008. },
  5009. },
  5010. {
  5011. zigbeeModel: ['ETI 12-in Puff light'],
  5012. model: '54668161',
  5013. vendor: 'Hampton Bay',
  5014. description: '12 in. LED smart puff',
  5015. extend: generic.light_onoff_brightness_colortemp,
  5016. },
  5017.  
  5018. // Iluminize
  5019. {
  5020. zigbeeModel: ['DIM Lighting'],
  5021. model: '511.10',
  5022. vendor: 'Iluminize',
  5023. description: 'Zigbee LED-Controller ',
  5024. extend: generic.light_onoff_brightness,
  5025. },
  5026.  
  5027. // Anchor
  5028. {
  5029. zigbeeModel: ['FB56-SKT17AC1.4'],
  5030. model: '67200BL',
  5031. description: 'Vetaar smart plug',
  5032. supports: 'on/off',
  5033. vendor: 'Anchor',
  5034. fromZigbee: [fz.ignore_onoff_change, fz.state],
  5035. toZigbee: [tz.on_off],
  5036. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5037. const device = shepherd.find(ieeeAddr, 3);
  5038. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  5039. const actions = [
  5040. (cb) => device.bind('genOnOff', coordinator, cb),
  5041. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  5042. ];
  5043.  
  5044. execute(device, actions, callback);
  5045. },
  5046. },
  5047.  
  5048. // Gira
  5049. {
  5050. zigbeeModel: [' Remote'],
  5051. model: '2430-100',
  5052. vendor: 'Gira',
  5053. description: 'ZigBee Light Link wall transmitter',
  5054. supports: 'action',
  5055. fromZigbee: [
  5056. fz.GIRA2430_scene_click, fz.GIRA2430_on_click, fz.GIRA2430_off_click, fz.GIRA2430_down_hold,
  5057. fz.GIRA2430_up_hold, fz.GIRA2430_stop,
  5058. ],
  5059. toZigbee: [],
  5060. },
  5061.  
  5062. // RGB genie
  5063. {
  5064. zigbeeModel: ['ZGRC-KEY-013'],
  5065. model: 'ZGRC-KEY-013',
  5066. vendor: 'RGB Genie',
  5067. description: '3 Zone remote and dimmer',
  5068. supports: 'click',
  5069. fromZigbee: [
  5070. fz.generic_battery, fz.ZGRC013_brightness_onoff, fz.ZGRC013_brightness, fz.ZGRC013_brightness_stop,
  5071. fz.ZGRC013_cmdOn, fz.ZGRC013_cmdOff, fz.ZGRC013_scene,
  5072. ],
  5073. toZigbee: [],
  5074. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5075. const device = shepherd.find(ieeeAddr, 1);
  5076. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  5077. const actions = [
  5078. (cb) => device.bind('genOnOff', coordinator, cb),
  5079. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  5080. ];
  5081.  
  5082. execute(device, actions, callback);
  5083. },
  5084. },
  5085.  
  5086. // Sercomm
  5087. {
  5088. zigbeeModel: ['SZ-ESW01-AU'],
  5089. model: 'SZ-ESW01-AU',
  5090. vendor: 'Sercomm',
  5091. description: 'Telstra smart plug',
  5092. supports: 'on/off, power consumption',
  5093. fromZigbee: [fz.state, fz.state_change, fz.SZ_ESW01_AU_power, fz.ignore_metering_change],
  5094. toZigbee: [tz.on_off],
  5095. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5096. const device = shepherd.find(ieeeAddr, 1);
  5097. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  5098. const actions = [
  5099. (cb) => device.bind('genOnOff', coordinator, cb),
  5100. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  5101. (cb) => device.report('seMetering', 'instantaneousDemand', 10, 60, 1, cb),
  5102. ];
  5103.  
  5104. execute(device, actions, callback);
  5105. },
  5106. },
  5107. {
  5108. zigbeeModel: ['XHS2-SE'],
  5109. model: 'XHS2-SE',
  5110. vendor: 'Sercomm',
  5111. description: 'Magnetic door & window contact sensor',
  5112. supports: 'contact',
  5113. fromZigbee: [fz.visonic_contact, fz.ignore_power_change],
  5114. toZigbee: [],
  5115. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5116. const device = shepherd.find(ieeeAddr, 1);
  5117. const actions = [
  5118. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  5119. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 0}, cb),
  5120. ];
  5121. execute(device, actions, callback);
  5122. },
  5123. },
  5124.  
  5125. // Leedarson
  5126. {
  5127. zigbeeModel: ['LED_GU10_OWDT'],
  5128. model: 'ZM350STW1TCF',
  5129. vendor: 'Leedarson',
  5130. description: 'LED PAR16 50 GU10 tunable white',
  5131. extend: generic.light_onoff_brightness_colortemp,
  5132. },
  5133. {
  5134. zigbeeModel: ['M350ST-W1R-01'],
  5135. model: 'M350STW1',
  5136. vendor: 'Leedarson',
  5137. description: 'LED PAR16 50 GU10',
  5138. extend: generic.light_onoff_brightness,
  5139. },
  5140. {
  5141. zigbeeModel: ['ZHA-DimmableLight'],
  5142. model: 'A806S-Q1R',
  5143. vendor: 'Leedarson',
  5144. description: 'LED E27 tunable white',
  5145. extend: generic.light_onoff_brightness,
  5146. },
  5147. {
  5148. zigbeeModel: ['LED_E27_OWDT'],
  5149. model: 'ZA806SQ1TCF',
  5150. vendor: 'Leedarson',
  5151. description: 'LED E27 tunable white',
  5152. extend: generic.light_onoff_brightness_colortemp,
  5153. },
  5154.  
  5155. // GMY
  5156. {
  5157. zigbeeModel: ['CCT box'],
  5158. model: 'B07KG5KF5R',
  5159. vendor: 'GMY Smart Bulb',
  5160. description: 'GMY Smart bulb, 470lm, vintage dimmable, 2700-6500k, E27',
  5161. extend: generic.light_onoff_brightness_colortemp,
  5162. },
  5163.  
  5164. // Meazon
  5165. {
  5166. zigbeeModel: [
  5167. '101.301.001649', '101.301.001838', '101.301.001802', '101.301.001738',
  5168. '101.301.001412', '101.301.001765', '101.301.001814',
  5169. ],
  5170. model: 'MEAZON_BIZY_PLUG',
  5171. vendor: 'Meazon',
  5172. description: 'Bizy plug meter',
  5173. supports: 'on/off, power, energy measurement and temperature',
  5174. fromZigbee: [
  5175. fz.genOnOff_cmdOn, fz.genOnOff_cmdOff, fz.state, fz.ignore_onoff_change,
  5176. fz.meazon_meter, fz.ignore_metering_change,
  5177. ],
  5178. toZigbee: [tz.on_off],
  5179. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5180. const device = shepherd.find(ieeeAddr, 10);
  5181. const onOff = {direction: 0, attrId: 0, dataType: 0x10, minRepIntval: 0x0001, maxRepIntval: 0xfffe};
  5182. const linefrequency = {direction: 0, attrId: 0x2000, dataType: 0x29, minRepIntval: 0x0001,
  5183. maxRepIntval: 300, repChange: 1};
  5184. const actions = [
  5185. (cb) => device.bind('genOnOff', coordinator, cb),
  5186. (cb) => device.foundation('genOnOff', 'configReport', [onOff], foundationCfg, cb),
  5187. (cb) => device.bind('seMetering', coordinator, cb),
  5188. (cb) => device.foundation('seMetering', 'write',
  5189. [{attrId: 0x1005, dataType: 25, attrData: 0x063e}],
  5190. {manufSpec: 1, disDefaultRsp: 0, manufCode: 4406}, cb),
  5191. (cb) => device.foundation('seMetering', 'configReport', [linefrequency],
  5192. {manufSpec: 1, disDefaultRsp: 0, manufCode: 4406}, cb),
  5193. ];
  5194.  
  5195. execute(device, actions, callback);
  5196. },
  5197. },
  5198. {
  5199. zigbeeModel: ['102.106.000235', '102.106.001111', '102.106.000348', '102.106.000256', '102.106.001242'],
  5200. model: 'MEAZON_DINRAIL',
  5201. vendor: 'Meazon',
  5202. description: 'DinRail 1-phase meter',
  5203. supports: 'on/off, power, energy measurement and temperature',
  5204. fromZigbee: [
  5205. fz.genOnOff_cmdOn, fz.genOnOff_cmdOff, fz.state, fz.ignore_onoff_change,
  5206. fz.meazon_meter, fz.ignore_metering_change,
  5207. ],
  5208. toZigbee: [tz.on_off],
  5209. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5210. const device = shepherd.find(ieeeAddr, 10);
  5211. const onOff = {direction: 0, attrId: 0, dataType: 0x10, minRepIntval: 0x0001, maxRepIntval: 0xfffe};
  5212. const linefrequency = {direction: 0, attrId: 0x2000, dataType: 0x29, minRepIntval: 0x0001,
  5213. maxRepIntval: 300, repChange: 1};
  5214. const actions = [
  5215. (cb) => device.bind('genOnOff', coordinator, cb),
  5216. (cb) => device.foundation('genOnOff', 'configReport', [onOff], foundationCfg, cb),
  5217. (cb) => device.bind('seMetering', coordinator, cb),
  5218. (cb) => device.foundation('seMetering', 'write',
  5219. [{attrId: 0x1005, dataType: 25, attrData: 0x063e}],
  5220. {manufSpec: 1, disDefaultRsp: 0, manufCode: 4406}, cb),
  5221. (cb) => device.foundation('seMetering', 'configReport', [linefrequency],
  5222. {manufSpec: 1, disDefaultRsp: 0, manufCode: 4406}, cb),
  5223. ];
  5224.  
  5225. execute(device, actions, callback);
  5226. },
  5227. },
  5228.  
  5229. // Konke
  5230. {
  5231. zigbeeModel: ['3AFE170100510001'],
  5232. model: '2AJZ4KPKEY',
  5233. vendor: 'Konke',
  5234. description: 'Multi-function button',
  5235. supports: 'single, double and long click',
  5236. fromZigbee: [
  5237. fz.konke_click, fz.ignore_onoff_change,
  5238. fz.generic_change_batteryvoltage_3000_2500, fz.generic_batteryvoltage_3000_2500,
  5239. ],
  5240. toZigbee: [],
  5241. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5242. const device = shepherd.find(ieeeAddr, 1);
  5243. const actions = [
  5244. (cb) => device.bind('genPowerCfg', coordinator, cb),
  5245. (cb) => device.report('genPowerCfg', 'batteryVoltage', repInterval.HOUR, repInterval.MAX, cb),
  5246. ];
  5247. execute(device, actions, callback);
  5248. },
  5249. },
  5250. /*
  5251. {
  5252. zigbeeModel: ['3AFE14010402000D'],
  5253. model: '2AJZ4KPBS',
  5254. vendor: 'Konke',
  5255. description: 'Motion sensor',
  5256. supports: '',
  5257. fromZigbee: [
  5258. fz.bosch_ias_zone_motion_status_change,
  5259. fz.generic_change_batteryvoltage_3000_2500, fz.generic_batteryvoltage_3000_2500,
  5260. ],
  5261. // TODO: Not fully supported - need to be configured correctly. Look at
  5262. // https://github.com/Koenkk/zigbee2mqtt/issues/1689
  5263. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5264. const device = shepherd.find(ieeeAddr, 1);
  5265. const actions = [
  5266. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  5267. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  5268. (cb) => device.bind('genPowerCfg', coordinator, cb),
  5269. (cb) => device.report('genPowerCfg', 'batteryVoltage', repInterval.HOUR, repInterval.MAX, cb),
  5270. ];
  5271. execute(device, actions, callback);
  5272. }
  5273. },
  5274. */
  5275. {
  5276. zigbeeModel: ['3AFE140103020000'],
  5277. model: '2AJZ4KPFT',
  5278. vendor: 'Konke',
  5279. description: 'Temperature and humidity sensor',
  5280. supports: 'temperature and humidity',
  5281. fromZigbee: [
  5282. fz.generic_temperature, fz.ignore_temperature_change,
  5283. fz.generic_humidity, fz.ignore_humidity_change,
  5284. fz.generic_batteryvoltage_3000_2500,
  5285. ],
  5286. toZigbee: [],
  5287. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5288. const device = shepherd.find(ieeeAddr, 1);
  5289. const actions = [
  5290. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  5291. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 150, 300, 0.5, cb),
  5292. (cb) => device.bind('genPowerCfg', coordinator, cb),
  5293. (cb) => device.report('genPowerCfg', 'batteryVoltage', repInterval.HOUR, repInterval.MAX, cb),
  5294. ];
  5295. execute(device, actions, callback);
  5296. },
  5297. },
  5298. /*
  5299. {
  5300. zigbeeModel: ['3AFE130104020015'],
  5301. model: '2AJZ4KPDR',
  5302. vendor: 'Konke',
  5303. description: 'Contact sensor',
  5304. supports: '',
  5305. fromZigbee: [
  5306. fz.heiman_contact,
  5307. fz.generic_change_batteryvoltage_3000_2500, fz.generic_batteryvoltage_3000_2500,
  5308. ],
  5309. // TODO: Not fully supported - need to be configured correctly. Look at
  5310. // https://github.com/Koenkk/zigbee2mqtt/issues/1689
  5311. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5312. const device = shepherd.find(ieeeAddr, 1);
  5313. const actions = [
  5314. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  5315. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  5316. (cb) => device.bind('genPowerCfg', coordinator, cb),
  5317. (cb) => device.report('genPowerCfg', 'batteryVoltage', repInterval.HOUR, repInterval.MAX, cb),
  5318. ];
  5319. execute(device, actions, callback);
  5320. }
  5321. },
  5322. */
  5323.  
  5324. // TUYATEC
  5325. {
  5326. zigbeeModel: ['RH3040'],
  5327. model: 'RH3040',
  5328. vendor: 'TUYATEC',
  5329. description: 'PIR sensor',
  5330. supports: 'occupancy',
  5331. fromZigbee: [
  5332. fz.generic_battery_remaining, fz.ignore_power_change, fz.generic_battery_voltage,
  5333. fz.ignore_basic_report, fz.ignore_basic_change, fz.ignore_iaszone_change,
  5334. fz.generic_ias_zone_occupancy_status_change,
  5335. ],
  5336. toZigbee: [],
  5337. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5338. const device = shepherd.find(ieeeAddr, 1);
  5339. const actions = [
  5340. (cb) => device.bind('ssIasZone', coordinator, cb),
  5341. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  5342. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  5343. (cb) => device.bind('genBasic', coordinator, cb),
  5344. (cb) => device.bind('ssIasZone', coordinator, cb),
  5345. (cb) => device.bind('genIdentify', coordinator, cb),
  5346. (cb) => device.bind('genPowerCfg', coordinator, cb),
  5347. (cb) => device.report('genPowerCfg', 'batteryVoltage', 'batteryPercentageRemaining', 1, 1000, 1, cb),
  5348. ];
  5349. execute(device, actions, callback);
  5350. },
  5351. },
  5352. {
  5353. zigbeeModel: ['RH3052'],
  5354. model: 'TT001ZAV20',
  5355. vendor: 'TUYATEC',
  5356. description: 'Temperature & humidity sensor',
  5357. supports: 'temperature and humidity',
  5358. fromZigbee: [
  5359. fz.generic_humidity, fz.generic_temperature, fz.battery_200,
  5360. fz.ignore_humidity_change, fz.ignore_temperature_change,
  5361. ],
  5362. toZigbee: [],
  5363. },
  5364.  
  5365. // Zemismart
  5366. {
  5367. zigbeeModel: ['TS0002'],
  5368. model: 'ZM-CSW002-D',
  5369. vendor: 'Zemismart',
  5370. description: '2 gang switch',
  5371. supports: 'on/off',
  5372. fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change, fz.generic_power, fz.ignore_metering_change],
  5373. toZigbee: [tz.on_off, tz.ignore_transition],
  5374. ep: (device) => {
  5375. return {'l1': 1, 'l2': 2};
  5376. },
  5377. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5378. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  5379. const device = shepherd.find(ieeeAddr, 1);
  5380. const actions = [
  5381. (cb) => device.bind('genOnOff', coordinator, cb),
  5382. (cb) => device.foundation('genOnOff', 'configReport', [cfg], foundationCfg, cb),
  5383. ];
  5384.  
  5385. execute(device, actions, callback);
  5386. },
  5387. },
  5388. {
  5389. zigbeeModel: ['TS0302'],
  5390. model: 'ZM-CSW032-D',
  5391. vendor: 'Zemismart',
  5392. description: 'Curtain/roller blind switch',
  5393. supports: 'open, close, stop',
  5394. fromZigbee: [fz.ignore_basic_report, fz.closuresWindowCovering_report, fz.ignore_closuresWindowCovering_change],
  5395. toZigbee: [tz.cover_control],
  5396. },
  5397.  
  5398. // Sinope
  5399. {
  5400. zigbeeModel: ['TH1123ZB'],
  5401. model: 'TH1123ZB',
  5402. vendor: 'Sinope',
  5403. description: 'Zigbee line volt thermostat',
  5404. supports: 'local temp, units, keypad lockout, mode, state, backlight, outdoor temp, time',
  5405. fromZigbee: [
  5406. fz.thermostat_att_report, fz.thermostat_dev_change,
  5407. ],
  5408. toZigbee: [
  5409. tz.thermostat_local_temperature, tz.thermostat_occupancy,
  5410. tz.thermostat_occupied_heating_setpoint, tz.thermostat_unoccupied_heating_setpoint,
  5411. tz.thermostat_temperature_display_mode, tz.thermostat_keypad_lockout,
  5412. tz.thermostat_system_mode, tz.thermostat_running_state,
  5413. tz.sinope_thermostat_backlight_autodim_param, tz.sinope_thermostat_time,
  5414. tz.sinope_thermostat_enable_outdoor_temperature, tz.sinope_thermostat_outdoor_temperature,
  5415. ],
  5416. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5417. const device = shepherd.find(ieeeAddr, 1);
  5418. const actions = [
  5419. (cb) => device.bind('genBasic', coordinator, cb),
  5420. (cb) => device.bind('genIdentify', coordinator, cb),
  5421. (cb) => device.bind('genGroups', coordinator, cb),
  5422. (cb) => device.bind('hvacThermostat', coordinator, cb),
  5423. (cb) => device.bind('hvacUserInterfaceCfg', coordinator, cb),
  5424. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  5425. (cb) => device.report('hvacThermostat', 'localTemp', 19, 300, 50, cb),
  5426. (cb) => device.report('hvacThermostat', 'pIHeatingDemand', 4, 300, 10, cb),
  5427. (cb) => device.report('hvacThermostat', 'occupiedHeatingSetpoint', 15, 300, 40, cb),
  5428. ];
  5429. execute(device, actions, callback);
  5430. },
  5431. },
  5432.  
  5433. // Lutron
  5434. {
  5435. zigbeeModel: ['LZL4BWHL01 Remote'],
  5436. model: 'LZL4BWHL01',
  5437. vendor: 'Lutron',
  5438. description: 'Connected bulb remote control',
  5439. supports: 'on/off, brightness',
  5440. fromZigbee: [fz.GIRA2430_down_hold, fz.GIRA2430_up_hold, fz.E1524_hold, fz.GIRA2430_stop],
  5441. toZigbee: [],
  5442. },
  5443.  
  5444. // Zen
  5445. {
  5446. zigbeeModel: ['Zen-01'],
  5447. model: 'Zen-01-W',
  5448. vendor: 'Zen',
  5449. description: 'Thermostat',
  5450. supports: 'temperature, heating/cooling system control',
  5451. fromZigbee: [
  5452. fz.ignore_basic_change, fz.generic_battery_voltage,
  5453. fz.thermostat_att_report, fz.thermostat_dev_change,
  5454. ],
  5455. toZigbee: [
  5456. tz.factory_reset, tz.thermostat_local_temperature, tz.thermostat_local_temperature_calibration,
  5457. tz.thermostat_occupancy, tz.thermostat_occupied_heating_setpoint,
  5458. tz.thermostat_occupied_cooling_setpoint,
  5459. tz.thermostat_unoccupied_heating_setpoint, tz.thermostat_setpoint_raise_lower,
  5460. tz.thermostat_remote_sensing, tz.thermostat_control_sequence_of_operation, tz.thermostat_system_mode,
  5461. tz.thermostat_weekly_schedule, tz.thermostat_clear_weekly_schedule, tz.thermostat_weekly_schedule_rsp,
  5462. tz.thermostat_relay_status_log, tz.thermostat_relay_status_log_rsp,
  5463. ],
  5464. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5465. const device = shepherd.find(ieeeAddr, 3);
  5466. const actions = [
  5467. (cb) => device.bind('genBasic', coordinator, cb),
  5468. (cb) => device.bind('genPowerCfg', coordinator, cb),
  5469. (cb) => device.bind('genIdentify', coordinator, cb),
  5470. (cb) => device.bind('genTime', coordinator, cb),
  5471. (cb) => device.bind('genPollCtrl', coordinator, cb),
  5472. (cb) => device.bind('hvacThermostat', coordinator, cb),
  5473. (cb) => device.bind('hvacUserInterfaceCfg', coordinator, cb),
  5474. (cb) => device.report('hvacThermostat', 'localTemp', 5, 30, 0, cb),
  5475. ];
  5476.  
  5477. execute(device, actions, callback);
  5478. },
  5479. },
  5480.  
  5481. // Hej
  5482. {
  5483. zigbeeModel: ['HejSW01'],
  5484. model: 'GLSK3ZB-1711',
  5485. vendor: 'Hej',
  5486. description: 'Goqual 1 gang Switch',
  5487. supports: 'on/off',
  5488. fromZigbee: [fz.state, fz.ignore_onoff_change],
  5489. toZigbee: [tz.on_off],
  5490. },
  5491. {
  5492. zigbeeModel: ['HejSW02'],
  5493. model: 'GLSK3ZB-1712',
  5494. vendor: 'Hej',
  5495. description: 'Goqual 2 gang Switch',
  5496. supports: 'on/off',
  5497. fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change],
  5498. toZigbee: [tz.on_off],
  5499. ep: (device) => {
  5500. return {'top': 1, 'bottom': 2};
  5501. },
  5502. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5503. const ep1 = shepherd.find(ieeeAddr, 1);
  5504. execute(ep1, [(cb) => ep1.bind('genOnOff', coordinator, cb)], () => {
  5505. const ep2 = shepherd.find(ieeeAddr, 2);
  5506. execute(ep2, [(cb) => ep2.bind('genOnOff', coordinator, cb)], callback);
  5507. });
  5508. },
  5509. },
  5510. {
  5511. zigbeeModel: ['HejSW03'],
  5512. model: 'GLSK3ZB-1713',
  5513. vendor: 'Hej',
  5514. description: 'Goqual 3 gang Switch',
  5515. supports: 'on/off',
  5516. fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change],
  5517. toZigbee: [tz.on_off],
  5518. ep: (device) => {
  5519. return {'top': 1, 'center': 2, 'bottom': 3};
  5520. },
  5521. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5522. const ep1 = shepherd.find(ieeeAddr, 1);
  5523. execute(ep1, [(cb) => ep1.bind('genOnOff', coordinator, cb)], () => {
  5524. const ep2 = shepherd.find(ieeeAddr, 2);
  5525. execute(ep2, [(cb) => ep2.bind('genOnOff', coordinator, cb)], () => {
  5526. const ep3 = shepherd.find(ieeeAddr, 3);
  5527. execute(ep3, [(cb) => ep3.bind('genOnOff', coordinator, cb)], callback);
  5528. });
  5529. });
  5530. },
  5531. },
  5532. {
  5533. zigbeeModel: ['HejSW04'],
  5534. model: 'GLSK6ZB-1714',
  5535. vendor: 'Hej',
  5536. description: 'Goqual 4 gang Switch',
  5537. supports: 'on/off',
  5538. fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change],
  5539. toZigbee: [tz.on_off],
  5540. ep: (device) => {
  5541. return {'top_left': 1, 'bottom_left': 2, 'top_right': 3, 'bottom_right': 4};
  5542. },
  5543. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5544. const ep1 = shepherd.find(ieeeAddr, 1);
  5545. execute(ep1, [(cb) => ep1.bind('genOnOff', coordinator, cb)], () => {
  5546. const ep2 = shepherd.find(ieeeAddr, 2);
  5547. execute(ep2, [(cb) => ep2.bind('genOnOff', coordinator, cb)], () => {
  5548. const ep3 = shepherd.find(ieeeAddr, 3);
  5549. execute(ep3, [(cb) => ep3.bind('genOnOff', coordinator, cb)], () => {
  5550. const ep4 = shepherd.find(ieeeAddr, 4);
  5551. execute(ep4, [(cb) => ep4.bind('genOnOff', coordinator, cb)], callback);
  5552. });
  5553. });
  5554. });
  5555. },
  5556. },
  5557. {
  5558. zigbeeModel: ['HejSW05'],
  5559. model: 'GLSK6ZB-1715',
  5560. vendor: 'Hej',
  5561. description: 'Goqual 5 gang Switch',
  5562. supports: 'on/off',
  5563. fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change],
  5564. toZigbee: [tz.on_off],
  5565. ep: (device) => {
  5566. return {'top_left': 1, 'center_left': 2, 'bottom_left': 3, 'top_right': 4, 'bottom_right': 5};
  5567. },
  5568. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5569. const ep1 = shepherd.find(ieeeAddr, 1);
  5570. execute(ep1, [(cb) => ep1.bind('genOnOff', coordinator, cb)], () => {
  5571. const ep2 = shepherd.find(ieeeAddr, 2);
  5572. execute(ep2, [(cb) => ep2.bind('genOnOff', coordinator, cb)], () => {
  5573. const ep3 = shepherd.find(ieeeAddr, 3);
  5574. execute(ep3, [(cb) => ep3.bind('genOnOff', coordinator, cb)], () => {
  5575. const ep4 = shepherd.find(ieeeAddr, 4);
  5576. execute(ep4, [(cb) => ep4.bind('genOnOff', coordinator, cb)], () => {
  5577. const ep5 = shepherd.find(ieeeAddr, 5);
  5578. execute(ep5, [(cb) => ep5.bind('genOnOff', coordinator, cb)], callback);
  5579. });
  5580. });
  5581. });
  5582. });
  5583. },
  5584. },
  5585. {
  5586. zigbeeModel: ['HejSW06'],
  5587. model: 'GLSK6ZB-1716',
  5588. vendor: 'Hej',
  5589. description: 'Goqual 6 gang Switch',
  5590. supports: 'on/off',
  5591. fromZigbee: [fz.generic_state_multi_ep, fz.ignore_onoff_change],
  5592. toZigbee: [tz.on_off],
  5593. ep: (device) => {
  5594. return {
  5595. 'top_left': 1, 'center_left': 2, 'bottom_left': 3,
  5596. 'top_right': 4, 'center_right': 5, 'bottom_right': 6,
  5597. };
  5598. },
  5599. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5600. const ep1 = shepherd.find(ieeeAddr, 1);
  5601. execute(ep1, [(cb) => ep1.bind('genOnOff', coordinator, cb)], () => {
  5602. const ep2 = shepherd.find(ieeeAddr, 2);
  5603. execute(ep2, [(cb) => ep2.bind('genOnOff', coordinator, cb)], () => {
  5604. const ep3 = shepherd.find(ieeeAddr, 3);
  5605. execute(ep3, [(cb) => ep3.bind('genOnOff', coordinator, cb)], () => {
  5606. const ep4 = shepherd.find(ieeeAddr, 4);
  5607. execute(ep4, [(cb) => ep4.bind('genOnOff', coordinator, cb)], () => {
  5608. const ep5 = shepherd.find(ieeeAddr, 5);
  5609. execute(ep5, [(cb) => ep5.bind('genOnOff', coordinator, cb)], () => {
  5610. const ep6 = shepherd.find(ieeeAddr, 6);
  5611. execute(ep6, [(cb) => ep6.bind('genOnOff', coordinator, cb)], callback);
  5612. });
  5613. });
  5614. });
  5615. });
  5616. });
  5617. },
  5618. },
  5619.  
  5620. // Dawon DNS
  5621. {
  5622. zigbeeModel: ['PM-C140-ZB'],
  5623. model: 'PM-C140-ZB',
  5624. vendor: 'Dawon DNS',
  5625. description: 'IOT remote control smart buried-type outlet',
  5626. supports: 'on/off, power and energy measurement',
  5627. fromZigbee: [fz.state, fz.ignore_onoff_change, fz.ignore_metering_change, fz.generic_power],
  5628. toZigbee: [tz.on_off],
  5629. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5630. const device = shepherd.find(ieeeAddr, 1);
  5631. const actions = [
  5632. (cb) => device.bind('genOnOff', coordinator, cb),
  5633. (cb) => device.report('seMetering', 'instantaneousDemand', 10, 60, 1, cb),
  5634. ];
  5635.  
  5636. execute(device, actions, callback);
  5637. },
  5638. },
  5639.  
  5640. // CREE
  5641. {
  5642. zigbeeModel: ['Connected A-19 60W Equivalent ', 'Connected A-19 60W Equivalent '],
  5643. model: 'B00TN589ZG',
  5644. vendor: 'CREE',
  5645. description: 'Connected bulb',
  5646. extend: generic.light_onoff_brightness,
  5647. },
  5648.  
  5649. // Ubisys
  5650. {
  5651. zigbeeModel: ['S1 (5501)', 'S1-R (5601)'],
  5652. model: 'S1',
  5653. vendor: 'Ubisys',
  5654. description: 'Power switch S1',
  5655. supports: 'on/off, power measurement',
  5656. fromZigbee: [fz.state, fz.ignore_onoff_change, fz.generic_power, fz.ignore_metering_change],
  5657. toZigbee: [tz.on_off],
  5658. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5659. const device = shepherd.find(ieeeAddr, 3); // metering
  5660. const actions = [
  5661. (cb) => device.report('seMetering', 'instantaneousDemand', 10, 60, 1, cb),
  5662. ];
  5663. execute(device, actions, callback);
  5664. },
  5665. },
  5666. {
  5667. zigbeeModel: ['S2 (5502)', 'S2-R (5602)'],
  5668. model: 'S2',
  5669. vendor: 'Ubisys',
  5670. description: 'Power switch S2',
  5671. supports: 'on/off, power measurement',
  5672. fromZigbee: [fz.state, fz.ignore_onoff_change, fz.generic_power, fz.ignore_metering_change],
  5673. toZigbee: [tz.on_off],
  5674. ep: (device) => {
  5675. return {'l1': 1, 'l2': 2};
  5676. },
  5677. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5678. const device = shepherd.find(ieeeAddr, 5); // metering
  5679. const actions = [
  5680. (cb) => device.report('seMetering', 'instantaneousDemand', 10, 60, 1, cb),
  5681. ];
  5682. execute(device, actions, callback);
  5683. },
  5684. },
  5685. {
  5686. zigbeeModel: ['D1 (5503)', 'D1-R (5603)'],
  5687. model: 'D1',
  5688. vendor: 'Ubisys',
  5689. description: 'Universal dimmer D1',
  5690. supports: 'on/off, brightness, power measurement',
  5691. fromZigbee: [
  5692. fz.state, fz.brightness_report, fz.ignore_onoff_change, fz.ignore_light_brightness_change,
  5693. fz.generic_power, fz.ignore_metering_change,
  5694. ],
  5695. toZigbee: [tz.light_onoff_brightness],
  5696. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5697. const device = shepherd.find(ieeeAddr, 4); // metering
  5698. const actions = [
  5699. (cb) => device.report('seMetering', 'instantaneousDemand', 10, 60, 1, cb),
  5700. ];
  5701. execute(device, actions, callback);
  5702. },
  5703. },
  5704. {
  5705. zigbeeModel: ['J1 (5502)', 'J1-R (5602)'],
  5706. model: 'J1',
  5707. vendor: 'Ubisys',
  5708. description: 'Shutter control J1',
  5709. supports: 'open, close, stop, position, tilt',
  5710. fromZigbee: [fz.closuresWindowCovering_report_pos_and_tilt, fz.ignore_closuresWindowCovering_change],
  5711. toZigbee: [tz.cover_control, tz.cover_gotopercentage],
  5712. },
  5713.  
  5714. // Lingan
  5715. {
  5716. zigbeeModel: ['SA-003-Zigbee'],
  5717. model: 'DZ4743-00B',
  5718. vendor: 'Lingan',
  5719. description: 'Zigbee OnOff controller',
  5720. supports: 'on/off',
  5721. fromZigbee: [fz.state_change, fz.state],
  5722. toZigbee: [tz.on_off],
  5723. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5724. const device = shepherd.find(ieeeAddr, 1);
  5725. const actions = [
  5726. (cb) => device.bind('genOnOff', coordinator, cb),
  5727. ];
  5728. execute(device, actions, callback);
  5729. },
  5730. },
  5731.  
  5732. // Lutron
  5733. {
  5734. zigbeeModel: ['Z3-1BRL'],
  5735. model: 'Z3-1BRL',
  5736. vendor: 'Lutron',
  5737. description: 'Aurora smart bulb dimmer',
  5738. supports: 'brightness',
  5739. fromZigbee: [fz.dimmer_passthru_brightness],
  5740. toZigbee: [],
  5741. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5742. const ep1 = shepherd.find(ieeeAddr, 1);
  5743. const actions = [
  5744. (cb) => ep1.bind('genLevelCtrl', coordinator, cb),
  5745. ];
  5746. execute(ep1, actions, callback);
  5747. },
  5748. },
  5749.  
  5750. // Piri
  5751. {
  5752. zigbeeModel: ['GASSensor-EM'],
  5753. model: 'HSIO18008',
  5754. vendor: 'Piri',
  5755. description: 'Combustible gas sensor',
  5756. supports: 'gas',
  5757. fromZigbee: [fz.generic_ias_statuschange_gas, fz.ignore_iaszone_change],
  5758. toZigbee: [],
  5759. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5760. const device = shepherd.find(ieeeAddr, 1);
  5761. const actions = [
  5762. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  5763. (cb) => device.functional('ssIasZone', 'enrollRsp', {enrollrspcode: 0, zoneid: 23}, cb),
  5764. ];
  5765. execute(device, actions, callback);
  5766. },
  5767. },
  5768.  
  5769. // PEQ
  5770. {
  5771. zigbeeModel: ['3300'],
  5772. model: '3300-P',
  5773. vendor: 'PEQ',
  5774. description: 'Door & window contact sensor',
  5775. supports: 'contact, temperature',
  5776. fromZigbee: [
  5777. fz.generic_temperature, fz.ignore_temperature_change, fz.smartsense_multi,
  5778. fz.ias_contact_status_change, fz.ignore_iaszone_change, fz.generic_batteryvoltage_3000_2500,
  5779. ],
  5780. toZigbee: [],
  5781. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5782. const device = shepherd.find(ieeeAddr, 1);
  5783. const actions = [
  5784. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  5785. (cb) => device.report('msTemperatureMeasurement', 'measuredValue', 300, 600, 1, cb),
  5786. (cb) => device.bind('genPowerCfg', coordinator, cb),
  5787. (cb) => device.report('genPowerCfg', 'batteryVoltage', 0, 1000, 0, cb),
  5788. (cb) => device.write('ssIasZone', 'iasCieAddr', coordinator.device.getIeeeAddr(), cb),
  5789. (cb) => device.report('ssIasZone', 'zoneStatus', 0, 1000, null, cb),
  5790. (cb) => device.functional('ssIasZone', 'enrollRsp', {
  5791. enrollrspcode: 1,
  5792. zoneid: 255,
  5793. }, cb),
  5794. ];
  5795. execute(device, actions, callback);
  5796. },
  5797. },
  5798.  
  5799. // Lonsonho
  5800. {
  5801. zigbeeModel: ['Plug_01'],
  5802. model: '4000116784070',
  5803. vendor: 'Lonsonho',
  5804. description: 'Smart plug EU',
  5805. supports: 'on/off',
  5806. fromZigbee: [fz.state, fz.ignore_onoff_change],
  5807. toZigbee: [tz.on_off],
  5808. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5809. const device = shepherd.find(ieeeAddr, 11);
  5810. const actions = [
  5811. (cb) => device.report('genOnOff', 'onOff', 1, 60, 1, cb),
  5812. ];
  5813. execute(device, actions, callback);
  5814. },
  5815. },
  5816.  
  5817. // iHORN
  5818. {
  5819. zigbeeModel: ['113D'],
  5820. model: 'LH-32ZB',
  5821. vendor: 'iHORN',
  5822. description: 'Temperature & humidity sensor',
  5823. supports: 'temperature and humidity',
  5824. fromZigbee: [
  5825. fz.generic_humidity, fz.generic_temperature, fz.battery_200,
  5826. fz.ignore_humidity_change, fz.ignore_temperature_change,
  5827. ],
  5828. toZigbee: [],
  5829. },
  5830.  
  5831. //Owon
  5832. {
  5833. zigbeeModel: ['SLC605-LEVELCTR'],
  5834. model: 'SLC605-LEVELCTR',
  5835. vendor: 'OWON',
  5836. description: 'Zigbee Switch',
  5837. supports: 'on/off',
  5838. fromZigbee: [fz.SLC605, fz.ignore_onoff_change, fz.ignore_metering_change, fz.state],
  5839. toZigbee: [tz.on_off, tz.ignore_transition],
  5840. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5841. const cfg = {direction: 0, attrId: 0, dataType: 16, minRepIntval: 0, maxRepIntval: 1000, repChange: 0};
  5842. const device = shepherd.find(ieeeAddr, 1);
  5843. const actions = [
  5844. (cb) => device.bind('genOnOff', coordinator, cb),
  5845. (cb) => device.bind('genBasic', coordinator, cb),
  5846. (cb) => device.bind('genGroups', coordinator, cb),
  5847. (cb) => device.bind('genIdentify', coordinator, cb),
  5848. (cb) => device.report('seMetering', 'instantaneousDemand', 1, 100, 1, cb),
  5849. ];
  5850.  
  5851. execute(device, actions, callback);
  5852. },
  5853. },
  5854.  
  5855. {
  5856. zigbeeModel: ['PCT503'],
  5857. model: 'PCT503',
  5858. vendor: 'OWON',
  5859. description: 'Built-in electronic thermostat',
  5860. supports: 'temperature ',
  5861. fromZigbee: [fz.thermostat_att_report, fz.thermostat_dev_change, fz.ignore_humidity_change, fz.ignore_basic_change],
  5862. toZigbee: [
  5863. tz.thermostat_local_temperature, tz.thermostat_occupied_heating_setpoint,
  5864. tz.factory_reset, tz.thermostat_local_temperature, tz.thermostat_local_temperature_calibration,
  5865. tz.thermostat_occupancy, tz.thermostat_occupied_heating_setpoint,
  5866. tz.thermostat_unoccupied_heating_setpoint, tz.thermostat_setpoint_raise_lower,
  5867. tz.thermostat_remote_sensing, tz.thermostat_control_sequence_of_operation, tz.thermostat_system_mode,
  5868. tz.thermostat_weekly_schedule, tz.thermostat_clear_weekly_schedule, tz.thermostat_weekly_schedule_rsp,
  5869. tz.thermostat_relay_status_log, tz.thermostat_relay_status_log_rsp,
  5870. ],
  5871. configure: (ieeeAddr, shepherd, coordinator, callback) => {
  5872. const device = shepherd.find(ieeeAddr, 1);
  5873. const actions = [
  5874. (cb) => device.bind('genBasic', coordinator, cb),
  5875. (cb) => device.bind('genIdentify', coordinator, cb),
  5876. (cb) => device.bind('genGroups', coordinator, cb),
  5877. (cb) => device.bind('hvacThermostat', coordinator, cb),
  5878. (cb) => device.bind('hvacUserInterfaceCfg', coordinator, cb),
  5879. (cb) => device.bind('msTemperatureMeasurement', coordinator, cb),
  5880. (cb) => device.report('hvacThermostat', 'localTemp', 300, 3600, 0, cb),
  5881. ];
  5882. execute(device, actions, callback);
  5883. },
  5884. },
  5885.  
  5886.  
  5887. {
  5888. zigbeeModel: ['ZHA-CCTLight-GLS0104'],
  5889. model: 'ZHA-CCTLight-GLS0104',
  5890. vendor: 'LDS',
  5891. description: 'CCT Light',
  5892. extend: generic.light_onoff_brightness_colortemp,
  5893. },
  5894. ];
  5895.  
  5896. module.exports = devices.map((device) =>
  5897. device.extend ? Object.assign({}, device.extend, device) : device
  5898. );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement