aboutsummaryrefslogtreecommitdiff
path: root/src/monitor.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/monitor.py')
-rw-r--r--src/monitor.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/monitor.py b/src/monitor.py
index 398d76b..5fc2391 100644
--- a/src/monitor.py
+++ b/src/monitor.py
@@ -22,6 +22,7 @@ class ChargingEvent(Enum):
AC_CHARGING_STARTED = auto()
AC_DISCONNECTED = auto()
AC_CURRENT_CHANGED = auto()
+ AC_MOSTLY_CHARGED = auto()
AC_CHARGING_FINISHED = auto()
@@ -65,6 +66,7 @@ class InverterMonitor(Thread):
interrupted: bool
battery_state: BatteryState
charging_state: ChargingState
+ mostly_charged: bool
def __init__(self, ac_current_range: Union[List, Tuple] = ()):
super().__init__()
@@ -86,6 +88,7 @@ class InverterMonitor(Thread):
self.active_current = None
self.battery_state = BatteryState.NORMAL
self.charging_state = ChargingState.NOT_CHARGING
+ self.mostly_charged = False
# other stuff
self.interrupted = False
@@ -163,6 +166,10 @@ class InverterMonitor(Thread):
self.charging_event_handler(ChargingEvent.AC_CHARGING_UNAVAILABLE_BECAUSE_SOLAR)
_logger.info('solar power connected during charging, entering AC_BUT_SOLAR state')
+ if self.mostly_charged and v > 53 and pd != BatteryPowerDirection.CHARGING:
+ self.ac_charging_stop(ChargingState.AC_DONE)
+ return
+
state = ChargingState.AC_OK if pd == BatteryPowerDirection.CHARGING else ChargingState.AC_WAITING
if state != self.charging_state:
self.charging_state = state
@@ -175,7 +182,7 @@ class InverterMonitor(Thread):
if self.active_current >= 30:
upper_bound = 56.9
elif self.active_current == 20:
- upper_bound = 56.6
+ upper_bound = 56.7
else:
upper_bound = 54
@@ -220,6 +227,7 @@ class InverterMonitor(Thread):
if self.currents:
self.currents = []
+ self.mostly_charged = False
self.active_current = None
def ac_charging_next_current(self):
@@ -232,6 +240,10 @@ class InverterMonitor(Thread):
self.ac_charging_stop(ChargingState.AC_DONE)
return
+ if current <= 10 and not self.mostly_charged:
+ self.mostly_charged = True
+ self.charging_event_handler(ChargingEvent.AC_MOSTLY_CHARGED)
+
try:
response = inverter.exec('set-max-ac-charging-current', (0, current))
if response['result'] != 'ok':