Compare commits
4 Commits
aaafebdef1
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 684d6ab857 | |||
| 4a051f02d9 | |||
| 9ec41da15e | |||
| 14e62c4a6c |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
||||
/.venv/
|
||||
.idea/
|
||||
7
.idea/misc.xml
generated
7
.idea/misc.xml
generated
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Black">
|
||||
<option name="sdkName" value="Python 3.11 (tmobile-monitor)" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (tmobile-monitor)" project-jdk-type="Python SDK" />
|
||||
</project>
|
||||
10
.idea/tmobile-monitor.iml
generated
10
.idea/tmobile-monitor.iml
generated
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
32
README.md
Normal file
32
README.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# LTE/5G Router Metrics Exporter
|
||||
|
||||
This project provides a simple Prometheus exporter that collects signal metrics
|
||||
from a local network device (commonly a home LTE/5G router) by scraping its
|
||||
web interface at `http://192.168.1.1`.
|
||||
|
||||
The exporter parses the router’s status page using BeautifulSoup and exposes
|
||||
the following metrics on port **8000**:
|
||||
|
||||
- `snr` — Signal-to-Noise Ratio
|
||||
- `rsrp` — Reference Signal Received Power
|
||||
- `rsrq` — Reference Signal Received Quality
|
||||
|
||||
These metrics can be scraped by Prometheus and visualized in Grafana.
|
||||
|
||||
---
|
||||
|
||||
## Features
|
||||
|
||||
- Scrapes metrics directly from your router's HTML status page
|
||||
- Exposes them in Prometheus format
|
||||
- Lightweight and easy to deploy
|
||||
- Designed to run continuously (default refresh interval: **10 seconds**)
|
||||
|
||||
---
|
||||
|
||||
## Requirements
|
||||
|
||||
Install dependencies:
|
||||
|
||||
```bash
|
||||
pip install requests beautifulsoup4 prometheus_client
|
||||
35
main.py
35
main.py
@@ -1,35 +0,0 @@
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
url = 'http://192.168.1.1'
|
||||
|
||||
response = requests.get(url, verify=False)
|
||||
soup = BeautifulSoup(response.text, 'html.parser')
|
||||
snr_element = soup.find('div', id='snr')
|
||||
pci_element = soup.find('div', id='pci')
|
||||
rsrp_element = soup.find('div', id='internetStatusRSRP')
|
||||
rsrq_element = soup.find('div', id='internetStatusRSRQ')
|
||||
|
||||
if snr_element:
|
||||
snr_value = snr_element.text.strip().split()[0] # Extracting the numerical part
|
||||
print(f"SNR value: {snr_value}")
|
||||
else:
|
||||
print("SNR value not found on the page.")
|
||||
|
||||
if pci_element:
|
||||
pci_value = pci_element.text.strip()
|
||||
print(f"PCI value: {pci_value}")
|
||||
else:
|
||||
print("PCI value not found on the page.")
|
||||
|
||||
if rsrp_element:
|
||||
rsrp_value = rsrp_element.text.strip()
|
||||
print(f"RSRP value: {rsrp_value}")
|
||||
else:
|
||||
print("RSRP value not found on the page.")
|
||||
|
||||
if rsrq_element:
|
||||
rsrq_value = rsrq_element.text.strip()
|
||||
print(f"RSRQ value: {rsrq_value}")
|
||||
else:
|
||||
print("RSRQ value not found on the page.")
|
||||
Reference in New Issue
Block a user