[colug-432] talking to your ISP
Rick Hornsby
richardjhornsby at gmail.com
Sat Dec 29 13:08:00 EST 2012
On Dec 29, 2012, at 08:39 , Bill Baker <bill_chris at earthlink.net> wrote:
> It must only work for your model modem, because all I got was this:
>
> Sat Dec 29 09:37:50 EST 2012 hwver:0.0 rx:0.0 snr:0.0 tx:0.0
If it helps, breaking it down here's what happens:
http://ktzr.net/files/twc_cable_modem_stats.png
The script expects:
to find your modem at 192.168.100.1
to not find any 401 authentication
to have the statistics be at a page called 'system.asp'
to have the target data be in an HTML table
The ruby script is pretty simple - it just dumps all content it finds on the page that is in an HTML table cell (a 'td' tag). The "stats=" line takes that result and does some filtering and clean up, turning this
Hardware Version
2.0
Software Version
dpc2100rx-v202r1256-110531Uas-TWC
Receive Power Level
-14.4 dBmV
Signal to Noise Ratio
32.8 dBmV
Transmit Power Level
42.8 dBmV
into this
2.0 -14.5 32.8 42.8
Stepwise, that stats= line:
- filters out some unprintable junk characters (tr)
- filters for only lines that (grep)
- start with a dash or a number
- followed by a dot .
- followed by a number
- replaces the newlines with a single space (tr)
We print the current date, then the awk command then makes a(nother) leap that the different values are presented in the order above and prints them formatted as floating point numbers.
The script is by no means smart about how it processes. It doesn't even bother looking at the data's label in the HTML.
> On 12/29/2012 07:05 AM, Rick Hornsby wrote:
>>
>> If anyone is interested in replicating my work for their own setup, here's what I'm using to record the modem stats (if I knew ruby better, I could probably write the whole thing in ruby; also, there are a crapton of improvements possible. this was a 15 minute hack job):
>>
>>
>> === fetch_stats.rb ===
>> #!/usr/bin/ruby
>>
>> require 'rubygems'
>> require 'nokogiri'
>> require 'open-uri'
>>
>> doc = Nokogiri::HTML(open('http://192.168.100.1/system.asp'))
>> doc.xpath("//td").each do |td|
>> puts td.content
>> end
>>
>> === modem_stats.sh ===
>> #!/bin/bash
>>
>> fetch_stats=~/bin/fetch_stats.rb
>>
>> stats=$($fetch_stats | tr -d '\302\240' | grep -o "^-*[0-9]\+\.[0-9]\+" | tr '\n' ' ')
>>
>> echo -n $(date)
>> echo $stats | awk '{printf " hwver:%0.1f rx:%0.1f snr:%0.1f tx:%0.1f\n", $1, $2, $3, $4}'
>>
>> === cron entry ===
>> * * * * * ~/bin/modem_stats.sh >> ~/tmp/modem_stats.log
>>
>> === result ===
>> Sat Dec 29 06:02:01 CST 2012 hwver:2.0 rx:-13.8 snr:32.9 tx:42.8
>> _______________________________________________
>> colug-432 mailing list
>> colug-432 at colug.net
>> http://lists.colug.net/mailman/listinfo/colug-432
>>
> _______________________________________________
> colug-432 mailing list
> colug-432 at colug.net
> http://lists.colug.net/mailman/listinfo/colug-432
More information about the colug-432
mailing list