У меня, как и у многих, есть 4G модем Huawei E3372, прошитый на режим hilink. С прошивкой hilink модем работает в режиме маршрутизатора, и представляется компьютеру в виде сетевого интерфейса (usb-ethernet-rndis).
По умолчанию, модем предоставляет обширную информацию о режиме работы сотовой сети. Прям красота и всё понятно.
Один минус — страничка динамическая, сплошной JS и поэтому curl-ом эту информацию никак не вытянуть.
Пишем небольшой скрипт на playwright:
#!/usr/bin/python3
#
# pip3 install playwright
# playwright install
# http://device_ip/html/deviceinformation.html
#
from playwright.sync_api import Playwright, sync_playwright
import argparse
parser = argparse.ArgumentParser(description='Get mobile data from Hilink modem')
parser.add_argument(metavar='N', action="store", dest="ip", help='IP address of Hilink')
args = parser.parse_args()
CONN_INFO = {
'device_ip': args.ip
}
url = 'http://{device_ip}/html/deviceinformation.html'.format(**CONN_INFO)
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=True)
context = browser.new_context()
page = context.new_page()
page.goto(url)
div = page.query_selector('.diviceInfo_table')
output_text = div.inner_text()
raw_list = output_text.split('\n')
data_dict = {}
for element in raw_list:
data_dict[element.split(':')[0]] = element.split(':')[1][1:]
#print(data_dict)
print('RSSI:{} RSRP:{} RSRQ:{} SINR:{}'.format(data_dict['RSSI'][:-3],
data_dict['RSRP'][:-3],
data_dict['RSRQ'][:-2],
data_dict['SINR'][:-2]))
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
Соответственно, потом этот скрипт можно легко прикрутить к Cacti и тому подобному:
По моему графику видно, что Интернет приходит ко мне в гости только глубокой ночью и не надолго. Такие дела.