Minor fixes

This commit is contained in:
Victor Hagelbäck 2021-03-31 23:28:25 +02:00
parent 7de1238c12
commit dbc0e02f11
4 changed files with 30 additions and 25 deletions

View file

@ -13,10 +13,8 @@ const logger = Logger.getLogger('plejd-mqtt');
const discoveryPrefix = 'homeassistant';
const nodeId = 'plejd';
const getMqttUniqueId = (/** @type {string} */ uniqueId) => `${nodeId}.${uniqueId}`;
const getSubscribePath = () => `${discoveryPrefix}/+/${nodeId}/#`;
const getBaseTopic = (/** @type {{ uniqueId: string; type: string; }} */ plug) => `${discoveryPrefix}/${plug.type}/${nodeId}/${getMqttUniqueId(plug.uniqueId)}`;
const getBaseTopic = (/** @type {{ uniqueId: string; type: string; }} */ plug) => `${discoveryPrefix}/${plug.type}/${nodeId}/${plug.uniqueId}`;
const getTopicName = (
/** @type {{ uniqueId: string; type: string; }} */ plug,
@ -48,7 +46,7 @@ const getLightDiscoveryPayload = (
) => ({
schema: 'json',
name: device.name,
unique_id: getMqttUniqueId(device.uniqueId),
unique_id: device.uniqueId,
'~': getBaseTopic(device),
state_topic: `~/${TOPICS.STATE}`,
command_topic: `~/${TOPICS.COMMAND}`,

View file

@ -320,6 +320,16 @@ class PlejdApi {
(x) => x.deviceParseId === device.objectId,
);
if (!outputSettings) {
logger.verbose(
`No outputSettings found for ${device.title} (${device.deviceId}), assuming output 0`,
);
}
const bleOutputAddress = this.siteDetails.outputAddress[device.deviceId][
outputSettings ? outputSettings.output : 0
];
if (device.traits === TRAITS.NO_LOAD) {
logger.warn(
`Device ${device.title} (${device.deviceId}) has no load configured and will be excluded`,
@ -330,10 +340,6 @@ class PlejdApi {
outputSettings.output,
);
const bleOutputAddress = this.siteDetails.outputAddress[device.deviceId][
outputSettings.output
];
const plejdDevice = this.siteDetails.plejdDevices.find(
(x) => x.deviceId === device.deviceId,
);
@ -361,13 +367,6 @@ class PlejdApi {
};
this.deviceRegistry.addOutputDevice(outputDevice);
} else {
logger.warn(
`No outputSettings found for ${device.title} (${device.deviceId}), device will not be included`,
);
logger.verbose(
'Fallback cound potentially be implemented by assuming default deviceSettings[deviceId]',
);
}
// What should we do with inputs?!

View file

@ -154,21 +154,26 @@ class PlejBLEHandler extends EventEmitter {
logger.info('BLE init done, waiting for devices.');
}
async sendCommand(command, uniqueOutputId, data) {
/**
* @param {string} command
* @param {number} bleOutputAddress
* @param {number} data
*/
async sendCommand(command, bleOutputAddress, data) {
let payload;
let brightnessVal;
switch (command) {
case COMMANDS.TURN_ON:
payload = this._createHexPayload(uniqueOutputId, BLE_CMD_STATE_CHANGE, '01');
payload = this._createHexPayload(bleOutputAddress, BLE_CMD_STATE_CHANGE, '01');
break;
case COMMANDS.TURN_OFF:
payload = this._createHexPayload(uniqueOutputId, BLE_CMD_STATE_CHANGE, '00');
payload = this._createHexPayload(bleOutputAddress, BLE_CMD_STATE_CHANGE, '00');
break;
case COMMANDS.DIM:
// eslint-disable-next-line no-bitwise
brightnessVal = (data << 8) | data;
payload = this._createHexPayload(
uniqueOutputId,
bleOutputAddress,
BLE_CMD_DIM2_CHANGE,
`01${brightnessVal.toString(16).padStart(4, '0')}`,
);
@ -820,7 +825,9 @@ class PlejBLEHandler extends EventEmitter {
// decoded.toString() could potentially be expensive
logger.verbose(`Raw event received: ${decoded.toString('hex')}`);
logger.verbose(
`Decoded: Device ${outputUniqueId}, cmd ${cmd.toString(16)}, state ${state}, dim ${dim}`,
`Decoded: Device ${outputUniqueId} (BLE address ${bleOutputAddress}), cmd ${cmd.toString(
16,
)}, state ${state}, dim ${dim}`,
);
}

View file

@ -255,9 +255,10 @@ class PlejdDeviceCommunication extends EventEmitter {
return;
}
const queueItem = this.writeQueue.pop();
const deviceName = this.deviceRegistry.getOutputDeviceName(queueItem.uniqueOutputId);
const device = this.deviceRegistry.getOutputDevice(queueItem.uniqueOutputId);
logger.debug(
`Write queue: Processing ${deviceName} (${queueItem.uniqueOutputId}). Command ${
`Write queue: Processing ${device.name} (${queueItem.uniqueOutputId}). Command ${
queueItem.command
}${queueItem.data ? ` ${queueItem.data}` : ''}. Total queue length: ${
this.writeQueue.length
@ -266,7 +267,7 @@ class PlejdDeviceCommunication extends EventEmitter {
if (this.writeQueue.some((item) => item.uniqueOutputId === queueItem.uniqueOutputId)) {
logger.verbose(
`Skipping ${deviceName} (${queueItem.uniqueOutputId}) `
`Skipping ${device.name} (${queueItem.uniqueOutputId}) `
+ `${queueItem.command} due to more recent command in queue.`,
);
// Skip commands if new ones exist for the same uniqueOutputId
@ -276,7 +277,7 @@ class PlejdDeviceCommunication extends EventEmitter {
try {
await this.plejdBleHandler.sendCommand(
queueItem.command,
queueItem.uniqueOutputId,
device.bleOutputAddress,
queueItem.data,
);
} catch (err) {
@ -287,7 +288,7 @@ class PlejdDeviceCommunication extends EventEmitter {
this.writeQueue.push(queueItem); // Add back to top of queue to be processed next;
} else {
logger.error(
`Write queue: Exceeed max retry count (${MAX_RETRY_COUNT}) for ${deviceName} (${queueItem.uniqueOutputId}). Command ${queueItem.command} failed.`,
`Write queue: Exceeed max retry count (${MAX_RETRY_COUNT}) for ${device.name} (${queueItem.uniqueOutputId}). Command ${queueItem.command} failed.`,
);
break;
}