#!/bin/bash
# set -x
#
## ============================================================
#                  User Variablen
# in der Datei: /home/UserName/hbridge_install/hbridge.cfg festlegen
## ============================================================
#
# Author: det (SmartApfel Forum)
# Danke an @Nastra für die Idee zum Verzögerten Start der Dienste und andere Ideen!
#
Version="1.0.27e"
#
# Mit diesem Script kann man:
#  - Raspberry/Debian System aktualisieren linux Pakete und Firmware
#  - RaspBerry/Debian neu starten
#  - "homebridge" Daten sichern, -entfernen, -neu installieren, updaten, -als Dienst einrichten,
#     Dienste installieren/löschen, -verzögerten start einrichten, deConz installieren/updaten,
#     Kamera am lok. CamPort (RaspBerry) installieren, minimale config Datei erstellen  und die nötigen Plugins installieren.
#     Nach dem Aufruf von "install" sind die Scripte mit ihrem Namen (ohne Pfad angabe) direckt startbar.
#  - sichern/restore von .homebridge/homebridge, hbridge_plugin.inst und Dienste Dateien anlegen, 
#  - Benachrichtigung via Telegram möglich
#
#    Beschreibung siehe "/home/UserName/hbridge_imstall/hbridge_new.sh ?"
#
# [plugin]
# Die zu installierenden Plugins, können aus einer Datei (hbridge_plugin.inst)
# eingelesen werden. (Beispiel Datei: hbridge_plugin-example.inst)
#
# [backup]
# Die zu sichernden Dateien/Ordner können aus einer Datei (hbridge_backup.cfg)
# eingelesen werden. (Beispiel Datei: hbridge_backup-example.cfg)
#
#
# todo:
# eingabe Zahlen, auswerten
#
# History:
# 1.0.27e = BugFix backup mv -2
# 1.0.27h = Parameter umbenannt, BugFix backup gz
# 1.0.27g = HB_sic_Device, list_service erweitert
# 1.0.27f = umstellumg restore, sichern "HB_sic_Name" leer -> eingabe Name
# 1.0.27e = einführen Load_Plugin_selective
# 1.0.27d = einführen HB_sic_Pfad=, HB_sic_Name=
# 1.0.27b = ${MYSELF}, function, BugFix logwatch Instanz,
# 1.0.27a = list_swap
# 1.0.27 = eingabe -X plugins" in /etc/default/EnvironmentDatei vorbereitet
# 1.0.26 = BugFix'ing
# 1.0.26 = "config" wenn vorhanden = Anzeige der config Datei
# 1.0.25k = logwatch und n Packet installieren, neue cfg Datei, sh angepasst
# 1.0.25j = backup erweitert, von whoami zu $HOME
# 1.0.25h = while-case, pattern, exitCode einbau Einführung, umstellen von pi auf $(whoami)
# 1.0.25f = Script/User prüfung, Code cleaning backup, timesynd dienst angepasst
# 1.0.25d = Fritz Variablen, .sh, trennen deconz Deb- Rasp- Version
# 1.0.25 = deConz beta, create_CtrlService umbauen
# 1.0.24e = Variablen, fritzbox-reboot.sh
# 1.0.24d = Kosmetig
# 1.0.24c = BugFix
# 1.0.24 = Variablen anpassen, $HOSTNAME im Telegram
# 1.0.23 = if telegram remove ln hbridge_new.sh
# 1.0.22 = (sudo apt-get dist-upgrade linux-image-amd64), x86
# 1.0.21 = swap
# 1.0.20 = umstellung auf hbridge.cfg
# 1.0.17 = install pip, ntfy, BugFix
# 1.0.16 = Time-Sync Dienst, timesyncd
# 1.0.15 = BugFix
# 1.0.14 = Backup erweitert, User abfangen, Code cleaning,
# 1.0.13 = journalctl, Telegram
# 1.0.12c = x86 deconz
# 1.0.12 = backup, restore
# 1.0.11 = Distri erkennung verbessert
# 1.0.10beta = update wieder frei für Debian
# 1.0.08 = einfürung Distri "Debian", BugFix backup,
# 1.0.07 = deconz debian und Raspi, BugFix,Code cleaning
# 1.0.06 = list_service
# 1.0.05 = logging, "LOGFILE", echo -e2msg, chown, chmod
# 1.0.04 = release, multi Instanzen
# 1.0.03 = del_service Service, von sh2bash, echo -e, [restart], [del_service]
# 1.0.02B = del_service Service
# 1.0.01B = BugFix, Code cleaning
# 1.0.00B = wait2deconz, deconzdienst, Dienst start/stop umgestellt, homebridge Multi-Instanzen 
#          (standard Dienst /etc/systems/system/homebridge.service muss laufen)
## ============================================================
# -- Exit Codes --
# exit 0  = beendet
# exit 1  = beendet, hilfe
# exit 2  = beendet, restart
# exit 3  = Abbruch, CAM einrichten
# exit 4  = beendet, list_plugin
# exit 5  = Abbruch, backup (nichts zum sichern)
# exit 6  = beendet, falsche node Version eigegeben für Debian
# exit 7  = Abbruch mounten Backupmedium
# exit 8  = falsche Distri erkannt
# exit 9  = beendet, list_service
# exit 10 = beendet, Instanze gelöscht
# exit 11 = als falscher User gestartet
# exit 12 = CreateConfig
#
# #!# = code for cleaning
# #! = code for developer
#
## =======================================
## aktuelle (last) Versionen
## =======================================
#
max_nodeVersion="10.4.0"
max_npmVersion="6.1.0"
max_hbVersion="0.4.43"
max_deCONZVersion="2.05.29"				# http://www.dresden-elektronik.de/rpi/deconz/beta
max_deCONZVersionDeb="2.05.29"			# http://www.dresden-elektronik.de/deconz/ubuntu/beta
#max_deCONZVersionDeb="$max_deCONZVersion"
#
## =======================================
## Variablen
## =======================================
# letzte stabiele Version
stab_nodeVersion="$max_nodeVersion"
stab_npmVersion="$max_npmVersion"
stab_hbVersion="$max_hbVersion"
stab_deCONZVersion="$max_deCONZVersion"
stab_deCONZVersionDeb="$max_deCONZVersionDeb"
#stab_hbVersion="0.4.25"
stab_nodeVersion="9.11.1"
#stab_npmVersion="5.8.0"
#stab_deCONZVersion="2.04.90"
#
## =======================================
## Konstanten
## =======================================
#toolDir=/home/$(whoami)/hbridge_install
#toolDir=/home/pi/hbridge_install
toolDir="$HOME/hbridge_install"
pluginFile="$toolDir/hbridge_plugin.inst"
hb_Backup_cfg="$toolDir/hbridge_backup.cfg"
configFile="$toolDir/hbridge.cfg"
#Load_Plugin_selective=
PID_dCA=`pidof deCONZ`  	# X11 autostart ID
PID_dCS=`pidof deconz`		# systemd ID
UNAME=`uname -m`			# cpu
hbridge_time="10"  		    # homebridge 10sec verzögert nach dem start/reboot starten
exitCode=0                  # Exit-Code
MYSELF=${0##*/}							# ScriptName.sh
MYNAME=${MYSELF%.*}						# ScriptName
grep -iq debug <<< "$Version"			# debug version?
Is_Debug=$((! $? ))						# debug in "Version" = 1
PID=`pidof homebridge`					# Prozess ID homebridge
#CURRENT_DIR=$(pwd)				
#
tRot="\033[0;31m"
tGelb="\033[0;33m"
tBlue="\033[0;36m"
tGreen="\033[0;32m"
tFGelb="\033[1;33m"
tFBlue="\033[1;36m"
tFGreen="\033[1;32m"
tFRot="\033[1;31m"
tNormal='\033[0m'
#
START_deCONZ="sudo systemctl stop deconz"
STOP_deCONZ="sudo systemctl stop deconz"
#
## ============================================================
# Funktionen
## ============================================================
function msg(){						# $1=message to logging and console, $2=farbattribut
    local text=$1
    local attr=$2
  	local date_string=`date +'%Y-%m-%d %H:%M:%S'`
	echo -e $attr$text"\033[0m"
	if [ "${Logfile}" == "journal" ]; then 
	  echo $text | systemd-cat -t "homebridge"
	elif [ -n "${Logfile}" ]; then 
	  echo -e $date_string $text | sudo tee -a ${Logfile} >> /dev/null
	fi
#	 if [ -n "${Logfile}" ] && [ "${Logfile}" != "journal" ]; then echo -e $date_string $text | sudo tee -a ${Logfile} >> /dev/null; fi
}

function send_Telegram(){			# $1 = message to send
	local a
	if [ "$SendTelegram" == "1" ] && ( [ "$TChat_ID_hbridge_new" != "" ] && [ "$TToken_hbridge_new" != "" ] ); then
	  a=$(curl -s -X POST https://api.telegram.org/bot$TToken_hbridge_new/sendMessage -d chat_id=$TChat_ID_hbridge_new -d text="Nachricht von $HOSTNAME: $1" 2>&1)
      if [[ "$a" =~ "error" ]]; then
		msg "\n\t Abbruch es trat eine Fehler auf!! " $tFRot
		msg " Error:$tFGelb $a \n$tNormal\t Es wurde keine Nachricht gesendet!\n" $tFGreen
	  else
		if [ "$TelegramAnhang" != "" ];then curl -s -X POST  https://api.telegram.org/bot$TToken_hbridge_new/sendDocument -F chat_id="$TChat_ID_hbridge_new" -F document=@"$TeleAnhang" >/dev/null 2>&1; fi
		if [ -n "$TelegramPhoto" ];then curl -s -X POST  https://api.telegram.org/bot$TToken_hbridge_new/sendPhoto -F chat_id="$TChat_ID_hbridge_new" -F photo=@"$TelePhoto" >/dev/null 2>&1; fi
	  fi
	elif [ "$SendTelegram" == "1" ] && ( [ "$TChat_ID_hbridge_new" == "" ] || [ "$TToken_hbridge_new" == "" ] ); then
	  msg "Bitte die Variablen \"TToken_hbridge_new\" und \"TChat_ID_hbridge_new\" setzen !" $tFGelb
	  sleep 15
#	else
#	  msg "Es sollen keine Nachrichten gesendet werden!" 
	fi
}

function neustart (){
	msg "\nDrücke Enter für neustart des $Distri-System oder CTRL+C für Abbruch!!" $tFRot
	read dummy
	sudo reboot
}

function inquire (){			# waiting for input
#	local answer
	echo -e -n "$1 [j/n]? \033[0m"
	read answer
	finish="-1"
	while [ "$finish" = '-1' ]; do
	  finish="1"
	  if [ "$answer" = '' ];
	  then
	    answer=""
	  else
	    case $answer in
	      y | Y | yes | YES | j | J | ja | Ja ) answer="y";;
	      n | N | no | NO | nein | Nein ) answer="n";;
	      *) finish="-1";
	         echo -e -n 'Eingabe fehlerhaft -- bitte nochmal:';
	         read answer;;
	    esac
      fi
  	done
}

function hb_Services (){
	# homebridge run or stopping
	local PID_HB=`pidof homebridge`
	local tt
	local i
	#! msg "PID_HB: $PID_HB"
	if [ -n "$PID_HB" ] && [ "$1" = "start" ]; then
	  msg "Die Homebridge läuft schon mit der ID:\033[1;33m$PID_HB$tNormal und kann nicht noch einmal gestartet werden!!\n" 
	elif [ -z "$PID_HB" ] && [ "$1" = "stop" ]; then
	  msg "Die Homebridge kann nicht gestoppt werden, da sie aktuell nicht läuft!!\n" $tFGreen
	else
	  if [ -e /etc/default/homebridge ]; then
	    for i in /etc/systemd/system/homebridge*.service ;do
	      [ ! -f "$i" ] && continue
	      # Alle Zeichen inkl. dem letzt möglichen "/" werden von Links entfernt. 	
	      srv=${i##*/} 
	      tt="$1e"
	      if [ "$1" != "start" ]; then
		    tt="$1pe"
	      fi
  	      msg $tt" den Dienst:$tNormal $srv" $tFGelb
#	      sudo systemctl $1 homebridge*	# alle homebridge* services stoppen/starten
	      sudo systemctl $1 $srv &
	      sleep 1
	    done
      elif [ -e /etc/init.d/homebridge ]; then
  	    msg "$1e Homebridge als Programm!" $tFGelb
   	    sudo /etc/init.d/homebridge $1
  	  else
  	  msg "Keinen Autostart von Homebridge gefunden!" $tFGreen
  	  fi
  	fi
}

function create_Tools (){
	local isInFile
	cd $HOME 
#	[ ! -d "$toolDir" ] && sudo /bin/mkdir -p $toolDir && echo -e "$toolDir wurde angelegt!"
#	[ ! -O "$toolDir" ] && sudo chown $(whoami) $toolDir && echo -e "$toolDir Egentümer gesetzt!"   # test auf Eigentümer und setzen
#defekt	[ ! -w "$toolDir" ] && sudo chmod 666 $toolDir && echo -e "$toolDir Rechte gesetzt!"       	# schreibrechte prüfen und setzen
#	sudo chmod 666 $toolDir && echo -e "$toolDir Rechte gesetzt!"       						# schreibrechte setzen
	msg "Vorsichtshalber \"ping\" für alle ausführbar machen." $tFGreen
	sudo chmod u+s /bin/ping
	if [ ! -e /etc/ssh/sshd_config.org ] ; then
	  isInFile=$(cat /etc/ssh/sshd_config | grep -c "PermitRootLogin yes")
	  if [ "$isInFile" -eq 0 ]; then
        msg "/etc/ssh/sshd_config wird gesichert und erweitert." 
        msg "Für root ssh erlauben." 
        sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
        sudo bash -c "echo PermitRootLogin yes >> /etc/ssh/sshd_config"
	  fi
	else
      msg "Root darf sich schon per shh anmelden." 
	fi
	msg "Erstelle Service-Benutzer und Gruppe homebridge." 
	sudo useradd -M --system -U homebridge
# User pi der Gruppe homebridge hinzufügen
	sudo usermod -a -G homebridge pi
	msg "Erlaube systemd-journal für Benutzer homebridge." 
	sudo usermod -a -G systemd-journal homebridge
	if [ ! -e /etc/sudoers.d/011_homebridge ] ; then
      msg "setze benötigte Rechte für User homebridge."
      sudo cp $toolDir/files/011_homebridge /etc/sudoers.d/011_homebridge
	fi
	msg "Prüfe den Zeitsynchronisierungs-Dienst." $tNormal
	if [ ! -e /etc/systemd/timesyncd.conf.org ] ; then
	  if [ -e /usr/sbin/ntpd ] ; then
	    msg "Der NTP-Dienst muss entfernt werden." $tNormal
	    sudo apt-get --yes remove --purge ntp
	  fi
	  msg "Zeitsynchronisierungs-Dienst wird eingerichtet." $tNormal
	  sudo mv -f /etc/systemd/timesyncd.conf /etc/systemd/timesyncd.conf.org
	  sudo cp -f $toolDir/files/timesyncd.conf /etc/systemd/timesyncd.conf
	  sudo timedatectl set-ntp true
	  sudo systemctl daemon-reload
	  sudo systemctl start systemd-timesyncd 
	fi
#	sudo timedatectl status
#	sudo systemctl status systemd-timesyncd
#
	if [ ! -e /var/spool/cron/crontabs/root ] && [ -e $toolDir/files/root_cron ]; then
	  msg "Cron Job für root wird kopiert."
	  sudo cp -f $toolDir/files/root_cron /var/spool/cron/crontabs/root
	fi
	if [ ! -e /usr/bin/${MYSELF} ] && [ -e $toolDir/${MYSELF} ]; then
	  sudo chmod -R 0755 $toolDir/${MYSELF}
	  sudo ln -s $toolDir/${MYSELF} /usr/bin/${MYSELF}
	  msg "Systemlink zur Anwendung $0 wurde angelegt!" 
	elif [ ! -e $toolDir/${MYSELF} ]; then
	  msg "Systemlink zur Anwendung $toolDir/${MYSELF} wurde entfernt!" 
	  sudo rm -rf /usr/bin/${MYSELF}
	else
	  msg "Systemlink zur Anwendung $0 existiert bereits!" 
	fi
	if [ ! -e /usr/bin/raspiBackup.sh ] && [ -e $toolDir/raspiBackup.sh ] ; then
	  sudo chmod -R 0755 $toolDir/raspiBackup.sh
	  sudo ln -s $toolDir/raspiBackup.sh /usr/bin/raspiBackup.sh
	  msg "Systemlink zur Anwendung $toolDir/raspiBackup.sh wurde angelegt!" 
	elif [ ! -e $toolDir/raspiBackup.sh ]; then
	  msg "Systemlink zur Anwendung $toolDir/raspiBackup.sh wurde entfernt!" 
	  sudo rm -rf /usr/bin/raspiBackup.sh
	else
	  msg "Systemlink zur Anwendung $toolDir/raspiBackup.sh existiert bereits!" 
	fi
	if [ ! -e /usr/bin/pishrink.sh ] && [ -e $toolDir/pishrink.sh ]; then
	  sudo chmod -R 0755 $toolDir/pishrink.sh
	  sudo ln -s $toolDir/pishrink.sh /usr/bin/pishrink.sh
	  msg "Systemlink zur Anwendung $toolDir/pishrink.sh wurde angelegt!" 
	elif [ ! -e $toolDir/pishrink.sh ]; then
	  msg "Systemlink zur Anwendung $toolDir/pishrink.sh wurde entfernt!" 
	  sudo rm -rf /usr/bin/pishrink.sh
	fi
	if [ -d $toolDir/det ] ; then
	  if [ ! -e /var/spool/cron/crontabs/$(whoami) ] && [ -e $toolDir/det/pi_cron ]; then
	    msg "Cron Job für $(whoami) wird kopiert."
	    cp -f $toolDir/files/pi_cron /var/spool/cron/crontabs/$(whoami)
        sudo chmod 0600 /var/spool/cron/crontabs/*
	  fi
	  msg "\tJetzt werden Det's pers. Tools eingerichtet!!" $tFGreen
      sudo cp -Rf $toolDir/det/hbridge.cfg.det $toolDir/hbridge.cfg
      msg "\tRichte eigene .bash_aliases ein!!" $tFGelb
	  cp -f $toolDir/det/.bash_aliases $HOME/
	  if [ ! -e $toolDir/hbridge_plugin.inst ] ; then
	    msg "\tPlugin Datei hbridge_plugin.inst verknüpfen.." $tFGelb
	    sudo ln -s $toolDir/hbridge_plugin-example.inst $pluginFile
	    sudo ln -s $toolDir/hbridge_backup-example.cfg $hb_Backup_cfg
	  fi
	  if [ ! -e /etc/init.d/homebridge ] ; then
	    msg "\tcopy homebridge nach /etc/init.d/.." $tFGelb
	    sudo cp -Rf $toolDir/det/homebridge_initd /etc/init.d/homebridge
#	     sudo update-rc.d homebridge defaults		# /etc/.../homebridge aktivieren
	  fi
	  if [  -d $HOME/Desktop ] ; then
	    msg "\tDesktopsymbole für X11 festlegen.." $tFGelb
	    cp -Rf $toolDir/det/home/pi/Desktop/* $HOME/Desktop/
	  fi
	  if [  -d $HOME/Downloads ] ; then
	    msg "\tDownloads werden zurück gespielt.." $tFGelb	  
	    cp -Rf $toolDir/det/home/pi/Downloads/* $HOME/Downloads/
	  fi
	fi
	msg ""
}

function create_ctrlService (){	
# $1= service-name $2= service/timer $3=no
	local a
	if [ "$1" != "" ] || [ "$2" != "" ]; then
# 	  msg "\t Pfad/Dients.Art = $toolDir/${1}.${2}"
      if [ -e /etc/systemd/system/${1}.${2} ]; then
        msg "Der Service \"$1.$2\" existiert bereits, soll er$tFRot gelöscht$tFGelb werden? \033[0;32my/n (n)" $tFGelb
        read a
        if [ "$a" == "y" ]; then
	      msg "lösche den Service:$tNormal $1.$2" $tFGelb
	      sudo systemctl disable ${1}.${2} > /dev/null
	      sleep 1
	      sudo rm -fr /etc/systemd/system/${1}.${2} > /dev/null
#	       sudo rm -fr /etc/default/${1} > /dev/null
	      sudo systemctl daemon-reload
	      msg "Der Service \"$1.$2\" wurde deaktiviert und entfernt." $tFGelb
          msg "Link \"/usr/local/bin/$1.sh\" wird gelöscht." $tFGelb
          sudo rm -fr /usr/local/bin/$1.sh > /dev/null
        else
	      msg "Der Service \"$1.$2\" wurde$tFRot NICHT$tFGelb gelöscht.\n" $tFGelb  
        fi
      else
        if [ -e $toolDir/${1}.sh ] && [ ! -e /etc/systemd/system/${1}.${2} ]; then
          msg "Jetzt kann der$tNormal \"$1.$2\"$tFGreen Service zur System-Überwachung,\n (Benachrichtigung per Telegram API), angelegt werden!" "$tFGreen"
          if [ ! -e /etc/systemd/system/${1}.${2} ]; then
            msg "Jetzt den Service: \"$1.$2\" anlegen? \033[0;32my/n (n)" $tFGelb
            read a
            if [ "$a" == "y" ]; then  
      		  if  [ "$1" = "logwatch" ]; then     
  	    		if [ ! -e /usr/sbin/${1} ]; then
          		  msg "Das Paket ${1} und n wird installiert!"
	      		  sudo apt-get install -y ${1}
	      		  sudo npm install -g n 
	    		fi
	    		if [ ! -d "$toolDir/${1}" ];then
        	      sudo /bin/mkdir -p $toolDir/${1} >> /dev/null  
        	      sudo chmod -R 0777 $toolDir/${1} >> /dev/null
        	      sudo chown -R $(whoami):users $toolDir/${1}  >> /dev/null
        	      msg " Ordner \"$toolDir/${1}\" wurde angelegt und\n alle notwendigen Rechte gesetzt!" 
        	    else
        	      msg " Ordner \"$toolDir/${1}\" existiert bereits."
        	    fi    
      	      fi    
	          cd /etc/systemd/system
	          sudo cp $toolDir/files/${1}.${2} /etc/systemd/system/${1}.${2}
		      if [ "$2" = "timer" ]; then sudo cp $toolDir/files/$1.service /etc/systemd/system/$1.service; fi
		      sudo chmod 0755 $toolDir/$1.sh
	          sudo ln -s $toolDir/$1.sh /usr/local/bin/$1.sh
#	           sudo cp $toolDir/files/$1.sh /usr/local/bin/$1.sh
	          sudo systemctl daemon-reload
	          sudo systemctl enable ${1}.${2}
	          sudo systemctl restart ${1}.${2}
	          msg "Der Service \"$1.$2\" wurde erstellt und aktiviert." $tFGelb
	          cd $HOME
            else
	          msg "Der Service \"$1.$2\" wurde$tFRot NICHT$tFGelb erstellt.\n" $tFGelb
            fi
          fi
        else
          msg "Der Service \"$1.$2\" konnte$tFRot NICHT$tFGelb angelegt werden, es fehlen Dateien!\n" "$tFGelb"
        fi
      fi
	fi
}

function ctrl_Services (){
	create_ctrlService logwatch timer no
    create_ctrlService reporter service no
    create_ctrlService fritzbox-reboot timer no
#    create_ctrlService homebridge service
}

function input_HBService (){
	local Service_NAME=1			# for while
	local $service_cfg_Datei="config.json"
 
	if [ -e /etc/default/homebridge ]; then
	  msg "\nDer Dienst: $tFGreen\"homebridge\"$tFGelb ist bereits eingerichtet, weitere Instanzen als Dienst einrichten!"
	  while [ -n "$Service_NAME" ]; do
	    cd /etc/systemd/system
	    msg "\033[0;33m\nDiese homebridge-Instanzen existieren bereits:$tNormal"
	    sudo find homebridge*.service -exec echo {} \;
	    cd $toolDir
	    msg "\nBitte den Namen für einen weitern Dienst eingeben: \033[0;32m(Abbruch mit Enter)$tNormal \n (Eingabe: \"hue\" erstellt den Dienst: \"homebridge-hue\")" "\033[1;33m"
	    read  Service_NAME
	    if [ "$Service_NAME" = "" ];then
      	  continue 
      	fi
        inquire "Soll der Dienst: \033[1;33mhomebridge-$Service_NAME.service$tNormal jetzt angelegt werden? \033[0;32m(j) $tNormal"
        if [ "$answer" = "n" ];then
          continue
        fi
        sudo cp -f $toolDir/files/homebridge /etc/default/homebridge-$Service_NAME
        sudo cp -f $toolDir/files/homebridge.service.$Distri /etc/systemd/system/homebridge-$Service_NAME.service
        sudo sed -i 's;HOMEBRIDGE_OPTS=-U /var/homebridge;HOMEBRIDGE_OPTS=-U /var/homebridge-'$Service_NAME';g' /etc/default/homebridge-$Service_NAME
        sudo sed -i 's;EnvironmentFile=/etc/default/homebridge;EnvironmentFile=/etc/default/homebridge-'$Service_NAME';g' /etc/systemd/system/homebridge-$Service_NAME.service
        msg "Erlaube systemctl Service für homebridge-$Service_NAME."
#      	sudo systemctl daemon-reload >> /dev/null
        sudo systemctl enable homebridge-$Service_NAME >> /dev/null
        if [ -e /var/homebridge-$Service_NAME/config.json ] ; then
          msg "Die Datei: /var/homebridge-$Service_NAME/config.json existiert schon und wird übernommen!" $tFGelb
        else
          msg "Erstellen und Einrichten des Daten-Ordner: /var/homebridge-$Service_NAME"
          sudo mkdir /var/homebridge-$Service_NAME >> /dev/null
          if [ "$Load_Plugin_selective" = "" ];then
	    inquire "$tFGelb Sollen die Plugins für diesen Dienst selective geladen werden? \033[0;32m(j) $tNormal"
            if [ "$answer" = "y" -o "$answer" = "" ];then
              Load_Plugin_selective=1
            fi
	  fi
	  [ "$Load_Plugin_selective" = "1" ] && service_cfg_Datei="config_selective.json" 
#! Edit config Datei
#	msg "Edit Plugins"
#!
          msg "Eine leere config.json wurde im homebridge Ordner /var/homebridge-$Service_NAME/ erstellt!" $tFGreen
          sudo cp -f $toolDir/files/$service_cfg_Datei /var/homebridge-$Service_NAME/config.json
	  sudo chown -R homebridge:users /var/homebridge-$Service_NAME/
          sudo chmod -R 0666 /var/homebridge-$Service_NAME
        fi
        sudo sed -i 's;"name" : "Homebridge",;"name" : "Homebridge-'$Service_NAME'",;g' /var/homebridge-$Service_NAME/config.json
        msg "Jeder Port darf nur einmal benutzt werden, bereits benutzt werden:" $tFGelb
        sudo find /var/ -iname 'config.json' -exec grep -H '"port"' {} \;
        msg "Eingabe (5 Zeichen) eines unbenutzten Port's:$tGreen (51827)" $tFGelb
        read -n5 answer
        if [ "$answer" = "" ]; then
          answer="51827"
        fi
        sudo sed -i "s;\"port\"\:.*;\"port\" \: $answer,;" /var/homebridge-$Service_NAME/config.json
        sudo sed -i "s;\"port\" \:.*;\"port\" \: $answer,;" /var/homebridge-$Service_NAME/config.json
        msg "\naktueller Eintrag ist jetzt:" $tFGelb
        sudo find /var/homebridge-hue/ -iname 'config.json' -exec grep -H '"port"' {} \;

        msg "\nJeder Username darf nur einmal benutzt werden, bereits benutzt werden:" $tFGelb
        sudo find /var/ -iname 'config.json' -exec grep -H 'CC:22:' {} \;
        msg "Eingabe (2 Zeichen) eines unbenutzten Username'n:$tGreen (33)$tGelb\n(Eingabe: 33 wird aus CC:22:3D:E3:CE:30 -> CC:22:3D:E3:CE:33)" $tFGelb
        read -n2 answer
        if [ "$answer" = "" ]; then
          answer="33"
        fi
        sudo sed -i "s;\"username\"\: \"\CC\:22\:.*;\"username\" \: \"CC\:22\:3D\:E3\:CE\:$answer\",;" /var/homebridge-$Service_NAME/config.json
        sudo sed -i "s;\"username\" \: \"\CC\:22\:.*;\"username\" \: \"CC\:22\:3D\:E3\:CE\:$answer\",;" /var/homebridge-$Service_NAME/config.json
        msg "\naktueller Eintrag ist jetzt:" $tFGelb
        sudo find /var/homebridge-hue/ -iname 'config.json' -exec grep -H 'CC:22:' {} \;
	msg "\nNicht Vergessen!!$tGelb Die /var/homebridge-$Service_NAME/config.json muss noch manuell bearbeitet werden, die Plugin-Configuration eintragen!!\n" $tFRot
 	[ "$Load_Plugin_selective" = "1" ] && msg " (die zu ladenden Plugin's eintragen!!)" $tGelb
	msg "(Benutze: vi /var/homebridge-$Service_NAME/config.json)" $tGelb
      done
    else
      msg "Es wird homebridge als Dienst eingerichtet!" $tFGreen
      msg "Kopiere Service Dateien ins Dateisystem." 
      sudo cp -Rf $toolDir/files/homebridge /etc/default/homebridge
      sudo cp -Rf $toolDir/files/homebridge.service.$Distri /etc/systemd/system/homebridge.service
      msg "Service Dateien wurden kopiert." 
      msg "Erlaube systemctl Service für homebridge." 
      sudo systemctl daemon-reload
      sudo systemctl enable homebridge
      if [ ! -e /var/homebridge/config.json ]; then
        if [ "$Load_Plugin_selective" = "" ];then
	      inquire "$tFGelb Sollen die Plugins für diesen Dienst selective geladen werden? \033[0;32m(j) $tNormal"
          if [ "$answer" = "y" -o "$answer" = "" ];then
            Load_Plugin_selective=1
          fi
	fi
	[ "$Load_Plugin_selective" = "1" ] && service_cfg_Datei="config_selective.json"
#! Edit config Datei
#!
        sudo mkdir /var/homebridge/accessories
        sudo mkdir /var/homebridge/persist
        sudo cp -f $toolDir/files/$service_cfg_Datei /var/homebridge/config.json
        sudo chown -R homebridge:users /var/homebridge/
        sudo chmod -R 0666 /var/homebridge
        msg "Eine leere config.json wurde im homebridge Ordner /var/homebridge/ erstellt!" $tFGreen
	msg "\nNicht Vergessen!!$tGelb Die /var/homebridge/config.json muss noch manuell bearbeitet werden, die Plugin-Configuration eintragen!!\n" $tFRot
 	[ "$Load_Plugin_selective" = "1" ] && msg " (die zu ladenden Plugin's eintragen!!)" $tGelb
	msg "(Benutze: vi /var/homebridge/config.json)" $tGelb
      else
        msg "Die vorhandene /var/homebridge/config.json wird benutzt!" $tFGreen
        cd /var
        sudo tar cf - ./homebridge | gzip -f9 > "$toolDir/homebridge.tar.gz"
        cd $toolDir
        msg "Es wurde ein Sicherung von /var/homebridge/* in $toolDir/homebridge.tar.gz erstellt!\n" $tFGelb
      fi
    fi
    sudo systemctl daemon-reload
}

function create_ConfigFile (){
  cat > $toolDir/hbridge.cfg << "EOF" 
## Begin /home/UserName/hbridge_install/hbridge.cfg

########################################################################################################################
#													Gemeinsame Configdatei											   #
#										   	Begin /home/pi/hbridge_install/hbridge.cfg"								   #
########################################################################################################################


########################################################################################################################
#											   	 		  Allgemein													   #
########################################################################################################################
Distri="" 							# "Raspbian" für RaspBerri oder "Debian" für x86 System
Logfile="" 							# kein mit loggen, in einer Datei oder journal
SendTelegram="0" 					# 1= über Telegram API benachrichtigen, 0= keine Nachricht senden


########################################################################################################################
#											   	 		hbridge_new.sh											       #
########################################################################################################################
hb_ServicesRestart="1" 				# Vorgabe: 1=stoppen/starten, 0=nicht stoppen, aller Dienste
HB_sic_Device=""					# hier das externe Sicherungs-Device eintragen (\"\dev\sda1\", \"\dev\sdc1\" oder \"192.168.6.68:/volume1\")
HB_sic_Pfad=""					# Pfad für Sicherungs-Datei (wenn leer: "$HOME/hbridge_install")
HB_sic_Name=""					# Name der Sicherungs-Datei ohne ".tar.gz" (wenn leer: "homebridge")
Load_Plugin_selective=				# 1= Plugins selective laden in der config.json beim erstellen der Instanzen
TToken_hbridge_new=			    	# Token für Telegram API
TChat_ID_hbridge_new=				# CHAT ID für Telegram bot Chat
TelegramAnhang="" 			        # Datei an Telegram senden
TelegramPhoto=""			        # Photo an Telegram senden


########################################################################################################################
#											   	 		raspiBackup.sh											   	   #
########################################################################################################################
Boot_Device="" 						# Das Boot-Device eintragen (Achtung ohne Ziffer, "sda", "sdb")
Backup_Device=""					# hier das Sicherungs-Device eintragen (\"\dev\sda1\", \"\dev\sdc1\" oder \"192.168.6.68:/volume1\")
Backup_Pfad=""					    # Backup Ziel ("" = /mnt/USB_Device) oder z.B. "/home/UserName/hbridge_install" eintragen
Backup_Anzahl="3" 					# 2 alte Backups bleiben erhalten +1 (aktuelle Sicherung)
Del_Img="1" 						# 0= nichts löschen "nodel", 1= max. AnzBackup-1 Img bleiben auf dem Stick, 2= alle Img löschen "del"
DispSicTime="1"						# Anzeige der Uhrzeit vor und nach der Sicherung/Shrinking 1= an, 0= aus
Run_Batch="0" 						# 1= Batch-Modus an, 0= Batch-Modus aus
img_Name="" 						# Dateiname der Sicherungsdatei vorgeben (das Datum, wird autom. angefügt)
Backup_txt="0"						# 1 = eine Kommentar-Datei zum Backup anlegen (Bestätigung mit Enter notwendig!)
KommentarZeilen="5"					# Anzahl der Zeilen für den Kommentar
Backup_Log=0						# 1= mini Log-Datei zum Backup mit erstellen
TToken_raspiBackup=$TToken_hbridge_new					# Token für Telegram API
TChat_ID_raspiBackup=$TChat_ID_hbridge_new				# CHAT ID für Telegram bot Chat


########################################################################################################################
#											   	 		logwatch.sh												   	   #
########################################################################################################################
TToken_lwatch=$TToken_hbridge_new       				# Telegram API Token, logwatch senden
TChatID_lwatch=$TChat_ID_hbridge_new					# Telegram CHAT ID für "bot Chat", logwatch senden


########################################################################################################################
#											   	 		reporter.sh												   	   #
########################################################################################################################
TToken_reporter=$TToken_hbridge_new						# Telegram API Token, report senden
TChatID_reporter=$TChat_ID_hbridge_new					# Telegram CHAT ID für "bot Chat", report senden


########################################################################################################################
#											   	 		fritzbox-reboot.sh										   	   #
########################################################################################################################
Fritz_User=""											# User-Name zur Anmeldung an der Fritz-Box
Fritz_Passwort=""										# Password zur Anmeldung an der Fritz-Box und Repeater
FritzBox_IP=""											# IP-Adresse der Fritz-Box
FritzRepeater_IP=""										# IP-Adresse der Repeater = "192.168.178.1 192.168.178.2"
TChatID_fritz=$TChat_ID_hbridge_new						# Telegram CHAT ID für "bot Chat", fritzbox senden
TToken_fritz=$TToken_hbridge_new						# Telegram API Token, fritzbox senden


########################################################################################################################
#											   	 		Notiz Timerzeiten										   	   #
########################################################################################################################
#logwatch.timer:										# OnCalendar=Mon-Sun *-*-* 00:00:00
#raspiBackup.timer:										# OnCalendar=Mon-Sun *-*-* 01:00:00
#fritzbox-reboot.timer:									# OnCalendar=Sun *-*-* 02:00:00
#system-reboot.timer:									# OnCalendar=Sun *-*-* 02:30:00


########################################################################################################################
#											   	 		Beispiele												   	   #
########################################################################################################################
# Logfile="journal"			                			# "journal" loggen in /var/log/syslog mit "sudo journalctl -f"
# Logfile="/var/log/hbridge_new.log"	        		# logge alle Ausgaben in dieser Datei mit
# TelegramAnhang="/home/pi/findgrep.sh" 	    		# Datei an Telegram senden
# TelegramPhoto="/home/pi/6.jpg"		        		# Photo an Telegram senden
# Backup_Device="192.168.6.68:/volume1/Backup-HBS"		# Sicherungs-Device
# Backup_Pfad="/home/pi/hbridge_install/Backup-HBS"		# Backup Ziel
#

# End /home/UserName/hbridge_install/hbridge.cfg
EOF

msg "\n Es wurde eine neue minimale \"$configFile\" Datei angelegt,\n" $tFGreen
awk '/\=/ {print}' $configFile
msg "\n Jetzt mit $tNormal\"nano $configFile\"$tFGelb die gewünschten Variablen setzen!!\n" $tFGelb
msg "Danach \"${MYSELF}\" erneut starten."
exitCode=12
}

function mount_SicMedium() {
if [ "$HB_sic_Device" != "" ]; then
	if [[ -n "${HB_sic_Pfad}" ]]; then
	  a=$(sudo grep "${HB_sic_Pfad}" /proc/mounts)
	fi
    if [ -n "$a" ]; then
      msg " \"${HB_sic_Pfad}\" ist bereits gemounted." $tFGelb
    else
      if [ ! -e ${HB_sic_Pfad} ]; then
        msg " Mountpoint ${HB_sic_Pfad} für Sicherungs-Datei wurde angelegt!" $tFGelb
        sudo mkdir ${HB_sic_Pfad}
        sudo chown -R homebridge:users ${HB_sic_Pfad}
        sudo chmod -R 0777 ${HB_sic_Pfad}
      else
        msg " Der Mountpoint existiert bereits." $tFGelb
      fi 
      sudo mount ${HB_sic_Device} ${HB_sic_Pfad} > /dev/null
      rc2=$?
      if [ $rc2 != 0 ]; then  
        msg "$tFRot ABBRUCH!! $tFGelb mounten fehlgeschlagen\n" $tFGelb 
        if [ "$SendTelegram" = "1" ]; then Send_Telegram "ABBRUCH!! Das mounten von ${HB_sic_Pfad} ist fehlgeschlagen." ; fi   
        exit 7
      else
        msg " Der MountPoint:\"${HB_sic_Pfad}\" wurde eingebunden!"  $tFGelb
      fi
    fi
fi
}

function umount_SicMedium (){
 	if [ "$HB_sic_Device" != "" ]; then
	  msg "Sicherungsmedium wird wieder entladen!"
      sudo umount ${HB_sic_Pfad} > /dev/null
	  sleep 4
	fi 	
}

if [ -f $HOME/hbridge_install/${MYSELF} ]; then
  [ ! -e /usr/bin/${MYSELF} ] && sudo ln -s $HOME/hbridge_install/${MYSELF} /usr/bin/${MYSELF}
fi

## ============================================================
######################################
#########    Mainprogramm     ########
######################################
## ============================================================
cd $toolDir
clear
msg "\n\t\033[4;36mEs wird das Script: $0 in der Version: $Version benutzt !!$tNormal\n\t\t\033[0;32m (die Angaben in () werden mit Enter übernommen)$tNormal"
# -- auf Tools-Ordner prüfen --
#[ "$(whoami)" == 'root' ] || [ ! -e "$toolDir/${MYSELF}" ] && ( msg "\nDas Script nicht als User $tFRot\"root\"$tFGreen starten,\n bzw. existiert $tFGelb\"$toolDir/${MYSELF}\"$tFGreen nicht!\n" $tFGreen) && exit 11 
[ ! -e "$toolDir/${MYSELF}" ] && ( msg "\n ABBRUCH!$tFGreen\n Es existiert kein Tool-Ordner $tFGelb\"$toolDir/\"$tFGreen\n bitte die Tools neu installieren!\n" $tFRot) && exit 11
#
# -- test auf config Datei -> erstellen --
if [ -f $configFile ]; then
  . $configFile 
else
  create_ConfigFile
fi
[ "$HB_sic_Pfad" = "" ] && HB_sic_Pfad="$toolDir"
#[ "$HB_sic_Name" = "" ] && HB_sic_Name="homebridge"

# -- auf Distri prüfen --
if [ "$Distri" == "" ] || [ "$Distri" != "Debian" -a "$Distri" != "Raspbian" ]; then
  Distri=`lsb_release -s -i`
  if [ "$Distri" != "Raspbian" -a "$Distri" != "Debian" ]; then
    msg "Distributor = $Distri !" $tFGelb
    msg "\n Abbruch: Dieses System wird derzeit nicht supportet, nur Raspbian und Debian!!\n" $tFRot
    msg " (evtl. \"Distri\" manuell setzen)" $tNormal
    exit 8
  fi
fi
# -- logging anzeigen --
if [ -n "${Logfile}" ]; then msg " (logge in \"${Logfile}\" mit)" "\t\t"; fi
msg ""
#---------------------------------
if [ "$hb_ServicesRestart" = "1" ]; then
# -- test auf $1 -> kein Dienst beenden -> Script ende --
  if [ "$1" = "help" -o "$1" = "" -o "$1" = "?" -o "$1" = "config" -o "$1" = "list_service" -o "$1" = "backup" -o "$1" = "list_plugin" -o "$1" = "swap" -o "$1" = "list_swap" -o "$1" = "ctrl_service" ]; then
    hb_ServicesRestart=0
  else
    send_Telegram "Mit dem Programm: "$0" wird die "homebridge" bearbeitet!"
    hb_Services stop
#    hb_ServicesRestart=1
  fi 
fi
#
if [ "$Is_Debug" = "1" ]; then
  echo -e "home:" $HOME
  echo -e "pwd:" $PWD
  echo -e "SendTelegram:" $SendTelegram
  echo -e "TToken_hbridge_new=$TToken_hbridge_new"
  echo -e "TChat_ID_hbridge_new=$TChat_ID_hbridge_new"
  echo -e "hb_ServicesRestart=$hb_ServicesRestart"
  echo -e "HB_sic_Name=$HB_sic_Name"
  echo -e "HB_sic_Pfad=$HB_sic_Pfad"
  echo -e "HB_sic_Device=$HB_sic_Device"	
  echo -e "toolDir=$toolDir"
  echo -e "pluginFile=$pluginFile"
  echo -e "hb_Backup_cfg=$hb_Backup_cfg"
  echo -e "configFile=$configFile"
  echo -e "deConz X11 PID (PID_dCA)=$PID_dCA"
  echo -e "deConz services PID (PID_dCS)=$PID_dCS"
  echo -e "UNAME=$UNAME"
  echo -e "hbridge_time=$hbridge_time"  	# homebridge 10sec verzögert nach dem start/reboot starten
  echo -e "exitCode=$exitCode"            # Exit-Code
  echo -e "MYSELF=$MYSELF"				# ScriptName.sh
  echo -e "MYNAME=$MYNAME"				# ScriptName
  echo -e "Is_Debug=$Is_Debug"
  echo -e "Run_Batch=$Run_Batch"
  echo -e "DispSicTime=$DispSicTime"
  echo -e "PID=$PID"
  echo -e "Del_Img=$Del_Img"
  echo -e "Load_Plugin_selective=$Load_Plugin_selective"
  echo -e "Backup_Log=$Backup_Log"
  echo -e ""
  awk '/\=/ {print}' $toolDir/hbridge.cfg
  read -p "weiter mit Enter.."
fi
#
#---------------------------------
pattern=$1
while [ "$pattern" != "BREAK" ]; do
#case "$1" in
case "$pattern" in
update)
    pattern=BREAK
	msg "Starte das $Distri-Systemupdate.." $tFGreen
	sudo apt-get update -y
	sudo apt-get check
	sudo apt-get autoclean
	inquire "Nicht benötigte Pakete jetzt entfernen \033[0;32m(j) $tNormal"
	if [ "$answer" = "" -o "$answer" = "y" ];then
	  sudo apt-get autoremove
	fi
	inquire "Jetzt die Firmware (Kernel/Pakete) aktualisieren \033[0;32m(n) $tNormal"
	if [ "$answer" = "y" ];then
      msg " update Firmware (Kernel) für $Distri" $tNormal
	  sudo apt-get dist-upgrade -y
	  if [ "$Distri" == "Debian" ];then
    	sudo apt full-upgrade linux-image-amd64
	  else
	    if [ ! -e /usr/bin/rpi-update ] ; then
	      msg " installiere: rpi-update" $tFGreen
	      sudo wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update > /dev/null
#	      sudo wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update > /dev/null
#	      sudo chmod +x /usr/bin/rpi-update > /dev/null
	    fi
	    sudo rpi-update
#	    sudo aptitude update
#	    sudo aptitude upgrade
	  fi
      sudo apt update -y
      sudo apt upgrade
	fi
	sudo uname -a
	inquire "$tFRotJetzt $Distri-System neu starten \033[0;32m(j) $tNormal"
	if [ "$answer" = "" -o "$answer" = "y" ];then
	  neustart
	fi
	inquire "Soll jetzt homebridge und NodeJs entfernt werden \033[0;32m(j) $tNormal"
	if [ "$answer" = "" -o "$answer" = "y" ];then
      pattern=remove
	fi
	;;

remove)
    pattern=BREAK
	inquire "Alle \"homebridge\"-Instanzen jetzt löschen \033[0;32m(n) $tNormal" $tFRot
	if [ "$answer" = "y" ];then
      for i in /etc/systemd/system/homebridge*.service ;do
        [ ! -f "$i" ] && continue
	    # Alle Zeichen inkl. dem letzt möglichen "/" werden von Links entfernt. 	
	    l=${i##*/} 
	    # Alle Zeichen inkl. dem letzt möglichen "." werden von rechts entfernt. 
	    r=${l%.*} 
	    msg "lösche den Dienst:$tNormal $l" $tFGelb
	    sudo systemctl disable $l > /dev/null
	    sleep 1
	    sudo rm -fr /etc/systemd/system/$l > /dev/null
	    sudo rm -fr /etc/default/$r > /dev/null
#       sudo rm -fr /var/$r > /dev/null  # /var/homebridge-*/config.json nicht löschen
	    sudo systemctl daemon-reload
      done
    fi
	msg "Jetzt wird homebridge inkl. NodeJs und npm entfernt !!" $tFGreen
	msg "Drücke Enter zum löschen oder CTRL+C für Abbruch!!" $tFRot
	read dummy

	if [ "$Distri" == "Raspbian" ];then
#!!	  sudo rm -fr /usr/local/bin/* > /dev/null
	  sudo rm -fr /usr/local/include/node/* > /dev/null
	  sudo rm -fr /usr/local/lib/node_modules/* > /dev/null
	  sudo rm -fr /usr/lib/nodejs/*	 > /dev/null
	fi
	sudo rm -fr /usr/bin/node > /dev/null	
	sudo rm -fr /usr/lib/node_modules/* > /dev/null	
	sudo rm -fr /usr/include/node/* > /dev/null
	sudo rm -fr ~/node_modules > /dev/null
	sudo rm -fr ~/.npm >/dev/null
	sudo rm -fr ~/.node-gyp > /dev/null
	sudo rm -fr ~/.node-red > /dev/null
	sudo rm -fr ~/.npm-global > /dev/null
	sudo rm -fr /root/.npm > /dev/null
	sudo rm -fr /root/.node-gyp > /dev/null

	msg "Jetzt kann die homebridge neu installiert werden!" $tFGreen
	inquire "Soll jetzt homebridge neu installiert werden \033[0;32m(j) $tNormal"
	if [ "$answer" = "" -o "$answer" = "y" ];then
      pattern=install
	fi
	;;

install)
	cd $HOME 
    pattern=BREAK
	msg "Installiere und konfiguriere benötigte Tools." $tFGreen
#	sudo apt-get install -y lsb-core  # install the lsb modules
#	sudo apt-get install -y git ntp mc ntpdate libpcap*
	sudo apt-get install -y git mc libpcap*
	create_Tools
    ctrl_Services 
#    create_ctrlService homebridge service

#!#	msg "\nWelche NodeJS Version soll installiert werden: \033[0;32m($max_nodeVersion)$tNormal?"
#!#	msg "[letzte stabile Version: $stab_nodeVersion]" $tFGreen
#!#	read nodeVersion
#!#	if [ "$nodeVersion" = '' ] ; then
#!#	  nodeVersion=$max_nodeVersion
#!#	fi
#!#	msg "Installiere node in Version $nodeVersion auf einem $Distri-System" $tFGreen
#!#	if [ "$Distri" == "Raspbian" ];then
#!#	  if [ "$UNAME" = "armv6l" -o "$UNAME" = "armv7l" ];then
#!#	    msg "Der RasPi basiert auf: $UNAME"
##!	    wget https://nodejs.org/dist/latest/node-v?.?.?-linux-$UNAME.tar.gz 
##!	    node-v7.10.0-linux-armv7l.tar.gz
#!#	    wget https://nodejs.org/dist/v$nodeVersion/node-v$nodeVersion-linux-$UNAME.tar.gz
#!#	    tar -xvf node-v$nodeVersion-linux-$UNAME.tar.gz
#!#	    cd $HOME/node-v$nodeVersion-linux-$UNAME/
#!#	    sudo cp -Rf * /usr/local/
#!#	    cd $HOME
#!#	    sudo rm -f node-v$nodeVersion-linux-$UNAME -r
#!#	    sudo rm -f node-v$nodeVersion-linux-$UNAME.tar.gz
#!#	  fi
#!#	elif [ "$Distri" == "Debian" ];then
#!#	  Node_Deb=`echo ${nodeVersion%%.*}`  # remove part after .
#!#	  msg "Es wird das nodejs $Node_Deb.x für $Distri installiert!!" $tFGelb
#!#	  if [ "$Node_Deb" == "8" ];then
#!#           curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
#!#	  elif [ "$Node_Deb" == "9" ];then
#!#            curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
#!#	  else
#!#	    msg "\n\t\t Abbruch !!\n$tFGelb aktuell existiert für $Distri nur Versionen 8.x und 9.x!"  $tFRot
#!#	    exit 6
#!#	  fi
#!#       sudo apt-get install -y nodejs
#!#	sudo apt-get install -y build-essential
#!#	else
#!#	  msg "\n\t\t Abbruch !!\n$tFGelb Die Distribution ist unbekannt." $tFRot
#!#	  exit 8
#!#	fi

	if [ "$Distri" == "Debian" ];then
	  msg "\nWelche NodeJS Version soll installiert 8.x, 9.x oder 10.x werden: \033[0;32m(10)$tNormal?"
	  read -n2 nodeVersion 
	  if [ "$nodeVersion" = '' ] ; then
	    nodeVersion=10
	  elif [ "$nodeVersion" -gt "10" -o "$nodeVersion" -lt "8" ]; then	#grösser 9 oder kleiner 8
	    msg "Eingabe von Version= $nodeVersion"
	    msg "\n\t\t Abbruch !!\n$tFGelb aktuell existiert für $Distri nur Versionen 8.x, 9.x und 10.x!"  $tFRot
        exitCode=6
        pattern=BREAK
	  fi
	  msg "Es wird das nodejs $nodeVersion.x für $Distri installiert!!" $tFGelb
#	  if [ "$nodeVersion" == "8" ];then
#            sudo curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
#	  elif [ "$nodeVersion" == "9" ];then
#            sudo curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
#  	  elif [ "$nodeVersion" == "10" ];then
#            sudo curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -          
#	  fi
#	  sudo curl -sL https://deb.nodesource.com/setup_${nodeVersion}.x | sudo -E bash -    # Ubuntu
	  sudo curl -sL https://deb.nodesource.com/setup_${nodeVersion}.x | bash -    		  # Debian      
      sudo apt-get install -y nodejs
	  sudo apt-get install -y build-essential
	elif [ "$Distri" == "Raspbian" ];then
	  msg "\nWelche NodeJS Version soll installiert werden: \033[0;32m($max_nodeVersion)$tNormal?"
	  msg "[letzte stabile Version: $stab_nodeVersion]" $tFGreen
	  read nodeVersion
	  if [ "$nodeVersion" = '' ] ; then
	    nodeVersion=$max_nodeVersion
	  fi
	  msg "Installiere node in Version $nodeVersion auf einem $Distri-System" $tFGreen
	  if [ "$UNAME" = "armv6l" -o "$UNAME" = "armv7l" ];then
	    msg "Der RasPi basiert auf: $UNAME"
#!	    wget https://nodejs.org/dist/latest/node-v?.?.?-linux-$UNAME.tar.gz 
#!	    node-v7.10.0-linux-armv7l.tar.gz
	    wget https://nodejs.org/dist/v$nodeVersion/node-v$nodeVersion-linux-$UNAME.tar.gz
	    tar -xvf node-v$nodeVersion-linux-$UNAME.tar.gz
	    cd $HOME/node-v$nodeVersion-linux-$UNAME/
	    sudo cp -Rf * /usr/local/
	    cd $HOME
	    sudo rm -f node-v$nodeVersion-linux-$UNAME -r
	    sudo rm -f node-v$nodeVersion-linux-$UNAME.tar.gz
	  fi
	else
	  msg "\n\t\t Abbruch !!\n$tFGelb Die Distribution ist unbekannt." $tFRot
	  exit 8
    fi
	msg "..installiere libavahi libdnssd-dev." $tFGreen
	sudo apt-get install -y libavahi-compat-libdnssd-dev
	msg "\nWelche NPM Version soll installiert werden: \033[0;32m(latest)$tNormal?"
	msg "(Eingabe möglichkeiten: $max_npmVersion, \"latest\" oder \"no\")"
	msg "(mit \"no\" wird nur homebridge installiert und die npm von node $nodeVersion benutzt)"
	msg "[letzte stabile Version: $stab_npmVersion]" $tFGreen
	read npmVersion
	if [ "$npmVersion" = '' ] ; then
	  npmVersion="latest"
	fi

	msg "\nWelche homebridge Version soll installiert werden: \033[0;32m(latest)$tNormal?"
	msg "(Eingabe möglichkeiten: $max_hbVersion, \"latest\" oder \"no\")"
	msg "(mit \"no\" wird keine homebridge installiert)"
	msg "[letzte stabile Version: $stab_hbVersion]" $tFGreen
	read hbVersion
	if [ "$hbVersion" = '' ] ; then
	  hbVersion="latest"
	fi
	msg "Moment: installiere das npm@$npmVersion und homebridge@$hbVersion Release!" $tFGreen
	if [ "$npmVersion" = "no" ];then
      if [ "$hbVersion" = "no" ];then
	    msg " "
	  else
	    sudo npm install -g --unsafe-perm homebridge@$hbVersion 
	  fi
	else
      if [ "$hbVersion" = "no" ];then
	    sudo npm install -g --unsafe-perm npm@$npmVersion 
	  else
	    sudo npm install -g --unsafe-perm npm@$npmVersion
	    sudo npm install -g --unsafe-perm homebridge@$hbVersion 
	  fi
	fi
	if [ -e /root/.npm-global/bin/homebridge ] ; then
	  sudo ln -s /root/.npm-global/bin/homebridge /usr/local/bin/homebridge
	  msg "Link zum .npm-global erstellt."
	fi
	if [ -e /root/.npm-global/bin/npm ] ; then
	  sudo mv -f /usr/local/bin/npm /usr/local/bin/npm.org
	  sudo ln -s /root/.npm-global/bin/npm /usr/local/bin/npm
	  msg "Link zum npm-global/bin/npm erstellt."
	fi
	cd $toolDir
	msg "\nEs wurde node@$nodeVersion, npm@$npmVersion und homebridge@$hbVersion installiert!!\n" $tFGreen
    if [ ! -e /var/homebridge/config.json ] ; then
      sudo mkdir /var/homebridge
      sudo cp -f $toolDir/files/config.json /var/homebridge/config.json
      sudo chown -R homebridge:users /var/homebridge/
      sudo chmod -R 0777 /var/homebridge
      msg "Eine leere config.json und der homebridge Ordner /var/homebridge/config.json wurde erstellt!" $tFGreen
    fi
	inquire "Sollen jetzt die Plugin's installiert werden \033[0;32m(j) $tNormal"
	if [ "$answer" = "" -o "$answer" = "y" ];then
      pattern=plugin
	else
	  msg "Nicht vergessen, Plugin's müssen noch installiert werden!" "\n\033[1;36m"
	fi
	;;

plugin)
    pattern=BREAK
	msg  "Plugindatei: $tFGelb$pluginFile$tFGreen  wird gesucht." $tFGreen
	if [ -e $pluginFile ] ; then
	  msg  "Plugindatei: $tFGelb$pluginFile$tFGreen wurde gefunden, \nlese die zu installierenden Plugin's ein." $tFGreen
	  while read -r line
	  do
	    pluginBaseName="homebridge-"
	    pluginName="$pluginBaseName$line"
	    if echo "$line" | grep -q '^#' ; then 
	      msg "Plugin: $line wird nicht installiert ($tFGelb ist auskommentiert$tFGreen )!" $tFGreen	
	    elif echo "$line" | grep -q '^@' ; then
	      line2=`echo "$line" | awk '{print substr($0,2)}'`
	      msg "Plugin: $line2 wird direkt aus dem web/git installiert!" $tFGreen	
	      sudo chown -R $USER /usr/local && npm install -g $line2
	    else
	      msg "installiere Plugin: $pluginName" $tFGreen
	      if echo "$line" | grep -q '\>@' ; then
		msg "Es wird eine bestimmte Version installiert von: $tNormal$pluginName" $tFGelb	
	      else
		pluginName="$pluginName@latest"
		msg "Es wird die letzte Version installiert von: $tNormal$pluginName" $tFGelb	
	      fi
		sudo chown -R $USER /usr/local && npm install -g $pluginName
	    fi
	  done < $pluginFile
	else
	  msg "Es wurde keine Plugindatei $tFGelb$pluginFile$tFGreen gefunden, bitte die Plugins manuell installieren!" $tFGreen
	fi
	sudo npm list -g --depth=0
	inquire "\nSoll Homebridge jetzt als Dienst installierte werden \033[0;32m(j) $tNormal"
	if [ "$answer" = "" -o "$answer" = "y" ];then
      pattern=service
	fi
	;;

service)
    pattern=BREAK
#	create_Tools
    ctrl_Services 
	input_HBService
	msg "Alle Services wurden erstellt und aktiviert." $tFGreen
	msg "\nFür das Einrichten eines verzögerten Start$tNormal \"$0 wait2deconz\"$tFGreen benutzen." $tFGelb
#!#	inquire "\n$tFRot Ein neustart des $Distri-System ist jetzt zu empfehlen \033[0;32m(n) $tNormal" 
#!#	if [ "$answer" = "y" ];then
#!#	  neustart
#!#	fi
	;;
	
list_service)
    pattern=BREAK
	msg "Anzeige der HB-Instanzen und wenn vorhanden reporter, logwatch, fritzbox-reboot!" $tFGreen 
	msg "\033[0;33mBeispiel: $tNormal\n loaded active running - \t Instanz ist active und läuft (running)"
	msg "$tNormal loaded inactive dead - \t Instanz nicht active und gestoppt (dead)\n"
	msg "gefundene Instanzen:" $tGreen 
#	sudo systemctl status homebridge*
	sudo systemctl list-units --type=service --all | grep 'homebridge\|reporter\|logwatch\|fritzbox-reboot'
    exitCode=9
	;;
	
cam)
    pattern=BREAK
	if [ "$Distri" == "Raspbian" ];then
	  inquire "\n\033[0;33mSoll jetzt am Cam-Anschluss eine Kamera eingerichtet werden? \033[0;32m(j) $tNormal" $tFGreen
	  if [ "$answer" = "n" ]; then exit 3; fi
	    inquire "\nWurde die Option Cam im raspi-config (-> 5 -> P1) schon aktiviert?\033[0;32m(j) $tNormal" 
	    if [ "$answer" = "n" ]; then
	      sudo raspi-config
	      neustart
	    fi
	    msg "\nModul bcm2835-v4l2 wird aktiviert!!" $tFGelb 
	    sudo modprobe bcm2835-v4l2
	    isInFile=$(cat /etc/modules | grep -c "bcm2835-v4l2")
	    if [ "$isInFile" -eq 0 ]; then
	    msg "/etc/modules wird gesichert und erweitert." $tNormal 
	    msg "Einrichten: autoload von bcm2835-v4l2." $tNormal
	    sudo cp -f /etc/modules /etc/modules.org
	    sudo bash -c "echo bcm2835-v4l2 >> /etc/modules"
	  else
	    msg "bcm2835-v4l2 wird schon geladen." $tNormal
	  fi
	  msg "ffmpeg für die Kamera wird installiert." $tFGelb
	  sudo apt install ffmpeg
	  sudo npm install -g homebridge-camera-rpi
	  msg "Die Kamera sollte jetzt funktionieren, in der iOS-APP Gerät hinzufügen und Code von der Homebridge eingeben." $tFGreen
	  neustart
	else
	  msg "Der CAM -Support wird nur auf einem Raspberry unterstützt." $tFGreen
	fi
	;;

deconz)
    pattern=BREAK
	msg "\t\t  Jetzt wird deCONZ installiert!\n" $tFGreen
	if [ -n "$PID_dCA" ];then
      msg " Für das Update wird \"deCONZ\" gestoppt!" $tFGelb
      sudo kill $PID_dCA
	fi
	if [ -n "$PID_dCS" ];then
      msg " Für die Dauer der Installation wird der Dienst \"deconz\" gestoppt!" $tFGelb
      ${STOP_deCONZ}
	fi
	if [ "$Distri" == "Raspbian" ];then
	  msg "Die akt. Raspi-Version einsehen: \033[0;33mhttp://www.dresden-elektronik.de/rpi/deconz/beta/$tNormal."
	  msg "\nWelche Version von deCONZ soll installiert werden: \033[0;32m($max_deCONZVersion)$tNormal?"
	  msg "[letzte stabile deCONZ Version: $stab_deCONZVersion, beta]" $tFGreen
	else
	  msg "Die akt. Debian-Version einsehen: \033[0;33mhttp://www.dresden-elektronik.de/deconz/ubuntu/beta/$tNormal."
	  msg "\nWelche Version von deCONZ soll installiert werden: \033[0;32m($max_deCONZVersionDeb)$tNormal?"
	  msg "[letzte stabile deCONZ Version: $stab_deCONZVersionDeb]" $tFGreen
	fi
	read deCONZVersion
	if [ "$deCONZVersion" = '' ]; then
	  if [ "$Distri" == "Raspbian" ];then
	    deCONZVersion=$max_deCONZVersion
	  else
	    deCONZVersion=$max_deCONZVersionDeb
	  fi
	fi
	if [ "$deCONZVersion" = 'beta' ] && [ "$Distri" == "Raspbian" ]; then
	  msg "Installiere für $Distri das \033[0;33mdeconz-latest-beta.deb\033[1;32m Release!" $tFGreen
	  wget http://www.dresden-elektronik.de/rpi/deconz/beta/deconz-latest-beta.deb	
	  sudo dpkg -i deconz-latest-beta.deb	# install Raspberry & Debian
	else
	  msg "Installiere für $Distri das \033[0;33mdeconz-$deCONZVersion-qt5.deb\033[1;32m Release!" $tFGreen
	  if [ "$Distri" == "Raspbian" ];then
	    wget http://www.dresden-elektronik.de/rpi/deconz/beta/deconz-$deCONZVersion-qt5.deb
	  else
	    wget http://www.dresden-elektronik.de/deconz/ubuntu/beta/deconz-$deCONZVersion-qt5.deb	
	  fi
	  sudo dpkg -i deconz-$deCONZVersion-qt5.deb	# install Raspberry & Debian
	fi
#	sudo dpkg -r deconz				# remove
 	sudo apt update && sudo apt upgrade -y
	sudo apt install -f
	msg " ..lösche den Download" $tFGelb
	sudo rm -f ./deconz-$deCONZVersion-qt5.deb
	inquire "Soll deCONZ als Dienst starten: \033[0;32m(n) $tNormal" $tFGreen
	if [ "$answer" = "y" ]; then 
	  sudo systemctl daemon-reload 
	  sudo systemctl enable deconz	  
	  if [ -n "$PID_dCS" ];then
            msg "\033[1;33mDer Dienst \"deconz\" wird wieder gestartet!$tNormal\n" 
            ${START_deCONZ}
	  fi
	  rm -f $HOME/.config/autostart/deCONZ.desktop
	else
	  if [ ! -e $HOME/.config/autostart/deCONZ.desktop ] ; then
	    sudo mkdir $HOME/.config/autostart
	    cp -Rf $toolDir/files/deCONZ.desktop $HOME/.config/autostart
	    msg "\n\t\tdeCONZ startet im Grafikmode von X11!" $tFGelb
	  else
	    msg "\n\t\tAutostart für deCONZ unter X11 ist schon eingerichtet!" $tFGelb
	  fi
	fi
	msg "\n\t\t$tFRotDas $Distri-System sollte jetzt neu gestartet werden!!$tNormal\n" 
	msg "Hinnweis für Raspbian Jessie or Stretch with Qt5:" $tFGelb
	echo -e "Important The serial port must be configured as follows to allow communication with the RaspBee."
	echo -e "$ sudo raspi-config\n() Interfacting Options > Serial \n    * Would you like a login shell accessible over serial?"
	echo -e "      > No\n    * Would you like the serial port hardware to be enabled?"
	echo -e "      > Yes\n\n"
	msg "\t Zum übernehmen muss der $Distri-System neu gestartet werden!" $tFGreen
	neustart
	;;

wait2deconz)
    pattern=BREAK
    msg "Verzögerten Start für \"homebridge\" Instanz einrichten/entfernen!" $tFGreen
    Service_NAME=1
    while [ -n "$Service_NAME" ]; do
      cd /etc/systemd/system
      msg "\033[0;33m\nWelche homebridge-Instanz soll verzögert starten?$tNormal"
      sudo find homebridge*.service -exec echo {} \;
      cd $toolDir
      msg "\nName der Instanz (alles vor .service) eingeben: \033[0;32m(Abbruch mit Enter)$tNormal" "\033[1;33m"
      read  Service_NAME
      if [ "$Service_NAME" = "" ];then
        continue 
      fi
      if [ -e /etc/systemd/system/$Service_NAME.service ]; then
	    isInFile=$(sudo cat /etc/systemd/system/$Service_NAME.service | grep -c "ExecStartPre=")
	    if [ "$isInFile" -eq 0 ]; then
	      msg "In der Datei$tNormal /etc/systemd/system/$Service_NAME.service,$tFRot wurde kein entsprechender Eintrag gefunden!" $tFRot
	      sudo sudo cp -R $toolDir/files/homebridge.service.$Distri /etc/systemd/system/$Service_NAME.service
	      sudo sed -i 's;EnvironmentFile=/etc/default/homebridge;EnvironmentFile=/etc/default/'$Service_NAME';g' /etc/systemd/system/$Service_NAME.service
	      msg "Es wurde ein neuer Dienst \"$Service_NAME.service\" erstellt!" $tFGelb
        fi
	    wert=$(grep "ExecStartPre=" /etc/systemd/system/$Service_NAME.service)
	    msg "aktuelle Verzögerung ist: "${wert#* }"sec"
	    msg ""
	    msg "\nWieviel Sekunden nach dem start/reboot, soll der Dienst starten: \033[0;32m(Enter=löschen)$tGelb?" $tFGelb
	    read hbridge_vtime
        if [ "$hbridge_vtime" = "" ]; then
	      # Zeilelenanfang suchen, global (mehrere Einträge tauschen)
          sudo sed -i 's;^ExecStartPre=.*$;ExecStartPre= ;g' /etc/systemd/system/$Service_NAME.service 
          msg "Die Verzögerung von $Service_NAME.service wurde glöscht." $tFGelb 
        else
          # zeile ersetzen
          sudo sed -i 's;^ExecStartPre=.*$;ExecStartPre=/bin/sleep '$hbridge_vtime';g' /etc/systemd/system/$Service_NAME.service 
          msg "Der Dienst $Service_NAME startet jetzt um $hbridge_vtime sec verzögert." $tFGelb 
        fi
	  else
	    msg "Dieser Dienst existiert nicht, zum anlegen den Parameter \033[1;37m[service]$tRot benutzen!" $tRot
	  fi
    done
    sudo systemctl daemon-reload
    ;;

reboot)
	neustart
	;;

restart)
    pattern=BREAK
	hb_Services stop
	sleep 3
	hb_Services start
    exitCode=2
	;;

del_service|delete)	#del_service
    pattern=BREAK
	cd /etc/systemd/system
	msg "\nDiese homebridge-Instanzen existieren:\n" $tGelb
#	(der Dienst homebridge.service kann nur mit [remove] gelöscht werden)" $tFGelb
	sudo find homebridge*.service -exec echo {} \;
	cd $toolDir
	msg "\nWelcher Dienst soll gelöscht werden?\n$tGelb (Eingabe: \"homebridge\" löscht die homebridge Instanz)\n (Eingabe: \"hue\" löscht die homebridge-hue Instanz)" $tFGelb
	read  Service_NAME
	if [ "$Service_NAME" = "homebridge" ]; then  
	  sudo sudo systemctl disable $Service_NAME.service
	  sudo rm -fr /etc/default/$Service_NAME > /dev/null
	  sudo rm -fr /etc/systemd/system/$Service_NAME.service > /dev/null
#	   sudo rm -fr /var/homebridge-$Service_NAME > /dev/null  # /var/homebridge-*/config.json nicht löschen
	  msg " Der Dienst $Service_NAME.service wurde gelöscht!" $tFGelb
	  msg " Der Ordner /var/$Service_NAME wurde \033[0;31mNICHT$tGelb gelöscht!" $tGelb
	elif [ -e /etc/systemd/system/homebridge-$Service_NAME.service ]; then  
	  sudo sudo systemctl disable homebridge-$Service_NAME.service
	  sudo rm -fr /etc/default/homebridge-$Service_NAME > /dev/null
	  sudo rm -fr /etc/systemd/system/homebridge-$Service_NAME.service > /dev/null
#	   sudo rm -fr /var/homebridge-$Service_NAME > /dev/null  # /var/homebridge-*/config.json nicht löschen
	  msg " Der Dienst homebridge-$Service_NAME.service wurde gelöscht!" $tFGelb
	  msg " Der Ordner /var/homebridge-$Service_NAME wurde \033[0;31mNICHT$tGelb gelöscht!" $tGelb
	else
	  msg " Dieser Dienst existiert nicht: homebridge-$Service_NAME.service $tFGreen(Abbruch)" $tFGelb
	fi
    sudo systemctl daemon-reload
	;;

backup)
    pattern=BREAK
	mount_SicMedium ${HB_sic_Pfad}
	if [ "${HB_sic_Name}" = "" ] ; then
	  msg "\033[0;33m\nDiese Sicherungs-Dateien existieren bereits:$tNormal"
	  sudo find ${HB_sic_Pfad}/*.tar.gz -exec echo {} \;
	  msg "\nBitte den Namen der Sicherungs-Datei eingeben ! \n(Name ohne .tar.gz)\n\033[0;32m(Enter = homebridge.tar.gz)$tNormal" "\033[1;33m"
	  read  -t 25 HB_sic_Name
	  [ "$HB_sic_Name" = "" ] && HB_sic_Name="homebridge" 
	fi
	    if [ -e ${HB_sic_Pfad}/${HB_sic_Name}.tar.gz ] ; then
	      msg "Die vorhandene Datei$tFGelb \"${HB_sic_Pfad}/${HB_sic_Name}.tar.gz\"$tFGreen wurde in$tFGelb \"${HB_sic_Pfad}/${HB_sic_Name}-2.tar.gz\"$tFGreen umbenannt!\n" $tFGreen
	      sudo cp -f ${HB_sic_Pfad}/${HB_sic_Name}.tar.gz ${HB_sic_Pfad}/${HB_sic_Name}-2.tar.gz
	      sudo rm -f ${HB_sic_Pfad}/${HB_sic_Name}.tar.gz
	    fi


	msg  "Die Sicherungs Config-Datei: $tFGelb$hb_Backup_cfg$tFGreen  wird gesucht." $tFGreen
	if [ -e $hb_Backup_cfg ] ; then
	  msg  "Config-Datei: $tFGelb$hb_Backup_cfg$tFGreen existiert und wird benutzt, \nlese die zu sichernden Daten ein." $tFGreen
	  while read -r line
	  do
	    if echo "$line" | grep -q '^#' ; then 
	      msg "Kommentar: $line wird nicht gesichert ($tFGelb ist auskommentiert$tFGreen )!" $tFGreen	
		elif echo "$line" | grep -q '^!' ; then 
		  dummy=""		# dummy befehl
	    else
	      msg "sichere Datei/Ordner: $line" $tFGreen
	      sudo tar -rf "${HB_sic_Pfad}/${HB_sic_Name}.tar" /$line &> /dev/null
	    fi
	  done < $hb_Backup_cfg
	  msg " Die Datei ${HB_sic_Pfad}/${HB_sic_Name}.tar wird jetzt gepackt!" $tFGelb
      gzip -f -9 "${HB_sic_Pfad}/${HB_sic_Name}.tar" &> /dev/null
	else
	  msg "Es wurde keine Sicherungs Config-Datei gefunden, starte jetzt das automatische Sicherung!" $tFGreen
	  msg "Wenn ein /homebridge bzw. /.homebridge Ordner gefunden wird, wird dieser gesichert!" $tFGelb
	  msg "\t\t (inkl. der Service-Dateien für die Dienste)" $tFGelb
	  daten_Dir=""
	  if [ -d /var/homebridge ] ; then
	    daten_Dir=/var/homebridge
	  elif [ -e $HOME/.homebridge/config.json ] ; then
	    daten_Dir=$HOME/.homebridge
	  else
	    msg "Es wurde kein \"homebridge\" Ordner gefunden!!" $tFRot
	    daten_Dir=""
	  fi
	  if [ "$daten_Dir" != "" ] ; then
	    msg "Der Ordner$tFGelb \"$daten_Dir\"$tFGreen wurde gefunden!" $tFGreen
	    cd $daten_Dir
	    cd ..
#	    if [ -e ${HB_sic_Pfad}/${HB_sic_Name}.tar.gz ] ; then
#	      msg "Die vorhandene Datei$tFGelb \"${HB_sic_Pfad}/${HB_sic_Name}.tar.gz\"$tFGreen wurde in$tFGelb \"${HB_sic_Pfad}/${HB_sic_Name}2.tar.gz\"$tFGreen umbenannt!\n" $tFGreen
#	      sudo cp -f ${HB_sic_Pfad}/${HB_sic_Name}.tar.gz ${HB_sic_Pfad}/${HB_sic_Name}2.tar.gz
#	      sudo rm -f ${HB_sic_Pfad}/${HB_sic_Name}.tar.gz
#	    fi
	    if [ "$daten_Dir" = "/var/homebridge" ] ; then
	      sudo tar -cf "${HB_sic_Pfad}/${HB_sic_Name}.tar" $daten_Dir* &> /dev/null
	    else
	      sudo tar -cf "${HB_sic_Pfad}/${HB_sic_Name}.tar" ./.homebridge* &> /dev/null
	    fi
	    msg "Das Sicherung von$tFGelb $daten_Dir*$tFGreen wurde erstellt in$tFGelb ${HB_sic_Pfad}/${HB_sic_Name}.tar.gz$tFGreen !" $tFGreen
#	     sudo tar -rPf "${HB_sic_Pfad}/${HB_sic_Name}.tar" /etc/systemd/system/homebridge* 	# -P = nur ab root entpackbar!!
	    msg " Die Service-Dateien werden dem Image hinzugefügt!" $tFGelb
	    sudo tar -rf "${HB_sic_Pfad}/${HB_sic_Name}.tar" /etc/default/homebridge* &> /dev/null
	    sudo tar -rf "${HB_sic_Pfad}/${HB_sic_Name}.tar" /etc/systemd/system/homebridge* &> /dev/null
#	     if [ -e "${toolDir}/hbridge.cfg" ];then sudo tar -rf "${HB_sic_Pfad}/${HB_sic_Name}.tar" ${toolDir}/hbridge.cfg &> /dev/null && msg " Die hbridge.cfg Datei wurde dem Image hinzugefügt!" $tFGelb ; fi
	    if [ -d "${toolDir}" ];then sudo tar -rf "${HB_sic_Pfad}/${HB_sic_Name}.tar" ${toolDir}/* &> /dev/null && msg " Der Ordner ${toolDir} wurde dem Image hinzugefügt!" $tFGelb ; fi
	    if [ -d "${HOME}/Desktop" ];then sudo tar -rf "${HB_sic_Pfad}/${HB_sic_Name}.tar" ${HOME}/Desktop/* &> /dev/null && msg " Der Ordner ${HOME}/Desktop wurde dem Image hinzugefügt!" $tFGelb ; fi
	    if [ -d "${HOME}/Documents" ];then sudo tar -rf "${HB_sic_Pfad}/${HB_sic_Name}.tar" ${HOME}/Documents/* &> /dev/null && msg " Der Ordner ${HOME}/Documents wurde dem Image hinzugefügt!" $tFGelb ; fi
	    if [ -d "${HOME}/Downloads" ];then sudo tar -rf "${HB_sic_Pfad}/${HB_sic_Name}.tar" ${HOME}/Downloads/* &> /dev/null && msg " Der Ordner ${HOME}/Downloads wurde dem Image hinzugefügt!" $tFGelb ; fi
	    msg " Die Datei ${HB_sic_Pfad}/${HB_sic_Name}.tar wird jetzt gepackt!" $tFGelb
        gzip -f -9 "${HB_sic_Pfad}/${HB_sic_Name}.tar" &> /dev/null
      else
	    msg "Habe nichts zum sichern gefunden!!" $tFGreen
        exitCode=5
	  fi
    fi
	cd $HOME
	umount_SicMedium ${HB_sic_Pfad}
	;;
	
restore)
    pattern=BREAK
	mount_SicMedium ${HB_sic_Pfad}
	msg "\033[0;33m\nDiese Sicherungs-Dateien wurden gefunden:$tNormal"
	sudo find ${HB_sic_Pfad}/*.tar.gz -exec echo {} \;
	cd $toolDir
	msg "\nBitte den Namen der Sicherungs-Datei für das Restore eingeben ! \n(Name ohne .tar.gz)\n\033[0;32m(Enter = homebridge.tar.gz)$tNormal" "\033[1;33m"
	read  -t 20 dummy
	[ "$dummy" = "" ] && dummy="homebridge" 
  	if [ -e ${HB_sic_Pfad}/${dummy}.tar.gz ] ; then  
	  msg "Es werden alle Dateien aus der Sicherung$tFGelb \"${HB_sic_Pfad}/${dummy}.tar.gz\"$tFGreen hergestellt." $tFGreen
	  inquire "Vorher nochmal anzeigen \033[0;32m(n) $tFGelb?" $tFGelb
      if [ "$answer" = "y" ]; then 
	    sudo tar -ztf ${HB_sic_Pfad}/${dummy}.tar.gz
	  fi
	  msg "\n\t (alles Wiederherstellen mit$tFGreen Enter$tFGelb oder mit$tFGreen q$tFGelb Abbruch!)" $tFGelb
	  read a
	  if [ "$a" = "" ]; then
	    if [ -e "${toolDir}/hbridge.cfg" ];then sudo rename -f ${toolDir}/hbridge.cfg ${toolDir}/hbridge_old.cfg &> /dev/null && msg " Die vorhandene hbridge.cfg Datei wurde umbenannt in hbridge_old.cfg!" $tFGelb ; fi
#	     sudo gzip -d "${HB_sic_Pfad}/${dummy}.tar.gz"		# restore
	    sudo tar -zxf "${HB_sic_Pfad}/${dummy}.tar.gz" -C /	# v = verbose
	    msg "Jetzt werden die Service aktiviert!" $tFGelb
	    cd /etc/systemd/system
	    sudo systemctl daemon-reload
        sudo systemctl enable homebridge*	
#	  elif [ "$dummy" = "v" ]; then
#	     msg "\n\t (Wieder herstellen mit$tFGreen Enter$tFGelb oder mit$tFGreen q$tFGelb Abbruch!)" $tFGelb
#	     read dummy
	  fi
	  cd $HOME
	else
	  msg "Im Ordner $tFGelb\"${HB_sic_Pfad}/\"$tFGreen wurde keine $tFGelb\"${dummy}.tar.gz\"$tFGreen gefunden !" $tFGreen
	fi
	umount_SicMedium ${HB_sic_Pfad}

#	if [ -e ${HB_sic_Pfad}/${HB_sic_Name}.tar.gz ] ; then
#	  msg "Es werden alle Dateien aus dem Backup$tFGelb \"${HB_sic_Pfad}/${HB_sic_Name}.tar.gz\"$tFGreen hergestellt." $tFGreen
#	  inquire "Vorher nochmal anzeigen \033[0;32m(n) $tFGelb?" $tFGelb
#          if [ "$answer" = "y" ]; then 
#	    sudo tar -ztf ${HB_sic_Pfad}/${HB_sic_Name}.tar.gz
#	  fi
#	  msg "\n\t (alles Wiederherstellen mit$tFGreen Enter$tFGelb oder mit$tFGreen q$tFGelb Abbruch!)" $tFGelb
#	  read dummy
#	  if [ "$dummy" = "" ]; then
#	    if [ -e "${toolDir}/hbridge.cfg" ];then sudo rename -f ${toolDir}/hbridge.cfg ${toolDir}/hbridge_old.cfg &> /dev/null && msg " Die vorhandene hbridge.cfg Datei wurde umbenannt in hbridge_old.cfg!" $tFGelb ; fi
##	     sudo gzip -d "${HB_sic_Pfad}/${HB_sic_Name}.tar.gz"		# restore
#	    sudo tar -zxf "${HB_sic_Pfad}/${HB_sic_Name}.tar.gz" -C /	# v = verbose
#	    msg "Jetzt werden die Service aktiviert!" $tFGelb
#	    cd /etc/systemd/system
#	    sudo systemctl daemon-reload
#        sudo systemctl enable homebridge*	
##	  elif [ "$dummy" = "v" ]; then
##	     msg "\n\t (Wieder herstellen mit$tFGreen Enter$tFGelb oder mit$tFGreen q$tFGelb Abbruch!)" $tFGelb
##	     read dummy
#	  fi
#	  cd $HOME
#	else
#	  msg "Im Ordner $tFGelb\"${HB_sic_Pfad}/\"$tFGreen wurde keine $tFGelb\"*.tar.gz\"$tFGreen gefunden !" $tFGreen
#	fi
	;;
	
#list)
##    pattern=list_plugin
#    ;&
##    ;;
    
list_plugin|list)
    pattern=BREAK
	msg "Liste der installierten Plugins, inkl.Version (moment bitte...) !" $tFGreen
	sudo npm list -g --depth=0
	msg "Installierte Node.js Version !" $tFGreen
	sudo node -v
#	sudo npm -v
	if [ "$hb_ServicesRestart" = "1" ]; then
	  hb_Services start
	fi
    exitCode=4
	;;

config)
    pattern=BREAK
    if [ -e $toolDir/hbridge.cfg ]; then
      cat $toolDir/hbridge.cfg | more
    else
      create_ConfigFile
    fi
	;;

swap)
    pattern=BREAK
	if [ ! -e $HOME/.enable_swap ] ; then
	  msg "Es wird eine SWAP Datei mit 1024MB eingerichtet." $tFGreen
	  if [ ! -e /etc/dphys-swapfile ] ; then
	    msg "SWAP Support wird installiert." $tFGelb
	    sudo apt-get install dphys-swapfile
	  fi
	  sudo su -c 'echo "CONF_SWAPFILE=/var/swap" > /etc/dphys-swapfile'
	  sudo su -c 'echo "CONF_SWAPSIZE=1024" > /etc/dphys-swapfile'
	  sudo su -c 'echo "CONF_MAXSWAP=2048" > /etc/dphys-swapfile'
	  sudo dphys-swapfile setup
	  sudo dphys-swapfile swapon
	  touch $HOME/.enable_swap
	else
	  msg "Eine Swap Datei existiert schon." $tFGreen
	  inquire "SWAP-Datei Support entfernen \033[0;32m(n) $tFGelb?" $tFGelb
      if [ "$answer" = "y" ]; then 
	    sudo dphys-swapfile swapoff
	    sudo dphys-swapfile uninstall
	    sudo /etc/init.d/dphys-swapfile stop
	    sudo update-rc.d dphys-swapfile remove
		rm -rf $HOME/.enable_swap
	  fi
	fi
#    pattern=list_swap	
	;&
	
list_swap)
	pattern=BREAK
	msg "aktuelle SWAP-Datei:" $tFGelb
 	swapon -s
    read -p "weiter mit Enter.."
	;;

ctrl_service)
    pattern=BREAK
	ctrl_Services 
	;;
	
	*)
    pattern=BREAK
	msg " (Die Homebridge läuft auf einem: $Distri-System)" "\t\t\033[0;33m"
    if [ -f $configFile ]; then msg " (Die Datei: \"hbridge.cfg\" wurde gefunden und eingelesen)" "\t\t\033[0;33m"; fi
	if [ "$SendTelegram" = "1" ]; then msg " (Benachrichtigung per \"Telegram\" ist aktiviert)" "\t\t\033[0;33m"; fi
	msg "\n\033[0;33mBenutze:\033[1;37m $0 [update|remove|install|plugin|service|list_service|cam|deconz|wait2deconz|list_plugin\n\t\t\t\t |reboot|restart|del_service|backup|restore|config|swap|ctrl_service]$tNormal"
    msg " \033[0;32mmögl. Eingaben sind:"
	msg " y | Y | yes | YES | j | J | ja | Ja,"
    msg " n | N | no | NO | nein | Nein,"
	msg " bei Enter wird immer \033[0;32m()\033[0m genommen!! $tNormal"
	msg ""
    msg "\033[0;33mHinnweis:$tNormal Es werden auch mehrere Instanzen (\033[1;37mservice$tNormal) für die \"homebridge\" unterstützt. \n\t  Beim ersten Aufruf von \033[1;37mservice$tNormal wird die standard Instanz \"homebridge\" eingerichtet."
	msg "\t$tNormal  Ab dem zweiten Aufruf von \033[1;37mservice$tNormal können weitere Instanzen angelegt werden.$tNormal\n\t  Verzögertes starten einer Instanz kann mit \033[1;37mwait2deconz$tNormal eingerichtet werden."
	msg "\n\033[0;33mmögl. Parameter:"
	msg "\033[1;37mupdate\t$tNormal - aktualisiert RasPi/Debian Pakete und Kernel"
	msg "\033[1;37mremove\t$tNormal - entfernt alle Instanzen, homebridge, node, npm und Plugins, nicht die config.json"
	msg "\033[1;37minstall\t$tNormal - installiert node, npm, homebridge, links und notwendige tools"
	msg "\033[1;37mplugin\t$tNormal - liest die zu installierenden Plugins aus der"
	msg "\t Datei: $pluginFile ein"
	msg "\t (siehe Bsp-Datei: hbridge_plugin-example.inst)"
	msg "\t (\033[0;33m#\033[0m am Zeilenanfang, kommentiert das Plugin aus)"
	msg "\t (\033[0;33m@\033[0m am Zeilenanfang, installiert Plugin aus dem web/git)"
	msg "\t (\033[0;33m@2.1.0\033[0m am Ende vom Pluginname, installiert Plugin in dieser Version)"
	msg "\033[1;37mservice$tNormal - installiert einen homebridge-Dienst,\n\t ab 2ten Aufruf werden weitere Instanzen eingerichtet (\033[0;33m\"/etc/default/homebridge\"$tNormal muss vorhanden sein)"
	msg "\033[1;37mlist_service$tNormal - Anzeige der eingerichteten Homebridge- und Ctrl-Instanzen"
	msg "\033[1;37mcam\t$tNormal - Kamera am CamPort (nur Raspberry) aktivieren, vorher (sudo raspi-config -> 5 -> P1 + reboot) ausführen"
	msg "\033[1;37mdeconz\t$tNormal - deCONZ für Raspbian oder Debian installieren/updaten (starten als Dienst oder X11)"
	msg "\033[1;37mwait2deconz$tNormal  - Verzögerung beim start'en/reboot'en der Dienste einrichten/entfernen"
#	msg "\033[1;37mlist_dev\t$tNormal - anzeigen der aktuellen Devices zum ermitteln des Sicherungs-Device" "\033[1;35m"
	msg "\033[1;37mlist_plugin$tNormal  - Anzeige aller installierten Plugins (inkl.Version)"
	msg "\033[1;37mreboot\t$tNormal - startet den RasPi/Debian neu"
	msg "\033[1;37mrestart\t$tNormal - alle homebridge-Instanzen (Dienste) neu starten"
	msg "\033[1;37mctrl_service$tNormal - erstellen/löschen von Services die das System kontrollieren"
    msg "\033[0;33m\t reporter.service$tNormal - überwachen der Services und bei Ausfall, Nachricht per Telegram möglich" $tNormal
    msg "\033[0;33m\t logwatch.timer$tNormal - Systemstatus, Systemupdate Pluginupdate prüfen, Nachricht per Telegram möglich" $tNormal
    msg "\033[0;33m\t fritzbox-reboot.timer$tNormal - Fritz-Box und/oder Fritz-Repeater geplant neu starten, Nachricht per Telegram mögl." $tNormal    
	msg "\033[1;37mdel_service$tNormal  - löschen von homebridge-Instanzen (Dienste)"
	msg "\033[1;37mbackup\t$tNormal - liest (wenn vorhanden) die $tGelb\"$hb_Backup_cfg\"$tNormal ein und sichert die\n\t Dateien/Ordner die in dieser Datei angegeben wurden. Falls nicht vorhanden, wird der\n\t Homebridge-Datenordner gesucht und gesichert. Die Service-Dateien, hbridge.cfg und\n\t hbridge_plugin.inst sowie (wenn vorhanden) $HOME/Desktop, $HOME/Documents und\n\t $HOME/Downloads werden mit gesichert.\n\t Sicherungsdatei: $tGelb\"${HB_sic_Pfad}/${HB_sic_Name}.tar.gz\""
	msg "\033[1;37mrestore\t$tNormal - herstellen der Dateien aus der Datei: $tGelb\"${HB_sic_Pfad}/${HB_sic_Name}.tar.gz\""
	msg "\033[1;37mswap\t$tNormal - erstellen/entfernen einer SWAP-Datei: $tGelb\"/var/swap\"$tNormal (von 1024MB bis 2048MB)"
	msg "\033[1;37mlist_swap $tNormal - anzeigen der aktuellen SWAP-Datei"
	msg "\033[1;37mconfig\t$tNormal - anzeige/erstellen einer minimalen config Datei in: $tGelb\"$configFile\"\n"
    read -p "weiter mit Enter.."
	msg "\n\033[1;33mHinnweis zu den Variablen:"
	msg " (in der Datei:$tGelb \"$configFile\"$tNormal)\n" 
	msg "\033[1;37m  SendTelegram=0   \033[0m keine Benachrichtigung via \"Telegram\" vom User \"pi\" senden" "\033[0m"
	msg "\033[1;37m  TToken_hbridge_new= \t\033[0m den Telegram-API Token eintragen" "\033[0m"
	msg "\033[1;37m  TChat_ID_hbridge_new=\t\033[0m die Telegram Chat-ID für den \"bot Chat\" eintragen" "\033[0m"
	msg "\033[1;37m  TeleAnhang= \t\033[0m eine Datei die per Telegram gesendet werden soll" "\033[0m"
	msg "\033[1;37m  TelePhoto=\t\033[0m ein Bild das per Telegram gesendet werden soll" "\033[0m"
	msg "\033[1;37m  Logfile=\"\"\t$tNormal aktiviert das loggen in eine Datei (verzögert die Anzeige etwas) bzw. \"journal\" in syslog" "\033[0m"
    msg "\033[1;37m  hb_ServicesRestart=\t$tNormal 1=starten/stoppen, 0= nicht starten/stoppen der homebridge Dienste"
	msg "\033[1;37m  Distri=\"\"\t$tNormal das aktuelle System festlegen, \"Raspbian\" für Raspberry oder \"Debian\" für Debx86" "\033[0m"
	msg ""
	msg "Als letzte stabile Version hat sich erwiesen:"
	msg "- Node: $stab_nodeVersion"
	msg "- NPM: $stab_npmVersion"
	msg "- homebridge: $stab_hbVersion"
	msg "- deConz (Raspberry): $stab_deCONZVersion"
	msg "- deConz (Debian)...: $stab_deCONZVersionDeb"	
	msg ""
	if [ "$hb_ServicesRestart" = "1" ]; then
	  hb_Services start
	fi
    exitCode=1
	;;

esac

done
	if [ "$hb_ServicesRestart" = "1" ]; then
	  inquire "Die HomeBridge-Dienste jetzt starten \033[0;32m(j) $tNormal"
	  if [ "$answer" = "" -o "$answer" = "y" ];then
	    hb_Services start
	  fi
	fi
	cd $HOME

exit $exitCode


