summaryrefslogtreecommitdiff
path: root/src/home
diff options
context:
space:
mode:
Diffstat (limited to 'src/home')
-rw-r--r--src/home/bot/__init__.py4
-rw-r--r--src/home/bot/wrapper.py15
-rw-r--r--src/home/inverter/__init__.py3
-rw-r--r--src/home/inverter/monitor.py13
4 files changed, 23 insertions, 12 deletions
diff --git a/src/home/bot/__init__.py b/src/home/bot/__init__.py
index 0d93af3..41ad78e 100644
--- a/src/home/bot/__init__.py
+++ b/src/home/bot/__init__.py
@@ -1,6 +1,6 @@
from .reporting import ReportingHelper
from .lang import LangPack
-from .wrapper import Wrapper, Context, text_filter, handlermethod
+from .wrapper import Wrapper, Context, text_filter, handlermethod, IgnoreMarkup
from .store import Store
from .errors import *
-from .util import command_usage, user_any_name \ No newline at end of file
+from .util import command_usage, user_any_name
diff --git a/src/home/bot/wrapper.py b/src/home/bot/wrapper.py
index df7175e..98946ed 100644
--- a/src/home/bot/wrapper.py
+++ b/src/home/bot/wrapper.py
@@ -35,7 +35,7 @@ languages = {
'en': 'English',
'ru': 'Русский'
}
-LANG_STARTED = range(1)
+LANG_STARTED, = range(1)
user_filter: Optional[BaseFilter] = None
@@ -47,7 +47,7 @@ def default_langpack() -> LangPack:
cancel="Cancel",
select_language="Select language on the keyboard.",
invalid_language="Invalid language. Please try again.",
- language_saved='Saved.',
+ saved='Saved.',
)
lang.ru(
start_message="Выберите команду на клавиатуре.",
@@ -55,7 +55,7 @@ def default_langpack() -> LangPack:
cancel="Отмена",
select_language="Выберите язык на клавиатуре.",
invalid_language="Неверный язык. Пожалуйста, попробуйте снова",
- language_saved="Настройки сохранены."
+ saved="Настройки сохранены."
)
return lang
@@ -183,11 +183,12 @@ class Wrapper:
lang: LangPack
reporting: Optional[ReportingHelper]
- def __init__(self):
+ def __init__(self,
+ store: Optional[Store] = None):
self.updater = Updater(config['bot']['token'],
request_kwargs={'read_timeout': 6, 'connect_timeout': 7})
self.lang = default_langpack()
- self.store = Store()
+ self.store = store if store else Store()
self.reporting = None
init_user_filter()
@@ -346,11 +347,11 @@ class Wrapper:
break
if lang is None:
- ValueError('could not find the language')
+ raise ValueError('could not find the language')
self.store.set_user_lang(ctx.user_id, lang)
- ctx.reply(ctx.lang('language_saved'), markup=IgnoreMarkup())
+ ctx.reply(ctx.lang('saved'), markup=IgnoreMarkup())
self.start(ctx)
return ConversationHandler.END
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