Inhaltsverzeichnis

Isdn

Wenn man eine ISDN-Karte im VDR verbaut, dann können Informationen zu Anrufern am Fernseher angezeigt werden.
Hier eine Anleitung dazu.

AB Ubuntu 11.04 werden nur noch wenige ISDN-Geräte unterstützt, daher nicht mehr weiter aktualisiert.

Vorbereitungen

Damit die ISDN-Karte unter Ubuntu läuft, benötigen wir das Kernel-Modul fcpci.
Zunächst installieren wir benötigte Pakete.

apt-get install build-essential linux-headers-$(uname -r) capiutils libcapi20-3 libcapi20-dev pppdcapiplugin

Nun werden die Quellen geholt und installiert.

mkdir -p /data/installfiles/isdn
cd /data/installfiles/isdn
#Bis Ubuntu 10.04
wget https://belug.de/~lutz/pub/fcpci/fritz-fcpci-src-2.6.31_untested.tar.bz2

#Ab Ubuntu 10.10
wget https://belug.de/~lutz/pub/fcpci/fritz-fcpci-2.6.34.tar.bz2

Bevor das Quellpaket installiert wird müssen noch Anpassungen zum Laden der Kernel-Module gemacht werden.

vi /etc/modules
capidrv
capi
fcpci
vi /etc/modprobe.d/blacklist-avmfritz.conf
blacklist avmfritz
blacklist mISDNipac
blacklist mISDN_core
blacklist hisax
blacklist hisax_fcpcipnp
blacklist hisax_isac

Nun noch ein Reboot damit die Änderungen wirksam werden.

shutdown -r now

Jetzt installieren wir die Quellpakete

cd /usr/local/src
tar xfz /data/installfiles/isdn/fritz-fcpci-<VERSION>.tar.bz2
cd fritz-fcpci-2.6.34/src
make clean && make -j2 all

Bis Ubuntu 10.04 muss eine Verlinkung vorgenommen werden. Ab Ubuntu 10.10 ist dies nicht mehr nötig.

cd lib
rm fcpci-lib.o 
ln -s 32_fcpci-lib.o fcpci-lib.o

ODER

ln -s 64_fcpci-lib.o fcpci-lib.o
mkdir /lib/modules/`uname -r`/extra
cp fcpci.ko /lib/modules/`uname -r`/extra/
depmod -a

Nun testen wir ob sich das Modul laden lässt.

modprobe -rf fcpci
modprobe -v fcpci

Capi einrichten

vi /etc/isdn/capi.conf
Zeile mit "fcpci" entkommentieren
capiinit
capiinfo

Ausgabe sollte so aussehen:

Number of Controllers : 1
Controller 1:
Manufacturer: AVM GmbH
CAPI Version: 2.0
Manufacturer Version: 3.11-07  (49.23)
Serial Number: 1000001
BChannels: 2
Global Options: 0x00000039
   internal controller supported
   DTMF supported
   Supplementary Services supported
   channel allocation supported (leased lines)
B1 protocols support: 0x4000011f
   64 kbit/s with HDLC framing
   64 kbit/s bit-transparent operation
   V.110 asynconous operation with start/stop byte framing
   V.110 synconous operation with HDLC framing
   T.30 modem for fax group 3
   Modem asyncronous operation with start/stop byte framing
B2 protocols support: 0x00000b1b
   ISO 7776 (X.75 SLP)
   Transparent
   LAPD with Q.921 for D channel X.25 (SAPI 16)
   T.30 for fax group 3
   ISO 7776 (X.75 SLP) with V.42bis compression
   V.120 asyncronous mode
   V.120 bit-transparent mode
B3 protocols support: 0x800000bf
   Transparent
   T.90NL, T.70NL, T.90
   ISO 8208 (X.25 DTE-DTE)
   X.25 DCE
   T.30 for fax group 3
   T.30 for fax group 3 with extensions
   Modem

  0100
  0200
  39000000
  1f010040
  1b0b0000
  bf000080
  00000000 00000000 00000000 00000000 00000000 00000000
  01000001 00020000 00000000 00000000 00000000

Supplementary services support: 0x000003ff
   Hold / Retrieve
   Terminal Portability
   ECT
   3PTY
   Call Forwarding
   Call Deflection
   MCID
   CCBS

Darauf achten, dass 2 B-Kanäle (BChannels) erkannt werden!

Einwahl testen

Testeinwahl auf eine Handynummer.

cp /etc/ppp/peers/provider /etc/ppp/peers/provider-ori
vi /etc/ppp/peers/provider

Inhalt:

debug
sync
noauth
-chap
user netways
plugin userpass.so
password netways
defaultroute
plugin capiplugin.so
#controller 1
#numberprefix 0
number <EINWAHLNUMMER>
protocol hdlc
ipcp-accept-local
ipcp-accept-remote
/dev/null

Einwählen mit

pon

Abwahl mit

poff

oder

killall pppd

VDR konfiguration

apt-get install isdnlog
shutdown -r now

Nun einfach mal einen Anruf vom Handy tätigen und testen

tail -f  /var/log/isdn/isdnlog

ODER

tail -f /var/lib/isdn/calls

Hier muß dann angezeigt werden dass die Handynummer angerufen hat.

vi /etc/isdn/isdnlog.isdnctrl0

Inhalt:

start=yes</code

ISDNLog kann folgendermaßen gestoppt/gestartet werden
  service isdnutils stop isdnlog
  service isdnutils start isdnlog
ODER
  service isdnutils restart

  vi /etc/isdn/callerid.conf
<code>[MSN]
NUMBER=1859747
ALIAS=Mein Telefon
START={
        [FLAG]
        FLAGS=IR
#        PROGRAM=/usr/local/bin/displaymsg "Anruf von \"\$2\""
        PROGRAM=/usr/local/bin/svdrpsend.pl -d 127.0.0.1 -p 6419 MESG "Anruf von \"\$2\""
        TIME=8-23
}

Telefonnummer Rückwärtssuche

apt-get install lynx
vi /data/isdn/invsuche.sh

Inhalt:

#!/bin/bash
#pfad zum cachefile
CACHE="/tmp/invsuche"
#pfad zur svdrpsend.pl
SVDRPSEND="/usr/local/bin/svdrpsend.pl -d 127.0.0.1 -p 6419"
#pfad um das tempfile anzulegen
TMPFILE="/tmp/tmpsuche"
LOG="/tmp/invlog"
echo "Param1: $1 " >> $LOG
echo "Param2: $2 " >> $LOG
# Anzahl der Sekunden zwischen den Nachrichten
WAIT=5

NUMMER=`echo $1 | sed -e "s/\ //g" -e "s/+49/0/"`

echo "Suche nach $NUMMER im cache"
NAME=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $2 }' $CACHE`
DETAILS=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $3 }' $CACHE`
echo "Name: $NAME"
echo "Details: $DETAILS"
if [ "$NAME" == "" ]; then
    echo "Suche nach $NUMMER in [URL]www.dasoertliche.de[/URL]"

lynx "http://www.dasoertliche.de/Controller?form_name=search_inv&ph=$NUMMER" 
        -dump -nolist -connect_timeout=3>  $TMPFILE
        NAME=`grep RTRTRTRT -A 6 $TMPFILE | awk '{ if (FNR == 1) print $0 }' |  sed  -e "s/RTRTRTRT//" -e "s/\ \+//" -e "s/\ \+/\ /g" -e "s/\[_\]//g"`
        DETAILS=`grep RTRTRTRT -A 6 $TMPFILE | awk '{ if (FNR == 2) print $0 }' |  sed  -e "s/\ \+//" -e "s/\ \+/\ /g" -e "s/\[_\]//g"`

    if [ "$NAME" == "" ]; then
        if grep "Kein Teilnehmer gefunden" $TMPFILE > /dev/null; then
            NAME="Telefonnummer $NUMMER"
            DETAILS="Kein Eintrag $2"
        fi;
    fi;

    if [ "$NAME" == "" ]; then
        NAME="Telefonnummer $NUMMER"
        DETAILS="Fehler $2"
    else
        echo -e "$NUMMER\t$NAME\t$DETAILS" >> $CACHE
    fi;
    echo "Name: $NAME"
    echo "Details: $DETAILS"

fi
$SVDRPSEND "MESG Anruf von $NAME ..."
sleep $WAIT
$SVDRPSEND "MESG ... $DETAILS"
sleep $WAIT
$SVDRPSEND "MESG Anruf von $NAME ..."
sleep $WAIT
$SVDRPSEND "MESG ... $DETAILS"
vi /etc/isdn/callerid.conf

Inhalt:

PROGRAM=/data/isdn/invsuche.sh $2 $17