Create a hardware network monitor with a Pi and a Blinkt
Have you ever wanted a quick visual monitor to know that certain devices on your network are up and running? Well this little project will do exactly that. You will be able to monitor up to 8 networked devices and have an LED indicate if it is up or not.
This project assumes that you –
- can ping the devices in question and get a timely response.
- have the necessary bits of hardware, it’s only 3 bits and you can get them all for around £20 in the UK.
- are comfortable burning images to card, navigating and writing files in Linux and know at least a little bit about networking.
The Hardware
- A Raspberry Pi, I used a Pi Zero W as it’s inexpensive, small, and has builtin WiFi
- A micro SD card to hold the OS and script
- An 8 RGB LED strip, I use the Blinkt from Pimoroni
All 3 can be bought from Pimoroni in the UK, they have lots of cool maker stuff. (I’m not affiliated, just a happy customer).
Prep the Pi image
Before we start with the project we need to get the Pi up and running and install the Blinkt libraries.
- Download the latest Raspbian image and write to your SD card.
- Boot up the Pi, let it expand the file system and reboot.
- Once you have the desktop you should add the Pi to your WiFi network
- Using the preferences tool enable SSH or VNC if you prefer
- Once that is done you want to run the following command to download and install the Blinkt libraries, this page offers the full instructions (and links to other Blinkt projects that are fun), but in short open a terminal and run this command:
curl https://get.pimoroni.com/blinkt | bash
- Reboot the Pi
The Pi Monitor code
This is my Python code that will work through a list of 8 network devices and light up the relevant LED in red or green to let you know if a device is responding or not. Obviously you will need to modify the IPs and descriptions to suit your own environment. The comments should help explain what is happening throughout the code.
#!/usr/bin/env python import os import time from blinkt import set_brightness, set_pixel, show, clear # clear the LEDs set_brightness(0.1) clear() show() # dictionary data format is - "IP", "description", status where 0 = up and 1 = down pingdict = {0:["8.8.8.8","Google DNS ",1], 1:["192.168.1.1","ISP router",1], 2:["192.168.1.10","storage",1], 3:["192.168.1.13","esx1",1], 4:["192.168.1.22","esx2",1], 5:["192.168.1.31","pi-hole",1], 6:["192.168.1.121","splunk",1], 7:["192.168.1.200","serv1",1]} while True: for x in range(8): # change the colour slightly whilst we are testing an IP address if pingdict[x][2]==0: set_pixel(x, 0, 150, 0) else: set_pixel(x, 255, 0, 0) show() # ping the IP address response = os.system("ping -c 1 -W 2 " + pingdict[x][0]+ " >nul") if response == 0: set_pixel(x, 0, 100, 0) print x, ' is up - ', pingdict[x][1] pingdict[x][2]=0 else: set_pixel(x, 150, 0, 0) print x, ' is down - ', pingdict[x][1] pingdict[x][2]=1 show() # pause for a few seconds then loop again time.sleep(2)
Save the script to a suitable location, I use the following:
/opt/pi-monitor/pi-monitor.py
You can test the script by typing the following in the terminal:
python /opt/pi-monitor/pi-monitor.py
If you want the script to start at boot time add a line near the bottom of /etc/rc.local to run the script:
python /opt/pi-monitor/pi-monitor.py
You can now run your pi monitor headless and all being well you’ll have something a bit like this:
In: Python, Raspberry Pi, Tech · Tagged with: blinkt, monitor, pi, python