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 {
|
||||
constructor(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 {
|
||||
constructor(equipmentItem) {
|
||||
super(equipmentItem);
|
||||
@@ -294,6 +365,12 @@ class WeatherService extends Equipment {
|
||||
}
|
||||
}
|
||||
|
||||
class Window extends Equipment {
|
||||
constructor(equipmentItem) {
|
||||
super(equipmentItem);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
const eMgr = new Object();
|
||||
|
||||
Reference in New Issue
Block a user