Break out central DeviceRegistry for all Plejd data

This commit is contained in:
Victor Hagelbäck 2021-02-01 21:18:42 +01:00
parent f2aa7b84c0
commit 4f51063c41

73
plejd/DeviceRegistry.js Normal file
View file

@ -0,0 +1,73 @@
class DeviceRegistry {
apiSite;
cryptoKey = null;
deviceIdsByRoom = {};
deviceIdsBySerial = {};
// Dictionaries of [id]: device per type
plejdDevices = {};
roomDevices = {};
sceneDevices = {};
get allDevices() {
return [
...Object.values(this.plejdDevices),
...Object.values(this.roomDevices),
...Object.values(this.sceneDevices),
];
}
addPlejdDevice(device) {
this.plejdDevices[device.id] = device;
this.deviceIdsBySerial[device.serialNumber] = device.id;
if (!this.deviceIdsByRoom[device.roomId]) {
this.deviceIdsByRoom[device.roomId] = [];
}
this.deviceIdsByRoom[device.roomId].push(device.id);
}
addScene(scene) {
this.plejdDevices[scene.id] = scene;
}
setApiSite(siteDetails) {
this.apiSite = siteDetails;
}
clearPlejdDevices() {
this.plejdDevices = {};
this.deviceIdsByRoom = {};
this.deviceIdsBySerial = {};
}
addRoomDevice(device) {
this.roomDevices[device.id] = device;
}
clearRoomDevices() {
this.roomDevices = {};
}
clearSceneDevices() {
this.sceneDevices = {};
}
getDevice(deviceId) {
return this.plejdDevices[deviceId];
}
getDeviceBySerialNumber(serialNumber) {
return this.plejdDevices[this.deviceIdsBySerial[serialNumber]];
}
getDeviceName(deviceId) {
return (this.plejdDevices[deviceId] || {}).name;
}
getSceneName(sceneId) {
return (this.sceneDevices[sceneId] || {}).name;
}
}
module.exports = DeviceRegistry;