Der Voice-over-IP Dienstleister Sipgate,
http://www.sipgate.de bietet ja an, nach einem Login oder durch Einbau von HTML-Code z. B. auf der eigenen Homepage Kenntnis über den Online-Status bei Sipgate zu erlangen. Das ist nett aber nicht bequem und so habe ich mir was ausgeklügelt, um Statuswechsel mit der Benennung des aktuellen Status mailen zu lassen.
Wie's funktioniert:
Das Script hat lokal beide Versionen der Status-Grafiken im Arbeitsverzeichnis gespeichert. Beim ersten Aufruf werden zwei Kopien der bei Sipgate aktuell downloadbaren Grafik in /tmp gespeichert. Sie dienen als Referenz um Aussagen über alten und neuen Status zu machen. Ab jetzt wird bei einem Aufruf die aktuelle Grafik von Sipgate geholt und ersetzt die aktuelleste Referenzdatei. Wenn sich aktuelleste und ältere Referenzdatei unterscheiden, hat es einen Statuswechsel gegeben und das script kopiert die aktuelleste Referenzdatei nach der älteren Referenzdatei, danach prüft es, ob die aktuelle Referenzdatei der im Arbeitsverzeichnis vorliegenden Online- oder Offline-Grafik gleicht und kann so den neuen Status ermitteln und meldet dies.
Wenn es nichts zu melden gibt, gibt es auch keine Ausgabe. Wenn die Grafik von Sipgate nicht geholt werden kann, gibt es eine Warnung. Danach keine weiteren bis zum nächsten Statuswechsel.
Statusänderungen ohne Download der Grafik von Sipgate können mangels Glaskugeldevice nicht festgestellt werden.
Im Zweifel musst Du Dich selbst auf Deiner Sipgate-Nummer anrufen!
Wenn du dieses Script nutzen möchtest, brauchst du also noch drei zusätzliche Dinge, die ich hier nicht zur Verfügung stellen kann und die Dir bereitstehen, wenn Du Dich bei Sipgate eingeloggt hast:
- URL
Online-Grafik
Offline-Grafik
Im "Status" Kasten rechts in der "Endgerät (Details): online <grafik>" Zeile kannst du auf Details oder auf die Grafik klicken und es poppt ein neues Fenster auf. Hier findest du den HTML-Code, für dieses Script brauchst du nur den URL der in doppelten Anführungszeichen steht, den kopierst du in eine Datei mit Namen "url". Weiter brauchst du noch die blaue (für online) und graue (fuer offline) Version der Grafik, die durch diesen URL den aktuellen Zustand abbildet und speicherst die Datei jeweils unter offline-Voip.gif und online-Voip.gif. Wenn du den URL schon in der Datei "url" gespeichert hast, geht das ganz einfach durch
Du musst also selbst dafür sorgen, dass Du neben den Online-Status und der dazugehörigen Datei einen Offline-Status provozierst und die dazugehörige Datei bekommst.
BTW: Doppelte Anführungszeichen indizieren hier etwas und sind nicht Bestandteil des Indizes!
BTW2: Einfache Anführungszeichen sind backtickets und wenn du nicht weisst was das ist, hilft dir die Suche danach
hier und bei $suchmachine!
FYI: Der Link sieht ziemlich kryptisch aus:
http://www.sipgate.de:<portnummer>/<Unterverzeichnis>/<Dateiname>
wobei Unterverzeichnis und Dateiname aus lauter alphanumerischen Zeichen (Zahlen und Buchstaben) bestehen, er zielt aber auf eine GIF-Grafik.
Die Mailfunktion habe ich nicht eingebaut, wenn man das Script in der vorliegenden Form als cronjob aufruft, bekommt man automatisch Mail, wenn's was zu melden gibt.
Wie der cronjob einzurichten ist, steht in den ersten Zeilen des scripts als Bemerkung.
Wenn du das nicht möchtest, lies den Code und passe die echo-Ausgaben an und lösche ggfs die semaphoren-Datei bezogenen Zeilen, dies script ist aus einer Abfrage/Ausgabe-Version hervorgegangen und die Anpassung hat Vorlagen, sollte also nicht allzu schwierig sein...
Wenn Fragen auftauchen, die Du alleine nicht lösen kannst, schreib' mir eine Mail, wenn's von allgemeinen Interesse ist, mache ich eine FAQ.
Code: Select all
#!/bin/sh
#
# check_voip-status.sh
#
# Info:
# Makes use of the GIF sipgate offers to be shown e. g. at your homepage.
# Get the information by logging in and click at your status picture. Extract
# the url and copy it to the file named url this script uses.
# Also download the GIF for online and offline-status from sipgate and name
# them to online-Voip.gif and offline-Voip.gif
# These three files must be placed at the same directory as this script
# Put them to an own directory e.g. to bin/voip at your home directory.
#
# Function:
# checks current VoIP status and compares with the state before.
# If state has changed it is printed else not.
# If current state GIF cannot be fetched, a warning is printed once until
# it is available again and unavailable thereafter.
# Can be part of a cronjob:
# # check VoIP status changes
# */5 * * * * /home/killerhippy/bin/voip/check_voip-status.sh
# This checks every 5 minutes.
# If used this way, you get mail if the status has changed.
# If used at the command line, it prints nothing or the status change
# information or the warning if your GIF is not available, but only the first
# time and once again if status has changed and becomes unavailable again - this
# is to avoid mass mails if used by cronjob.
#
# files in this directory:
# offline-Voip.gif 673 bytes GIF when offline
# online-Voip.gif 1072 bytes GIF when online
# url contains url to get GIF from your sipgate account
#
# files being placed by this script in /tmp:
# /tmp/voip-status/ own directory to separate from others
# /tmp/voip-status/old_current.gif old state indicating GIF
# /tmp/voip-status/very_current.gif current state indicating GIF
# /tmp/voip-status/status_not_available GIF currently not available semaphore
#
# Author : Sascha Wuestemann
# Version: 0.1
# Date : 2006-04-11
# Licence: GNU GPL v2 see http://www.gnu.org if not enclosed.
# change to working directory
# adjust if nescessary
cd ~/bin/voip/
# subcommand to get GIF saved as by given name
GET_GIF () {
wget -O /tmp/voip-status/$1 --quiet `cat url`
}
# make own directory if nescessary
if [ ! -d /tmp/voip-status ]; then
mkdir /tmp/voip-status
fi
# check for existence of old_current GIF, if not there get it
if [ ! -e /tmp/voip-status/old_current.gif ]; then
if GET_GIF old_current.gif; then
echo "fetched initial GIF" >/dev/null
if [ -e /tmp/voip-status/status_not_available ]; then
rm /tmp/voip-status/status_not_available
fi
cp /tmp/voip-status/old_current.gif \
/tmp/voip-status/very_current.gif
else
if [ ! -e /tmp/voip-status/status_not_available ]; then
touch /tmp/voip-status/status_not_available
echo "Initial VoIP status not available"
exit 1
else
exit 0
fi
fi
fi
# get current GIF or warn
if GET_GIF very_current.gif; then
echo "fetched current GIF" >/dev/null
if [ -e /tmp/voip-status/status_not_available ]; then
rm /tmp/voip-status/status_not_available
fi
else
if [ ! -e /tmp/voip-status/status_not_available ]; then
touch /tmp/voip-status/status_not_available
echo "Current VoIP status not available"
exit 1
else
exit 0
fi
fi
# check differences between GIFs
if diff /tmp/voip-status/old_current.gif \
/tmp/voip-status/very_current.gif > /dev/null ; then
echo "Status has not changed." >/dev/null
else
cp /tmp/voip-status/very_current.gif /tmp/voip-status/old_current.gif
echo "Current VoIP status has changed"
if diff /tmp/voip-status/very_current.gif \
online-Voip.gif >/dev/null ; then
echo "New status: We are online"
fi
if diff /tmp/voip-status/very_current.gif \
offline-Voip.gif >/dev/null; then
echo "New status: We are offline"
fi
fi
exit 0