Add EnergyMeter
This commit is contained in:
@@ -134,6 +134,65 @@ class Car extends Equipment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class EnergyMeter extends Equipment {
|
||||||
|
constructor(equipmentItem) {
|
||||||
|
super(equipmentItem);
|
||||||
|
|
||||||
|
|
||||||
|
if (this.hasProperty('ConsumptionTotal')) {
|
||||||
|
console.log(`Create rule to trigger calculateConsumption function`);
|
||||||
|
|
||||||
|
this.consumptionTotalItem = items[this.getPropertyItemName('ConsumptionTotal')];
|
||||||
|
rules.JSRule({
|
||||||
|
id: String(utils.randomUUID()),
|
||||||
|
name: 'Trigger calculateConsumption function for ' + this.equipmentItem.name,
|
||||||
|
triggers: [triggers.ItemStateChangeTrigger(this.consumptionTotalItem)],
|
||||||
|
execute: (event) => { this.#calculateConsumptionValues(event) },
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.info(`Item ${this.equipmentItem.name} has no consumptionTotal item`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#calculateConsumptionValues() {
|
||||||
|
console.log('Calculate consumption values');
|
||||||
|
|
||||||
|
let startOfHour = time.toZDT().withMinute(0).withSecond(0).withNano(0);
|
||||||
|
let startOfDay = startOfHour.withHour(0);
|
||||||
|
let startOfWeek = startOfDay.minusDays(time.toZDT().dayOfWeek().value() - 1);
|
||||||
|
let startOfMonth = startOfDay.withDayOfMonth(1);
|
||||||
|
let startOfYear = startOfDay.withMonth(1).withDayOfMonth(1);
|
||||||
|
|
||||||
|
let consumptionTotal = Quantity(this.consumptionTotalItem.state);
|
||||||
|
|
||||||
|
if (this.hasProperty('ConsumptionHour')) {
|
||||||
|
let consumptionHour = consumptionTotal.subtract((this.consumptionTotalItem.history.minimumSince(startOfHour).state));
|
||||||
|
items[this.getPropertyItemName('ConsumptionHour')].postUpdate(consumptionHour);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.hasProperty('ConsumptionToday')) {
|
||||||
|
let consumptionToday = consumptionTotal.subtract((this.consumptionTotalItem.history.minimumSince(startOfDay).state));
|
||||||
|
items[this.getPropertyItemName('ConsumptionToday')].postUpdate(consumptionToday);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.hasProperty('ConsumptionWeek')) {
|
||||||
|
let consumptionWeek = consumptionTotal.subtract((this.consumptionTotalItem.history.minimumSince(startOfWeek).state));
|
||||||
|
items[this.getPropertyItemName('ConsumptionWeek')].postUpdate(consumptionWeek);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.hasProperty('ConsumptionMonth')) {
|
||||||
|
let consumptionMonth = consumptionTotal.subtract((this.consumptionTotalItem.history.minimumSince(startOfMonth).state));
|
||||||
|
items[this.getPropertyItemName('ConsumptionMonth')].postUpdate(consumptionMonth);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.hasProperty('ConsumptionYear')) {
|
||||||
|
let consumptionYear = consumptionTotal.subtract((this.consumptionTotalItem.history.minimumSince(startOfYear).state));
|
||||||
|
items[this.getPropertyItemName('ConsumptionYear')].postUpdate(consumptionYear);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
class Doorbell extends Equipment {
|
class Doorbell extends Equipment {
|
||||||
constructor(equipmentItem) {
|
constructor(equipmentItem) {
|
||||||
super(equipmentItem);
|
super(equipmentItem);
|
||||||
@@ -264,6 +323,18 @@ class IrrigationValve extends Equipment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Light extends Equipment {
|
||||||
|
constructor(equipmentItem) {
|
||||||
|
super(equipmentItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Lightbulb extends Light {
|
||||||
|
constructor(equipmentItem) {
|
||||||
|
super(equipmentItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class PresenceSensor extends Equipment {
|
class PresenceSensor extends Equipment {
|
||||||
constructor(equipmentItem) {
|
constructor(equipmentItem) {
|
||||||
super(equipmentItem);
|
super(equipmentItem);
|
||||||
@@ -294,6 +365,12 @@ class WeatherService extends Equipment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Window extends Equipment {
|
||||||
|
constructor(equipmentItem) {
|
||||||
|
super(equipmentItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const eMgr = new Object();
|
const eMgr = new Object();
|
||||||
@@ -325,4 +402,4 @@ require('@runtime').lifecycleTracker.addDisposeHook(() => {
|
|||||||
for (let equipmentItemName of Object.keys(eMgr)) {
|
for (let equipmentItemName of Object.keys(eMgr)) {
|
||||||
eMgr[equipmentItemName].gc();
|
eMgr[equipmentItemName].gc();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user