Release v3.13.0
Added
- Arris/CommScope S34 Support - HNAP protocol with HMAC-SHA256 authentication. 32 downstream + 5 upstream SC-QAM channels, plus OFDM/OFDMA. (Thanks @rplancha! Based on PR #90)
- ARRIS CM3500B Support - EuroDOCSIS 3.1 cable modem with form-based authentication. Parses 24+ SC-QAM downstream, 2 OFDM downstream, 4 ATDMA upstream, and 1 OFDMA upstream channels. (Thanks @ChBi89! #73)
- SB6190 Auth Support (9.1.103+) - Added
form_nonceauth strategy for ARRIS SB6190 modems with newer firmware that require login. Uses plain form POST with client-generated nonce instead of base64-encoded credentials. (#93, #83) - Entity Prefix Selection - Multi-modem setups can now configure custom entity prefixes during setup to avoid naming conflicts
- HTTP HEAD Auto-Detection - Health monitor now auto-detects whether the modem supports HTTP HEAD requests during setup. Modems that don't support HEAD (e.g., TC4400's
micro_httpd) use GET-only, eliminating session poisoning that caused permanent health check failures. (#94) - Configurable HMAC Algorithm -
HNAPJsonRequestBuildernow supportshmac_algorithmparameter ("md5" or "sha256") for modems with different authentication requirements - Action Layer Architecture - Restart functionality now uses data-driven action definitions in
modem.yamlinstead of hardcoded parser methods - Circular Log Buffer - New diagnostics buffer compatible with HA 2025.11+ that preserves logs across integration reloads
- Diagnostic Logging Enhancement - Added ERROR-level logging when parser receives login page HTML instead of data, making session expiration issues easier to diagnose during troubleshooting
Changed
- Modular Init -
__init__.pymonolith extracted into focused modules (setup.py,lifecycle.py,data_update.py) (#1) - DataOrchestrator -
ModemScraperrenamed toDataOrchestratorfor clarity (#14) - Parser Registry -
parser_discoverymodule renamed toparser_registry - Fallback Subsystem - Unknown modem discovery moved to
core/fallback/directory - Auth Config Consolidation - All auth configuration now lives in
auth.types{}section ofmodem.yaml - Metadata Consolidation - Separate
metadata.yamlfiles merged intomodem.yaml - Protocol Detection - Removed hardcoded
default_portandprotocolfrommodem.yaml; now auto-detected - CGA2121 Data Page Config - Parser now reads primary data page path from
modem.yamlpages.dataconfig instead of hardcoding, reducing duplication between parser and modem config
Fixed
- SB8200 HTTPS Session - Match real browser behavior observed in HAR captures: login requests now include
X-Requested-With: XMLHttpRequestheader, data requests omitAuthorizationheader. Session cookie cleared before login to prevent stale cookie conflicts. (#81) - SB6190 Parser Error - Fixed parser returning 0 channels in production despite successful authentication. Parser now prioritizes explicit path (
/cgi-bin/status) over root path (/) to avoid receiving auth response HTML instead of status page data. (#93, #83) - SB6190 Form AJAX Auth - Fixed "invalid_credentials" error when using form_ajax authentication (firmware 9.1.103+). The config flow helper was not passing the form_ajax configuration to the auth workflow. (#93, #83)
- XB7 Parser Data Page Path - Fixed parser error when XB7 modem.yaml specifies a data page path. Parser now correctly reads from the configured path. (#107)
- C7000v2 Session Management - Fixed browser lockout and session issues by correcting session cookie name (
XSRF_TOKENinstead ofsession) and logout endpoint (/goform/logoutinstead of/Logout.htm). Added POST support for/goform/logout endpoints. (#61) - TC4400 Parser Error - Fixed parser returning 0 channels in v3.13.0 betas despite successful authentication. Parser now prioritizes explicit path (
/cmconnectionstatus.html) over root path (/) to avoid receiving auth response HTML instead of channel data. (#94) - CGA2121 Auth Redirect - Fixed parser receiving wrong page when modem redirects to
/basicUX.htmlafter login instead of the data page/st_docsis.html. Parser now tries the specific data page path first, then falls back to "/" for legacy compatibility. (#75) - CM3500B Auth Config - Removed incorrect
success_indicatorfrom CM3500B modem.yaml auth config that could interfere with authentication validation. (#73) - Form Auth HTML Response - Fixed form authentication discarding the HTML response when auth succeeded without a
success_indicator, causing parsers like CGA2121 to see empty data (#75) - Config Flow Auth Type Preservation - Fixed "Reset Entities" losing user's auth type selection for modems with multiple auth variants (SB6190, SB8200). Options flow now preserves
CONF_AUTH_TYPEfrom config entry, preventing fallback to default auth type after entity reset. (#93) - Diagnostics PII Sanitization - Updated to har-capture 0.3.3 with
redact_flagged=Truefor automatic redaction of WiFi credentials and device names, plus fixes for IPv4 address corruption (5-octet bug) and version string preservation. - Case-Insensitive Password Detection - Password field detection now case-insensitive (#75)
- G54 OFDM Channel IDs - Handle OFDM/OFDMA prefixed channel IDs correctly
- URL Pattern Ordering - Protected pages now prioritized in URL pattern ordering for polling
- Log Buffer Persistence - Diagnostics log buffer preserved across integration reloads
- HTTP/HTTPS Detection - Try HTTP before HTTPS to prevent protocol mismatch on setup
- HTTP HEAD SSL Blocking I/O - Moved
ssl.create_default_context()in HTTP HEAD auto-detection to executor to avoid blocking the HA event loop during config flow
Improved
- Exception Handling - Replaced broad
except Exceptionblocks with specific exception types for better diagnostics (#6) - Test Coverage - Config flow tests now use proper HA test infrastructure (
pytest-homeassistant-custom-component) - Dev Tooling - Mock server with
--auth-typeand--delayflags, HA reload script, E2E test framework, pre-push hooks (#20)
What's Changed
- Release v3.13.0 by @kwschulz in #118
- fix(test): use regex to count redacted MACs by @kwschulz in #119
Full Changelog: v3.12.1...v3.13.0