diff --git a/lib/controller.js b/lib/controller.js index 447f8bf0e..29d06effd 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -541,7 +541,7 @@ class Controller { } }; - this.zigbee.publish(deviceID, message.cid, message.cmd, message.zclData, ep, callback); + this.zigbee.publish(deviceID, message.cid, message.cmd, message.zclData, ep, message.type, callback); published.push({message: message, converter: converter}); }); diff --git a/lib/zigbee.js b/lib/zigbee.js index a53e1079f..bfe50d4b2 100644 --- a/lib/zigbee.js +++ b/lib/zigbee.js @@ -183,7 +183,7 @@ class Zigbee { return this.shepherd.find(device.ieeeAddr, 1); } - publish(deviceID, cid, cmd, zclData, ep, callback) { + publish(deviceID, cid, cmd, zclData, ep, type, callback) { const device = this._findDevice(deviceID, ep); if (!device) { logger.error(`Zigbee cannot publish message to device because '${deviceID}' not known by zigbee-shepherd`); @@ -191,27 +191,16 @@ class Zigbee { } logger.info(`Zigbee publish to '${deviceID}', ${cid} - ${cmd} - ${JSON.stringify(zclData)} - ${ep}`); - if (zclData['foudation']!==true) { - device.functional(cid, cmd, zclData, (error) => { - if (error) { - logger.error( - `Zigbee publish to '${deviceID}', ${cid} - ${cmd} - ${JSON.stringify(zclData)} - ${ep} ` + - `failed with error ${error}`); - } - callback(error); - }); - } else { // use foundation command - device.foundation(cid, cmd, [{attrId: zclData['attrId'], dataType: zclData['dataType'], - attrData: zclData['attrData']}], function(error, rsp) { - if (error) { - logger.error( - `Zigbee publish to '${deviceID}', ${cid} - ${cmd} - ${JSON.stringify(zclData)} - ${ep} ` + - `failed with error ${error}, respond ${rsp}`); - } - callback(error); - }); - } + device[type](cid, cmd, zclData, (error) => { + if (error) { + logger.error( + `Zigbee publish to '${deviceID}', ${cid} - ${cmd} - ${JSON.stringify(zclData)} - ${ep} ` + + `failed with error ${error}`); + } + + callback(error); + }); } read(deviceID, cid, attr, ep, callback) {