DBLOG Externe Datenbank Raspberry & Fritzbox und fhem is running

Begonnen von magentouser, 18 Januar 2016, 12:10:43

Vorheriges Thema - Nächstes Thema

magentouser

Hallo, hatte das Problem das keine Logs in externe db geschrieben wurden sobald ein Reconnect war, bzw das Fhem ausgefallen ist.

meine Lösung mit Raspi & Fritzbox 4790 und Fritzos 6.50

1. die Datei die Prüft ob Internet ausgefallen war bzw. fhem läuft.
$ mkdir /opt/hostping
$ cd/opt/hostping
$ nano hostping

#!/bin/bash
# check and log Internetverbindung & Fhem Status
#CONFIGURATION

#path to logfile
LOGFILE="/var/log/watchip.log"
#Wie aller wieviel Secunden soll geprüft werdem
PAUSE=30
#Database
host=host.de
user=user
password="password"
database="database"
#wie lang braucht fhem zum starten in sekunden
FHEMTIMESTART=90
# wie lang braucht fhem zum runterfahren in sekunden
FHEMTIMESHUT=10
#wie groß soll die DIFFerenz zwischen DB zeit der letzten eintragung und der aktuellen zeit sein. in sekunden
TIMEDIFF=30
#nicht unbedingt ändern
TESTS=1
NEWSTART=0
MISSED=0
SERVERUPTIME=90
SERVERSTATE=Connected
touch $LOGFILE
while true; do
cnt=`ps -ef | grep "fhem.pl" | grep -v grep | wc -l`
CONNECTION=$(curl -s "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetStatusInfo" -d "@connection_state.xml" | sed -n 's/^.*<\(NewConnectionStatus\)>\([^<]*\)<\/.*$/\2/p')
UPTIME=$(curl -s "http://fritz.box:49000/igdupnp/control/WANIPConn1" -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:schemas-upnp-org:service:WANIPConnection:1#GetStatusInfo" -d "@connection_state.xml" | sed -n 's/^.*<\(NewUptime\)>\([^<]*\)<\/.*$/\2/p')
UPTIMEFORMAT=$((UPTIME / 3600)):$((UPTIME % 3600 / 60)):$((UPTIME % 3600 % 60 ))
#echo $CONNECTION;
#echo $UPTIME;
if [ $NEWSTART -eq "0" ];then
((NEWSTART++))
echo `date` '-' "Script gestartet und Verbunden seit:" $UPTIMEFORMAT>> $LOGFILE;
fi
if [ $CONNECTION == $SERVERSTATE ];then
SQLTIMET=$( echo "SELECT DataStore_TIME FROM DataStore ORDER BY DataStore_TIME DESC LIMIT 0,1" | mysql $database --host=$host  --user=$user --password=$password)
SERVERTIMEB=$(date "+%H:%M:%S")
SQLTIMEB=$(echo $SQLTIMET |cut -d " " -f3)
SERVERTIME=$(date +%s -d $SERVERTIMEB)
SQLTIME=$(date +%s -d $SQLTIMEB)
SQLTIMESOLL=$(( $SQLTIME + $TIMEDIFF))
SERVERTIMEFORMAT=$((SERVERTIME / 3600)):$((SERVERTIME % 3600 / 60)):$((SERVERTIME % 3600 % 60 ))
SQLTIMEFORMAT=$((SQLTIME / 3600)):$((SQLTIME % 3600 / 60)):$((SQLTIME % 3600 % 60 ))
SQLTIMESOLLFORMAT==$((SQLTIMESOLL / 3600)):$((SQLTIMESOLL % 3600 / 60)):$((SQLTIMESOLL % 3600 % 60 ))
echo `date` '-' "MYSQL Server Laeuft SOLL" $SQLTIMESOLLFORMAT "-ist" $SQLTIMEFORMAT "- ZEIT" $SERVERTIMEFORMAT>> $LOGFILE;
if [ $UPTIME -lt $SERVERUPTIME ];then
echo `date` '- Verbunden seit:' $UPTIMEFORMAT "- Internet is up again." >> $LOGFILE;
sh /etc/init.d/fhem stop &>/dev/null &
                sleep $FHEMTIMESHUT
                  sh /etc/init.d/fhem start &>/dev/null &
sleep $FHEMTIMESTART
else
if [ "$cnt" -eq "0" ] ; then
echo `date` '-' "FHEM NOT Running" >> $LOGFILE;
              sh /etc/init.d/fhem start &>/dev/null &
else
if [ $SQLTIMESOLL -le $SERVERTIME ];then
                                        echo `date` '-' "MYSQL Server zu alt SOLL" $SQLTIMESOLLFORMAT "-ist" $SQLTIMEFORMAT "- ZEIT" $SERVERTIMEFORMAT>> $LOGFILE;
                                  sh /etc/init.d/fhem stop &>/dev/null &
                                sleep $FHEMTIMESHUT
                                sh /etc/init.d/fhem start &>/dev/null &
slepp $FHEMTIMESTART
fi
fi
fi
else
if [ "$cnt" -eq "0" ] ; then
echo `date` '-' "FHEM NOT Running" >> $LOGFILE;
              sh /etc/init.d/fhem start &>/dev/null &
sleep $FHEMTIMESHUT
fi
echo `date` "-"  "Internet is down. - State:" $CONNECTION  "- Uptime:" $UPTIMEFORMAT>> $LOGFILE;

fi
sleep $PAUSE;

done



$ chmod +x hostping
$ nano connection_state.xml
<?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:GetStatusInfo xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1" />
  </s:Body>
</s:Envelope>


$ nano dbfehm
#!/bin/bash
### BEGIN INIT INFO
# Provides:          Für welches Programm ist das Script?
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Prüft ob eine Internetverbindung da ist wenn nein dann neustart fhem
# Description:       Längere Beschreibung
### END INIT INFO

INSTANZ="Ping Datenbankserver"
BPDIR=/opt/hostping
Pidfile=/opt/hostping/bsp.pid

if [ -f $Pidfile ]
then
Pid=`cat $Pidfile`
fi

case "$1" in
'start')
if [ -f $Pidfile ] ; then
if test `ps -e | grep -c $Pid` = 1; then
echo "Not starting $INSTANZ - instance already running with PID: $Pid"
else
echo "Starting $INSTANZ"
cd $BPDIR
nohup ./hostping &> /dev/null &
echo $! > $Pidfile
fi
else
echo "Starting $INSTANZ"
cd $BPDIR
nohup ./hostping &> /dev/null &
echo $! > $Pidfile
fi
;;

'stop')
if [ -f $Pidfile ] ; then
echo "stopping $INSTANZ"
kill -15 $Pid
else
echo "Cannot stop $INSTANZ - no Pidfile found!"
fi
;;

'restart')
$0 stop
sleep 5
$0 start
;;

'status')
if [ -f $Pidfile ] ; then
if test `ps -e | grep -c $Pid` = 0; then
echo "$INSTANZ not running"
else
echo "$INSTANZ running with PID: [$Pid]"
fi
else
echo "$Pidfile does not exist! Cannot process $INSTANZ status!"
exit 1
fi
;;

*)
echo "usage: $0 { start | stop | restart | status }"
;;

esac
exit 0

$ chmod +x dbfehm

nun Testen ob das geht
$ ./dbfehm start

wenn alles gut aussieht dann
$ ./dbfehm stop
$ sudo cp dbfhem /etc/init.d/dbfhem
$ sudo chmod +x /etc/init.d/dbfhem
$ sudo update-rc.d dbfhem defaults
$ sudo $ /etc/init.d/dbfhem start

fertig

Quelle Original Start Stop Scriptanleitung http://jankarres.de/2014/07/raspberry-pi-autostart-von-programmen-einrichten/