Thursday, October 29, 2020

Internals of Ubiquiti ETH-SP ethernet surge protector

 A couple of photos showing the internals of Ubiquiti's Ethernet surge protector ETH-SP

There are eight 2RL090 90 Volt GDTs.  One between each Ethernet line and the metal grounding point.  




Friday, August 09, 2019

HTTP Time protocol

The HTTP Time Protocol (HTP) is used to synchronize a computer's time with web servers as reference time source. Very handy in situations where NTP UDP/123 is being blocked. http://www.vervest.org/htp/

Wednesday, August 15, 2018

Nagios plugin for monitoring last modified time stamps of website content

Inspired by this plugin and this discussion,  I have written a nagios plugin for monitoring the "Last-Modified" time of content on a website. The script uses curl to retrieve the header information and then warns if the content has not been updated within a specified period of time.   
I developed this plugin for checking that data & satellite plots on our aurora alert site were being refreshed at the expected intervals.
[james@orchid tmp]$ curl -s -I  http://auroraalert.otago.ac.nz/aurora/Suomi_NPP_DNBNCC_night_highresimage.png
HTTP/1.1 200 OK
Date: Tue, 14 Aug 2018 23:36:08 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 14 Aug 2018 05:56:06 GMT
ETag: "15cfb4-5735edda8345f"
Accept-Ranges: bytes
Content-Length: 1429428
Content-Type: image/png


 Nagios plugin shell script:
#!/usr/bin/env bash
DEFAULT_WARN_SECONDS=600
DEFAULT_CRIT_SECONDS=1200

while getopts  'hp:c:w:' option; do
    case $option in
        h) help=1;;
        p) path=$OPTARG;;
        c) crit=$OPTARG;;
        w) warn=$OPTARG;;
    esac
done
if [ -n "$help" ] || [ -z "$path" ]; then
    echo "usage: $0 -p [path (required)] -w [warning threshhold seconds] -c [critical threshold seconds]" 1>&2
    exit 3

fi
if [ -z "$warn" ]; then
    warn=$DEFAULT_WARN_SECONDS
fi
if [ -z "$crit" ]; then
    crit=$DEFAULT_CRIT_SECONDS
fi
modificationTimeStamp() {
    curl -s -I HEAD $path |
        awk '/Last-Modified/{ date=""; for(i=2;i<=NF;++i) date=(date " " $i); print date;}' |
        xargs -I{} date -d {} +"%s"
}
#seconds=$(($(date +'%s') - $(stat --format='%Y' $path)))
seconds=$(($(date +'%s') - $(modificationTimeStamp) ))
if [ $seconds -gt $crit ]; then
    echo "CRITICAL: $path was last modified $seconds seconds ago"
    exit 2
elif [ $seconds -gt $warn ]; then
    echo "WARNING: $path was last modified $seconds seconds ago"
    exit 1
else
    echo "OK: $path was last modified $seconds seconds ago"
    exit 0
fi
Add it to the command.cfg
#check last modified time on remote URL
define command{
        command_name    check_urlmtime
        command_line    $USER1$/check_urlmtime -p $ARG1$ -w $ARG2$ -c $ARG3$
        }
Example service entry
define service{
        use             generic-service         ; Inherit default values from a template
        host_name               auroraalert
        service_description     Soumi NPP satellite image
        check_command   check_urlmtime!"http://auroraalert.otago.ac.nz/aurora/Suomi_NPP_DNBNCC_night_highresimage.png"!86400!172800
        }

Friday, August 21, 2015

rsync over a non standard SSH port

Use the -e option:

rsync -avz -e "ssh -p $portNumber" user@remoteip:/path/to/files/ /local/path/

Sunday, June 14, 2015

HMC5883L magnetometer to Raspberry Pi connection notes

Some quick notes for connecting Honeywell's 3-Axis Digital Compass IC
HMC5883L to the I2C bus on a Raspbrry Pi board.

HMC5883L breakout board from SparkFun:
https://www.sparkfun.com/products/10530


Connections

GND -> GND (pin 6 on RPi I/O header)
VCC -> 3.3 V (pin 1 on RPi )
SDA -> SDA1 I2C (pin 3 on RPi)
SCL -> SCL1 I2C (pin 5 on RPi)

Configuration

Enable I2C using "raspi-config". Add user to i2c group.

pi@raspberrypi ~ $ i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --



Run

See below for example C code.

pi@raspberrypi ~ $ gcc magnetometer.c   -o magnetometer -lm

pi@raspberrypi ~ $ ./magnetometer
Identification: 'H43' HMC5883L sensor detected
1434246270.000000, -548, -649, 349, 67030.4 nT
1434246270.100000, -547, -650, 349, 67038.5 nT
1434246270.200000, -548, -648, 348, 66951.1 nT
1434246270.300000, -548, -650, 350, 67109.8 nT
1434246270.400000, -548, -650, 350, 67109.8 nT
1434246270.500000, -547, -650, 350, 67066.3 nT
1434246270.600000, -547, -650, 349, 67038.5 nT
1434246270.700000, -548, -650, 350, 67109.8 nT
1434246270.800000, -547, -649, 348, 66959.2 nT
1434246270.900000, -548, -650, 351, 67137.6 nT


Code

C code to read and display the magnetometer data