console.loggerName = 'js.equipment'; console.log('Load equipment modules'); class Equipment { constructor(equipmentItem) { console.info('Initialization of eqipment ' + equipmentItem.name + ' with type ' + this.constructor.name); // Set equipmentItem this.equipmentItem = equipmentItem; // Set stateItem, toDo: error when no stateItem existing this.stateItem = items.getItem(this.equipmentItem.name + '_State'); // Initialization of properties this.name = this.equipmentItem.name; this.watch = new Object(); } getValue(valueName, defaultValue) { let valueItemName = this.name + '_' + valueName; let returnValue = defaultValue; if (items[valueItemName] == null) { // Return default value if item is missing console.warn('Item ' + valueItemName + ' is missing'); } else if (items[valueItemName]['state'] == 'NULL') { // Return default value if item state is null console.warn('Item ' + valueItemName + ' is unset') } else { // Return value from item if (items[valueItemName].quantityState == null && items[valueItemName].numericState == null) { returnValue = items[valueItemName]['state']; } else if (items[valueItemName].quantityState == null) { returnValue = items[valueItemName]['numericState'] } else { returnValue = items[valueItemName].quantityState; } } console.debug('Return value ' + valueName + ' for ' + this.name + ': ' + returnValue); return returnValue; } gc() { console.log('Denitialization of eqipment ' + this.name); // Delete all watchObjects for (let watchItem of Object.keys(this.watch)) { this.watch[watchItem].deleteAll(); } } } class Irrigation extends Equipment { constructor(equipmentItem) { super(equipmentItem); } } class IrrigationValve extends Equipment { constructor(equipmentItem) { super(equipmentItem); this.watch['state'] = new watch.Watch(this.stateItem.name); this.autoOff = this.watch['state'].add({ targetState: 'ON', alertFunc: () => { this.stateItem.sendCommand('OFF'); }, alertDelay: 'PT59M' }); } } class TowelRadiator extends Equipment { constructor(equipmentItem) { super(equipmentItem); this.watch['state'] = new watch.Watch(this.stateItem.name); this.autoOff = this.watch['state'].add({ targetState: 'ON', alertFunc: () => { this.stateItem.sendCommand('OFF'); }, alertDelay: 'PT59M' }); } } module.exports = { Equipment, Irrigation, IrrigationValve, TowelRadiator };