﻿#!/bin/sh
# Should be executed by: 
#			wget -qO - http://install.anyviz.io/teltonika/ | sh

COL_NC='[0m' # No Color
COL_LIGHT_GREEN='[32m'
COL_LIGHT_RED='[31m'
TICK="[${COL_LIGHT_GREEN}✓${COL_NC}]"
CROSS="[${COL_LIGHT_RED}✗${COL_NC}]"
INFO="[i]"
BETA=""
DAEMON_DIR="/usr/local/bin"
DAEMON="${DAEMON_DIR}/anyvizcloudadapter"
OEM_MOD_URL="${2}"

# Say hallo
echo ""
echo "AnyViz cloud adapter installer"
echo "=============================="
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[37m.[0m[37m,[0m[37m;[0m[37m;[0m[37m:[0m[37m:[0m[37m;[0m[37m,[0m[37m'[0m[37m.[0m[37m.[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[37m'[0m[37m:[0m[37ml[0m[37ml[0m[37m:[0m[37m,[0m[37m'[0m[37m'[0m[37m.[0m[37m.[0m[37m'[0m[37m,[0m[37m;[0m[37mc[0m[37ml[0m[37ml[0m[37m;[0m[37m.[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[37m:[0m[37ml[0m[37mc[0m[37m,[0m[37m.[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[37m;[0m[37ml[0m[37mc[0m[37m,[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[37m.[0m[37m.[0m[37m;[0m[37ml[0m[37ml[0m[37m'[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[37m;[0m[37ml[0m[37mc[0m[37m.[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m'[0m[37m:[0m[37mc[0m[37ml[0m[37mc[0m[37mc[0m[37m:[0m[37m:[0m[37m:[0m[37m.[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m'[0m[37ml[0m[37ml[0m[37m,[0m[37m.[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m;[0m[37ml[0m[37ml[0m[37m;[0m[37m.[0m[37m [0m[37m [0m[37m [0m [37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m'[0m[37m:[0m[37mc[0m[37ml[0m[37ml[0m[37mc[0m[37m;[0m[37m.[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[37mc[0m[37ml[0m[37m;[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[37m'[0m[37m:[0m[37ml[0m[37mc[0m[37m.[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m.[0m[37ml[0m[37ml[0m[37m,[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[37mc[0m[37ml[0m[37m;[0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m,[0m[37ml[0m[37mc[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[37ml[0m[37ml[0m[37m'[0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m,[0m[37ml[0m[37mc[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m:[0m[37ml[0m[37m;[0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m.[0m[37ml[0m[37ml[0m[37m'[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[34m:[0m[34ml[0m[34m;[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37mc[0m[37ml[0m[37m,[0m[37m [0m [37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m'[0m[37ml[0m[37ml[0m[37m'[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[34mc[0m[34ml[0m[34ml[0m[34ml[0m[34m;[0m[37m [0m[37m [0m [37m [0m  [37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m [37m.[0m[37m:[0m[37ml[0m[37m:[0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[37m:[0m[37ml[0m[37mc[0m[37m'[0m[37m.[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[34mc[0m[34ml[0m[34m;[0m[34m.[0m[34mc[0m[34ml[0m[34m;[0m[37m [0m [33mc[0m[33mX[0m[33m0[0m.[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[37m;[0m[37ml[0m[37ml[0m[37m,[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[37m,[0m[37mc[0m[37ml[0m[37mc[0m[37m:[0m[37m;[0m[34m,[0m[34m,[0m[34m,[0m[34mc[0m[34ml[0m[34m;[0m[37m [0m[37m [0m[34m.[0m[34ml[0m[34ml[0m[34m;[0m[37m [0m [33mk[0m[33mX[0m[33mK[0m.[37m [0m[37m [0m[37m [0m.[33mo[0m[33md[0m[33md[0m[33md[0m[33mc[0m[37m;[0m[37m:[0m[37ml[0m[37ml[0m[37mc[0m[37m'[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m.[0m[37m.[0m[37m'[0m[34m,[0m[34m,[0m[34m,[0m[34m,[0m[34m.[0m[37m [0m[37m [0m[37m [0m[37m [0m[34m.[0m[34ml[0m[34ml[0m[34m;[0m[37m [0m [33mk[0m[33mX[0m[33m0[0m.[37m [0m.[33m0[0m[33mX[0m[33mO[0m[33mo[0m[33mo[0m:[37m'[0m[37m.[0m[37m.[0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[34m.[0m[34mc[0m[34mc[0m[37m.[0m[37m [0m [33mO[0m[33mX[0m[33mK[0m;[33mK[0m[33mX[0m[33mO[0m [37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m [33mO[0m[33mX[0m[33mX[0m[33mX[0m[33mk[0m [37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m [33mk[0m[33mK[0m[33md[0m  [37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"
echo "[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m[37m [0m"

# Stop running instance
if [ -f /etc/init.d/anyviz ]; then
	/etc/init.d/anyviz stop
fi
killall -q anyvizcloudadapter

# Uninstall
case $1 in
  remove|-r|uninstall)
	[ -f /etc/crontabs/general/root ] && sed -i '/anyviz/d' /etc/crontabs/general/root
	[ -f /etc/crontabs/root ] && sed -i '/anyviz/d' /etc/crontabs/root
	[ -f /etc/sysupgrade.conf ] && sed -i '/anyviz/d' /etc/sysupgrade.conf
	rm -r -f /etc/anyviz
	rm -r -f /storage/anyviz
	rm -f /usr/bin/anyviz_start.sh
	rm -f /usr/bin/anyvizcloudadapter
	rm -f /usr/local/bin/anyvizcloudadapter
	rm -f /etc/init.d/anyviz
	rm -f /etc/rc.d/S99anyviz
	rm -f /etc/uci-defaults/99-anyviz-*
	echo "${TICK} Uninstalled AnyViz Cloud Adapter successfully"
	exit 0
	;;
  beta|-b)
	echo "${INFO} installing latest beta version (not recommended)"
	BETA=beta/
	;;
  edge)
	echo "${INFO} !!! installing unreleased version from build pipeline (not recommended) !!!"
	BETA=edge/
	;;
  install|-i|"")
	# Continue default install
	;;
  *)
	echo "Usage: install.sh [install|remove|help]" >&2
	exit 3
	;;		
esac

# Download files
if [ "$(uname -m)" = "mips" ]; then
	if test `printf '\0\1' | hexdump -e '/2 "%04x"'` -eq 0100
	then
		# LittleEndian: MIPSel processor (e.g. RUT241)
		ARCH=MIPSel_MUSL
	else
		# BigEndian: MIPS processor (e.g. TRB255/TRB245)
		ARCH=MIPS_MUSL
	fi	
	echo "${INFO} Using cloud adapter optimized for ${ARCH}"
else
	# new musl version (RUTX devices + TRB since Firmware > 2)
	echo "${INFO} Using cloud adapter optimized for ARM musl"
	ARCH=ARM_MUSL
fi


mkdir -p $DAEMON_DIR
wget http://download.anyviz.de/${BETA}anyviz/$ARCH/anyvizcloudadapter_c -O $DAEMON \
	&& wget http://download.anyviz.de/anyviz/teltonika/init.d/anyviz -O /etc/init.d/anyviz || {
		echo "${CROSS} Downloading AnyViz Cloud Adapter failed. Please check internet connection"
		exit 1
	}			

echo ""
echo "${TICK} Downloaded files successfully"

echo "${INFO} Preparing your system"

# Enable procd init script
if [ -f /etc/init.d/anyviz ]; then
	chmod a+x /etc/init.d/anyviz
	/etc/init.d/anyviz enable
fi

# Configure files to remain after firmware update
sed -i '/anyviz/d' /etc/sysupgrade.conf
echo "### anyviz cloud adapter ###" >> /etc/sysupgrade.conf
echo "/etc/anyviz/" >> /etc/sysupgrade.conf
echo $DAEMON >> /etc/sysupgrade.conf
echo "/etc/init.d/anyviz" >> /etc/sysupgrade.conf
echo "/etc/uci-defaults/99-anyviz-enable" >> /etc/sysupgrade.conf

# Migrate previous installation
[ -f /usr/bin/anyvizcloudadapter ] && [ -f $DAEMON ] && rm /usr/bin/anyvizcloudadapter
if [ -d /storage/anyviz/ ]; then
	mkdir -p /etc/anyviz
	[ -f /storage/anyviz/config.json ] && mv -n /storage/anyviz/config.json /etc/anyviz/
	[ -f /storage/anyviz/TagConfig.bak ] && mv -n /storage/anyviz/TagConfig.bak /etc/anyviz/
	[ -f /storage/anyviz/Data.txt ] && mv -n /storage/anyviz/Data.txt /etc/anyviz/
	[ -f /storage/anyviz/TagConfig.bak ] && mv -n /storage/anyviz/TagConfig.bak /etc/anyviz/
	[ -f /storage/anyviz/opc.der ] && mv -n /storage/anyviz/opc.* /etc/anyviz/
	rm -r /storage/anyviz
fi
[ -f /etc/crontabs/general/root ] && sed -i '/anyviz/d' /etc/crontabs/general/root
[ -f /etc/crontabs/root ] && sed -i '/anyviz/d' /etc/crontabs/root
rm -f /usr/bin/anyviz_start.sh
	
case $OEM_MOD_URL in
	"http"*) 
		echo "${INFO} Download OEM modifications from ${OEM_MOD_URL}"
		wget -q $OEM_MOD_URL -O $DAEMON_DIR/oem.json
		;;
esac

# Make touch
chmod a+x $DAEMON

# Config directory
mkdir -p /etc/anyviz
[ -f /config.json ] && [ -f /fingerprint ] && mv /config.json /fingerprint /etc/anyviz/
[ -f /TagConfig.bak ] && mv /TagConfig.bak /etc/anyviz/

# Start AnyViz
/etc/init.d/anyviz start

if [ $? -eq 0 ]; then
	echo "${TICK} AnyViz started successfully"
else
	echo "${CROSS} Error starting AnyViz. Please contact AnyViz support"
	return 1
fi