This is a Python script to scrape stats from the Arris cable modem web interface. Results are meant to be sent to InfluxDB for use with Grafana, but also currently supports AWS Timestream and Splunk. This orginally started as a fork of https://github.com/billimek/SB6183-stats-for-influxdb
I no longer have cable internet, thus cannot develop this project any further. I will merge reasonable PRs that come in, but I will have no way to test the changes.
In late Oct 2020, Comcast deployed firmware updates to the SB8200 which now require authenticating against the modem. If your modem requires authentication (you get a login page when browsing to https://192.168.100.1/), then you must edit your config.ini file (or set the matching ENV variables) and set modem_auth_required to True, and set modem_password appropriately. By default, your modem's password is the last eight characters of the serial number, located on a sticker on the bottom of the modem.
In October of 2021, Comcast again deployed new firmware that changed how authentication is handled. The old login method is no longer supported, but if you are with a different carrier and still need the old login functionality, use release v1.2.0. I have no way to test the old auth scheme, which is why it's no longer supported.
This supports both InfluxDB 1.x and InfluxDB 2.x. See the Config Settings section below for options. With InfluxDB 1.x, influx_host is the only required setting if your Influx server does not require authentication. It will attempt to create the database if it doesn't exist. For InfluxDB 2.x, change influx_major_version to 2, and also supply your url, org, bucket, and token with write access with the appropriate settings outlined below.
See other environment variables in Config Settings. This image is automatically rebuilt every month.
docker pull afraley/arris_cable_modem_stats
docker run \
-e modem_auth_required=True \
-e modem_password='last eight characters of the serial number' \
-e influx_host='influxhost.local' \
--restart unless-stopped \
afraley/arris_cable_modem_stats
Run in a Docker container with the following (see other environment variables in Config Settings):
docker build -t arris_stats .
docker run \
-e modem_auth_required=True \
-e modem_password='last eight characters of the serial number' \
-e influx_host='influxhost.local' \
--restart unless-stopped \
arris_stats
Install Python 3.8.x or later
Clone repo and
$ cd arris_cable_modem_stats/srcInstall virtualenv
$ python3 -m pip install virtualenvCreate and activate virtualenv
$ python3 -m venv venv$ source venv/bin/activateInstall pip dependencies
python3 -m pip install -r requirements.txtEdit config.ini and change influx_host to your influxdb server
If your cable modem requires authentication, edit config.ini and set:
modem_auth_required = Truemodem_password = last_8_chars_of_modem_serialRun arris_stats.py
python3 arris_stats.py --config config.iniConfig settings can be provided by the config.ini file, or set as ENV variables. If you run arris_stats.py with --config config.ini, ENV settings will be ignored.
log_level = debug|info|warning|error
debuginfo the defaultwarningerrordestination = influxdb
influxdb requires all influx_* params to be populatedtimestream requires all timestream_* params to be populatedsplunk requires all splunk_* params to be populatedstdout_json will send the data to standard output in JSON format, great with log_level=error to suppress messagessleep_interval = 300
modem_url = https://192.168.100.1/cmconnectionstatus.html
http://192.168.100.1/RgConnect.aspmodem_verify_ssl = False
modem_auth_required = False
modem_username = admin
modem_password = None
modem_model = sb8200
sb6183, sb8200, t25exit_on_auth_error = True
exit_on_html_error = True
clear_auth_token_on_html_error = True
sleep_before_exit = True
Influx Settings
influx_major_version = 1 Influx major version 1.x or 2.xinflux_verify_ssl = Trueinflux_host = localhostinflux_port = 8086influx_database = cable_modem_stats This will be created automatically if it caninflux_username = Noneinflux_password = Noneinflux_use_ssl = Falseinflux_org = Noneinflux_url = http://influx.localdomain:8086influx_bucket = cable_modem_stats Must already exist, token must have write accessinflux_token = NoneAWS Timestream Settings
timestream_aws_access_key_id = Nonetimestream_aws_secret_access_key = Nonetimestream_database = cable_modem_statstimestream_table = cable_modem_statstimestream_aws_region = us-east-1Splunk Settings
splunk_host = Nonesplunk_port = 8088splunk_token = Nonesplunk_ssl = Falsesplunk_verify_ssl = Truesplunk_source = arris_cable_modem_statsYou can enable debug logs in three ways:
python3 arris_stats.py --debug --config config.inilog_level = debuglog_level = debugThe database will be created automatically if the user has permissions (defaults to anonymous access). See Config Settings above for a list of ENV variables (or config.ini options).
Database and table are required to be created ahead of time using appropriate settings for your use-case. See Config Settings above for a list of ENV variables (or config.ini options).
Basic support for sending stats to Splunk is available. Stats are sent as _json data to the Splunk HTTP Event Collector. To setup Splunk:
destination = splunkThere are two Grafana examples. The first only relies on the Python script from this repo, while the second relies on Telegraf.

/etc/telegraf/telegraf.d/ (customize IPs/hosts to your liking)
Content type
Image
Digest
sha256:b3fcc2c16…
Size
33.5 MB
Last updated
4 months ago
docker pull mbentley/sb8200_stats