Intel NUc's from two generations ago have a nice feature, a multicolor LED Ring and Power LED you can controll by Software. I use a i5 9th gen NUC at home as my "Homeserver, IoT, whatever" device. I create a tiny script running as cron every Minute to set the LED Color depending of the internet connection "quality". I'm not really pully Data from the Modem, for my purposenot neccessary. I Just want to have a quick solution to let others in my family at home see if there is some issues or not. You know the Situation, Wife cannot open a certain Internet page or something is loading very slowly. "What's wrong with our internet?" most time the Anwer is "Nothing - it's not on our end" - but now I have a quick way to visualize if anything may be wrong.

Now the NUC LED show follwoing Status:

  • GREEN:  Everything is fine
  • YELLOW: Still no critical Error but ping is higher than it should
  • PINK: something wrong but still "working" somehow
  • RED BLINKING: DNS Lookup errors, Packetloss, probably big impact


 

Instead of writing a complicated measurement script I really just make it simple and stupid. I do several Ping Check via well known Hosts and in addition several DNS Lookups. If a DN SLookup fail I just add some "time" and by evaluating the overall Time the check Process needed I set the Status:


#!/bin/bash
# vi: set ft=sh :
echo "Color NUC Ring LED based on Internet Status..."

my_dns_check() {
    echo -n -e "Checking DNS: " $dnslookup
    nslookup $dnslookup > /dev/null 2> /dev/null
    if [ $? -eq 0 ]; then
        echo -e " (DNS OK)"
    else
        echo -e " (DNS NACK)"
        sleep 2.2
    fi
}

start=`date +%s.%N`
result=$(fping -u -c1 192.168.200.1 4.2.2.4 1.1.1.1 9.9.9.9 denic.de google.com | grep -c ".")
dnslookup=a.root-servers.net;my_dns_check
dnslookup=cloudflare.com;my_dns_check
dnslookup=google.com;my_dns_check
dnslookup=amazon.de;my_dns_check
dnslookup=netflix.com;my_dns_check
dnslookup=spotify.com;my_dns_check
end=`date +%s.%N`
runtime=$( echo "$end - $start" | bc -l )

echo "Time needed:" $runtime
if (( $(echo "$runtime < 1" |bc -l) )); then
    echo 'ring,3,none,green' | sudo tee /proc/acpi/nuc_led > /dev/null
elif (( $(echo "$runtime < 2" |bc -l) )); then
    echo 'ring,5,none,yellow' | sudo tee /proc/acpi/nuc_led > /dev/null
elif (( $(echo "$runtime < 3" |bc -l) )); then    
    echo 'ring,10,fade_medium,yellow' | sudo tee /proc/acpi/nuc_led > /dev/null
elif (( $(echo "$runtime < 5" |bc -l) )); then
    echo 'ring,20,none,pink' | sudo tee /proc/acpi/nuc_led > /dev/null
elif (( $(echo "$runtime >= 5" |bc -l) )); then
    echo 'ring,60,blink_fast,red' | sudo tee /proc/acpi/nuc_led > /dev/null
    sync
fi

To set the NUC LED Color you need to install a Module:

This is a simple kernel module to control the power and ring LEDs on Intel NUC7i[x]BN and NUC6CAY kits.

github.com/milesp20/intel_nuc_led

✉ MG// CEST

Follow Icon
Don’t miss out and subscribe by email:
Not to worry! No spam. Just a summarizing email for new posts, easy to unsubscribe at any time.
← Other Blog Posts