0

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.

NEWBIEEBIEE
  • 197
  • 2
  • 13

0 Answers0