Add Telekom Glasfaser-Modem 2 ONT provider#962
Conversation
New IOntProvider for Deutsche Telekom's Glasfaser-Modem 2 GPON ONT (bridge mode on Telekom FTTH). Unlike the other providers, no login/session is needed: the device serves DDM/link stats openly over plain HTTP at /ONT/client/data/Status.json - the same endpoint its own web UI polls for the Status view. One firmware quirk matters: the device rejects any request without an Accept-Language header with a malformed 400 response (a raw "UNKNOWN 400 Bad Request" status line). Confirmed against real hardware, and consistent with Netzwerkfehler/hass-GFM2, a working Home Assistant integration for this device that sets exactly this header. Maps txpower/rxpower, BIP errors (rxbip_crc), link uptime (stability), serial/hardware revision, and derives Up/Down from hardware_state + ploam_success per the device's own status.js semantics. Parsing is defensive throughout: missing or malformed fields fall back to OntStats defaults instead of throwing. Verified end-to-end on a live Glasfaser-Modem 2 behind a UCG-Fiber WAN port (polled through a Monitoring Interface).
|
Pulled in to the v2.0 beta. Available on v2.0.0-beta.5 |
|
Usage note for anyone wiring this up on a UniFi PPPoE / Telekom FTTH WAN, since it tripped me up and isn't obvious from the PR itself. Like the other ONT providers, this one only talks HTTP(S) to the configured host and parses the response - it does not set up any routing or firewall plumbing on its own. On a UniFi WAN running PPPoE (my Telekom FTTH setup), the GFM2's management IP The reachability piece is the existing Monitoring Interface feature (#833, here since
Only step 2 is new here; step 1 has been around since (Unrelated aside: #963 is only needed for duplicate management IPs across WANs - e.g. an ONT and a Starlink dish both answering at |
|
This was merged outside of the PR, closing out |
Motivation
I run Network Optimizer on my own network (Telekom FTTH in Germany, UCG-Fiber). The ONT is Telekom's own "Glasfaser-Modem 2", which none of the existing ONT providers can talk to. This adds a provider for it, so its optical stats show up in ONT Device Monitoring like any other supported ONT.
What it does
New
TelekomModem2OntProvider(ProviderKey: telekom-modem2), registered in DI and selectable in the Settings ONT dropdown./ONT/client/data/Status.jsonover plain HTTP - the same endpoint the device's own web UI uses for its Status view. No login or session is needed; the device serves this openly.rxbip_crc), link uptime (stability), serial number, and hardware revision. Up/Down is derived fromhardware_state+ploam_success, following the semantics of the device's ownstatus.js.OntStatsdefaults instead of throwing.One firmware quirk worth knowing about: the device rejects any request that has no
Accept-Languageheader at all, with a malformed 400 response (a rawUNKNOWN 400 Bad Requeststatus line that strict HTTP clients refuse to parse). The provider always sendsAccept-Language: en. Confirmed against real hardware, and consistent with Netzwerkfehler/hass-GFM2, a working Home Assistant integration for this device, which sets exactly this header.Testing
Connected (HTTP) - RX: -16.13 dBm, TX: 2.39 dBm), and polling has been running against the device.Heads-up: on my network the ONT shares its management IP (192.168.100.1) with a Starlink dish on the other WAN, so reliably testing this provider needed the duplicate-IP alias support in #963. The two PRs are independent code-wise (both add one line to
Program.cs, that's the only overlap).Tooling disclosure
Per CODING_STANDARDS.md: this was built with heavy AI assistance (Claude Code - Sonnet/Opus/Fable - for implementation, GPT-5.5/Codex as an independent adversarial reviewer). Design decisions, every review round, and all live hardware verification were driven and checked by me. Happy to adjust anything that doesn't meet the bar.
🤖 Generated with Claude Code