Werte einordnen
Die drei Zahlen aus der Web-UI (Erweitert → Status → LTE) oder aus dem Skript eintragen. Die Einordnung folgt den üblichen Praxis-Richtwerten für LTE; es sind keine Herstellerangaben.
Noch keine Werte.
Worum es geht
Der Archer MR600 ist ein LTE-Router mit SIM-Slot, oft als Backup-Uplink oder auf dem Land als Hauptanschluss. Wie gut der Empfang gerade ist, weiß nur der Router selbst: UniFi, Fritz!Box oder ein Ping sehen Latenz und Ausfälle, nicht ob die Antenne richtig steht oder die Zelle voll ist. Die Web-UI zeigt die Werte, aber niemand schaut jede Minute hin. Die Tether-App gibt es nur fürs Telefon.
Die Bibliothek tplinkrouterc6u spricht das Login-Protokoll der TP-Link-Router; das eigentliche Problem ist, welcher ihrer Clients zu welcher Firmware passt und wie man den Router nicht aus Versehen sperrt. Genau das steht hier, verifiziert am Archer MR600 v3.0 mit Firmware 1.3.0 (Build 250915), der seit Wochen jede Minute abgefragt wird.
Schnellstart
# Bibliothek und Skript (Linux, Raspberry Pi, Mac)
python3 -m venv ~/mr600 && ~/mr600/bin/pip install tplinkrouterc6u
curl -o ~/mr600/mr600.py https://bergclimber.de/mr600/dl/mr600.py
# Passwort der Web-UI (Benutzer gibt es dort keinen, intern heißt er "admin")
export MR600_PASSWORD='…'
# In der Web-UI abmelden, dann:
~/mr600/bin/python3 ~/mr600/mr600.py status --host http://192.168.1.1 --firmware
~/mr600/bin/python3 ~/mr600/mr600.py json
~/mr600/bin/python3 ~/mr600/mr600.py prometheusDer erste Aufruf sollte mit abgemeldeter Web-UI passieren. Schlägt er mit „Passwort falsch" fehl, nicht blind wiederholen: nach fünf Fehlversuchen sperrt der Router den Login für längere Zeit. Erst Benutzername, Client und Passwort prüfen (siehe Fallen).
Die Fallen
1. Der falsche Client sieht aus wie ein falsches Passwort
tplinkrouterc6u hat drei Clients für die MR-Serie. Für den MR600 v3 mit aktueller Firmware passt TPLinkMR6400v7Client (MD5-Hash, RSA-Signatur, Sequenznummer aus /cgi/getParm). TPLinkMR600Client erwartet ECC und scheitert, TPLinkMR200Client bringt Fehler 71234. Die Auto-Erkennung der Bibliothek wählt hier richtig, das Skript nutzt MR6400v7 als Standard und lässt sich per --client umstellen.
2. username="admin" ist Pflicht, obwohl die Web-UI kein Benutzerfeld hat
Die Login-Seite hasht MD5("admin" + Passwort). Der MR6400v7-Client nimmt per Default einen leeren Benutzernamen und bekommt Fehler 71233 „Passwort falsch", obwohl das Passwort stimmt. Das kostet eine Stunde, wenn man es nicht weiß.
3. Eine Admin-Session, und nur eine
Solange jemand in der Web-UI angemeldet ist, scheitert jeder weitere Login (/cgi/getBusy meldet isLogined). Umgekehrt sperrt ein Skript, das die Session hält, dich aus der Web-UI aus. Deshalb pro Abfrage anmelden, lesen, abmelden. Das Skript macht das immer, auch im Fehlerfall.
4. Fünf Fehlversuche, dann ist zu
TP-Link sperrt den Login nach fünf Ablehnungen für längere Zeit, auch per Web-UI. Ein Monitor, der jede Minute mit falschem Passwort anklopft, sperrt sich selbst aus. Das Skript legt nach einer Ablehnung 30 Minuten Pause ein, bevor es wieder versucht.
5. SNR kommt in Zehntel-dB
Das Feld rfInfoSnr liefert 152 für 15,2 dB; die Web-UI zeigt gerundete ganze dB. RSRP und RSRQ kommen dagegen direkt in dBm bzw. dB. Wer den Rohwert ungeteilt in ein Dashboard schreibt, wundert sich über SNR 150.
6. SIM-Status 3 ist der Normalzustand
sim_status 3 heißt „SIM card prepared" und ist bei dieser Firmware der Zustand bei funktionierender Verbindung, nicht ein Zwischenschritt. connect_status 4 ist „verbunden". Alerts auf andere Werte als diese beiden setzen, nicht auf vermeintlich „fertigere" Codes.
Das Skript
mr600.py ist ein einzelnes Python-Skript über der Bibliothek: Login, Status, Logout, mit Backoff bei Ablehnung. Drei Ausgabeformate: lesbar, JSON und Prometheus-Textformat, letzteres wahlweise direkt an ein Pushgateway. Passwort per Umgebungsvariable oder Datei, nie als Argument (das stünde in der Prozessliste).
mr600.py status [--firmware] lesbar, mit Einordnung
mr600.py json für eigene Skripte
mr600.py prometheus [--push URL] Metriken lte_* (Pushgateway: PUT)
mr600.py watch --format prometheus --interval 60 --push http://localhost:9091/metrics/job/lte_signal
Optionen: --host http://192.168.1.1 --username admin --client MR6400v7|MR600|MR200|auto --password-file PFADAls Dienst mit Prometheus und Grafana
Beispiel-Unit: mr600.service. Prometheus scrapt das Pushgateway (honor_labels), die Metriken heißen lte_rsrp_dbm, lte_rsrq_db, lte_snr_db, lte_signal_level, lte_network_type, lte_sim_status, lte_connect_status, lte_rx/tx_speed_bytes_per_second, lte_total_statistics_bytes, lte_sms_unread und lte_signal_up. Sinnvolle Alerts aus unserem Betrieb:
LteSignalWeak: lte_rsrp_dbm < -110 für 15 minLteSignalNoisy: lte_snr_db < 3 für 15 minLteNoNetwork: lte_network_type == 0 für 5 min (kritisch)LteSignalMonitorDown: keine Werte seit 15 min, zum Beispiel weil die Web-UI offen ist
sudo mkdir -p /opt/mr600 && sudo cp ~/mr600/mr600.py /opt/mr600/ && sudo cp -r ~/mr600 /opt/mr600/venv
echo '…' | sudo tee /opt/mr600/password >/dev/null && sudo chmod 600 /opt/mr600/password
sudo curl -o /etc/systemd/system/mr600.service https://bergclimber.de/mr600/dl/mr600.service
sudo nano /etc/systemd/system/mr600.service # User=, --host, --push anpassen
sudo systemctl daemon-reload && sudo systemctl enable --now mr600
journalctl -u mr600 -fEine Lehre aus dem Betrieb: Wenn der Dienst nach einem Neustart keine Werte liefert, ist meist die Web-UI offen oder die Passwortdatei noch nicht lesbar. Beides ist kein Grund, am Router etwas zu ändern.
Werte-Referenz
Felder von get_lte_status() der Bibliothek, Bedeutung und beobachtete Werte am MR600 v3.
| Feld | Bedeutung | Beobachtet / Hinweis |
|---|---|---|
| rsrp | Reference Signal Received Power, dBm | −97 mit Fensterantennen; > −100 brauchbar, < −110 Kante |
| rsrq | Reference Signal Received Quality, dB | −8 bis −9; > −10 gut, < −16 schlecht |
| snr | Signal-Rausch-Abstand, Zehntel-dB | 152 = 15,2 dB; > 10 dB gut, < 3 dB schlecht |
| sig_level | Balken 0–5 | 4 |
| network_type | Netztyp-Code | 0 kein Netz, 1 GSM, 2 WCDMA, 3 4G LTE, 7 4G+ LTE, 8 5G NR |
| connect_status | Verbindungsstatus, rohe TP-Link-Kodierung | 4 = verbunden |
| sim_status | SIM-Status-Code | 3 = „SIM card prepared" = normal |
| isp_name | Netzname laut SIM | z. B. „Congstar Internet" bei fraenk |
| cur_rx_speed / cur_tx_speed | Momentane Rate, Byte/s | Momentaufnahme des Routers |
| total_statistics | Volumen seit Zähler-Reset, Byte | Zähler des Routers, nicht des Skripts |
| sms_unread_count | Ungelesene SMS auf dem Router | Netzbetreiber-SMS landen hier |
Richtwerte
| Wert | sehr gut | gut | brauchbar | schwach | Kante |
|---|---|---|---|---|---|
| RSRP (dBm) | ≥ −80 | −80 … −90 | −90 … −100 | −100 … −110 | < −110 |
| RSRQ (dB) | ≥ −10 | −10 … −15 | −15 … −20 | < −20 | |
| SNR (dB) | ≥ 20 | 13 … 20 | 0 … 13 | < 0 |
RSRP sagt, wie stark der Mast ankommt (Position, Antenne, Entfernung). SNR sagt, wie sauber (Störung, Nachbarzellen). RSRQ reagiert auf Auslastung der Zelle. Für die Datenrate zählen alle drei, für die Frage „Antenne oder nicht" fast nur RSRP.
Kompatibilität
Verifiziert: Archer MR600 v3.0, Firmware 1.3.0 0.9.1 Build 250915. Die Bibliothek listet außerdem MR600 v1/v2, MR200, MR400, MR550 und TL-MR6400 als unterstützt; welcher Client dort passt, sagt im Zweifel --client auto. Melde gern, was bei dir funktioniert hat.
Häufige Fragen
Geht das auch mit der Tether-App oder der Web-UI?
Zum Nachsehen ja, zum Überwachen nein. Beide zeigen nur den Moment, und die Web-UI blockiert dabei jeden Skript-Login. Für Verlauf und Alarme braucht es ein Skript, das die Werte regelmäßig abholt.
Warum meldet der Router „Passwort falsch", obwohl es stimmt?
Fast immer der leere Benutzername oder der falsche Client der Bibliothek. Siehe Fallen 1 und 2. Nicht weiterprobieren, sonst greift die Sperre nach fünf Versuchen.
Wie lange dauert die Sperre nach fünf Fehlversuchen?
Die Firmware nennt keine feste Zeit; in der Praxis waren es rund 30 Minuten bis einige Stunden. Ein Neustart des Routers hebt sie auf. Das Skript wartet nach einer Ablehnung 30 Minuten, bevor es erneut versucht.
Lohnen sich externe Antennen?
Wenn RSRP unter −100 dBm liegt, meist ja. Der MR600 hat zwei SMA-Buchsen; ein Fenster-Flachpanel mit zwei Kabeln brachte hier von „keine Verbindung" auf −100 dBm mit 44 Mbit/s. Vorher die Position ausreizen, das ist umsonst.
Der Dienst liefert nach einem Neustart nichts.
Ist jemand in der Web-UI angemeldet? Ist die Passwortdatei lesbar? Beides sind die häufigsten Ursachen, lange vor einem Router-Problem.
Funktioniert das mit Home Assistant?
Home Assistant hat eine Integration auf Basis derselben Bibliothek, die auch LTE-Werte liefern kann. Dieses Skript ist für alle, die Prometheus und Grafana oder einfach ein JSON im eigenen Werkzeug wollen.
Werden Daten übertragen oder gespeichert?
Nein. Der Bewerter auf dieser Seite rechnet im Browser. Das Skript spricht nur mit deinem Router im lokalen Netz und mit dem Ziel, das du ihm nennst.