Compare commits

11 Commits

Author SHA1 Message Date
Dave
2dc965719c fixed if statements 2018-10-11 22:26:51 +01:00
Dave
f7d0bd6558 fixed referencing 2018-10-11 22:15:41 +01:00
Dave
06c7c65420 permsision changes 2018-10-11 19:15:00 +01:00
Dave
56491b7ab0 added in GPIO led functionality 2018-10-11 18:57:23 +01:00
Dave
f13802a62b more LED timing tweaks 2018-10-07 21:47:38 +01:00
Dave
f234853b44 added basic LED functionality 2018-10-07 21:25:17 +01:00
Dave
7c23f293da created percentage progess 2018-10-07 13:20:53 +01:00
Dave
62667d11f8 small update on CARD_READER variable 2018-10-06 22:04:39 +01:00
Dave
8681034d63 minor changes 2018-10-06 21:49:52 +01:00
Dave
00a8c0e170 updated readme with link 2018-10-06 21:27:00 +01:00
Dave
a90ff2c1f8 allows a device in any slot to work 2018-10-06 21:26:10 +01:00
5 changed files with 192 additions and 15 deletions

View File

@@ -11,7 +11,7 @@ Little Backup Box is designed to work with USB sticks as backup media. Theoretic
1. Create a bootable SD card with the latest version of Raspbian Lite for use with Little Backup Box.
2. Make sure that your Raspberry Pi is connected to the internet.
3. Run the following command on the Raspberry Pi: `curl -sSL https://is.gd/littlebackupbox | bash`
3. Run the following command on the Raspberry Pi: `curl -sSL https://raw.githubusercontent.com/skidave/little-backup-box/master/install-little-backup-box.sh | bash`
Little Backup Box supports three backup modes:

View File

@@ -26,9 +26,12 @@ sudo chmod -R 775 /media/storage
sudo setfacl -Rdm g:pi:rw /media/storage
cd
git clone https://github.com/dmpop/little-backup-box.git
git clone https://github.com/skidave/little-backup-box.git
cd little-backup-box/fonts
sudo cp -R . /home/pi/.fonts
cd ../scripts
sudo chmod u+x gpio
sudo chmod u+x blink
cd
HEIGHT=15

25
scripts/blink Normal file
View File

@@ -0,0 +1,25 @@
#!/bin/bash
. /home/pi/little-backup-box/scripts/gpio
function blink()
{
local pin=$1
local speed=$2
while :
do
gpio write $pin 1
sleep $speed
gpio write $pin 0
sleep $speed
done
}
# Just invoke our function if the script is called directly
if [ "$BASH_SOURCE" == "$0" ]; then
gpio mode $1 out
blink $@
fi

View File

@@ -19,12 +19,29 @@
# Specify devices and their mount points
# and other settings
STORAGE_DEV="sda1" # Name of the storage device
STORAGE_DEV="sdc1" # Name of the storage device
STORAGE_MOUNT_POINT="/media/storage" # Mount point of the storage device
CARD_DEV="sdb1" # Name of the storage card
CARD_DEV="sd[ab]1" # Name of the storage card
CARD_MOUNT_POINT="/media/card" # Mount point of the storage card
SHUTD="5" # Minutes to wait before shutdown due to inactivity
. /home/pi/little-backup-box/scripts/gpio
. /home/pi/little-backup-box/scripts/blink
gpio mode 5 out
gpio mode 6 out
gpio mode 13 out
gpio mode 19 out
gpio mode 26 out
gpio wirte 5 0
gpio write 6 0
gpio write 13 0
gpio write 19 0
gpio write 26 0
# Set the ACT LED to heartbeat
sudo sh -c "echo heartbeat > /sys/class/leds/led0/trigger"
@@ -33,6 +50,7 @@ sudo shutdown -h $SHUTD "Shutdown is activated. To cancel: sudo shutdown -c"
# Wait for a USB storage device (e.g., a USB flash drive)
STORAGE=$(ls /dev/* | grep "$STORAGE_DEV" | cut -d"/" -f3)
#STORAGE=$(lsblk -x SIZE | grep sd[a-z]1 | awk '{print $1}' | sort | head -n 1)
while [ -z "${STORAGE}" ]
do
sleep 1
@@ -50,16 +68,19 @@ sudo sh -c "echo timer > /sys/class/leds/led0/trigger"
sudo sh -c "echo 1000 > /sys/class/leds/led0/delay_on"
# Wait for a card reader or a camera
CARD_READER=$(ls /dev/* | grep "$CARD_DEV" | cut -d"/" -f3)
until [ ! -z "$CARD_READER" ]
# takes first device found
CARD_READER=($(ls /dev/* | grep "$CARD_DEV" | cut -d"/" -f3))
until [ ! -z "${CARD_READER[0]}" ]
do
sleep 1
CARD_READER=$(ls /dev/sd* | grep "$CARD_DEV" | cut -d"/" -f3)
CARD_READER=($(ls /dev/* | grep "$CARD_DEV" | cut -d"/" -f3))
done
# If the card reader is detected, mount it and obtain its UUID
if [ ! -z "$CARD_READER" ]; then
mount /dev"/$CARD_DEV" "$CARD_MOUNT_POINT"
if [ ! -z "${CARD_READER[0]}" ]; then
mount /dev"/${CARD_READER[0]}" "$CARD_MOUNT_POINT"
CARD_COUNT=$(find $CARD_MOUNT_POINT/ -type f | wc -l)
# # Set the ACT LED to blink at 500ms to indicate that the card has been mounted
sudo sh -c "echo 500 > /sys/class/leds/led0/delay_on"
@@ -75,12 +96,85 @@ if [ ! -z "$CARD_READER" ]; then
# Set the backup path
BACKUP_PATH="$STORAGE_MOUNT_POINT"/"$ID"
STORAGE_COUNT=$(find $BACKUP_PATH/ -type f | wc -l)
# Perform backup using rsync
rsync -ah --exclude "*.id" "$CARD_MOUNT_POINT"/ "$BACKUP_PATH"
rsync -avh --info=progress2 --exclude "*.id" "$CARD_MOUNT_POINT"/ "$BACKUP_PATH" &
pid=$!
# Turn off the ACT LED to indicate that the backup is completed
sudo sh -c "echo 0 > /sys/class/leds/led0/brightness"
COUNTER=0
while kill -0 $pid 2> /dev/null
do
STORAGE_COUNT=$(find $BACKUP_PATH/ -type f | wc -l)
PERCENT=$(expr 100 \* $STORAGE_COUNT / $CARD_COUNT)
sudo sh -c "echo $PERCENT"
#IF STATEMENTS HERE FOR LEDS
if [ $PERCENT -lt 19 ]; then
if [ "$COUNTER" -eq 0 ]; then
blink 26 0.25 &
blink_pid1=$!
COUNTER=$((COUNTER+1))
fi
elif [ $PERCENT -gt 20 ] && [ $PERCENT -lt 39 ]; then
kill $blink_pid1 2> /dev/null
gpio write 26 1
if [ "$COUNTER" -eq 1 ]; then
blink 19 0.25 &
blink_pid2=$!
COUNTER=$((COUNTER+1))
fi
elif [ $PERCENT -gt 40 ] && [ $PERCENT -lt 59 ]; then
kill $blink_pid2 2> /dev/null
gpio write 26 1
gpio write 19 1
if [ "$COUNTER" -eq 2 ]; then
blink 13 0.25 &
blink_pid3=$!
COUNTER=$((COUNTER+1))
fi
elif [ $PERCENT -gt 60 ] && [ $PERCENT -lt 79 ]; then
kill $blink_pid3 2> /dev/null
gpio write 26 1
gpio write 19 1
gpio write 13 1
if [ "$COUNTER" -eq 3 ]; then
blink 6 0.25 &
blink_pid4=$!
COUNTER=$((COUNTER+1))
fi
elif [ $PERCENT -gt 80 ] && [ $PERCENT -lt 100 ]; then
kill $blink_pid4 2> /dev/null
gpio write 26 1
gpio write 19 1
gpio write 13 1
gpio write 6 1
if [ "$COUNTER" -eq 4 ]; then
blink 5 0.25 &
blink_pid5=$!
COUNTER=$((COUNTER+1))
fi
fi
sleep 1
done
if [ "$COUNTER" -eq 5 ]; then
kill $blink_pid5 2> /dev/null
fi
gpio write 26 1
gpio write 19 1
gpio write 13 1
gpio write 6 1
gpio write 5 1
sleep 5
gpio clean 5
gpio clean 6
gpio clean 13
gpio clean 19
gpio clean 26
fi
# Shutdown

55
scripts/gpio Normal file
View File

@@ -0,0 +1,55 @@
#!/bin/bash
# Utility to control the GPIO pins of the Raspberry Pi
# Can be called as a script or sourced so that the gpio
# function can be called directly
function gpio()
{
local verb=$1
local pin=$2
local value=$3
local pins=($GPIO_PINS)
if [[ "$pin" -lt ${#pins[@]} ]]; then
local pin=${pins[$pin]}
fi
local gpio_path=/sys/class/gpio
local pin_path=$gpio_path/gpio$pin
case $verb in
read)
cat $pin_path/value
;;
write)
sudo sh -c "echo $value > $pin_path/value"
;;
mode)
if [ ! -e $pin_path ]; then
sudo sh -c "echo $pin > $gpio_path/export"
fi
sudo sh -c "echo $value > $pin_path/direction"
;;
state)
if [ -e $pin_path ]; then
local dir=$(cat $pin_path/direction)
local val=$(cat $pin_path/value)
echo "$dir $val"
fi
;;
clean)
sudo sh -c "echo 0 > $pin_path/value"
sudo sh -c "echo $pin > $gpio_path/unexport"
;;
esac
}
# Just invoke our function if the script is called directly
if [ "$BASH_SOURCE" == "$0" ]; then
gpio $@
fi