Skip to content

Commit feae4ab

Browse files
committed
feat: add community VFKD threshold profile as alternative to official spec profile
Users who prefer the more lenient community-derived thresholds from vodafonekabelforum.de can switch to this profile in Settings > Appearance. The default VFKD profile now uses the official Vodafone pNTP spec v1.06.
1 parent 0d60ef1 commit feae4ab

File tree

4 files changed

+57
-4
lines changed

4 files changed

+57
-4
lines changed

app/modules/thresholds_vfkd/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "docsight.thresholds_vfkd",
33
"name": "VFKD Thresholds",
4-
"description": "Signal thresholds based on Vodafone Kabel Deutschland (VFKD) community guidelines",
4+
"description": "Signal thresholds based on the official Vodafone pNTP Interface Specification v1.06",
55
"version": "1.0.0",
66
"author": "itsDNNS",
77
"minAppVersion": "2026.2",
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"id": "docsight.thresholds_vfkd_community",
3+
"name": "VFKD Thresholds (Community)",
4+
"description": "Community-derived signal thresholds for Vodafone Kabel Deutschland, based on vodafonekabelforum.de guidelines. More lenient than the official spec.",
5+
"version": "1.0.0",
6+
"author": "itsDNNS",
7+
"minAppVersion": "2026.2",
8+
"type": "driver",
9+
"contributes": {
10+
"thresholds": "thresholds.json"
11+
}
12+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
{
2+
"_meta": {
3+
"region": "Germany",
4+
"operator": "Vodafone Kabel Deutschland",
5+
"docsis_variant": "eurodocsis",
6+
"source": "https://vodafonekabelforum.de/viewtopic.php?t=39941",
7+
"notes": "Community-derived thresholds from the Vodafone Kabel Forum. More lenient than the official Vodafone pNTP spec. All power values in dBmV, SNR/MER in dB."
8+
},
9+
10+
"downstream_power": {
11+
"_default": "256QAM",
12+
"64QAM": { "good": [-9.9, 7.0], "warning": [-11.9, 12.0], "critical": [-14.0, 14.0] },
13+
"256QAM": { "good": [-3.9, 13.0], "warning": [-5.9, 18.0], "critical": [-8.0, 20.0] },
14+
"1024QAM": { "good": [-1.9, 15.0], "warning": [-3.9, 20.0], "critical": [-6.0, 22.0] },
15+
"4096QAM": { "good": [-1.9, 15.0], "warning": [-3.9, 20.0], "critical": [-6.0, 22.0] }
16+
},
17+
18+
"upstream_power": {
19+
"_default": "sc_qam",
20+
"sc_qam": { "good": [41.1, 47.0], "warning": [37.1, 51.0], "critical": [35.0, 53.0] },
21+
"ofdma": { "good": [44.1, 47.0], "warning": [40.1, 48.0], "critical": [38.0, 50.0] }
22+
},
23+
24+
"snr": {
25+
"_default": "256QAM",
26+
"64QAM": { "good_min": 27.0, "warning_min": 25.0, "critical_min": 24.0 },
27+
"256QAM": { "good_min": 33.0, "warning_min": 31.0, "critical_min": 30.0 },
28+
"1024QAM": { "good_min": 39.0, "warning_min": 37.0, "critical_min": 36.0 },
29+
"4096QAM": { "good_min": 40.0, "warning_min": 38.0, "critical_min": 36.0 }
30+
},
31+
32+
"upstream_modulation": {
33+
"critical_max_qam": 4,
34+
"warning_max_qam": 16
35+
},
36+
37+
"errors": {
38+
"uncorrectable_pct": { "warning": 1.0, "critical": 3.0 },
39+
"spike_expiry_hours": 48
40+
}
41+
}

tests/test_analyzer.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,9 @@ def test_snr_tolerated(self):
144144

145145
class TestHealthMarginal:
146146
def test_ds_power_marginal(self):
147-
"""DS power 19 dBmV is marginal (between warn_max 18 and crit_max 20)."""
147+
"""DS power 15.5 dBmV is marginal (between warn_max 15 and crit_max 16)."""
148148
data = _make_data(
149-
ds30=[_make_ds30(1, power=19.0, mse="-35")],
149+
ds30=[_make_ds30(1, power=15.5, mse="-35")],
150150
us30=[_make_us30(1, power=44.0)],
151151
)
152152
result = analyze(data)
@@ -753,7 +753,7 @@ def test_error_threshold_percent(self):
753753
def test_fallback_when_empty(self):
754754
analyzer._thresholds = {}
755755
t = analyzer._get_ds_power_thresholds("256QAM")
756-
assert t["good_min"] == -3.9 # fallback value
756+
assert t["good_min"] == -4.0 # fallback value (Vodafone pNTP spec v1.06)
757757

758758

759759
class TestOFDMAUpstream:

0 commit comments

Comments
 (0)