first commit based on running system

py3
Gunstick 2015-04-08 22:16:20 +02:00
parent 8f5104ee80
commit b59c94ccbf
4 changed files with 206 additions and 0 deletions

View File

@ -1,2 +1,42 @@
# doorbuzz
raspberry Pi opening the front door and playing videos
the button has an RGB led to show status
how to install
==============
put into /etc/rc.local the following line:
su pi -c '/home/pi/buzzctrl.sh' &
sudo vi /etc/xdg/lxsession/LXDE/autostart
remove screensaver
sudo apt-get install unclutter xdotool git-core screen imagemagick
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
mkdir -p /home/pi/.config/lxsession/LXDE/
cat > /home/pi/.config/lxsession/LXDE/autostart <<"EOF"
@xset s off
@xset -dpms
@xset s noblank
@unclutter -display :0 -noevents -grab
@./videoplayer.sh
EOF
connect the button and LED to pins as shown in buzzctrl.sh
create a file "secret.txt" containing the http://user:pass@10.1.1.xx part of the URL
adapt the URL in buzzctrl.sh
adapt spaceapi URL in spacestatus.py
put .mp4 videos into ~pi/ and they will show when your hackerspace is open
you can add videos and they will be taken into account automatically
when booting, the button led uses morsecode to send the low byte of the
IP adress in decimal
todo
====
create a config file
put more of the hardcoded values from code into parameters
make code resilient against missing commands (e.g. gpio not in PATH)
move script to run in screen instead starting from rc.local

140
buzzctrl.sh Executable file
View File

@ -0,0 +1,140 @@
#!/bin/bash
BUTTONPIN=25
REDLEDPIN=23
GREENLEDPIN=18
BLUELEDPIN=24
BUZZERURL="$(cat "$(dirname "$0")"/secret.txt)/state.xml?relay1State=2&pulseTime1=5"
BUZZERSTATUSURL="$(cat "$(dirname "$0")"/secret.txt)/state.xml"
# file secret.txt should contain username:password
# install by putting into /etc/rc.local
# su pi -c '/home/pi/buzzctrl.sh' &
echo "Initializing hardware"
# the button
gpio -g mode $BUTTONPIN up
gpio -g mode $BUTTONPIN in
# R
gpio -g mode $REDLEDPIN out
# G
gpio -g mode $GREENLEDPIN out
# B
gpio -g mode $BLUELEDPIN out
pulseon() {
pin=$1
value=0
valueinc=64
gpio -g mode $pin pwm
while true
do
gpio -g pwm $pin $value
value=$((value+valueinc))
if [ $value -gt 1023 ] || [ $value -lt 0 ]
then
valueinc=$((0-valueinc))
value=$((value+valueinc))
fi
sleep 0.2
done
}
pulseoff() {
pin=$1
kill $2
gpio -g mode $pin out
gpio -g write $pin 0
}
ledcolor() {
red=$1
green=$2
blue=$3
gpio -g write $REDLEDPIN $red
gpio -g write $GREENLEDPIN $green
gpio -g write $BLUELEDPIN $blue
}
declare -a morse
morse[0]="-----"
morse[1]=".----"
morse[2]="..---"
morse[3]="...--"
morse[4]="....-"
morse[5]="....."
morse[6]="-...."
morse[7]="--..."
morse[8]="---.."
morse[9]="----."
morseled() {
message=$1
echo $message
msglen=${#message}
pos=0
while [ $pos -lt $msglen ]
do
morsecode=${morse[${message:${pos}:1}]}
pos=$((pos+1))
echo $morsecode
morselen=${#morsecode}
morsepos=0
while [ $morsepos -lt $morselen ]
do
ledcolor $2 $3 $4
#echo "c($morsepos)=${morsecode:${morsepos}:1}"
if [ "${morsecode:${morsepos}:1}" = "." ]
then
#echo "."
sleep 0.1
else
#echo "-"
sleep 0.2
fi
ledcolor 0 0 0
sleep 0.1
morsepos=$((morsepos+1))
done
sleep 0.2
echo
done
}
echo "morsing IP"
ledcolor 1 1 1
sleep 3
ledcolor 0 0 0
sleep 1
morseled "$(hostname -I|awk -F. '{sub(" ","",$NF);printf $NF}')" 1 0 0
ledcolor 1 1 1
sleep 1
echo "Main loop"
while true
do
ledcolor 0 1 1
pulseon $GREENLEDPIN &
pulsepid=$!
trap "pulseoff $GREENLEDPIN $pulsepid;ledcolor 0 0 0;exit" 1 2 3
gpio -g wfi $BUTTONPIN falling
while [ $(gpio -g read $BUTTONPIN) != 0 ]
do
gpio -g wfi $BUTTONPIN falling
done
pulseoff $GREENLEDPIN $pulsepid
ledcolor 0 1 1
echo "Pushiii"
wget -O - -S --timeout=1 --tries=1 "$BUZZERURL" 2>&1
ret=$?
if [ $ret -ne 0 ]
then
morseled "$ret" 1 0 0
else
while wget -O - --timeout=1 --tries=1 $BUZZERSTATUSURL|grep '<relay1state>1</relay1state>'
do
ledcolor 0 1 0
sleep 0.9
ledcolor 0 1 1
sleep 0.1
done
fi
echo "DOOONE"
done

5
spacestatus.py Normal file
View File

@ -0,0 +1,5 @@
import urllib, json
url = "https://spaceapi.syn2cat.lu/status/json"
response = urllib.urlopen(url);
data = json.loads(response.read())
print data["state"]["open"]

21
videoplayer.sh Executable file
View File

@ -0,0 +1,21 @@
#!/bin/bash
if [ ! -f black.png ]
then
convert -size 1920x1080 xc:#000000 black.png
fi
killall feh
trap "killall feh; killall omxplayer" 1 2 3 15
feh -x black.png &
while true
do
if [ "$(python ./spacestatus.py)" = "False" ]
then # test on false, so in case of network fail, it defaults to playing
sleep 60
else
ls *mp4 |
while read video
do
omxplayer "$video" </dev/null
done
fi
done