FLI4l Telmonc/vbox-Plugin

Games, Plugins, Utils, Tools, 3rdParty, etc...
tetzlav
Einsteiger
Einsteiger
Beiträge: 131
Registriert: Dienstag 6. April 2004, 12:08

FLI4l Telmonc/vbox-Plugin

Beitrag von tetzlav »

Ich hab gerade mal wieder etwas Zeit gefunden mein telmonc-Script zu überarbeiten und eine Abfrage der Fli4l-vbox mit einzubauen.

Code: Alles auswählen

#/bin/sh

#################################################################
#  Anzeigen der vom FLI4L-Router geloggten Anrufe/vbox-Nachrichten
#  (Telmond muss aktiviert sein!)				                      
#  Autor: tetzlav						                               
#  last edit: 20/02/05						                             
#################################################################


##############################config#############################

#IP-Adresse des FLI4L-Routers
IP="192.168.2.2" #Imond-PORT (default:5000, siehe "config/base.txt")
IMONDPORT="5000" #Imond-Passwort
IMONDPASS="********"
ADMIN_PASSWD="*******" #Imond-ADMIN-Passwort (wird gebraucht fuer /etc/phonebook)

#Vbox-Port, Anzahl der Vbox-User, Name, Telefon
VBOXPORT="20012"
VBOXUSER_N="" #wenn kein opt_vboxd leerlassen
VBOXUSER_1="USER1"
VBOXPASS_1="*******"
VBOXUSER_2="USER2"
VBOXPASS_2="*******"

#Systemvariablen
TMPDIR="/tmp"
SED_BIN="/bin/busybox sed"
NC_BIN="/bin/busybox nc"

#################ab hier nichts mehr veraendern##################
wget -q -O /dev/null http://127.0.0.1/control/message?popup=Einen%20Moment%20bitte...
cd $TMPDIR
date=`date +%Y%m%d`
value ()
  {
    set -f
    eval x=$1
    echo $x
    set +f
  }

#Telefonbuch holen, Substitutionsdatei erstllen
if [ ! -f $TMPDIR/phonebook ]
then
    rcsim KEY_HOME > /dev/null
    wget -q -O /dev/null http://127.0.0.1/control/message?popup=Telefonbuch%20wird%20kopiert...
    { echo "pass $IMONDPASS"; echo "send /etc/phonebook $ADMIN_PASSWD"; echo "quit"; } |

     	$NC_BIN $IP $IMONDPORT |
     	$SED_BIN '/^OK/d; /^ERR/d;' > $TMPDIR/phonebook
fi
if [ ! -f $TMPDIR/phonebook.sub ]
then
    rcsim KEY_HOME > /dev/null
    wget -q -O /dev/null http://127.0.0.1/control/message?popup=Telefonbuch%20wird%20erstellt...
    $SED_BIN '/^#/d; /^[^=]*$/d; s/^/s|;/; s/=/;|;/; s/,[^,]*$//; s/$/;|g/' $TMPDIR/phonebook > $TMPDIR/phonebook.sub
fi


#Telmond-Logfile holen
rcsim KEY_HOME > /dev/null
wget -q -O /dev/null http://127.0.0.1/control/message?popup=Anruferliste%20wird%20erstellt...
{ echo "pass $IMONDPASS"; echo "telmond-log-file"; echo "quit"; } |
	$NC_BIN $IP $IMONDPORT | $SED_BIN 's/.$//; /^OK/ d; s/$/ /; s/ \+/;/g; s/\/\+//g;' | grep $date > $TMPDIR/0.telmonctmp
rcsim KEY_HOME > /dev/null
wget -q -O /dev/null http://127.0.0.1/control/message?popup=Nummern%20werden%20durch%20Namen%20ersetzt...
echo "Anrufe%3A%0A%0A" > $TMPDIR/1.telmonctmp
$SED_BIN -f $TMPDIR/phonebook.sub $TMPDIR/0.telmonctmp | $SED_BIN "s/^;$date//; s/;$/)%0A/; s/;/%20/; s/;/Uhr%3A%20/; s/;/%20(->/; s/:[0-9]\{2\}U/U/;" >> $TMPDIR/1.telmonctmp

#VboxInfo an Message anhängen
if [ ! "$VBOXUSER_N" = "" ]
then
	i=1
    echo "%20%0ANachrichten%3A%0A%0A" >> $TMPDIR/1.telmonctmp
	while [ $i -le "$VBOXUSER_N" ]
	do
		USERNAME=`value '$VBOXUSER_'$i`
        PASSWD=`value '$VBOXPASS_'$i`
        rcsim KEY_HOME > /dev/null
        wget -q -O /dev/null http://127.0.0.1/control/message?popup=Nachrichten%20fuer%20$USERNAME%20werden%20ueberprueft...
        { echo "login $USERNAME $PASSWD"; echo "count"; echo "quit"; } |
            $NC_BIN $IP $VBOXPORT > $TMPDIR/vbox_$USERNAME.telmonctmp
        VBOXCOUNT=`cat $TMPDIR/vbox_$USERNAME.telmonctmp | grep ^181 | $SED_BIN 's/^181 //; s/ .*$//'`
        echo "%20$USERNAME%3A%20$VBOXCOUNT%0A" >> $TMPDIR/1.telmonctmp
        i=`expr $i + 1`
	done
fi

#Dateiformat anpassen
$SED_BIN '$!{;H;d;};H;x;s/\n//g; s/:/%3A/g; s/ /%20/g;' $TMPDIR/1.telmonctmp > $TMPDIR/2.telmonctmp
rcsim KEY_HOME > /dev/null
wget -q -O /dev/null http://127.0.0.1/control/message?nmsg=`cat $TMPDIR/2.telmonctmp`
rm $TMPDIR/*.telmonctmp

exit 0
Damit die Status-Meldungen angezeigt werden muß dieses Script von einem anderen Script

Code: Alles auswählen

#/bin/sh

/var/plugins/telmonc_start.sh &
exit 0
gestartet werden, da bei mir die popup-Messages erst nach vollständigem Abarbeiten des Scripts angezeigt wurden. Da das ganze Infos holen & aufbereiten doch etwas dauert, wollte ich gerne paar Status-Meldungen ausgeben...
Jedoch würde ich sehr gerne noch anzeigen lassen von wem und zu welcher Uhrzeit eine Nachricht hinterlassen wurde. Dazu muss ich jedoch das UNIX-Timestamp-Format (Sekunden seit 1.1.1970) in ein lesbares Datum umrechnen. Wenn ich das mit dieser Funktion mache dauert mir das auf der D-Box einfach zu lange. gibt es eine Möglichkeit das mit date zu erledigen?

Code: Alles auswählen

#Timestampformat umrechnen
cor=1 #Zeitverschiebung
timestamp ()
{
	SECS=$1
	i=1970
	while [ $SECS -gt 31536000 ]
	do
    	if [ `expr $i % 4` -eq 0 ]
    	then
        	SECS=`expr $SECS - 31622400`
    	else
        	SECS=`expr $SECS - 31536000`
    	fi
	 	i=`expr $i + 1`
	done
	YEAR=$i

	MTH_0=31
	if [ `expr $YEAR % 4` -eq 0 ]
	then
    	MTH_1=29
	else
    MTH_2=31
    MTH_3=30
    MTH_4=31
    MTH_5=30
    MTH_6=31
    MTH_7=31
    MTH_8=30
    MTH_9=31
    MTH_10=30
    MTH_11=31
    fi
	i=0
	while [ $SECS -gt $(expr `value '$MTH_'$i` \* 86400) ]
	do
    	SECS=$(expr $SECS - `value '$MTH_'$i` \* 86400)
    	i=`expr $i + 1`
	done
	MONTH=`expr $i + 1`

	i=1
	while [ $SECS -gt 86400 ]
	do
    	SECS=`expr $SECS - 86400`
   		i=`expr $i + 1`
	done
	DAY=$i

	i=0
	while [ $SECS -gt 3600 ]
	do
    	SECS=`expr $SECS - 3600`
    	i=`expr $i + 1`
	done
	HOUR=`expr $i + $cor`

	i=0
	while [ $SECS -ge 60 ]
	do
    	SECS=`expr $SECS - 60`
    	i=`expr $i + 1`
	done
	MINUTES=$i

	echo $YEAR-$MONTH-$DAY-$HOUR-$MINUTES-$SECS
}
Desweiteren würde ich sehr gerne die vbox-Nachrichten gleich auf der D-Box anhören, nur leider kennt der Neutrino-Audioplayer kein vbox-Format... :-?
@Zwen, Chakazulu, [oderwerdaskann]
wenn ihr ein wenig Zeit hättet auch das mal anzuschauen, ich wäre sehr dankbar! :wink:

Wer generell noch Verbesserungsvorschläge hat darf das gerne äußern. Ich weiß ja nicht wie viele von euch das Gespann D-Box/Fli4l zu Hause werkeln lassen, aber bei mir arbeiten die zwei optimal zusammen...

Gruß
tetzlav
mind-switch
Neugieriger
Neugieriger
Beiträge: 19
Registriert: Donnerstag 22. Juli 2004, 22:23

Beitrag von mind-switch »

hmm.. ich fürchte, mein Script sprachtalent ist begrenzt, sodass ich dir warscheinlich wenig Hilfe bin.

Was wohl nötig wäre ist der MuLaw (bzw µ-law) codec (bzw decoder). eigendlich eine einfache PCM in 8bit mono sodass die Box das hardwaremässig hinbekommen sollte.

Bei meiner Suse ist der z. b. im gstreamer packet.
leider gibts ja für fli4l nichts, was die files in dbox-audioplayer lesbares konvertiert.

Aber da Du schonmal dabei bist:
Vielen Dank! Wir nutzen das opt_teldreambox in unserer WG beim Fernsehen häufig; es ist recht praktisch, weil wir dadurch manchmal sehen können, wer von uns ans analoge telefon am A/B-wandler gehen sollte. Es wäre aber noch einfacher, wenn auch angezeit würde, auf welcher MSN der Anruf eingeht.
tetzlav
Einsteiger
Einsteiger
Beiträge: 131
Registriert: Dienstag 6. April 2004, 12:08

Beitrag von tetzlav »

mind-switch hat geschrieben:leider gibts ja für fli4l nichts, was die files in dbox-audioplayer lesbares konvertiert.
Doch! Ich hab mal ein Script geschrieben, welches die vbox-Nachrichten in wav konvertiert;

Code: Alles auswählen

#! /bin/sh

VBOXUSER_N="2"
VBOXUSER_1="USER1"
VBOXUSER_2="USER2"
VBOXDIR="/mnt/hda1/vbox"
DBOXDIR="/mnt/hda1/mp3/_Anrufbeantworter"

cd /tmp/

value ()
{
    set -f
    eval x=$1
    echo $x
    set +f
}

dateform ()
{
    YEAR=`echo $1 | cut -d " " -f 5 -`
    DAY=`echo $1 | cut -d " " -f 3 -`
    TIME=`echo $1 | cut -d " " -f 4 - | sed 's/:..$//; s/:/\./g'`
    MONTHSUBST='s/Jan/01/g;s/Feb/02/g;s/Mar/03/g;s/Apr/04/g;s/May/05/g;s/Jun/06/g;s/Jul/07/g;s/Aug/08/g;s/Sep/09/g;s/Oct/10/g;s/Nov/11/g;s/Dec/12/g'
    MONTH=`echo $1 | cut -d " " -f 2 - | sed -e $MONTHSUBST`
    echo "[${YEAR}-${MONTH}-${DAY}]-[${TIME}Uhr] "
}

callername ()
{
    infocname=""
    if [ $1 = "0" -o $1 = "00" ]
    then
        infocname="(keine Nummer)"
    else
        infocname="`grep $1 </etc/phonebook | cut -d"=" -f2 | sed 's/.$//'`"
    fi
    if [ -z "$infocname" ] ;
    then
        infocname=$1
    fi
    echo $infocname
}    

i='1'
while [ $i -le "$VBOXUSER_N" ]
do
    USERNAME=`value '$VBOXUSER_'$i`
    MSGDIR="$VBOXDIR/$USERNAME/incoming"
    MSGLIST=`ls -r "$MSGDIR"`
    for MSG in $MSGLIST
    do  
        MSGFILE="$MSGDIR/$MSG"
        MSGINFO=`vboxmode $MSGFILE | sed 's/.*\.\.\.: //'`
        MSGDATE=`ls -l "$MSGDIR/$MSG" | grep 1970`
        if [ -z "$MSGDATE" ]
        then
            j='1'
            echo "$MSGINFO" |
            (
                while read MSGVAL
                do
                    case $j in
                    2 )
                    infodate=`dateform "$MSGVAL"`
                    ;;
                    4 )
                    infolen=`echo "$MSGVAL" | sed s/" seconds"//"`
                    ;;
                    6 )
                    infocid=`callername "0${MSGVAL}"`
                    ;;
                    esac
                    j=`/usr/bin/expr $j + 1`
                done
            vboxtoau < "$MSGDIR/$MSG" > "$MSGDIR/$MSG.au"
            sox -U -c 1 -r 8000 "$MSGDIR/$MSG.au" "$DBOXDIR/$USERNAME/${infodate}${infocid}.wav"
            rm "$MSGDIR/$MSG.au"
            touch "$MSGDIR/$MSG" -d 1970-01-01
            )
        fi
    done
    i=`/usr/bin/expr $i + 1`
done
exit 0
mind-switch hat geschrieben:Es wäre aber noch einfacher, wenn auch angezeit würde, auf welcher MSN der Anruf eingeht.
...also das Script oben macht das! :D

Gruß
tetzlav
mind-switch
Neugieriger
Neugieriger
Beiträge: 19
Registriert: Donnerstag 22. Juli 2004, 22:23

Beitrag von mind-switch »

many thanks, ich schaus mir gerne an.

In welcher fli4l version hast du's laufen?
wie wird das untere script gestartet?
/mnt/hda1 sieht mir nach 2.0.x installation aus
tetzlav
Einsteiger
Einsteiger
Beiträge: 131
Registriert: Dienstag 6. April 2004, 12:08

Beitrag von tetzlav »

Ich habs unter FLI4L v2.0.8 am laufen...

Das vboxmsg.sh-Script kannst mit nem Cronjob aufrufen. Nachteil; das Telmonc/Vbox-Plugin-Script-Plugin auf der D-Box zeigt dir dann keine neuen Nachrichten mehr an, weil das vboxmsg.sh-Script die Nachrichten nach dem konvertieren als gelesen markiert.

Es sei denn du veränderst das Telmonc/Vbox-Plugin-Script so, dass es erst nach der vbox-Abfrage das vboxmsg.sh-Script (auf dem FLI4L) aufruft. Nur leider ist es nicht ganz einfach von der D-Box aus Scripte auf dem FLI4L zu starten. (Der FLI4L-telmond weigert sich mit netcat zusammenzuarbeiten und ssh gibts nicht auf der D-Box... :-?)

Möglichkeit 1:von dem Telmonc/Vbox-Plugin-Script (bei vorhandensein neuer Nachrichten) in dem auf der D-Box gemounteten Vbox-Ordner eine Datei anlegen lassen, welche wiederum den Cronjob bzw. das vboxmsg.sh-Script erst bei vorhandensein dieser Datei (auf dem FLI4L) dazu veranlasst die neuen Nachrichten zu konvertieren...

Möglichleit 2: Ich verändere das Telmonc/Vbox-Plugin-Script so, das es nicht den vboxd direkt abfragt, sondern nur auf neue Nachrichten/Dateien im freigegebenen Ordner Ordner überprüft. Dann kann der Cronjob immer sobald neue Nachrichten vorhanden sind diese gleich konvertieren. Dann ist das ganze aber nicht mehr so universell.

Puh! Echt kompliziert! :gruebel: Ich hab die Ideen schon fertig, aber leider noch nicht die Zeit das umzusetzen und zu testen... Außerdem bekomme ich demnächst schnelles Richtfunk-Internet + VoIP und da ändert wird sich eh einiges ändern, sodass ich keine Lust mehr habe am Fli4l rumzubasteln. Dann kommt ein "richtiger Server" mit "richtiger Firewall" ins Haus; das c et-Heim-Server-Projekt find ich ganz interessant! 8)

Gruß
tetzlav
mind-switch
Neugieriger
Neugieriger
Beiträge: 19
Registriert: Donnerstag 22. Juli 2004, 22:23

geplänkel, nur nebenbei....

Beitrag von mind-switch »

also, ich hab bei mir nicht (nur) das gespann fli4l -dbox, sondern auch nen eisfair auf dem mittlerweile das unstable-packet-vbox läuft, und das bisher fehlerlos. ansonsten dient er als samba/ftp fileserver, und macht nfs für die dbox. leider wird das dbox-streamingserver packet für eis meines wissens nicht wirklich weiterentwickelt, dafür spriesst die vlc Entwicklung.
telmond hab ich auf eis noch nicht laufen, daher übernimmt fli4l (2.1.9) die bildschirmmeldung für die dbox (opt-teldreambox). zusätzlich ist fli4l isdn dialin-server. und routet ppp und rawip anrufe (callback mit hansenet talk4free) ins lokale netz und ins internet. damit bin ich sozusagen provider einer isdn-flatrate.
Vbox ist auch nicht wirklich eine anwendung, die auf einen router gehört.

Die idee, des ct' projektes ipcop innerhalb eines user mode linux laufen zu lassen find ich auch recht cool, da es einiges an stromkosten sparen würde.
in der eisfair NG wird davon inspiriert auch schon diskutiert, fli4l auf eisfair draufzusetzen.
Der Vorteil liegt klar in den Stromkosten. Die WG würd sich freuen!
Allerdings hat so eine Lösung auch den Nachteil, dass ich nicht am Server rumbasteln, testen, rebooten etc kann, ohne dass das ganze lan offline ist, was die WG wiederum nicht gerade freut. Für so eine Lösung warte ich also lieber noch und nehm sie in angriff, wenn eisfair soweit ist, zumal mir der Heise-Stempel auf dem CT' projekt gewissermassen unsympathisch ist.
Einen brachliegender kleiner fli4l müsste dann sowieso bereitstehen.
Am CT projekt stört mich auch, dass es im Grunde Yet another big Distribution ist, bei der ich irgendwann nicht mehr durchblicke.
mind-switch
Neugieriger
Neugieriger
Beiträge: 19
Registriert: Donnerstag 22. Juli 2004, 22:23

Beitrag von mind-switch »

Das eisfair vbox wandelt alle incoming messages in "gleichnamigezahlen".wav um, und verschickt diese per mail.
Leider hab ich noch nicht herausgefunden, welches script das macht, aber darin wäre sicher leicht unterzubringen, die *.wav's auch in irgendein von der dbox gemountetes NFS-Verzeichnis zu schreiben.