homebridge-sonnenbatterie-v2
Version:
A Homebridge plugin for a SonnenBatterie with v2 firmware.
81 lines • 4.05 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SonnenBatterieGridAccessory = void 0;
class SonnenBatterieGridAccessory {
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, "Grid-V1")
.setCharacteristic(platform.Characteristic.SerialNumber, "GRID-V1");
const gridService = accessory.getService("SB-Grid-ID") ||
accessory.addService(platform.Service.Switch, "Grid Export", "SB-Grid-ID");
gridService.addOptionalCharacteristic(platform.Characteristic.BatteryLevel);
gridService.addOptionalCharacteristic(platform.Characteristic.StatusLowBattery);
gridService.addOptionalCharacteristic(platform.Characteristic.StatusActive);
gridService.addOptionalCharacteristic(platform.Characteristic.StatusFault);
gridService
.getCharacteristic(platform.Characteristic.On)
.onGet(this.isImporting.bind(this));
gridService
.getCharacteristic(platform.Characteristic.BatteryLevel)
.onGet(this.getBatteryLevel.bind(this));
gridService
.getCharacteristic(platform.Characteristic.StatusLowBattery)
.onGet(this.hasLowBattery.bind(this));
gridService
.getCharacteristic(platform.Characteristic.StatusActive)
.onGet(this.isImporting.bind(this));
this.platform.log.debug("did bind characteristics to service: ", gridService.UUID);
this.service = gridService;
}
async isImporting() {
const value = this.platform.sonnenAPI.batteryStatus.GridFeedIn_W >= 0;
return value;
}
async isExporting() {
const value = this.platform.sonnenAPI.batteryStatus.GridFeedIn_W < 0;
return value;
}
async getGridFeedIn() {
const value = this.platform.sonnenAPI.batteryStatus.GridFeedIn_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 Grid accessory: ", batteryStatus.GridFeedIn_W);
const isFeedingIntoGrid = batteryStatus.GridFeedIn_W > 0;
const level = batteryStatus.USOC;
const lowBattery = level < batteryStatus.BackupBuffer;
// feature: only publish grid feed-in when we aren't discharing the battery; this should prevent
// us from vehicle charging when the battery is discharging for whatever reason.
const gridFeedInValue = batteryStatus.BatteryDischarging
? 0
: batteryStatus.GridFeedIn_W * -1;
this.platform.sonnenMqtt.publish("Grid", gridFeedInValue, this.platform.log);
this.platform.sonnenMqtt.publish("USOC", batteryStatus.USOC, this.platform.log);
this.platform.sonnenMqtt.publish("RSOC", batteryStatus.RSOC, this.platform.log);
this.service.updateCharacteristic(this.platform.Characteristic.On, isFeedingIntoGrid);
this.service.updateCharacteristic(this.platform.Characteristic.BatteryLevel, level);
this.service.updateCharacteristic(this.platform.Characteristic.StatusLowBattery, lowBattery);
this.service.updateCharacteristic(this.platform.Characteristic.StatusActive, isFeedingIntoGrid);
}
}
exports.SonnenBatterieGridAccessory = SonnenBatterieGridAccessory;
//# sourceMappingURL=sonnenGridAccessory.js.map