July 2013 Archives

Make Intertoobs worky

| Comments (0)
Router's / modem's / ISP connections tend to need a kick once in a while. Here's my setup to give my gear a kick when my server can no long ping a site (google.com).

Auto intertube unplugger

The circuit is pretty basic. An opto-coupler takes the signal from a pin off the parallel port, isolates it and feeds it into a transistor which boosts the current high enough to pull a relay in. The relay is setup to be normally closed. This way minimal power is used for normal state.

The following script runs every 10 minutes. It tests a ping to google - twice, in case the first one was a false postive. If both fail to come back, it pulls the pin high for 30 seconds. It pauses for 2 minutes to give the gear a chance to restart. It tests again. If successful, I'm notified. If not, it gives up.


use strict;
use warnings;

use Device::ParallelPort;

if (`ping -c 1 google.com | grep "1 received"`)
#       print "\nALIVE\n";
} else {
        print "Dead?\n";

        if (`ping -c 1 google.com | grep "1 received"`)
        { ; } else {
                # restart process

                print "DEAD!\n";

                my $port = Device::ParallelPort->new();

                # toggle bit 0 ON
                print "Bit 0 ON\n";

                # wait 30 seconds

                # toggle bit 0 OFF
                print "Bit 0 OFF\n";

                if (`ping -c 1 google.com | grep "1 received"`)
                        print "Success!\n";
                        my $t_commTime = time;
                        system("/home/alex/furnace/tweet d ehud42 Communication restared at time stamp: $t_commTime");
                } else {
                        print "Left for dead\n";

A clip of the gadgetry working on my bench: