Svdrp-isdn-from-fli4l

Aus VDR Wiki
Version vom 8. April 2006, 09:21 Uhr von 84.186.47.41 (Diskussion)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Dieses Script kann über die commands.conf auf dem VDR aufgerufen werden. Es holt vom fli4l-Router Statusinformationen (z.B. uptime, DSL-Status incl. IP-Adresse) sowie die gespeicherten ISDN-Anrufe, ergänzt diese bei Bedarf um die Namen (Zuordnung in Datei /etc/vdr/phone.txt) und zeigt alle Informationen an.

Format der Telefonnummerdatei /etc/vdr/phone.txt:

nummer=name

Außerdem wird noch ein kleines C-Programm benötigt, das unter /usr/local/bin/tt erwartet wird (einfach als tt.c speichern)

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

// take seconds from first argument,
// subtract from actual localtime
// and print new time to stdout
int main (int argc, char* argv[])
{
  if (argc < 2)
    {
      fprintf (stderr, "usage: %s <sec>\n", argv[0]);
      exit(-1);
    }
  time_t now;
  time(&now);
  now -= atol(argv[1]);

  struct tm *x = localtime(&(now));
  fprintf (stdout, "%s", asctime(x));
}

kompilieren:

gcc -o tt tt.c

Hier das Script:

#!/bin/sh

host=fli4lHost
port=5000 

cmd="nc -w 2 $host $port"

tmp=/tmp/vdrFli4l
phone=/etc/vdr/phone.txt

export COLUMNS=512

lines=20

rm -f $tmp
##############################################
# get uptime from router
##############################################
seconds=`\
{
echo uptime
echo quit
} | $cmd | awk '{print substr($2,1,length($2)-1);}'` 

uptime=`/usr/local/bin/tt $seconds`

##############################################
# get status of pppoe device
############################################## 

statusDSL=`\
{
echo status pppoe
echo quit
} | $cmd | awk '{print substr($2,1,length($2)-1);}'`

##############################################
# get ip of pppoe device
##############################################
ipDSL=`\
{
echo ip pppoe
echo quit
} | $cmd | awk '{print substr($2,1,length($2)-1);}'`

##############################################
printf "*************************************
Router
*************************************
Up since $uptime
DSL: ${statusDSL}"

if [ "$statusDSL" = "Online" ]
then
    printf " (IP: $ipDSL)"
fi

printf "
*************************************
Calls
*************************************\n"
{
echo telmond-log-file
echo quit
} | $cmd | grep -v OK | sort -r | sed -e 's/ /=/g' > $tmp 
 
awk '
BEGIN { FS="="; } 

FILENAME ~ /phone/\
 {
     phonebook[$1] = $2;
 } 

FILENAME ~ /tmp/\
 {
     number=$4;
     caller=phonebook[number];
     if (caller == "")
        caller=number;
     printf ("%s %s  %s\n", $2, $3, caller);
 }
' $phone $tmp
  
printf "*************************************\n"