1
0

Add EnergyMeter

This commit is contained in:
2023-11-08 07:17:10 +01:00
parent e77beb3041
commit 350ff22ced

View File

@@ -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();