I have some problems in my bash code on raspberry pi(jessie). My goal is connecting ELM327(https://i.stack.imgur.com/Zkfo7.jpg)
and run python code,"pyobd"(https://sourceforge.net/projects/pyobd2/), logging some automotive data.
Thanks to cooperation,previous problem were cleared, but these code are bad as you can see. Particularly, "scan on" is called at three time in "bluetoothctr2.exp", beacause This command isn't responding well. So I'd like to make these code generic.
main.sh
#!/bin/bash
main_state=-1
main(){
while [ $main_state -ne 0 ]
do
main_state=0
list=("Bluetooth" "Shutdown")
main_answer=$(env DISPLAY=:0.0 zenity --list --title="Menu" --text="What you want to do" --column TODO "${list[@]}")
if [ $? = 1 ]; then
exit
fi
case ${main_answer} in
"Bluetooth")
`bluetooth`
main_state=1 ;;
"Shutdown")
`shut_down`
main_state=3 ;;
esac
done
echo ${main_state}
exit 0
}
bluetooth(){
OBDIIMAC=$(hcitool scan | grep OBDII | awk '{print $1;}')
list=("0000" "1234")
sudo rfcomm bind rfcomm0 ${OBDIIMAC}
sudo rfcomm connect hci0 ${OBDIIMAC}
answer=$(env DISPLAY=:0.0 zenity --list --title="${OBDIIMAC}" --text="PINCODE" --column "${OBDIIMAC}" "${list[@]}")
sudo expect -d bluetoothctr2.exp ${OBDIIMAC} ${answer}
sudo -u pi python ./pyobd-pi/obd_recorder.py &
zenity --info --title= "Now Logging" --text="click OK to kill process"
pkill -9 python
main
}
shut_down(){
list=("now" "30min" "60min" "90min" "120min" "cancel")
answer=$(env DISPLAY=:0.0 zenity --list --title="shutdown" --text="click ok" --column TODO "${list[@]}")
case ${answer} in
"now")
gksu 'shutdown -h now'
state=1 ;;
"30min")
gksu 'shutdown -h +30'
state=2 ;;
"60min")
gksu 'shutdown -h +60'
state=3 ;;
"90min")
gksu 'shutdown -h +90'
state=4 ;;
"120min")
gksu 'shutdown -h +120'
state=5 ;;
"cancel")
gksu 'shutdown -h -c'
state=6 ;;
esac
echo ${state}
}
main
bluetoothctr2.exp
#!/usr/bin/expect
log_file /var/log/expect.log
set Mac_Addr [lindex $argv 0]
set Pin_Code [lindex $argv 1]
set Prompt "\[#$%>\]"
puts ${Mac_Addr}
puts ${Pin_Code}
puts ${Prompt}
sleep 3
set timeout 20
spawn env LANG=C bluetoothctl
sleep 3
expect "#"
send "power on\n"
sleep 2
expect "#"
send "agent on\n"
sleep 2
expect "#"
send "scan on"
sleep 5
expect "#"
send "scan on"
sleep 5
expect "#"
send "scan on"
sleep 2
expect "#"
send "pairable on\n"
expect "#"
send "pair ${Mac_Addr}\n"
sleep 2
expect "Enter PIN code"
send "${Pin_Code}\n"
sleep 2
expect "#"
send "trust ${Mac_Addr}\n"
sleep 2
expect "#"
send "connect ${Mac_Addr}\n"
sleep 2
expect "#"
send "info ${Mac_Addr}\n"
sleep 2
expect {
-glob "${Prompt}" {
#interact
expect eof
exit 0
}
}
Let me know what you think.