Using a Three Pane Terminal Window for SmartGardenSystem V2
EDITORS NOTE: We took this script for a three pane terminal window, put it on our test system and had it running in seconds. This is REALLY handy to use for the SmartGardenSystem V2. Thank you!

From cclecanuck on forum.switchdoc.com:
I have created a small bash control script for starting the Smart Garden SystemV2 python applications. The script requires that TMUX be installed as well. It will launch all three apps into a single pane. This creates a useful console for output should you need it. Attached are the script and screenshot of the tmux session. You can add this to your crontab to startup on reboot or to check every X minutes to see if the service is running. Copy the script into the /home/pi/SDL_Pi_SmartGardenSystem2 and type “chmod +x sgsctl”. Once you have done, the control script can be run as seen below.

To install tmux:
sudo apt install tmux
Copy the script below into the /home/pi/SDL_Pi_SmartGardenSystem2 and type “chmod +x sgsctl”

The Bash Script Code
#!/bin/bash
######################################################
# Smart Garden System V2 Autostart Script v1.0
# author : cciecanuck
# script based upon following works
# 1) https://gist.github.com/todgru/6224848#
# 2) https://gist.github.com/Jofkos/a736e40ea701a0d705c1
# Notes: This script assumes you have done the inital
# setup and configuration.
######################################################
##########
# Create our application base
app_base=/home/pi/SDL_Pi_SmartGardenSystem2
# base directory is this script's parent dir
cd $app_base
# dir which contains the server/proxy directories (`pwd` -> current dir)
basedir="`pwd`"
# tmux session name (`basename \"$basedir\"` -> basedir's name)
session="`basename \"$basedir\"`"
# txmux window name
window_name="SmartGardenSystemv2"
# Smart Garden System web app directory
web_app_dir=dash_app
# Smart Garden System web app name
web_app_name="index.py"
# Smart Garden System web app tcp port
web_app_tcp=8050
# Smart Garden System web app name
config_app_name="SGSConfigure.py"
# Smart Garden System web app tcp port
config_app_tcp=8001
# Smart Garden System Core application
core_app_name="SGS2.py"
#####<</Variables End>#####
# Make sure we start in our correct directory
if [[ basedir != */ ]]
then
basedir+="/"
fi
##########
start() {
# Check to see if there is currently a session running
tmux has-session -t $session 2>/dev/null
# If the Smart Garden system is not running lets start it!
if [ $? != 0 ]; then
# This code ensures tmux process will not collide with another SmartGarden Service
# Check to see if any of the Smart Garden System Web App Components are running, if so exit out of the script
check_app_running=$(sudo lsof -i:$web_app_tcp | egrep LISTEN | cut -d" " -f2)
# Process cannot be empty
if [ ! -z "$check_app_running" ]; then
echo "[ERROR] - SGS Web App is currently running on TCP Port $web_app_tcp, run command 'sudo kill -9 $(sudo lsof -i:$web_app_tcp | egrep LISTEN | cut -d" " -f2)' to stop server"
exit
else
# Check to see if any of the Smart Garden System Config Components are running, if so exit out of the script
check_config_running=$(sudo lsof -i:$config_app_tcp | egrep LISTEN | cut -d" " -f2)
# Process cannot be empty
if [ ! -z "$check_config_running" ]; then
echo "[ERROR] - SGS Config App is currently running on TCP Port $config_app_tcp, run command 'sudo kill -9 $(sudo lsof -i:$config_app_tcp | egrep LISTEN | cut -d" " -f2)' to stop server"
exit
else
check_core_running=$(ps aux | egrep "$core_app_name" | egrep -v "grep|sudo" | awk '{print $2}')
# Process cannot be empty
if [ ! -z "$check_core_running" ]; then
echo "[ERROR] - SGS Core App is currently running, run command 'sudo kill -9 $(ps aux | egrep "$core_app_name" | egrep -v "grep|sudo" | awk '{print $2}')' to stop server"
exit
fi
fi
fi
# Create tmux session and assign names to these
tmux new-session -d -s $session -n $window_name
# Select pane 1 and start Smart Garden System Application
tmux send-keys "sudo /usr/bin/python3 $core_app_name" C-m
# Split pane 1 horizontal by 65%, start redis-server
tmux splitw -h -p 35
# Start Smart Garden System - core application
tmux send-keys "sudo /usr/bin/python3 $config_app_name" C-m
# Split pane 2 vertiacally by 25%
tmux splitw -v -p 75
# select pane 3, start Smart Garden System web app
tmux send-keys "cd $web_app_dir && sudo /usr/bin/python3 $web_app_name" C-m
# Select pane 1
tmux selectp -t 1
echo "Server started. Attaching session..."
sleep 0.5
tmux attach-session -t $session:0
else
echo "[INFO] - Tmux service for $window_name is currently already running, use 'sgsctl attach' to connect to session"
fi
}
stop() {
# Check to see if there is currently a session running
tmux has-session -t $session 2>/dev/null
# If the Smart Garden system is running lets stop it!
if [ $? = 0 ]; then
echo "[INFO] - Stopping $window_name tmux session"
tmux kill-session -t $session
else
echo "[INFO] - Tmux session $window_name is currently not running"
fi
}
status() {
# Check to see if there is currently a session running
tmux has-session -t $session 2>/dev/null
# If the Smart Garden system is running lets display some info
if [ $? = 0 ]; then
echo "[INFO] - $window_name is currently running, use 'sgsctl attach' to connect to session"
else
echo "[INFO] - $window_name is currently not running, use 'sgsctl start' to start service"
fi
}
cron() {
# Check to see if there is currently a session running
tmux has-session -t $session 2>/dev/null
# If the Smart Garden system is running lets display some info
if [ $? = 0 ]; then
echo "[INFO] - $window_name is currently running, use 'sgsctl attach' to connect to session"
else
echo "[INFO] - $window_name is currently not running, starting service"
start
fi
}
restart() {
# Stop the service then restart it
stop
sleep 0.8
echo "[INFO] - Tmux session $window_name is now being restarted"
sleep 0.8
start
}
#####</End Functions>#####
case "$1" in
start)
start
;;
stop)
stop
;;
attach)
tmux attach -t $session
;;
status)
status
;;
cron)
cron
;;
restart)
restart
;;
*)
echo "Usage: sgsctl (start|stop|restart|attach|cron|status)"
;;
esac
