From a7e491adf6042a002180f71882dbfb8064c1bd7a Mon Sep 17 00:00:00 2001 From: Marcus Westin Date: Fri, 13 Dec 2019 14:13:00 +0100 Subject: [PATCH] added info about device type and ids --- api.js | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++------- mqtt.js | 12 +++++++++++- 2 files changed, 62 insertions(+), 8 deletions(-) diff --git a/api.js b/api.js index 03709c6..f668db3 100644 --- a/api.js +++ b/api.js @@ -101,11 +101,9 @@ class PlejdApi extends EventEmitter { deviceNum = outputs[settings.output]; } - // check if device is dimmable - let dimmable = false; - if (device.hardware) { - dimmable = device.hardware.name == 'DIM-01'; - } + // check if device is dimmable + const plejdDevice = this.site.plejdDevices.find(x => x.deviceId == deviceId); + let { name, type, dimmable } = this._getDeviceType(plejdDevice.hardwareId); if (settings) { dimmable = settings.dimCurve != 'NonDimmable'; @@ -114,8 +112,9 @@ class PlejdApi extends EventEmitter { const newDevice = { id: deviceNum, name: device.title, - type: 'light', - supportsDim: dimmable + type: type, + typeName: name, + dimmable: dimmable }; logger(JSON.stringify(newDevice)); @@ -125,6 +124,51 @@ class PlejdApi extends EventEmitter { return devices; } + + _getDeviceType(hardwareId) { + switch (parseInt(hardwareId)) { + case 1: + case 11: + return { name: "DIM-01", type: 'light', dimmable: true }; + case 2: + return { name: "DIM-02", type: 'light', dimmable: true }; + case 3: + return { name: "CTR-01", type: 'light', dimmable: false }; + case 4: + return { name: "GWY-01", type: 'sensor', dimmable: false }; + case 5: + return { name: "LED-10", type: 'light', dimmable: true }; + case 6: + return { name: "WPH-01", type: 'switch', dimmable: false }; + case 7: + return { name: "REL-01", type: 'switch', dimmable: false }; + case 8: + case 9: + // Unknown + return { name: "-unknown-", type: 'light', dimmable: false }; + case 10: + return { name: "-unknown-", type: 'light', dimmable: false }; + case 12: + // Unknown + return { name: "-unknown-", type: 'light', dimmable: false }; + case 13: + return { name: "Generic", type: 'light', dimmable: false }; + case 14: + case 15: + case 16: + // Unknown + return { name: "-unknown-", type: 'light', dimmable: false }; + case 17: + return { name: "REL-01", type: 'switch', dimmable: false }; + case 18: + return { name: "REL-02", type: 'switch', dimmable: false }; + case 19: + // Unknown + return { name: "-unknown-", type: 'light', dimmable: false }; + case 20: + return { name: "SPR-01", type: 'switch', dimmable: false }; + } + } } module.exports = { PlejdApi }; \ No newline at end of file diff --git a/mqtt.js b/mqtt.js index fc25de5..30b2a3d 100644 --- a/mqtt.js +++ b/mqtt.js @@ -134,7 +134,17 @@ class MqttClient extends EventEmitter { devices.forEach((device) => { logger(`sending discovery for ${device.name}`); - const payload = device.supportsDim ? getDiscoveryDimmablePayload(device) : getDiscoveryPayload(device); + let payload = null; + + if (device.type === 'switch') { + payload = getDiscoveryPayload(device); + } + else { + payload = device.dimmable ? getDiscoveryDimmablePayload(device) : getDiscoveryPayload(device); + } + + console.log(`discovered ${device.name} with Plejd ID ${device.id}.`); + self.deviceMap[device.id] = payload.unique_id; self.client.publish(