diff options
Diffstat (limited to 'src/home')
-rw-r--r-- | src/home/bot/__init__.py | 4 | ||||
-rw-r--r-- | src/home/bot/wrapper.py | 15 | ||||
-rw-r--r-- | src/home/inverter/__init__.py | 3 | ||||
-rw-r--r-- | src/home/inverter/monitor.py | 13 |
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 |