Success story: CMM with custom signal health monitor solved long-standing cable internet issues #161
Replies: 2 comments 1 reply
|
@ccpk1 - Thanks for this! Exactly what drew me to this integration. |
|
You guys are awesome and it's contributors like you who'll help elevate this project to the next level. There's a real community forming around this idea and it's really great! Just wanted to point out, in case it helps readers looking for a simpler starting point, that the integration also ships a dashboard generator service that produces a baseline Lovelace YAML tailored to your modem's channel layout. Doesn't replace what Chad built here. Those serve different needs, but pair well together. Two of many principles on this project are reducing developer friction and making the UX as smooth as possible. Granted I've had a few detours, but the goal remains. Chad, this makes me wonder if there's space for the dashboard generator to absorb some of what you've learned. The card patterns, the worst-channel callouts, the way you surface error rates over time. Even without baking aggregate health into core yet, there might be a contribution path that gets your diagnostic experience to other users without them having to rebuild it from scratch. Worth thinking about if it interests you. |
Uh oh!
There was an error while loading. Please reload this page.
I wanted to share a quick Show & Tell of a custom signal health dashboard I built using the Cable Modem Monitor (CMM) integration, and how it finally helped me track down a phantom physical-layer issue I’ve been fighting for years.
The Struggle: "Everything is within spec"
For the past few years, I’ve noticed massive spikes of uncorrectable errors on my modem—sometimes quiet for a few hours, but then racking up into the millions. Because the interference would unpredictably bleed across multiple channels, I couldn't pin it down. I even had my ISP send line techs out twice. But because my speed tests were fine (~500 Mbps), they just shrugged, told me "signals and everything else is within spec," and said that's just how cable internet is.
I tried manually tracking the signal levels a year ago, but the noise and varying patterns was too intermittent to catch a pattern by hand.
The Dashboard: Automating and Understanding the Data
I stumbled on the CMM integration while I was doing some other overdue home assistant tech monitoring cleanup. Getting it up and running was quick and easy, but that’s only half the battle. You still need to understand the key data points, the DOCSIS specs, and how they behave over time.
Interference isn't always a uniform blanket of noise. Depending on the frequencies involved, it behaves unpredictably—sometimes isolating to just one channel, but more often splashing across the spectrum. This cross-channel bleed pushes the signal levels of neighboring channels out of spec, causing a cascading mess of errors. I built a custom dashboard to track my overall signal health and plot these error rates continuously so I could finally see the patterns.
Example where uncorrected errors might go quiet for a few hours after reboot, then re-appear.

The Smoking Gun
Having granular, 24/7 historical data changed everything. The dashboard revealed that while the noise occasionally bled across the spectrum to cause those million-error spikes, the epicenter of the interference was consistently hitting one specific downstream channel (Channel 12 @ 435 MHz).
That frequency was the exact clue I needed. It overlapped with a USB SD radio antenna I use for my
rtl_433water leak sensors (operating at 433.92 MHz). The antenna was mounted right in my server rack, just 18 inches away from the cable modem, blasting interference which, surprise to me, was getting picked up directly into the coax and modem even though they are hard wired!The Fix
I moved the SDR antenna a few feet away using an extension cable and used a wrench to properly torque the coax connector on the back of the modem.
As you can see in the screenshots, the uncorrectable error rate immediately plummeted to an absolute flatline of 0.0/min and the SNR across all channels immediately improved.
Interested in setting up your own Signal Health Monitoring sensor?
The signal health sensor is based on the following thresholds. Of course you could go into the template and adjust them if you have good reason too, but these should be fairly standard defaults for most.
and 50.1 to 55.0 [I]
or > 55.0 [D]
(Highest minus Lowest)
(Uncorrectables per min)
💡 A quick note before you copy/paste: While this YAML looks a bit intimidating, it is entirely dynamic. If you paste this and get errors, check your entity names! This code uses the default sensor.cable_modem_* naming pattern. If your entities are named using a different pattern from setup, just do a quick Find/Replace in the code below to match your specific sensors.
Derivative Sensor to measure errors per minute
Signal Health Sensor
The Dashboard Setup: Custom Signal Health Card
To get the clean, color-coded dashboard look from my screenshots, you'll need to use a custom YAML card. Because the Cable Modem Monitor (CMM) integration packs so much detailed diagnostic data into the attributes of the
sensor.cable_modem_signal_healthentity, standard Home Assistant cards can't quite display it all dynamically.Required Custom Cards (via HACS):
Before pasting the code, make sure you have installed these two excellent frontend plugins by thomasloven via HACS:
template-entity-row: This is the magic that allows us to use Jinja2 templates to dynamically change the icon colors (Green/Orange/Red) and extract the "worst channel" data directly into the secondary info text.fold-entity-row: This keeps the dashboard clean by tucking the granular metrics (Downstream, Upstream, SNR, etc.) into a collapsible dropdown under the main "Signal Health" header.How to add it:
Go to your Lovelace Dashboard, click Edit, click Add Card, scroll down to Manual, and paste the following YAML:
Huge thank you for this integration! Having continuous, frequency-specific data finally gave me the proof I needed to fix an issue my ISP couldn't find, and proved that sometimes the interference really is coming from inside the house!
All reactions