[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