summaryrefslogtreecommitdiff
path: root/src/inverter_bot.py
diff options
context:
space:
mode:
authorEvgeny Zinoviev <me@ch1p.io>2023-05-31 09:22:00 +0300
committerEvgeny Zinoviev <me@ch1p.io>2023-06-10 02:07:23 +0300
commitf29e139cbb7e4a4d539cba6e894ef4a6acd312d6 (patch)
tree6246f126325c5c36fb573134a05f2771cd747966 /src/inverter_bot.py
parent3e3753d726f8a02d98368f20f77dd9fa739e3d80 (diff)
WIP: big refactoring
Diffstat (limited to 'src/inverter_bot.py')
-rwxr-xr-xsrc/inverter_bot.py99
1 files changed, 76 insertions, 23 deletions
diff --git a/src/inverter_bot.py b/src/inverter_bot.py
index fd5acf3..ecf01fc 100755
--- a/src/inverter_bot.py
+++ b/src/inverter_bot.py
@@ -4,14 +4,16 @@ import re
import datetime
import json
import itertools
+import sys
from inverterd import Format, InverterError
from html import escape
from typing import Optional, Tuple, Union
from home.util import chunks
-from home.config import config
+from home.config import config, AppConfigUnit
from home.telegram import bot
+from home.telegram.config import TelegramBotConfig, TelegramUserListType
from home.inverter import (
wrapper_instance as inverter,
beautify_table,
@@ -24,12 +26,17 @@ from home.inverter.types import (
ACMode,
OutputSourcePriority
)
-from home.database.inverter_time_formats import *
+from home.database.inverter_time_formats import FormatDate
from home.api.types import BotType
from home.api import WebAPIClient
from telegram import ReplyKeyboardMarkup, InlineKeyboardMarkup, InlineKeyboardButton
-monitor: Optional[InverterMonitor] = None
+
+if __name__ != '__main__':
+ print(f'this script can not be imported as module', file=sys.stderr)
+ sys.exit(1)
+
+
db = None
LT = escape('<=')
flags_map = {
@@ -42,9 +49,56 @@ flags_map = {
'alarm_on_on_primary_source_interrupt': 'ALRM',
'fault_code_record': 'FTCR',
}
-
logger = logging.getLogger(__name__)
-config.load('inverter_bot')
+
+
+class InverterBotConfig(AppConfigUnit, TelegramBotConfig):
+ NAME = 'inverter_bot'
+
+ @staticmethod
+ def schema() -> Optional[dict]:
+ acmode_item_schema = {
+ 'thresholds': {
+ 'type': 'list',
+ 'required': True,
+ 'schema': {
+ 'type': 'list',
+ 'min': 40,
+ 'max': 60
+ },
+ },
+ 'initial_current': {'type': 'integer'}
+ }
+
+ return {
+ **super(TelegramBotConfig).schema(),
+ 'ac_mode': {
+ 'type': 'dict',
+ 'required': True,
+ 'schema': {
+ 'generator': acmode_item_schema,
+ 'utilities': acmode_item_schema
+ }
+ },
+ 'monitor': {
+ 'type': 'dict',
+ 'required': True,
+ 'schema': {
+ 'vlow': {'type': 'integer', 'required': True},
+ 'vcrit': {'type': 'integer', 'required': True},
+ 'gen_currents': {'type': 'list', 'schema': {'type': 'integer'}, 'required': True},
+ 'gen_raise_intervals': {'type': 'list', 'schema': {'type': 'integer'}, 'required': True},
+ 'gen_cur30_v_limit': {'type': 'float', 'required': True},
+ 'gen_cur20_v_limit': {'type': 'float', 'required': True},
+ 'gen_cur10_v_limit': {'type': 'float', 'required': True},
+ 'gen_floating_v': {'type': 'integer', 'required': True},
+ 'gen_floating_time_max': {'type': 'integer', 'required': True}
+ }
+ }
+ }
+
+
+config.load_app(InverterBotConfig)
bot.initialize()
bot.lang.ru(
@@ -863,28 +917,27 @@ class InverterStore(bot.BotDatabase):
self.commit()
-if __name__ == '__main__':
- inverter.init(host=config['inverter']['ip'], port=config['inverter']['port'])
+inverter.init(host=config['inverter']['ip'], port=config['inverter']['port'])
- bot.set_database(InverterStore())
- bot.enable_logging(BotType.INVERTER)
+bot.set_database(InverterStore())
+bot.enable_logging(BotType.INVERTER)
- bot.add_conversation(SettingsConversation(enable_back=True))
- bot.add_conversation(ConsumptionConversation(enable_back=True))
+bot.add_conversation(SettingsConversation(enable_back=True))
+bot.add_conversation(ConsumptionConversation(enable_back=True))
- monitor = InverterMonitor()
- monitor.set_charging_event_handler(monitor_charging)
- monitor.set_battery_event_handler(monitor_battery)
- monitor.set_util_event_handler(monitor_util)
- monitor.set_error_handler(monitor_error)
- monitor.set_osp_need_change_callback(osp_change_cb)
+monitor = InverterMonitor()
+monitor.set_charging_event_handler(monitor_charging)
+monitor.set_battery_event_handler(monitor_battery)
+monitor.set_util_event_handler(monitor_util)
+monitor.set_error_handler(monitor_error)
+monitor.set_osp_need_change_callback(osp_change_cb)
- setacmode(getacmode())
+setacmode(getacmode())
- if not config.get('monitor.disabled'):
- logging.info('starting monitor')
- monitor.start()
+if not config.get('monitor.disabled'):
+ logging.info('starting monitor')
+ monitor.start()
- bot.run()
+bot.run()
- monitor.stop()
+monitor.stop()