Replies: 4 comments
-
|
v3.14 update — partial solution to this problem: In designing the v3.14 architecture, channel rebonding came up during HA integration planning. The approach addresses the immediate usability issue but doesn't solve the historical data question raised in this discussion. What v3.14 does:
What it doesn't solve:
The full channel lifecycle tracking proposed here (active/inactive states, history preservation) would be the right long-term answer. This is a step toward it. |
Beta Was this translation helpful? Give feedback.
-
|
Interesting discussion. I did some research on how other DOCSIS monitoring projects handle this: Most projects avoid the problem entirely by using stateless time-series databases. For example, fritzdocsis (Prometheus exporter for Fritz!Box Cable) calls The HA equivalent would be the Dispatcher Signal pattern used by Z-Wave JS and ZHA — store the That said, I think the v3.14 approach (stability detection + manual Reset Entities) is a reasonable pragmatic step. The full dynamic lifecycle model can build on top of that foundation later. |
Beta Was this translation helpful? Give feedback.
-
|
v3.14-alpha.16 update — position mode solves the core rebonding problem. The channel identity work that landed in v3.14-alpha.16 takes a different path than stability detection (my March 25 update) or the dispatcher pattern above — simpler, and already shipped. Position mode (new default): entities key on ID mode (preserved for upgrades): entities key on Existing installs default to ID mode via v1→v2 migration so history stays intact. Switching is opt-in via config flow. New dev tool — What's still open: position mode treats rebonding as stability, not an event. The dispatcher-signal lifecycle model is still the right answer for users who want "channel 21 disappeared on March 15" as diagnostic data. Both paths are legitimate — position mode ships first because "graphs don't break on reboot" is what most users want. Anyone running on position vs id mode in beta — feedback welcome. |
Beta Was this translation helpful? Give feedback.
-
|
I wanted to circle back on this. After spending more time using the integration for real-world troubleshooting, I realized my earlier lifecycle and reconciliation proposal missed some of the nuance already captured here in #97. I probably came in a little too eager to jump in and help without fully absorbing the background first! Going back through this thread and dealing with my own modem interference issues recently, I lean strongly toward the direction stated in the first posts here regarding ID mode being the best approach. The main takeaway is that channel identity matters, rebonding is a fact of life, and users need both dashboard stability and historical troubleshooting data. While the recent proposed entity lifecycle work in the HA adapter wasn't the right fit to merge at the time, I do think it laid some really solid groundwork. It introduced a dedicated lifecycle owner, separated the policy from the registry mechanics, and created a reconciliation boundary that is much easier to extend. Building on that groundwork, my feedback / proposal would be: 1. Treat physical channel identity as the long-term backend model. **2. The "Channel Name" feature is more of a UI and automation workaround. ** For dashboards, pairing ID-based entities with a frontend card like type: custom:auto-entities
card:
type: history-graph
title: Downstream Power (dBmV)
hours_to_show: 24
filter:
include:
- entity_id: sensor.cable_modem_ds_*_power
sort:
method: attribute
attribute: channel_index # Dynamically sorts by the modem's current physical layout
numeric: trueFor automations and custom monitors (like the custom Signal Health template I posted earlier), we should probably start thinking about this at the integration or device level anyway. Relying on static entity names is brittle because HA encourages users to rename things. By utilizing modern Jinja functions like device_entities('cable_modem') or integration_entities('cable_modem_monitor') in our templates, we can dynamically aggregate the entities and data on the backend grabbing these by attribute tags we control rather than name. This means users can name things whatever they want, we don't have to care, the ISPs can shuffle the channels, and the automations will never break. This is how I handle aggregations in other integrations I've built. 3. Support 3 reconciliation modes for different user needs.
4. Make Reconciliation Timing Configurable. 5. Expose these actions via HA Services. 6. Enhance the dashboard generator service to support dynamic layouts. Additional thought on entity generation: Final Summary The fun of being the project owner is that you ultimately get to decide the direction, and I am genuinely fine with whatever you choose! But from my own experience maintaining projects, I know it is sometimes helpful to hear direct, honest feedback from someone using the tool with a different perspective. Please don't feel like you need to justify whatever decision you make—that isn't my intent here. I also want to be clear that I didn't write this up as just a "wish list" for you to go build. This proposal is grounded heavily in modern HA best practices, and honestly, 60-70% of the groundwork is already sitting in my development environment. It's an architecture I've built successfully in other integrations. If we can align on the specifics, my goal is to actually submit the PRs to build this out myself. I think this bridges the gap between preserving the great diagnostic data this integration pulls and playing nicely with Home Assistant's architecture. That being said, I completely understand if this isn't a priority for you right now given your current roadmap—I just wanted to put the offer and the perspective on the table! |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
TL;DR
When a modem reboots and bonds to different channels, existing sensor entities show "Unknown" while new channels have no entities. Rather than choosing between entity stability and channel tracking, what if channel lifecycle itself became valuable diagnostic data?
Background: Why Channel IDs Are Used
Cable modems display channel data in tables like this:
Two numbers could be used for entity naming:
Channel ID was chosen for several reasons:
ISP diagnostics context: When troubleshooting with an ISP, they ask "what's the SNR on channel 21?" not "what's your first channel's SNR?"
Frequency correlation: Channel ID maps to specific frequency ranges. Channel 21 is always ~237 MHz. Tracking interference on a frequency means tracking that specific channel.
Error accumulation: Corrected/uncorrected errors accumulate per channel. If channel 21 has errors, tracking channel 21's history specifically matters.
DOCSIS 3.1 disambiguation: DOCSIS 3.1 modems have both SC-QAM and OFDM channels that can share the same Channel ID:
Using
(channel_type, channel_id)as the composite key creates separate entities likesensor.ds_qam_ch_33_powerandsensor.ds_ofdm_ch_33_power.Why not row index? Index-based entities (
slot_1,slot_2) seem appealing for stability, but channel tables are often fragmented - gaps appear when channels are unlocked. Row 1 might be Channel 5, row 2 might be Channel 13. The index does not provide meaningful continuity.The Problem: Channel Rebonding
When a modem reboots (power outage, firmware update, ISP maintenance), it re-negotiates with the CMTS. The CMTS may assign different channels based on network conditions.
Current Behavior
Result:
User Reports
Issue #42 comment (SB8200):
Issue #94 comment (TC4400):
Reframing the Problem
Instead of viewing channel changes as a problem to hide, what if channel lifecycle is valuable diagnostic data?
A chart showing when channels were disconnected and new ones added over the past month could reveal:
The goal becomes:
Proposed Behavior
What the User Sees
Default dashboard (filtered to active channels):
History/diagnostic view (all channels):
Trigger Options
Entity scanning for new/removed channels could be triggered by:
Questions for the Community
How often do your channels change? After every reboot? Rarely? Never noticed?
Is channel lifecycle data interesting to you? Would you look at a chart showing when channels came and went?
Should inactive entities be disabled by default?
What retention policy makes sense for inactive channels?
Automation impact: Do you reference specific channel entities in automations? Would a state change to "Inactive" break anything?
Related Issues & References
Looking forward to your feedback!
Beta Was this translation helpful? Give feedback.
All reactions