Bin mit meinem Latein am Ende. Versuche gerade eine Ansage der aktuellen Fussballergebnisse zu basteln. Ein shellscript ließt die Ergebnisse aus einer Webseite aus und schreibt vier Dateien in den /tmp Ordner (kann man bestimmt besser lösen, bin offen für Vorschläge).
/tmp/fp_v1 = name des ersten Vereins
/tmp/fp_v2 = name des zweiten Vereins
/tmp/fp_e1 = Tore des ersten Vereins
/tmp/fp_e2 = Tore des zweiten Vereins
/usr/fussball/fussball.sh:
Ergebniss der Fussballseite (also dann /tmp/fp_erg.txt):
extensions.conf:
Zunächst wird die Willkommensnachricht "fp_willkommen" abgespielt, dann der Script aufgerufen (die 2 gibt die Spielnummer an) wollte das später mal in eine schleife packen. Der Shellscript erzeugt dann die tmp dateien die ich mit Readfile auslese. Dannach soll er das Ergebniss ansagen (die entsprechenden Dateien liegen schon im Soundordner.
Soviel zur Theorie:
Problem:
Wenn ich das so ausführe, spielt er die Namen der Vereine nicht ab, obwohl die Dateien existieren. Ich habe zum Testen, in der Extentions.conf den soundfile fp_bielefeld direkt eingegeben (wie man oben sehen kann) und das ganze mit dem Spiel getestet wo bielefeld die zweite Manschaft ist. Das manuell eingegebene spielt er ab, beim vom Script kommenden gibt es eine Fehlermeldung:
Wie man sehen kann, versucht er die gleichen Sounddatei zu öffnen, mekcert aber dass er die Datei gar nicht finden kann.
Was habe ich übersehen?
/tmp/fp_v1 = name des ersten Vereins
/tmp/fp_v2 = name des zweiten Vereins
/tmp/fp_e1 = Tore des ersten Vereins
/tmp/fp_e2 = Tore des zweiten Vereins
/usr/fussball/fussball.sh:
Code:
#!/bin/bash
if [ -z $1 ];then
wget http://[FUSSBALLSEITE] -O /tmp/fp_erg.txt
else
string=`head /tmp/fp_erg.txt -n $1 | tail -1`
IFS="|"
part=($string)
echo $string
echo ${part[0]} > /tmp/fp_v1.txt
echo ${part[1]} > /tmp/fp_v2.txt
echo ${part[2]} > /tmp/fp_e1.txt
echo ${part[3]} > /tmp/fp_e2.txt
fi
#eintrag in log
echo "ausgefuehrt mit $1" >> /tmp/fp_log.txt
exit 0
Ergebniss der Fussballseite (also dann /tmp/fp_erg.txt):
Code:
bochum|gladbach|2|2
bremen|dortmund|3|3
wolfsburg|bielefeld|4|1
hannover|hoffenheim|2|5
frankfurt|leverkusen|0|2
berlin|stuttgart|2|1
karlsruhe|bayern|0|1
koeln|cottbus|1|0
hamburg|schalke|1|1
extensions.conf:
Code:
exten => 1001,1,Answer();
exten => 1001,n,Playback("fp_willkommen");
exten => 1001,n,System(sh /usr/fussball/fussball.sh 2)
exten => 1001,n,Readfile(v1=/tmp/fp_v1.txt,100)
exten => 1001,n,Readfile(v2=/tmp/fp_v2.txt,100)
exten => 1001,n,Readfile(e1=/tmp/fp_e1.txt,100)
exten => 1001,n,Readfile(e2=/tmp/fp_e2.txt,100)
exten => 1001,n,Playback('fp_bielefeld')
exten => 1001,n,Playback(fp_gegen)
exten => 1001,n,Playback(fp_${v2})
exten => 1001,n,Playback(fp_${e1})
exten => 1001,n,Playback(fp_zu)
exten => 1001,n,Playback(fp_${e2})
Soviel zur Theorie:
Problem:
Wenn ich das so ausführe, spielt er die Namen der Vereine nicht ab, obwohl die Dateien existieren. Ich habe zum Testen, in der Extentions.conf den soundfile fp_bielefeld direkt eingegeben (wie man oben sehen kann) und das ganze mit dem Spiel getestet wo bielefeld die zweite Manschaft ist. Das manuell eingegebene spielt er ab, beim vom Script kommenden gibt es eine Fehlermeldung:
Code:
[Oct 21 17:36:11] WARNING[28466]: app_readfile.c:94 readfile_exec: /tmp/fp_e2.txt is longer than 100, and 2
-- Executing [1001@amt:7] Playback("SIP/1001-08194980", "fp_bielefeld") in new stack
-- <SIP/1001-08194980> Playing 'fp_bielefeld' (language 'de')
-- Executing [1001@amt:8] Playback("SIP/1001-08194980", "fp_gegen") in new stack
-- <SIP/1001-08194980> Playing 'fp_gegen' (language 'de')
-- Executing [1001@amt:9] Set("SIP/1001-08194980", "verein2="fp_bielefeld
"") in new stack
-- Executing [1001@amt:10] Playback("SIP/1001-08194980", "fp_bielefeld
") in new stack
[Oct 21 17:36:14] WARNING[28466]: file.c:602 ast_openstream_full: File fp_bielefeld
does not exist in any format
[Oct 21 17:36:14] WARNING[28466]: file.c:912 ast_streamfile: Unable to open fp_bielefeld
(format 0x8 (alaw)): No such file or directory
[Oct 21 17:36:14] WARNING[28466]: app_playback.c:439 playback_exec: ast_streamfile failed on SIP/1001-08194980 for fp_bielefeld
Was habe ich übersehen?