Ludo - visual error display for your Raspberry Pi

When executing scripts, one or more commands may return an error which you don't notice due to large amounts of text scrolling down the screen. If the error handling is poor (which it usually is for quick scripts), you may get to the end and think everything is all good and well. Then later on, something related doesn't work, and you can't figure out why!

So we thought a visual indicator might help out some people. And having the LedBorg display this would be fantastic!

Imagine the following three commands in a script file:

mkdir ~/test
cp ./missingfile ~/test/
ps –A

You could miss the error the missing file generates cp: cannot stat './missing': No such file or directory

So if we precede the commands with ludo (after installing LedBorg and ludo)


ludo mkdir ~/test
ludo cp ./missingfile ~/test/
ludo ps –A

Whilst executing, the LedBorg goes to Blue to indicate it is busy

Then the first command (mkdir) lights the LedBorg Green to indicate OK.

The second command with the missing file returns an error and lights the LedBorg Red to indicate a failed return code

The third command executes OK, but as there was a previous error, it now lights Orange

Purple (Red and Blue) means it has had an error and is currently busy.
White (Red, Green and Blue) means it did have an error, the last instruction was OK, and it is currently busy.

Red Channel = ERROR
Green Channel = OK
Blue Channel on = BUSY

To clear the Led again, simply type ludo without any arguments

  • To make script executable
    chmod +x ludo.sh
  • To clear (reset)
    ./ludo.sh
  • To copy to programs (use without ./)
    sudo cp ludo.sh /usr/local/bin/ludo
  • To run normally
    ./ludo.sh command goes here
  • To run as root / superuser
    ./ludo.sh s command goes here

Here's the code, you can download ludo script file as text here
Save the text file on your pi as ludo.sh

#!/bin/bash

if [ $# -eq 0 ]; then
    # No arguments provided, reset colours to off
    echo "000" > /dev/ledborg                       # Write the colour string for off to the LedBorg device
else
    # Arguments provided, user wants to run a command
 
    # Read the current colour from the LedBorg device
    oldColour=`cat /dev/ledborg`                    # Read the entire contents of the LedBorg file (should only be 3 characters long)
    red=`echo "$oldColour" | cut -b 1`              # Get the red setting from the colour string
    green=`echo "$oldColour" | cut -b 2`            # Get the red setting from the colour string
    blue=`echo "$oldColour" | cut -b 3`             # Get the red setting from the colour string

    # Set running state
    blue="2"                                        # Change blue indicator to say we are running
    echo "${red}${green}${blue}" > /dev/ledborg     # Write the colour string to the LedBorg device

    # Perform command
    if [ "$1" = "s" ]; then
        # Superuser command, run via sudo
        shift                                           # Throw away the first argument (currently $1)
        sudo $*                                         # Run whatever command we were passed ($* is shorthand for all arguments)
    else
        # Normal command
        $*                                              # Run whatever command we were passed ($* is shorthand for all arguments)
    fi

    # Check the return code for the command and pick red/green levels ($? holds the last returned error code)
    result=$?
    if [ $result -eq 0 ]; then
        # No error this time
        if [ $red -eq 0 ]; then
            # No errors since the last reset, set green
            green="2"
            red="0"
        else
            # We have had both a success this time and an error previously, set orange
            green="1"
            red="2"
        fi
    else
        # We have had an error, set red
        green="0"
        red="2"
    fi

    # Set final state
    blue="0"                                        # Change blue indicator to say we are finished
    echo "${red}${green}${blue}" > /dev/ledborg     # Write the colour string to the LedBorg device
fi

exit $result                                        # Return the same error code we received to whoever called us