Move BLE states to DeviceRegistry and improve logging
- Make deviceRegistry states/lists immutable
This commit is contained in:
parent
8d259a768b
commit
4d7de61e42
3 changed files with 86 additions and 34 deletions
|
|
@ -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 = {};
|
||||
}
|
||||
|
|
@ -62,7 +97,7 @@ class DeviceRegistry {
|
|||
}
|
||||
|
||||
getDeviceBySerialNumber(serialNumber) {
|
||||
return this.plejdDevices[this.deviceIdsBySerial[serialNumber]];
|
||||
return this.getDevice(this.deviceIdsBySerial[serialNumber]);
|
||||
}
|
||||
|
||||
getDeviceName(deviceId) {
|
||||
|
|
@ -76,6 +111,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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue