report user requests to solarmon api

This commit is contained in:
Evgeny Zinoviev 2021-11-16 03:14:18 +03:00
parent 5a462e057a
commit 6019ad2cb2
2 changed files with 33 additions and 1 deletions

View File

@ -1,2 +1,3 @@
python-telegram-bot~=13.1
inverterd~=1.0.2
inverterd~=1.0.2
git+https://git.ch1p.io/solarmon_api.git

View File

@ -3,6 +3,7 @@ import logging
import re
import datetime
import json
import solarmon_api
from typing import Optional, Tuple
from argparse import ArgumentParser
@ -29,6 +30,7 @@ from telegram.error import TimedOut
monitor: Optional[InverterMonitor] = None
updater: Optional[Updater] = None
solarmon: Optional[solarmon_api.Client] = None
notify_to: list[int] = []
LT = escape('<=')
flags_map = {
@ -154,6 +156,11 @@ def beautify_table(s):
return '\n'.join(lines)
def solarmon_report(update: Update, message: str = None) -> None:
if message is None:
message = update.message.text
solarmon.log_bot_request(solarmon_api.BotType.INVERTER, update.message.chat_id, message)
#
# command/message handlers
#
@ -197,6 +204,8 @@ def msg_status(update: Update, context: CallbackContext) -> None:
except Exception as e:
handle_exc(update, e)
solarmon_report(update)
def msg_generation(update: Update, context: CallbackContext) -> None:
try:
@ -236,6 +245,8 @@ def msg_generation(update: Update, context: CallbackContext) -> None:
except Exception as e:
handle_exc(update, e)
solarmon_report(update)
def msg_all(update: Update, context: CallbackContext) -> None:
reply(update, "Command not recognized. Please try again.")
@ -258,6 +269,8 @@ def on_set_ac_charging_current(update: Update, context: CallbackContext) -> None
})
reply(update, usage)
solarmon_report(update)
def on_set_ac_charging_thresholds(update: Update, context: CallbackContext) -> None:
try:
@ -278,6 +291,8 @@ def on_set_ac_charging_thresholds(update: Update, context: CallbackContext) -> N
})
reply(update, usage)
solarmon_report(update)
def on_set_battery_under_voltage(update: Update, context: CallbackContext) -> None:
try:
@ -296,6 +311,8 @@ def on_set_battery_under_voltage(update: Update, context: CallbackContext) -> No
})
reply(update, usage)
solarmon_report(update)
def build_flags_keyboard(flags: dict) -> Tuple[str, InlineKeyboardMarkup]:
keyboard = []
@ -313,6 +330,7 @@ def on_flags(update: Update, context: CallbackContext) -> None:
flags = inverter.exec('get-flags')['data']
text, markup = build_flags_keyboard(flags)
reply(update, text, reply_markup=markup)
solarmon_report(update)
def on_status(update: Update, context: CallbackContext) -> None:
@ -322,6 +340,8 @@ def on_status(update: Update, context: CallbackContext) -> None:
except Exception as e:
handle_exc(update, e)
solarmon_report(update)
def on_config(update: Update, context: CallbackContext) -> None:
try:
@ -330,6 +350,8 @@ def on_config(update: Update, context: CallbackContext) -> None:
except Exception as e:
handle_exc(update, e)
solarmon_report(update)
def on_errors(update: Update, context: CallbackContext) -> None:
try:
@ -338,6 +360,8 @@ def on_errors(update: Update, context: CallbackContext) -> None:
except Exception as e:
handle_exc(update, e)
solarmon_report(update)
def on_button(update: Update, context: CallbackContext) -> None:
query = update.callback_query
@ -370,6 +394,8 @@ def on_button(update: Update, context: CallbackContext) -> None:
text, markup = build_flags_keyboard(flags)
query.edit_message_text(text, reply_markup=markup)
solarmon_report(update, message=query.data)
else:
query.answer('unexpected callback data')
@ -432,6 +458,7 @@ if __name__ == '__main__':
parser.add_argument('--inverterd-host', default='127.0.0.1', type=str)
parser.add_argument('--inverterd-port', default=8305, type=int)
parser.add_argument('--verbose', action='store_true')
parser.add_argument('--solarmon-api-token', type=str, required=True)
args = parser.parse_args()
whitelist = list(map(lambda x: int(x), args.users_whitelist))
@ -474,6 +501,10 @@ if __name__ == '__main__':
dispatcher.add_handler(MessageHandler(Filters.all & user_filter, msg_all))
# create api client instance
solarmon = solarmon_api.Client(args.solarmon_api_token, timeout=3)
solarmon.enable_async()
# start the bot
updater.start_polling()