diff --git a/changelist.md b/changelist.md index 2a3cde6..debf3f4 100644 --- a/changelist.md +++ b/changelist.md @@ -99,3 +99,12 @@ avtodor-tr - Автодор транспондер Небольшие правки в модуле по работе с puppeteer Добавлен тестовый плагин test3 для тестирования puppeteer chrome (Его так же можно брать за основу) Добавлен оператор a1.by (сотовая связь Беларусь) Автор плагина Exemok + +## mbplugin 0.99.21 (24.09.20) Standalone version +В этой версии появилась возможность использовать mbplugin самостоятельно без mobilebalance, естественно возможен запуск только плагинов из mobilebalance +Новый плагин mosenergosbyt для исползоваия в поле логина пините логин/лицевой_счет +Новый плагин vscale, сделан больше для демонстрации новых возможностей. +Новый плагин currency заменил собой плагины eur, usd, moex и yahoo, для курса валют с сайта ЦБ пишите в поле логин код валюты USD, EUR и т.п. +Если хотите курсы c RBC пишите в логине RBC_USD, если хотите котировки валют с сайта биржи MOEX пишите MOEX_USD/RUB, Хотите котировки ценных бумаг MOEX_TATNP, +Хотите котировки с сайта finence.yahoo.com пишите YAHOO_AAPL +И наконец самое главное, но видимое только авторам плагинов. Писать плагины для движка хрома стало на порядок легче, код переработанных плагинов можно посмотреть в плагинах (test4, rostelecom, vscale, mosenergosbyt) diff --git a/plugin/dbengine.py b/plugin/dbengine.py index f80ec1c..4ff3782 100644 --- a/plugin/dbengine.py +++ b/plugin/dbengine.py @@ -161,11 +161,14 @@ def write_result(self, plugin, login, result, commit=True): line['QueryDateTime'] = datetime.datetime.now().replace(microsecond=0) # no microsecond self.cur.execute(f"select cast(julianday('now')-julianday(max(QueryDateTime)) as integer) from phones where phonenumber='{login}' and operator='{plugin}' and abs(balance-{result['Balance']})>0.02") line['NoChangeDays'] = self.cur.fetchall()[0][0] # Дней без изм. - options_ini = store.ini('Options.ini').read() - if 'Additional' in options_ini and 'AverageDays' in options_ini['Additional']: - average_days = int(options_ini['Additional']['AverageDays']) - else: - average_days = settings.ini['Options']['average_days'] + try: + options_ini = store.ini('Options.ini').read() + if 'Additional' in options_ini and 'AverageDays' in options_ini['Additional']: + average_days = int(options_ini['Additional']['AverageDays']) + else: + average_days = settings.ini['Options']['average_days'] + except: + average_days=30 self.cur.execute(f"select {line['Balance']}-balance from phones where phonenumber='{login}' and operator='{plugin}' and QueryDateTime>date('now','-{average_days} day') and strftime('%Y%m%d', QueryDateTime)<>strftime('%Y%m%d', date('now')) order by QueryDateTime desc limit 1") qres = self.cur.fetchall() if qres != []: diff --git a/plugin/httpserver_mobile.py b/plugin/httpserver_mobile.py index b90032e..c2ee0d1 100644 --- a/plugin/httpserver_mobile.py +++ b/plugin/httpserver_mobile.py @@ -28,6 +28,19 @@ def find_ini_up(fn): if all_ini != []: return all_ini[0] +def detbalance_standalone(filter=[]): + ''' Получаем балансы самостоятельно без mobilebalance + Если filter пустой то по всем номерам из phones.ini + для автономной версии в поле Password2 находится незашифрованный пароль + ВНИМАНИЕ! при редактировании файла phones.ini через MobileBalance строки с паролями будут удалены + ''' + phones = store.ini('phones.ini').phones() + for key,val in phones.items(): + # Проверяем все у кого задан плагин, логин и пароль пароль + if val['Number'] != '' and val['Region'] != '' and val['Password2'] != '': + if filter == [] or val['Region'] in filter or val['Number'] in filter: + # TODO пока дергаем метод от вебсервера там уже все есть, потом может вынесем отдельно + getbalance_plugin('get',{'plugin':[val['Region']],'login':[val['Number']],'password':[val['Password2']],'date':['date']}) def getbalance_plugin(method, param_source): 'fplugin, login, password, date' diff --git a/plugin/settings.py b/plugin/settings.py index 26244bf..3f8016b 100644 --- a/plugin/settings.py +++ b/plugin/settings.py @@ -71,6 +71,6 @@ # host '127.0.0.1' - доступ только локально, '0.0.0.0' - разрешить доступ к по сети 'host': '127.0.0.1', # формат вывода по умолчанию - 'table_format': 'PhoneNumber,Operator,UslugiOn,Balance,RealAverage,BalDelta,BalDeltaQuery,NoChangeDays,CalcTurnOff,SpendMin,SMS,Internet,Minutes,TarifPlan,BlockStatus', # ? UserName + 'table_format': 'PhoneNumber,Operator,UslugiOn,Balance,RealAverage,BalDelta,BalDeltaQuery,NoChangeDays,CalcTurnOff,SpendMin,SMS,Internet,Minutes,TarifPlan,BlockStatus,QueryDateTime', # ? UserName }, } diff --git a/plugin/store.py b/plugin/store.py index bc57e4c..0ad60a0 100644 --- a/plugin/store.py +++ b/plugin/store.py @@ -179,7 +179,11 @@ def phones(self): data[key] = {} data[key]['NN'] = int(secnum) data[key]['Alias'] = el.get('Alias','') + data[key]['Region'] = el.get('Region','') + data[key]['Number'] = el.get('Number','') data[key]['PhoneDescription'] = el.get('PhoneDescription','') + data[key]['Monitor'] = el.get('Monitor','') + data[key]['Password2'] = el.get('Password2','') return data def read_stocks(stocks_name): diff --git a/readme.md b/readme.md index ad6d4e5..79faac0 100644 --- a/readme.md +++ b/readme.md @@ -32,7 +32,7 @@ beeline - Билайн (сотовая связь) megafon - Мегафон (сотовая связь) tele2 - ТЕЛЕ2 (сотовая связь) yota - Yota (сотовая связь) -a1by - A1(velcom) Беларусь (сотовая связь) (НОВЫЙ) +a1by - A1(velcom) Беларусь (сотовая связь) rostelecom - Ростелеком (телефония и интернет) danycom - Danycom (сотовая связь) strelka - Баланс карты стрелка @@ -45,8 +45,9 @@ sodexo - Получение баланса карты Sodexo (подарочны currency - Курсы валют USD, EUR, с ЦБ и с MOEX, курсы акций с MOEX и yahoo finance (заменил плагины eur, usd, moex и yahoo) stock - Рассчет цены портфеля ценных бумаг avtodor-tr - Автодор транспондер -parking_mos - parking.mos.ru оплата парковки (Вход через логин/пароль на login.mos.ru) -mosenergosbyt - Сайт мосэнергосбыт (ЖКХ) +parking_mos - parking.mos.ru оплата парковки (Вход через логин/пароль на login.mos.ru) +mosenergosbyt - Сайт мосэнергосбыт (ЖКХ) +vscale - Облачные серверы для разработчиков ## Кроме простого использования есть еще: Телеграм бот diff --git a/setup_and_check.bat b/setup_and_check.bat index dfd6ba2..cbb2c4a 100644 --- a/setup_and_check.bat +++ b/setup_and_check.bat @@ -1,11 +1,12 @@ @echo OFF %~d0 +cd "%~dp0" + @REM 塞 sys.path 㤠 饭 ਯ 㬮砭, embedded 祬- 몫祭 cd python ..\python\python -c "txt='''import os,sys\nsys.path.insert(0,os.path.split(sys.argv[0])[0])''';open('sitecustomize.py','w').write(txt)" - cd "%~dp0" echo ᮡࠥ DLL call dllsource\compile_all_p.bat diff --git a/standalone/Options.ini b/standalone/Options.ini deleted file mode 100644 index b59c6c7..0000000 --- a/standalone/Options.ini +++ /dev/null @@ -1,3 +0,0 @@ -[Mark] -edBalanceLessThen=2.5 -edTurnOffLessThen=2 diff --git a/standalone/check_balance.bat b/standalone/check_balance.bat deleted file mode 100644 index 3ecd445..0000000 --- a/standalone/check_balance.bat +++ /dev/null @@ -1,3 +0,0 @@ -cd mbplugin\plugin -..\python\python.exe mbplugin.py p_test1 9161112233 bbbbb -..\python\python.exe mbplugin.py p_test3 demo@saures.ru demo \ No newline at end of file diff --git a/standalone/mbstandalone.bat b/standalone/mbstandalone.bat new file mode 100644 index 0000000..570fe2f --- /dev/null +++ b/standalone/mbstandalone.bat @@ -0,0 +1,54 @@ +@echo OFF +%~d0 +cd "%~dp0" + +REM ᫨ mobilebalance - ࠡ⠥, ⮫쪮 ⠥ +if EXIST MobileBalance.exe goto :ERROR1 +REM ᫨ Phones.ini - ⮦ 室 +if not EXIST phones.ini goto :ERROR1 + +REM ᫨ mbplugin.ini - ᮧ ᪠ 樠 +if not EXIST mbplugin.ini goto :INIT + +if "%1"=="init" goto :INIT + +if "%1"=="check" goto :CHECK + +if "%1"=="getbalance" goto :GETBALANCE + +GOTO :EOF + + +@REM 樠 +:INIT +cd mbplugin\plugin +cd ..\plugin +..\python\python -c "import store;ini=store.ini();ini.read();ini.ini['Options']['sqlitestore']='1';ini.write()" +..\python\python -c "import store;ini=store.ini();ini.read();ini.ini['Options']['createhtmlreport']='1';ini.write()" +..\python\python -c "import store,os;ini=store.ini();ini.read();ini.ini['Options']['balance_html']=os.path.abspath('..\\..\\balance.html');ini.write()" +echo %CD% +call ..\setup_and_check.bat +GOTO :EOF + +@REM ஢ઠ INI ४⭮ +:CHECK +ECHO ஢ ᤥ , +cd mbplugin\plugin +cd ..\plugin +..\python\python -c "import store;ini=store.ini()" +..\python\python -c "import store;ini=store.ini('phones.ini')" +timeout 15 +GOTO :EOF + +@REM 祭 ᮢ +:GETBALANCE +cd mbplugin\plugin +cd ..\plugin +..\python\python.exe -c "import httpserver_mobile,sys;httpserver_mobile.detbalance_standalone(filter=sys.argv[2:])" %* +GOTO :EOF + +:ERROR1 +ECHO 䠩 Mobilebalance.exe +ECHO 䠩 Phones.ini +timeout 15 +GOTO :EOF \ No newline at end of file diff --git a/standalone/phones.ini b/standalone/phones.ini index c1b24ea..edd7294 100644 --- a/standalone/phones.ini +++ b/standalone/phones.ini @@ -3,9 +3,11 @@ Region = p_test1 Monitor = TRUE Alias = Number = 9161112233 +Password2 = 123password [Phone] #2 Region = p_test3 Monitor = TRUE Alias = Number = demo@saures.ru +Password2 = demo diff --git a/standalone/readme.md b/standalone/readme.md index 8bc57b6..fc9b4e1 100644 --- a/standalone/readme.md +++ b/standalone/readme.md @@ -1,25 +1,36 @@ -Вариант работающий на текущем коде -1. Распаковать папку mbplugin куда-нибудь -2. !!!. До того как запускать setup_and_check.bat положить содержимое -этой папки (mbplugin\standalone) в папку в которую распаковали mbplugin -3. Запустить setup_and_check.bat -4. Включить запись в sqlite базу в mbpluhin.ini -sqlitestore = 1 -5. Настроить телефоны в phones.ini см пример. -ВАЖНО номера секций не должны повторяться -6. В check_balance.bat прописать вызовы получения баланса - -Текущие проблемы -Слабая диагностика ошибок в phones.ini который пока правится руками - -TODO -Сделать скрипт на инициализацию автономной версии с правильными настройками -инициализация возможна, если в папке отсутствует mobilebalance.exe -Хранить пароли в phones.ini -Сделать скрипт check_phones который будет проверять корректность phones.ini на предмет номеров секций -правильного наименования плагинов и т.п. -Сделать скрипт который будет получать балансы с помощью данных из phones.ini -пароли от ЛК будем хранить в нем. -Скрипт запущенный без параметров получит все балансы, либо с параметром - параметр будет исользован как фильтр какие балансы получать. -Еще вариант - запросить неудачные попытки -В дальнейшем это частично переедет в вебсервер, где будет шедулер и подобный функционал. \ No newline at end of file +# Самостоятельно работающая версия + +## Вариант работающий на текущем коде + +Все это пока глубокая бэта для желающих поиграться. Возможно в процессе становления будут какие-то изменения с хранением настроек, но сама база вряд ли поменяется. + +## Итак инструкция по установке + +1. Создаем в удобном месте папку mbstandalone (название можете выбрать какое нравиться, это не принципиально) +2. Распаковываем в эту папку содержимое архива (папка mbplugin) +3. Из папки mbplugin\standalone перекладываем файлы в корень папки mbstandalone +4. Запустить ```mbstandalone.bat``` без параметров или с параметром init (при первом запуске он настроит параметры по умолчанию и создаст базу BalanceHistory.sqlite для хранения результатов) +5. Настроить телефоны в phones.ini, в папке mbplugin\standalone уже находится настроенный пример с двумя телефонами +ВАЖНО номера секций ([Phone] #2) не должны повторяться +6. Для проверки корректности ini файлов запустить ```mbstandalone.bat check``` диагностика пока так себе, со временем будем в эту сторону копать +7. Для получения балансов ```mbstandalone.bat getbalance``` +8. Если нужно получить по части балансов запустите ```mbstandalone.bat getbalance filter1 filter2 ...``` будут получены только балансы у которых один из фильтров совпадет с плагином или логином +9. Для настройки автоматической проверки баланса необходимо по какому-то расписанию запускать ```mbstandalone.bat chechbalance``` например через системный планировщик ```taskschd.msc```либо как-то еще + +## Для инфо + +* На текущий момент доступен только просмотр веб страницы с балансом [http://localhost:19777/report](http://localhost:19777/report), открыть его можно выбрав Open report через иконку вебсервера в системном трее. +* Также данная страница сохраняется в виде файла balance.html в корневой папке standalone версии +* В Standalone версии для получения баланса не требуется веб сервер, веб сервер нужен только для показа информации +* Все данные по балансам хранятся в файле BalanceHistory.sqlite в корне проекта, это база данных sqllite при желании можно поработать с ней из бругин програ для построения какой-то аналитики. +* При желании можно настроить телеграм бота так же как для обычной версии, но только по варианту 2 (см общий readme раздел Телеграм бот вариант 2 (получаем балансы из sqlite)) +* При желании можно запустить несколько mbplugin одновременно из разных папок на разных портах, но возможны коллизии при управлении хромом, когда несколько разных плагинов попытаются запускать их одновременно + +## Текущие проблемы + +Слабая диагностика ошибок в phones.ini который пока правится руками. + +## Дальнейшее развитие + +* Запросить неудачные попытки +* В дальнейшем это частично переедет в вебсервер, где будет шедулер и подобный функционал.