#!/bin/sh
#
# Solar-Logger - A Daemon for logging Data from a Solar Plant
# Copyright (C) 2007  Klaus Dotterweich (dr.dotti@gmx.de)
#
# This program is free software; you can redistribute it and/or modify it under the terms of the
# GNU General Public License as published by the Free Software Foundation;
# either version 3 of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with this program;
# if not, see <http://www.gnu.org/licenses/>.
#
# Solar-Logger - Ein Daemon zum loggen der Daten einer Solaranlage
# Copyright (C) 2007  Klaus Dotterweich (dr.dotti@gmx.de)
#
# Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License,
# wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren,
# entweder gemäß Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.
#
# Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird,
# aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder
# der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.
#
# Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm erhalten haben.
# Falls nicht, siehe <http://www.gnu.org/licenses/>.
#



PruefText='Solar-Logger -d'														# Dieser Text wird in der Ausgabe von ps fx gesucht (Achtung!!! Der Text muss eindeutig sein!!!)
WatchdogZeit=1																	# Intervall in Minuten in der der der Watchdog die Watchdog Datei Überprüft
StartZeit=5																		# Zeit in Minuten nachdem der Solar-Logger gestartet werden soll wenn sich die Watchdog Datei nicht mehr geändert hat.
StartBefehl='/root/Solar-Logger-0.3/README/ProzessWatchdogWatchdog/Solar-Logger-Start.sh'		# Befehl zum starten des Solar-Loggers							

Loggen="DEBUG"																	# Um alles zu Loggen "DEBUG" und nur sinnvolle Sachen zu Loggen "JA"
LogPfad='/root/Solar-Logger-0.3/DebugLog/Watchdog/'								# Pfad der Datei in die geloggt werden soll
LogDateiName='Solar-Logger-Watchdog.log'										# DateiName der LogDatei



LogDatei=$LogPfad`date '+%d.'`$LogDateiName										# Datei in die geloggt werden soll

#######################
# Startzeit des Skriptes Merken
#######################
ZeitstempelStart=`date '+%s'`



###########################################
# Überprüfe ob der Watchdog schon läuft
###########################################
#if [ -f /var/run/Solar-Logger-Watchdog.pid ]
#then
#	if ([ $Loggen == "DEBUG" ] || [ $Loggen == "JA" ])
#	then
#		echo `date '+%d.%m.%y %T'`: Watchdog ist bereits gestartet. >> $LogDatei
#	fi
#	exit
#else
#	echo $$ > /var/run/Solar-Logger-Watchdog.pid
#fi



#####################
# Start des Watchdog loggen
#####################
if ([ $Loggen == "DEBUG" ] || [ $Loggen == "JA" ])
then
	echo `date '+%d.%m.%y %T'`: Watchdog gestartet. >> $LogDatei
	echo `date '+%d.%m.%y %T'`: WatchdogZeit is $WatchdogZeit in Minuten. >> $LogDatei
	echo `date '+%d.%m.%y %T'`: StartZeit is $StartZeit in Minuten. >> $LogDatei
fi



TempStartZeit=$StartZeit									# Die Zeit zum Starten des Solar-Loggers wieder zurücksetzen

#####################
# Programmschleife
#####################
while [ true ]
do
	LogDatei=$LogPfad`date '+%d.'`$LogDateiName								# Datei in die geloggt werden soll

	#######################
	# Startzeit der Schleifen Merken
	#######################
	ZeitstempelStartSchleife=`date '+%s'`

	# Überprüfen ob der Solar-Logger Prozess läuft
	ps fx | grep -v grep | grep "$PruefText" > /dev/null
	if [ $? -eq 0 ]
	then
		# Wenn der PruefText gefunden wurde (Solar-Logger läuft)
		TempStartZeit=$StartZeit									# Die Zeit zum Starten des Solar-Loggers wieder zurücksetzen
		if [ $Loggen == "DEBUG" ]
		then
			echo `date '+%d.%m.%y %T'`: Der Solar-Logger läuft. >> $LogDatei
			echo `date '+%d.%m.%y %T'`: Die TempStartZeit beträgt $TempStartZeit. >> $LogDatei
		fi
	else
		# Wenn der PruefText nicht gefunden wurde (Solar-Logger läuft nicht)
		TempStartZeit=`/usr/bin/expr $TempStartZeit - $WatchdogZeit`
		if ([ $Loggen == "DEBUG" ] || [ $Loggen == "JA" ])
		then
			echo `date '+%d.%m.%y %T'`: Der Solar-Logger läuft nicht. >> $LogDatei
			echo `date '+%d.%m.%y %T'`: Die TempStartZeit beträgt $TempStartZeit. >> $LogDatei
		fi
	fi
	
	# Überprüfe ob StartZeit abgelaufen ist
	if [ $TempStartZeit -le 0 ]
	then
		# Wenn StartZeit abgelaufen ist
		if ([ $Loggen == "DEBUG" ] || [ $Loggen == "JA" ])
		then
			echo `date '+%d.%m.%y %T'`: Die TempStartZeit ist abgelaufen. Der Startbefehl wird ausgeführt. >> $LogDatei
		fi
		# Solar Logger starten
		$StartBefehl
		# 10 Minuten schafen gehen damit der Logger sicher starten kann
		if ([ $Loggen == "DEBUG" ] || [ $Loggen == "JA" ])
		then
			echo `date '+%d.%m.%y %T'`: Watchdog legt sich für `/usr/bin/expr 10 \* 60` Sekunden schlafen. >> $LogDatei
		fi
		sleep `/usr/bin/expr 10 \* 60`
	fi

	#######################
	# Endezeit der Schleifen Merken
	#######################
	ZeitstempelEndeSchleife=`date '+%s'`

	#################################################
	# SchleifenZeit berechnen
	#################################################
	SchleifenZeit=`/usr/bin/expr $ZeitstempelEndeSchleife - $ZeitstempelStartSchleife`
	if [ $Loggen == "DEBUG" ]
	then
		echo `date '+%d.%m.%y %T'`: Die Schleifenzeit beträgt $SchleifenZeit. >> $LogDatei
	fi

	#  Den Watchdog schlafen legen
	if [ $Loggen == "DEBUG" ]
	then
		echo `date '+%d.%m.%y %T'`: Watchdog legt sich für $WatchdogZeit Minuten schlafen. >> $LogDatei
		echo `date '+%d.%m.%y %T'`: Watchdog legt sich für `/usr/bin/expr $WatchdogZeit \* 60` Sekunden schlafen. >> $LogDatei
	fi
	sleep `/usr/bin/expr $WatchdogZeit \* 60`

done