summaryrefslogtreecommitdiff
path: root/src/home/inverter
diff options
context:
space:
mode:
authorEvgeny Zinoviev <me@ch1p.io>2022-08-30 15:57:58 +0300
committerEvgeny Zinoviev <me@ch1p.io>2022-08-30 21:10:51 +0300
commit765bb8d8c416e6ceaedad0aa261dd05617335d29 (patch)
tree5d3280f12f6c75efe221f5cd7b472d412c2bfc16 /src/home/inverter
parent4ed7e6859a6764fec09720d6b51a69a017ccd03f (diff)
inverter: a/c input mode switching
Diffstat (limited to 'src/home/inverter')
-rw-r--r--src/home/inverter/__init__.py3
-rw-r--r--src/home/inverter/monitor.py13
2 files changed, 13 insertions, 3 deletions
diff --git a/src/home/inverter/__init__.py b/src/home/inverter/__init__.py
index b184580..374bc7b 100644
--- a/src/home/inverter/__init__.py
+++ b/src/home/inverter/__init__.py
@@ -2,7 +2,8 @@ from .monitor import (
ChargingEvent,
InverterMonitor,
BatteryState,
- BatteryPowerDirection
+ BatteryPowerDirection,
+ ACMode
)
from .inverter_wrapper import wrapper_instance
from .util import beautify_table
diff --git a/src/home/inverter/monitor.py b/src/home/inverter/monitor.py
index 3835365..8d3220e 100644
--- a/src/home/inverter/monitor.py
+++ b/src/home/inverter/monitor.py
@@ -47,6 +47,11 @@ class BatteryState(Enum):
CRITICAL = auto()
+class ACMode(Enum):
+ GENERATOR = 'generator'
+ UTILITIES = 'utilities'
+
+
def _pd_from_string(pd: str) -> BatteryPowerDirection:
if pd == 'Discharge':
return BatteryPowerDirection.DISCHARGING
@@ -72,7 +77,6 @@ TODO:
- поддержать возможность бесшовного перезапуска бота, когда монитор понимает, что зарядка уже идет, и он
не запускает программу с начала, а продолжает с уже существующей позиции. Уведомления при этом можно не
присылать совсем, либо прислать какое-то одно приложение, в духе "программа была перезапущена"
-- баг: при отключении генератора бот не присылает никаких уведомлений, а должен
"""
@@ -87,6 +91,7 @@ class InverterMonitor(Thread):
self.interrupted = False
self.min_allowed_current = 0
+ self.ac_mode = None
# Event handlers for the bot.
self.charging_event_handler = None
@@ -152,7 +157,8 @@ class InverterMonitor(Thread):
logger.debug(f'got status: ac={ac}, solar={solar}, v={v}, pd={pd}')
- self.gen_charging_program(ac, solar, v, pd)
+ if self.ac_mode == ACMode.GENERATOR:
+ self.gen_charging_program(ac, solar, v, pd)
if not ac or pd != BatteryPowerDirection.CHARGING:
# if AC is disconnected or not charging, run the low voltage checking program
@@ -440,6 +446,9 @@ class InverterMonitor(Thread):
def set_error_handler(self, handler: Callable):
self.error_handler = handler
+ def set_ac_mode(self, mode: ACMode):
+ self.ac_mode = mode
+
def stop(self):
self.interrupted = True