msh100 / modem-stats Goto Github PK
View Code? Open in Web Editor NEWProcess the channel diagnostics data from a DOCSIS modem for use in Telegraf or Prometheus
Process the channel diagnostics data from a DOCSIS modem for use in Telegraf or Prometheus
Hi there,
Am glad someone's done the hard work of building this already. Would be great to be able to specify an API Key for InfluxDB though in the Docker image.
After querying for a while, the Superhub 4 parser stops working. This is because the statistics from the router itself is broken.
The output from http://192.168.0.1/php/ajaxGet_device_networkstatus_data.php becomes:
["","","","",null,"","","","","","","","","","","","","","","","[[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"]]","[[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"]]","[]","[[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"]]","[[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"]]","","","","",""]
This issue has been seen on both the Superhub 4s I have tested.
I've not been able to report this to Virgin yet.
Currently, the only info is: -m, --modem= Which modem to use (default: superhub3)
It would be best if the help message showed all valid options!
Hey
Thanks for making this exporter, I just tried it with Prometheus and it works so was hoping to roll it out to my and my friend's environment but need a Raspberry PI docker image, is it possible for you to update the build pipeline for multi-arch and maybe upgrade go? I just built it no problem with 1.18.2 but I'm sure it would work fine with latest.
Perhaps an image without Telegraf would also be good for those Prometheus only scenarios.
I'll build a dashboard for Prometheus data source when I get it running and contribute it back.
Thanks!
$ go build -o modem-stats sh-stats/*.go
malformed import path "sh-stats/*.go": invalid char '*'
$ go version
go version go1.21.1 linux/amd64
Upstream and Downstream Traffic Rates reversed.
I am using a Virgin Media Superhub3 and the data rates for upstream and downstream seem to be reversed.
I am using the Binary for modem-stats-arm5 on a Raspbery pi 4 (but I dont think that is the issue).
The results are fed to a Telegraf instance and then on to Grafana.
I attach a screenshot of the SH3 modem status, which correctly shows the Upstream and Downstream rates (approx 270MB down and 26MB up).
The modem-stats (binary) returns these values reversed (see last couple of lines below).
ownstream,channel=22,id=29,modulation=QAM256,scheme=SC-QAM frequency=363000000,snr=403,power=-20,prerserr=44,postrserr=0
downstream,channel=23,id=30,modulation=QAM256,scheme=SC-QAM frequency=371000000,snr=403,power=-20,prerserr=21,postrserr=0
downstream,channel=24,id=31,modulation=QAM256,scheme=SC-QAM frequency=379000000,snr=403,power=-22,prerserr=18,postrserr=0
upstream,channel=1,id=2 frequency=43100000,power=445
upstream,channel=2,id=5 frequency=23600000,power=420
upstream,channel=3,id=4 frequency=30100039,power=430
upstream,channel=4,id=3 frequency=36600000,power=445
upstream,channel=5,id=1 frequency=49600000,power=445
config,config=upstream maxrate=287500061,maxburst=42600
config,config=downstream maxrate=27500061,maxburst=42600
shstatsinfo timems=1127
So when this comes into the Grafana screen, downstream and upstream rates are reversed in the GUI, though other measurements seem fine.
I also don't seem to get any results for PING's, despite having the PING_TARGETS environment variable set - but mabe that is not part of the compiled binary?
I have learned a LOT so far this last couple of days putting the various bits of this together - THANKS in advance and apologies if I am missing something obvious.
Bob
I ran the command pointing to my Hub 4 and while I can see my full downstream channels (3.0 and 3.1) my upstream only shows my 3.0 channels
Command output
./modem-stats.x86 --modem=superhub4
downstream,channel=1,id=30,modulation=QAM256,scheme=SC-QAM frequency=371000000,snr=389,power=78,prerserr=0,postrserr=0
downstream,channel=2,id=1,modulation=QAM256,scheme=SC-QAM frequency=139000000,snr=389,power=95,prerserr=0,postrserr=0
downstream,channel=3,id=2,modulation=QAM256,scheme=SC-QAM frequency=147000000,snr=386,power=95,prerserr=2,postrserr=0
downstream,channel=4,id=3,modulation=QAM256,scheme=SC-QAM frequency=155000000,snr=389,power=94,prerserr=0,postrserr=0
downstream,channel=5,id=4,modulation=QAM256,scheme=SC-QAM frequency=163000000,snr=389,power=94,prerserr=0,postrserr=0
downstream,channel=6,id=5,modulation=QAM256,scheme=SC-QAM frequency=171000000,snr=386,power=90,prerserr=0,postrserr=0
downstream,channel=7,id=6,modulation=QAM256,scheme=SC-QAM frequency=179000000,snr=389,power=90,prerserr=0,postrserr=0
downstream,channel=8,id=7,modulation=QAM256,scheme=SC-QAM frequency=187000000,snr=386,power=90,prerserr=0,postrserr=0
downstream,channel=9,id=8,modulation=QAM256,scheme=SC-QAM frequency=195000000,snr=389,power=91,prerserr=0,postrserr=0
downstream,channel=10,id=9,modulation=QAM256,scheme=SC-QAM frequency=203000000,snr=389,power=90,prerserr=0,postrserr=0
downstream,channel=11,id=10,modulation=QAM256,scheme=SC-QAM frequency=211000000,snr=389,power=89,prerserr=0,postrserr=0
downstream,channel=12,id=11,modulation=QAM256,scheme=SC-QAM frequency=219000000,snr=386,power=86,prerserr=0,postrserr=0
downstream,channel=13,id=12,modulation=QAM256,scheme=SC-QAM frequency=227000000,snr=389,power=85,prerserr=0,postrserr=0
downstream,channel=14,id=13,modulation=QAM256,scheme=SC-QAM frequency=235000000,snr=389,power=81,prerserr=0,postrserr=0
downstream,channel=15,id=14,modulation=QAM256,scheme=SC-QAM frequency=243000000,snr=389,power=78,prerserr=0,postrserr=0
downstream,channel=16,id=15,modulation=QAM256,scheme=SC-QAM frequency=251000000,snr=386,power=78,prerserr=0,postrserr=0
downstream,channel=17,id=16,modulation=QAM256,scheme=SC-QAM frequency=259000000,snr=389,power=75,prerserr=0,postrserr=0
downstream,channel=18,id=17,modulation=QAM256,scheme=SC-QAM frequency=267000000,snr=386,power=78,prerserr=0,postrserr=0
downstream,channel=19,id=18,modulation=QAM256,scheme=SC-QAM frequency=275000000,snr=389,power=79,prerserr=0,postrserr=0
downstream,channel=20,id=19,modulation=QAM256,scheme=SC-QAM frequency=283000000,snr=389,power=80,prerserr=0,postrserr=0
downstream,channel=21,id=20,modulation=QAM256,scheme=SC-QAM frequency=291000000,snr=389,power=79,prerserr=0,postrserr=0
downstream,channel=22,id=21,modulation=QAM256,scheme=SC-QAM frequency=299000000,snr=389,power=78,prerserr=0,postrserr=0
downstream,channel=23,id=22,modulation=QAM256,scheme=SC-QAM frequency=307000000,snr=389,power=75,prerserr=0,postrserr=0
downstream,channel=24,id=23,modulation=QAM256,scheme=SC-QAM frequency=315000000,snr=389,power=74,prerserr=0,postrserr=0
downstream,channel=25,id=24,modulation=QAM256,scheme=SC-QAM frequency=323000000,snr=389,power=74,prerserr=0,postrserr=0
downstream,channel=26,id=25,modulation=QAM256,scheme=SC-QAM frequency=331000000,snr=389,power=76,prerserr=0,postrserr=0
downstream,channel=27,id=26,modulation=QAM256,scheme=SC-QAM frequency=339000000,snr=389,power=78,prerserr=0,postrserr=0
downstream,channel=28,id=27,modulation=QAM256,scheme=SC-QAM frequency=347000000,snr=389,power=80,prerserr=0,postrserr=0
downstream,channel=29,id=28,modulation=QAM256,scheme=SC-QAM frequency=355000000,snr=389,power=79,prerserr=0,postrserr=0
downstream,channel=30,id=29,modulation=QAM256,scheme=SC-QAM frequency=363000000,snr=389,power=79,prerserr=0,postrserr=0
downstream,channel=31,id=31,modulation=QAM256,scheme=SC-QAM frequency=379000000,snr=386,power=78,prerserr=0,postrserr=0
downstream,channel=1,id=159,modulation=QAM4096,scheme=OFDM frequency=96000000,snr=420,power=70,prerserr=1398995372,postrserr=0
upstream,channel=1,id=9 frequency=49600000,power=430
upstream,channel=2,id=13 frequency=23600000,power=430
upstream,channel=3,id=12 frequency=30100000,power=430
upstream,channel=4,id=11 frequency=36600000,power=430
upstream,channel=5,id=10 frequency=43100000,power=425
config,config=downstream maxrate=1200000450,maxburst=42600
config,config=upstream maxrate=55000270,maxburst=42600
shstatsinfo timems=2000
Output of /php/ajaxGet_device_networkstatus_data.php
(pretty printed for your pleasure)
[
"371000000",
"49600000",
"Locked",
"ACTIVE",
6,
"true",
"1",
"true",
"3.1",
"wrkldJKDHSUBsgvca69834ncx",
"20269",
"1200000450",
"42600",
"0",
"20268",
"55000270",
"42600",
"0",
"16320",
"bestEffort",
"[[\"30\",\"371000000\",\"7.699997\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"1\",\"139000000\",\"9.400002\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"2\",\"147000000\",\"9.599998\",\"38.605377\",\"QAM256\",\"Locked\",\"38.605377\",\"0\",\"0\"],[\"3\",\"155000000\",\"9.300003\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"4\",\"163000000\",\"9.300003\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"5\",\"171000000\",\"9.000000\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"6\",\"179000000\",\"9.000000\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"7\",\"187000000\",\"8.900002\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"8\",\"195000000\",\"9.099998\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"9\",\"203000000\",\"8.900002\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"10\",\"211000000\",\"8.800003\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"11\",\"219000000\",\"8.599998\",\"38.605377\",\"QAM256\",\"Locked\",\"38.605377\",\"0\",\"0\"],[\"12\",\"227000000\",\"8.400002\",\"38.605377\",\"QAM256\",\"Locked\",\"38.605377\",\"0\",\"0\"],[\"13\",\"235000000\",\"8.099998\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"14\",\"243000000\",\"7.699997\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"15\",\"251000000\",\"7.699997\",\"38.605377\",\"QAM256\",\"Locked\",\"38.605377\",\"0\",\"0\"],[\"16\",\"259000000\",\"7.500000\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"17\",\"267000000\",\"7.699997\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"18\",\"275000000\",\"7.800003\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"19\",\"283000000\",\"7.900002\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"20\",\"291000000\",\"7.800003\",\"38.605377\",\"QAM256\",\"Locked\",\"38.605377\",\"0\",\"0\"],[\"21\",\"299000000\",\"7.699997\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"22\",\"307000000\",\"7.400002\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"23\",\"315000000\",\"7.199997\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"24\",\"323000000\",\"7.300003\",\"38.605377\",\"QAM256\",\"Locked\",\"38.605377\",\"0\",\"0\"],[\"25\",\"331000000\",\"7.500000\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"26\",\"339000000\",\"7.699997\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"27\",\"347000000\",\"8.000000\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"28\",\"355000000\",\"7.800003\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"],[\"29\",\"363000000\",\"7.800003\",\"38.605377\",\"QAM256\",\"Locked\",\"38.605377\",\"0\",\"0\"],[\"31\",\"379000000\",\"7.800003\",\"38.983261\",\"QAM256\",\"Locked\",\"38.983261\",\"0\",\"0\"]]",
"[[\"9\",\"49600000\",\"42.520599\",\"5120 KSym\\\/sec\",\"64QAM\",\"US_TYPE_STDMA\",\"0\",\"0\",\"1\",\"0\"],[\"13\",\"23600000\",\"43.020599\",\"5120 KSym\\\/sec\",\"64QAM\",\"US_TYPE_STDMA\",\"0\",\"0\",\"4\",\"0\"],[\"12\",\"30100000\",\"43.020599\",\"5120 KSym\\\/sec\",\"64QAM\",\"US_TYPE_STDMA\",\"0\",\"0\",\"1\",\"0\"],[\"11\",\"36600000\",\"43.020599\",\"5120 KSym\\\/sec\",\"64QAM\",\"US_TYPE_STDMA\",\"0\",\"0\",\"6\",\"0\"],[\"10\",\"43100000\",\"43.020599\",\"5120 KSym\\\/sec\",\"64QAM\",\"US_TYPE_STDMA\",\"0\",\"0\",\"5\",\"0\"]]",
"[]",
"[[\"159\",\"96\",\"4K\",\"1880\",\"QAM4096\",\"759\",\"Locked\",\"41\",\"6.9\",\"1399128308\",\"0\"]]",
"[[\"14\",\"10.0\",\"37.0\",\"2K\",\"QAM8\",\"OFDMA\",\"200\",\"53.9\",\"6\",\"0\"]]",
"5",
"31",
"1",
"1",
"SC-QAM"
]
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.