Svdrp-isdn-from-fli4l

Материал из RuVDRWiki

Перейти к: навигация, поиск

Этот скрипт можно вызвать с помощью commands.conf в меню VDR.Скрипт считывает в маршрутезаторе fli4l сведения статуса как :uptime,статус DSL,IP-адрес и сохранённые ISDN-звонки.При необходимости дополняет данные по именам в /etc/vdr/phone.txt и показывает все сведения.

Формат файла /etc/vdr/phone.txt:

номер=имя

Кроме того нужна ещё маленькая C-программа, которая ожидается в /usr/local/bin/tt (сохраните просто как tt.c).

#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));
}

компилируем:

gcc -o tt tt.c

Ну и сам скрипт:

#!/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"
Личные инструменты