homebridge-sonnenbatterie-v2
Version:
A Homebridge plugin for a SonnenBatterie with v2 firmware.
74 lines • 3.89 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SonnenBatterieConsumptionAccessory = void 0;
class SonnenBatterieConsumptionAccessory {
platform;
accessory;
service;
constructor(platform, accessory) {
this.platform = platform;
this.accessory = accessory;
// set accessory information
accessory
.getService(platform.Service.AccessoryInformation)
.setCharacteristic(platform.Characteristic.Manufacturer, "RFx Labs")
.setCharacteristic(platform.Characteristic.Model, "Consumption-V1")
.setCharacteristic(platform.Characteristic.SerialNumber, "CONS-V1");
const consumptionService = accessory.getService("SB-Cons-ID") ||
accessory.addService(platform.Service.Switch, "Consumption", "SB-Cons-ID");
consumptionService.setPrimaryService(true);
consumptionService.addOptionalCharacteristic(platform.Characteristic.BatteryLevel);
consumptionService.addOptionalCharacteristic(platform.Characteristic.StatusLowBattery);
consumptionService.addOptionalCharacteristic(platform.Characteristic.StatusActive);
consumptionService.addOptionalCharacteristic(platform.Characteristic.StatusFault);
consumptionService
.getCharacteristic(platform.Characteristic.On)
.onGet(this.hasConsumption.bind(this));
consumptionService
.getCharacteristic(platform.Characteristic.BatteryLevel)
.onGet(this.getBatteryLevel.bind(this));
consumptionService
.getCharacteristic(platform.Characteristic.StatusLowBattery)
.onGet(this.hasLowBattery.bind(this));
consumptionService
.getCharacteristic(platform.Characteristic.StatusActive)
.onGet(this.hasConsumption.bind(this));
this.platform.log.debug("did bind characteristics to service: ", consumptionService.UUID);
this.service = consumptionService;
}
async hasConsumption() {
const value = this.platform.sonnenAPI.batteryStatus.Consumption_W > 0;
return value;
}
async getConsumption() {
const value = this.platform.sonnenAPI.batteryStatus.Consumption_W;
return value;
}
async getBatteryLevel() {
const value = this.platform.sonnenAPI.batteryStatus.USOC;
return value;
}
async hasLowBattery() {
const value = this.platform.sonnenAPI.batteryStatus.USOC <=
this.platform.sonnenAPI.batteryStatus.BackupBuffer;
return value;
}
// Updatable Accessory
// eslint-disable-next-line @typescript-eslint/no-unused-vars
updateAccessory(batteryStatus, _) {
this.platform.log.debug("updating Consumption accessory: ", batteryStatus.Consumption_W);
const hasConsumption = batteryStatus.Consumption_W > 0;
const level = batteryStatus.USOC;
const lowBattery = level < batteryStatus.BackupBuffer;
this.platform.sonnenMqtt.publish("Consumption", batteryStatus.Consumption_W, this.platform.log);
this.platform.sonnenMqtt.publish("USOC", batteryStatus.USOC, this.platform.log);
//Grid (+I/-E) MQTT topic to modulate charge rate based on excess power
this.platform.sonnenMqtt.publish("Grid", batteryStatus.GridFeedIn_W * -1, this.platform.log);
this.service.updateCharacteristic(this.platform.Characteristic.On, hasConsumption);
this.service.updateCharacteristic(this.platform.Characteristic.BatteryLevel, level);
this.service.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, lowBattery);
this.service.updateCharacteristic(this.platform.Characteristic.StatusActive, hasConsumption);
}
}
exports.SonnenBatterieConsumptionAccessory = SonnenBatterieConsumptionAccessory;
//# sourceMappingURL=sonnenConsumptionAccessory.js.map