iobroker.enocean
Version:
Connects EnOcean devices via USB/Serial devices with TCM300 Chips
59 lines (53 loc) • 1.94 kB
JavaScript
// This class updates objects if needed
const objectDefinitions = require('../lib/definitions/object_definitions.js').objDef;
class update {
constructor(adapter) {
this.adapter = adapter;
this.main();
}
async main() {
const devices = await this.adapter.getDevicesAsync();
for (const device of devices) {
if (device.common.name !== 'Gateway') {
// Write device.native.eep to eeps
try {
const eeps = device.native.eep;
// For each eep in eeps read the definition from this.adapter.eep
for (const eep of eeps) {
const eepDef = this.adapter.eepList[eep.replace(/-/g, '')];
if (eepDef === undefined || eepDef === null) {
continue;
}
const objects = eepDef.objects;
// For each object in objects check if it exists, except preDefined
for (const object in objects) {
if (object === 'preDefined') {
// Check if preDefined objects exist
for (const preDefinedObject in objects[object]) {
const objectID = `${device._id}.${objects[object][preDefinedObject]}`;
const objectExists = await this.adapter.getObjectAsync(objectID);
if (!objectExists) {
// Create object
this.adapter.log.info('Creating object ' + objectID);
await this.adapter.setObjectAsync(objectID, objectDefinitions[objects[object][preDefinedObject]]);
}
}
} else {
const objectID = `${device._id}.${object}`;
const objectExists = await this.adapter.getObjectAsync(objectID);
// If it does not exist, create it
if (!objectExists) {
this.adapter.log.info('Creating object ' + objectID);
await this.adapter.setObjectNotExistsAsync(objectID, objects[object]);
}
}
}
}
} catch (error) {
this.adapter.log.error('Error updating device ' + device.common.name + ': ' + error);
}
}
}
}
}
module.exports = update;