224 lines
6.3 KiB
Bash
Executable File
224 lines
6.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
|
|
|
|
######################
|
|
## SCRIPT INIT
|
|
######################
|
|
DRONE_INTERFACE=$(yq '.drone_interface' < settings/admin.yml)
|
|
DRONE_WPA_SUPP_CONF=$(yq '.drone_wpa_supp' < settings/admin.yml)
|
|
NET_INTERFACE=$(yq '.net_interface' < settings/admin.yml)
|
|
NET_WPA_SUPP_CONF=$(yq '.net_wpa_supp' < settings/admin.yml)
|
|
#ENV_FOR_DYNACONF=$(yq '.env_for_dynaconf' < settings/admin.yml)
|
|
|
|
pids_dir='./pids'
|
|
if [[ ! -d "$pids_dir" ]]; then
|
|
mkdir $pids_dir
|
|
fi
|
|
|
|
|
|
|
|
######################
|
|
## COMMAND FUNCTIONS
|
|
######################
|
|
list_related_network_interface_status() {
|
|
networkctl list
|
|
}
|
|
|
|
list_wifi_ssid(){
|
|
echo "using drone interface: $DRONE_INTERFACE"
|
|
sudo iw dev $DRONE_INTERFACE scan | grep "SSID: "
|
|
}
|
|
|
|
connect_using_wpa_supp() {
|
|
echo "########## log start: $(date) ##########"
|
|
sudo wpa_supplicant -D nl80211 -i $DRONE_INTERFACE -c network/$DRONE_WPA_SUPP_CONF
|
|
}
|
|
|
|
get_dhcp_ip () {
|
|
echo "########## log start: $(date) ##########"
|
|
while true;
|
|
do
|
|
sudo dhclient $DRONE_INTERFACE
|
|
ip_address=$(ip addr show wlan1 | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1)
|
|
if [[ -n $ip_address ]]; then
|
|
echo "Drone assigned IP to commander: $ip_address"
|
|
echo "ok"
|
|
break
|
|
else
|
|
echo "Drone is not assigned an IP yet. Waiting.."
|
|
sleep 2
|
|
fi
|
|
done
|
|
}
|
|
|
|
start_jupyter() {
|
|
echo "########## log start: $(date) ##########"
|
|
venv/bin/python -m jupyter lab --ip='0.0.0.0' --NotebookApp.token='' --NotebookApp.password='' --no-browser --port=8888
|
|
}
|
|
|
|
start_codeserver(){
|
|
echo "########## log start: $(date) ##########"
|
|
packages/code-server/code-server-4.12.0-linux-amd64/bin/code-server --config /home/uad/misc/tello-commander/packages/code-server/config.yaml --disable-getting-started-override --disable-workspace-trust --disable-telemetry ./
|
|
}
|
|
|
|
start_commander_service() {
|
|
echo "########## log start: $(date) ##########"
|
|
venv/bin/python commander/service.py $1
|
|
}
|
|
|
|
start_webui_service() {
|
|
echo "########## log start: $(date) ##########"
|
|
commander_host=$1
|
|
ENV_FOR_DYNACONF=$commander_host venv/bin/python brain/service.py
|
|
}
|
|
|
|
talk_to_drone_via_cli() {
|
|
commander_host=$1
|
|
ENV_FOR_DYNACONF=$commander_host python brain/cli.py
|
|
}
|
|
|
|
kill_everything() {
|
|
for p in $pids_dir/*.txt; do echo "killing $p"; sudo pkill -15 $(cat "$p"); done
|
|
}
|
|
|
|
remote_shutdown() {
|
|
echo "shutting down drone commander rpi in 3 secs"
|
|
sleep 3
|
|
ssh uad@10.8.0.9 "sudo shutdown now"
|
|
}
|
|
|
|
|
|
######################
|
|
## NETWORK
|
|
######################
|
|
if [ "$1" == "list-network" ]; then
|
|
list_related_network_interface_status
|
|
|
|
elif [ "$1" == "list-wifis" ]; then
|
|
list_wifi_ssid #connect $2 $3
|
|
|
|
elif [ "$1" == "connect-drone" ]; then
|
|
connect_using_wpa_supp > logs/wpa_supp.log 2>&1 &
|
|
wpa_supp_pid=$!
|
|
echo "started wpa supplicant to connect drone network with PID $wpa_supp_pid"
|
|
echo $wpa_supp_pid > $pids_dir/wpa_supp_pid.txt
|
|
|
|
elif [ "$1" == "disconnect-drone" ]; then
|
|
wpa_supp_pid_file="$pids_dir/wpa_supp_pid.txt"
|
|
if [ -f "$wpa_supp_pid_file" ]; then
|
|
sudo pkill -15 -P $(cat $wpa_supp_pid_file)
|
|
echo "stopped drone connection via wpa_supp"
|
|
fi
|
|
|
|
elif [ "$1" == "get-dhcp" ]; then
|
|
get_dhcp_ip > logs/dhcp_ip.log 2>&1 &
|
|
dhcp_ip_pid=$!
|
|
echo "requested ip address from drone router with PID $dhcp_ip_pid"
|
|
echo $dhcp_ip_pid > $pids_dir/dhcp_ip_pid.txt
|
|
|
|
elif [ "$1" == "kill-dhcp" ]; then
|
|
dhcp_ip_pid_file="$pids_dir/dhcp_ip_pid.txt"
|
|
if [ -f "$dhcp_ip_pid_file" ]; then
|
|
sudo pkill -15 -P $(cat $dhcp_ip_pid_file)
|
|
echo "killed dhcp client"
|
|
fi
|
|
|
|
######################
|
|
## DEV
|
|
######################
|
|
elif [ "$1" == "start-jupyter" ]; then
|
|
start_jupyter > logs/jupyter.log 2>&1 &
|
|
jupyter_pid=$!
|
|
echo "started jupyter with PID $jupyter_pid"
|
|
echo $jupyter_pid > $pids_dir/jupyter_pid.txt
|
|
|
|
elif [ "$1" == "stop-jupyter" ]; then
|
|
jupyter_pid_file="$pids_dir/jupyter_pid.txt"
|
|
if [ -f "$jupyter_pid_file" ]; then
|
|
pkill -15 -P $(cat $jupyter_pid_file)
|
|
echo "stopped jupyter"
|
|
fi
|
|
|
|
elif [ "$1" == "start-cs" ]; then
|
|
start_codeserver > logs/codeserver.log 2>&1 &
|
|
codeserver_pid=$!
|
|
echo "started code server with PID $codeserver_pid"
|
|
echo $codeserver_pid > $pids_dir/codeserver_pid.txt
|
|
|
|
elif [ "$1" == "stop-cs" ]; then
|
|
codeserver_pid_file="$pids_dir/codeserver_pid.txt"
|
|
if [ -f "$codeserver_pid_file" ]; then
|
|
sudo pkill -15 -P $(cat $codeserver_pid_file)
|
|
sudo killport 8888
|
|
echo "stopped code server"
|
|
fi
|
|
|
|
elif [ "$1" == "turn-off" ]; then
|
|
kill_everything
|
|
remote_shutdown
|
|
|
|
######################
|
|
## DRONE
|
|
######################
|
|
elif [ "$1" == "start-commander" ]; then
|
|
start_commander_service $2 > logs/commander.log 2>&1 &
|
|
commander_pid=$!
|
|
echo "started commander with PID $commander_pid"
|
|
echo $commander_pid > $pids_dir/commander_pid.txt
|
|
|
|
elif [ "$1" == "stop-commander" ]; then
|
|
commander_pid_file="$pids_dir/commander_pid.txt"
|
|
if [ -f "$commander_pid_file" ]; then
|
|
sudo pkill -15 -P $(cat $commander_pid_file)
|
|
sudo killport 8889
|
|
echo "stopped commander"
|
|
fi
|
|
|
|
elif [ "$1" == "start-webui" ]; then
|
|
start_webui_service $2 > logs/webui.log 2>&1 &
|
|
webui_pid=$!
|
|
echo "started webui service with PID $webui_pid"
|
|
echo webui_pid > $pids_dir/webui_pid.txt
|
|
|
|
elif [ "$1" == "stop-webui" ]; then
|
|
webui_pid_file="$pids_dir/webui_pid.txt"
|
|
if [ -f "webui_pid_file" ]; then
|
|
sudo pkill -15 -P $(cat webui_pid_file)
|
|
sudo killport 8890
|
|
echo "stopped webui service"
|
|
fi
|
|
|
|
elif [ "$1" == "prepare-flight" ]; then
|
|
./manage.sh connect-drone
|
|
./manage.sh get-dhcp
|
|
./manage.sh start-commander
|
|
echo "prepared to flight"
|
|
|
|
elif [ "$1" == "finish-flight" ]; then
|
|
./manage.sh disconnect-drone
|
|
./manage.sh kill-dhcp
|
|
./manage.sh stop-commander
|
|
kill_everything
|
|
echo "flight finished"
|
|
elif [ "$1" == "start-clitalk" ]; then
|
|
talk_to_drone_via_cli $2
|
|
|
|
######################
|
|
## INFO
|
|
######################
|
|
else
|
|
echo "Invalid command. Please use one of:
|
|
- list-network
|
|
- list-wifis
|
|
- connect-/ disconnect-drone
|
|
- get-/ kill-dhcp
|
|
- start-/ stop-jupyter (8888)
|
|
- start-/ stop-cs (8888)
|
|
- start-/ stop-commander (8889)
|
|
- start-/ stop-webui [commander_host (tuncel / commander)] (8890)
|
|
- start-/ stop-clitalk [commander_host (tuncel / commander_remote / commander_local)]
|
|
- turn-off
|
|
- prepare-/ finish-flight"
|
|
fi
|