Move BLE states to DeviceRegistry and improve logging

- Make deviceRegistry states/lists immutable
This commit is contained in:
Victor Hagelbäck 2021-02-20 12:34:30 +01:00
parent e528e2be1f
commit 0dbe0bb95f
3 changed files with 86 additions and 34 deletions

View file

@ -1,3 +1,6 @@
const Logger = require('./Logger');
const logger = Logger.getLogger('device-registry');
class DeviceRegistry {
apiSite;
cryptoKey = null;
@ -19,20 +22,56 @@ class DeviceRegistry {
}
addPlejdDevice(device) {
this.plejdDevices[device.id] = device;
this.deviceIdsBySerial[device.serialNumber] = device.id;
if (!this.deviceIdsByRoom[device.roomId]) {
this.deviceIdsByRoom[device.roomId] = [];
const added = {
...this.plejdDevices[device.id],
...device,
};
this.plejdDevices = {
...this.plejdDevices,
[added.id]: added,
};
this.deviceIdsBySerial[added.serialNumber] = added.id;
logger.verbose(`Added/updated device: ${JSON.stringify(added)}`);
if (added.roomId) {
this.deviceIdsByRoom[added.roomId] = [
...(this.deviceIdsByRoom[added.roomId] || []),
added.id,
];
logger.verbose(`Added to room: ${JSON.stringify(this.deviceIdsByRoom[added.roomId])}`);
}
this.deviceIdsByRoom[device.roomId].push(device.id);
return added;
}
addRoomDevice(device) {
const added = {
...this.roomDevices[device.id],
...device,
};
this.roomDevices = {
...this.roomDevices,
[device.id]: added,
};
logger.verbose(`Added/updated room device: ${JSON.stringify(added)}`);
return added;
}
addScene(scene) {
this.sceneDevices[scene.id] = scene;
}
setApiSite(siteDetails) {
this.apiSite = siteDetails;
const added = {
...this.sceneDevices[scene.id],
...scene,
};
this.sceneDevices = {
...this.sceneDevices,
added,
};
logger.verbose(`Added/updated scene: ${JSON.stringify(added)}`);
return added;
}
clearPlejdDevices() {
@ -41,10 +80,6 @@ class DeviceRegistry {
this.deviceIdsBySerial = {};
}
addRoomDevice(device) {
this.roomDevices[device.id] = device;
}
clearRoomDevices() {
this.roomDevices = {};
}
@ -58,7 +93,7 @@ class DeviceRegistry {
}
getDeviceBySerialNumber(serialNumber) {
return this.plejdDevices[this.deviceIdsBySerial[serialNumber]];
return this.getDevice(this.deviceIdsBySerial[serialNumber]);
}
getDeviceName(deviceId) {
@ -72,6 +107,33 @@ class DeviceRegistry {
getSceneName(sceneId) {
return (this.sceneDevices[sceneId] || {}).name;
}
getState(deviceId) {
const device = this.getDevice(deviceId) || {};
if (device.dimmable) {
return {
state: device.state,
dim: device.dim,
};
}
return {
state: device.state,
};
}
setApiSite(siteDetails) {
this.apiSite = siteDetails;
}
setState(deviceId, state, dim) {
const device = this.addPlejdDevice({ id: deviceId, state });
if (dim && device.dimmable) {
device.dim = dim;
}
if (Logger.shouldLog('silly')) {
logger.silly(`Updated state: ${JSON.stringify(device)}`);
}
}
}
module.exports = DeviceRegistry;