#!/bin/bash
#
# Name: fritzbox-reboot.sh
# Version: 0.1.4 
# Autor: det & Nastra (SmartApfel Forum)
# Credits: Vielen Dank an @nicoh88 (https://github.com/nicoh88/cron_fritzbox-reboot)
#
# Beschreibung: Reboot der AVM Netzwerkgeräte und Benachrichtigung über Telegram


############################## Hinweise ############################

# Allgemein:
# Skript funktioniert ab FritzOS 6.0 es wird Protokoll TR-064 verwendet

# http://fritz.box:49000/tr64desc.xml
# https://wiki.fhem.de/wiki/FRITZBOX#TR-064
# https://avm.de/service/schnittstellen/

# Allgemein:
# Das Skript ist ausgelegt mit der hbridge.cfg Config eingerichtet zu werden, es kann aber auch ohne diese benutzt werden wenn die entsprechenden Daten hier im Skript angegeben werden.
# Das Skript ist Multiuser tauglich und funktioniert auch mit anderen Usern als "pi" dafür  (sudo nano /etc/systemd/system/fritzbox-reboot.service) aufrufen und die im Abschnitt [Service] User=pi gegen User=xxxx ersetzen. 
# Ebenfalls sollte darauf geachtet werden das im Usernamen vom Benutzerkonto keine Großbuchstaben verwendet werden.

# Abschnitt Nachrichtentext:
# Hier wird der Text für die Telegram Nachricht festgelegt.

# Abschnitt Geräte:
# Hier werden die IP´s der Geräte angegeben.

# Abschnitt Gerätelogin:
# Hier muss der Username und das Passwort der FritzBox angegeben werden. 
# Bei AVM Repeatern ist es nicht möglich einen Usernamen anzulegen, daher sind diese mit dem gleichen Passwort wie die FritzBox einzurichten.
# Werden nur Repeater genutzt ohne eine FitzBox wird bei Username <root> angegeben.

# Abschnitt Telegram Config:
# Hier wird der Telegram Token und die ChatID eingetragen.

# Abschnitt Vorbereitung Reboot:
# Hier wird der Zeitraum festgelegt wie lange es dauert navh dem stoppen der Homebridge bis der Reboot gestartet wird.

# Abschnitt Nachbereitung Reboot:
# Hier wird der Zeitraum festgelegt wie lange es dauert bis die Homebridge nach dem Reboot wieder gestartet wird.


######################## Programm-Ordner festlegen ######################

toolDir=$HOME/hbridge_install


################## Pfad Config Datei (hbridge.cfg) #################

[ -f $toolDir/hbridge.cfg ] && . $toolDir/hbridge.cfg


######################### Nachrichtentext #########################

nachricht1="Neustart der Netzwerkgeräte beginnt jetzt!"
nachricht2="Neustart der Netzwerkgeräte ist abgeschlossen!"


############################### Geräte #############################

# FritzBox
#FritzBox_IP="192.168.x.x"

# FritzRepeater
#FritzRepeater_IP="192.168.x.x 192.168.x.xx 192.168.x.xx"

# Auslesen hbridge.cfg (Hier nichts ändern!)
if [ "$FritzBox_IP" == "" ] && [ "$FritzRepeater_IP" == "" ]; then
echo -e "Bitte die Variable \"FritzBox_IP\" oder/und \"FritzRepeater_IP\" in der Datei \"/home/UserName/hbridge_install/hbridge.cfg\" setzen !" 2>&1
exit 252
fi


############################ Gerätelogin ###########################

#Fritz_User=""
#Fritz_Passwort=""

# Auslesen hbridge.cfg (Hier nichts ändern!)
if [ "$Fritz_Passwort" == "" ] || [ "$Fritz_User" == "" ]; then
echo -e "Bitte die Variablen \"Fritz_User\" und \"Fritz_Passwort\" in der Datei \"/home/UserName/hbridge_install/hbridge.cfg\" setzen !" 2>&1
exit 253
fi


########################### Telegram Config #########################

#TToken_fritz=									# Token für Telegram API
#TChatID_fritz=	 								# CHAT ID für Telegram bot Chat

# Auslesen hbridge.cfg (Hier nichts ändern!)
if [ "$TChatID_fritz" == "" -o "$TToken_fritz" == "" ] && [ "$SendTelegram" == "1" ]; then
echo -e "Bitte die Variablen \"TToken_fritz\" und \"TChatID_fritz\" in der Datei \"/home/UserName/hbridge_install/hbridge.cfg\" setzen !" 2>&1
exit 254
fi


######################### Vorbereitung Reboot ########################

cd /etc/systemd/system
sudo systemctl stop homebridge*
sleep 15


###################### Start Nachricht an Telegram ####################

if [ "$SendTelegram" == "1" ]; then
  /usr/bin/curl -s -X POST https://api.telegram.org/bot$TToken_fritz/sendMessage -d chat_id="$TChatID_fritz" -d text="$nachricht1" > /dev/null
fi


######################## Netwerkgeräte Reboot ######################

location="/upnp/control/deviceconfig"
uri="urn:dslforum-org:service:DeviceConfig:1"
action='Reboot'

if [ "$FritzBox_IP" != "" ]; then
  for IP in ${FritzBox_IP}; do
    curl -k -m 5 --anyauth -u "$Fritz_User:$Fritz_Passwort" http://$IP:49000$location -H 'Content-Type: text/xml; charset="utf-8"' -H "SoapAction:$uri#$action" -d "<?xml version='1.0' encoding='utf-8'?><s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body><u:$action xmlns:u='$uri'></u:$action></s:Body></s:Envelope>" -s > /dev/null
  done
fi

if [ "$FritzRepeater_IP" != "" ]; then
  for IPR in ${FritzRepeater_IP}; do
    curl -k -m 5 --anyauth -u "root:$Fritz_Passwort" http://$IPR:49000$location -H 'Content-Type: text/xml; charset="utf-8"' -H "SoapAction:$uri#$action" -d "<?xml version='1.0' encoding='utf-8'?><s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body><u:$action xmlns:u='$uri'></u:$action></s:Body></s:Envelope>" -s > /dev/null
  done
fi


######################### Nachbereitung Reboot ########################

cd $HOME
sleep 240
sudo systemctl restart homebridge*


######################## Ende Nachricht an Telegram ######################

if [ "$SendTelegram" == "1" ]; then
  /usr/bin/curl -s -X POST https://api.telegram.org/bot$TToken_fritz/sendMessage -d chat_id="$TChatID_fritz" -d text="$nachricht2" > /dev/null
fi

exit