TAG="latest" CONTAINER="dasmoorhuhn/atc-mithermometer-gateway" CONTAINER_NAME="ATC_MiThermometer_Gateway" VOLUME=$(pwd)/data HELP="Using any command line argument except -d bypasses the .env file\n\n USAGE: sh run_docker.sh [OPTIONS] \n [ -d ] Run in Backgrund \n [ -t | --tag ] Set a docker tag. Default: latest \n [ -b | --build ] Build the image before running the container \n [ -l | --loop ] Start the gateway in looping mode. e.g.: --loop 40 will set the interval of the loop to 40s. Default is single run mode \n [ -i | --interactive ] Start the container in interactive mode. That means, you can read the console output in real time and abort via STRG+C \n [ -a | --api ] Start with the API \n [ -v | --volume ] Set the volume, where the data from the gateway will be stored. Use relative path like /home/user/gateway/data \n [ -n | --name ] Set a custom name for this gateway \n [ -m2 | --mesh-gateway ] Set the mode to mesh gateway. This gateway is meant to expand the bluetooth radius. Default mode is main gateway \n [ -tz | --timezone ] Set the timezone. Default is Europe/Berlin \n [ -to | --timeout ] Set the timeout for the bluetooth scan. default is 20s \n [ -h | --help ] Get this dialog \n [ --debug ] Set into debug mode" docker version > /dev/null 2>&1 if [ "$?" != 0 ]; then echo Missing docker. Please install docker and try build again. exit 1 fi check_for_devices_config() { if [ ! -f devices.yml ]; then touch devices.yml echo 'devices: - mac: A4:C1:38:00:00:00 name: "my_room" room: "my_room"' >> devices.yml fi } docker_run() { sudo killall -9 bluetoothd > /dev/null 2>&1 echo Killing old container... docker stop $CONTAINER_NAME > /dev/null 2>&1 docker container rm $CONTAINER_NAME > /dev/null 2>&1 check_for_devices_config if [ "$SKIP_ENV" = true ]; then echo "Skip env file" ENV_EXISTS=false BACKGROUND="" TIME_ZONE="" NAME="" INTERACTIVE=true BUILD=true API=true DEBUG="INFO" MODE="1" LOOP="40" TIMEOUT="20" else if [ -e .env ] then echo Loading .env file export $(cat .env | xargs) ENV_EXISTS=true else echo No env file found ENV_EXISTS=false BACKGROUND="" TIME_ZONE="" NAME="" INTERACTIVE=true BUILD=true API=true DEBUG="INFO" MODE="1" LOOP="40" TIMEOUT="20" fi fi COMMAND="docker run $BACKGROUND" COMMAND="$COMMAND --cap-add=SYS_ADMIN" COMMAND="$COMMAND --cap-add=NET_ADMIN" COMMAND="$COMMAND --net=host" COMMAND="$COMMAND --name=$CONTAINER_NAME" COMMAND="$COMMAND --restart=on-failure" COMMAND="$COMMAND --volume=/var/run/dbus/:/var/run/dbus/" COMMAND="$COMMAND --volume=$VOLUME:/src/data" COMMAND="$COMMAND --volume=$PWD/devices.yml:/src/devices.yml" if [ "$ENV_EXISTS" = true ]; then COMMAND="$COMMAND --env-file .env" fi if [ "$INTERACTIVE" = true ]; then COMMAND="$COMMAND --interactive" COMMAND="$COMMAND --tty" COMMAND="$COMMAND --attach=stdout" COMMAND="$COMMAND --attach=stdin" fi if [ "$LOOP" != "0" ]; then COMMAND="$COMMAND --env LOOP=$LOOP" fi if [ "$TIMEOUT" != "0" ]; then COMMAND="$COMMAND --env TIMEOUT=$TIMEOUT" fi if [ "$BUILD" = true ]; then sh build_docker.sh --tag $TAG fi if [ "$TIME_ZONE" != "" ]; then COMMAND="$COMMAND --env TZ=$TIME_ZONE" fi if [ "$API" != false ]; then COMMAND="$COMMAND --env API=$API" fi if [ "$MODE" != 1 ]; then COMMAND="$COMMAND --env MODE=$MODE" fi if [ "$NAME" != "" ]; then COMMAND="$COMMAND --env NAME=$NAME" fi if [ "$DEBUG" = "DEBUG" ]; then COMMAND="$COMMAND --env DEBUG=$DEBUG" COMMAND="$COMMAND $CONTAINER:$TAG" echo echo $COMMAND echo echo DEBUG MODE else COMMAND="$COMMAND --env DEBUG=$DEBUG" COMMAND="$COMMAND $CONTAINER:$TAG" fi echo Start container... echo $COMMAND docker container rm $CONTAINER_NAME > /dev/null 2>&1 } while [ "$1" != "" ]; do case $1 in -se | --skip-env-file ) SKIP_ENV=true shift ;; -d ) BACKGROUND="-d" shift ;; --debug ) shift DEBUG=$1 SKIP_ENV=true shift ;; -a | --api) API=true SKIP_ENV=true shift ;; -b | --build ) BUILD=true SKIP_ENV=true shift ;; -v | --volume ) shift VOLUME=$1 SKIP_ENV=true shift ;; -n | --name ) shift NAME=$1 SKIP_ENV=true shift ;; -m2 | --mesh-gateway) MODE=2 SKIP_ENV=true shift ;; -tz | --timezone ) shift TIME_ZONE=$1 SKIP_ENV=true shift ;; -to | --timeout ) shift TIMEOUT=$1 SKIP_ENV=true shift ;; -t | --tag ) shift TAG=$1 SKIP_ENV=true shift ;; -l | --loop ) shift SKIP_ENV=true firstchar=`echo $1 | cut -c1-1` if [ "$firstchar" = "-" ]; then LOOP=0 elif [ "$firstchar" = "" ]; then LOOP=0 else LOOP=$1 shift fi ;; -i | --interactive ) INTERACTIVE=true SKIP_ENV=true shift ;; -h | --help ) echo $HELP exit ;; * ) echo $HELP exit 1 esac done docker_run