Neue Scripte für DTMF-Box

Accuvue

Neuer User
Mitglied seit
10 Jul 2008
Beiträge
187
Punkte für Reaktionen
0
Punkte
16
Ich bin seit längerem als Leser und Frager hier in diesem Forum unterwegs. Es hat mir manchmal geholfen, manchmal auch nicht. Ich freue mich über die User hier, die bereitwillig ihr Wissen der Allgemeinheit zur Verfügung stellen und damit Anderen uneigennützig helfen.

Da ein Forum nicht nur von den Fragern leben kann, möchte ich heute auch mal meine "Erkenntnisse" der Allgemeinheit zur Verfügung stellen.

Also: Ich habe mich mit der DTMF-Box des hier im Forum verschollenen Entwicklers bodega beschäftigt. Ein schönes Programmpaket, welches die Möglichkeiten einer "Freetz"-Box sinnvoll erweitert. Leider wurden die Scripte dieses Programms nicht weiter gepflegt, was sich beispielsweise im nicht mehr funktionierenden Wetter-Podcast wiederspiegelt.

Ein weiteres, bisher ungelöstes Poblem ist das Suchen von mp3-Links in RSS-Feeds. Es war in einem früheren Release der dtmf-Box schon mal angedacht war, wurde aber nicht weiter verfolgt.

Ich habe mich mal bissel in die Scriptprogrammierung von Linux eingearbeitet und folgende Scripte modifiziert:

1) misc_weather.sh
Hier wird der (nicht mit dargestellte) rss-Feed von "DONNERWETTER.DE" gelesen und der jeweils aktuelle Wetterbericht ausgegeben. Ausgehend von der Radio-Stream-Shell habe ich hier noch eine Suchroutine reingebastelt, die den rss-Feed sucht und ausgibt.
Leider habe ich keine weiteren Wetterrpodcasts im Netz gefunden, die tagesaktuell Wetterberichte einstellen. Vielleicht kennt Jemand noch welche...
Code:
#!/var/tmp/sh
. /var/dtmfbox/script.cfg
. /var/dtmfbox/script/funcs.sh

MODE="$1"
SRC_ID="$2"
eval STREAM_ID="\$WETTER_STREAM${MODE}"
MADPLAY="$MADPLAY_PATH/madplay"

# madplay vorhanden?
if [ ! -f "$MADPLAY" ]; then
	$DTMFBOX $SRC_ID -speak "Maed plaei nicht hinterlegt!"
	exit 1;
fi

RADIO_STREAM_URL=`wget "$STREAM_ID" -O - | grep "<enclosure url=.*" | sed -e 's/.*<enclosure url=\"//1' -e 's/\".*//g' | head -n 1`
get_locktempdir
RADIO_STREAM_FIFO="$LOCKTEMPDIR/$SRC_ID-radio_stream-$MODE"

# stream hinterlegt?
if [ "$RADIO_STREAM_URL" = "" ];
then
   $DTMFBOX $SRC_ID -speak "Njus sztriem $MODE nicht hinterlegt!"
   exit 1;
fi

# stop all!
$DTMFBOX $SRC_ID -stop play all
sleep 1

# play!
(echo -n "")&
RADIO_STREAM_FIFO="$RADIO_STREAM_FIFO.$!"
$MKFIFO "$RADIO_STREAM_FIFO"
if [ -p "$RADIO_STREAM_FIFO" ];
then
   wget "$RADIO_STREAM_URL" -O - | $MADPLAY -R 22050 -m -o wave:$RADIO_STREAM_FIFO - &
   $DTMFBOX $SRC_ID -playstream "$RADIO_STREAM_FIFO" hz=22050 wait_start=100 wait_end=100
   rm "$RADIO_STREAM_FIFO"
fi

2) misc_nachrichten.sh
Ist praktisch eine Erweiterung von misc_weather.sh. Geändert auf NEWSSTREAM-Einträge und erweitert mit einem weiteren Übergabeparameter, der eine Auswahl des Links innerhalb des rss-Feeds ermöglicht. Also etwa mittels eines Menüscriptes

Code:
/var/dtmfbox/script/misc_nachrichten.sh(/var/dtmfbox/script/misc_nachrichten.sh, "%$1%", "%src_id%", "%$2%")

wobei der Übergabeparameter "%$2%" den X-ten Link auf der Seite auswählt.
Code:
#!/var/tmp/sh
. /var/dtmfbox/script.cfg
. /var/dtmfbox/script/funcs.sh

MODE="$1"
SRC_ID="$2"
N="$3"
eval STREAM_ID="\$NEWS_STREAM${MODE}"
MADPLAY="$MADPLAY_PATH/madplay"

# madplay vorhanden?
if [ ! -f "$MADPLAY" ]; then
	$DTMFBOX $SRC_ID -speak "Maed plaei nicht hinterlegt!"
	exit 1;
fi

RADIO_STREAM_URL=`wget "$STREAM_ID" -O - | grep "<enclosure url=.*" | sed -e 's/.*<enclosure url=\"//1' -e 's/\".*//g' | head -n "$N" | tail -n 1`
get_locktempdir
RADIO_STREAM_FIFO="$LOCKTEMPDIR/$SRC_ID-radio_stream-$MODE"

# stream hinterlegt?
if [ "$RADIO_STREAM_URL" = "" ];
then
   $DTMFBOX $SRC_ID -speak "Njus sztriem $MODE nicht hinterlegt!"
   exit 1;
fi

# stop all!
$DTMFBOX $SRC_ID -stop play all
sleep 1

# play!
(echo -n "")&
RADIO_STREAM_FIFO="$RADIO_STREAM_FIFO.$!"
$MKFIFO "$RADIO_STREAM_FIFO"
if [ -p "$RADIO_STREAM_FIFO" ];
then
   wget "$RADIO_STREAM_URL" -O - | $MADPLAY -R 22050 -m -o wave:$RADIO_STREAM_FIFO - &
   $DTMFBOX $SRC_ID -playstream "$RADIO_STREAM_FIFO" hz=22050 wait_start=100 wait_end=100
   rm "$RADIO_STREAM_FIFO"
fi

3) misc_checkmaild.sh
Hab ich auch bearbeitet. Zum Einen werden jetzt alte und neue Nachrichten getrennt angesagt, zum Anderen war (zumindest für web.de) die Ausgabe der Gesamtnachrichten fehlerhaft.
Code:
#!/var/tmp/sh
. /var/dtmfbox/script.cfg

MODE="$1"
SRC_ID="$2"

parse_main_info() {
  MAIN_STATUS="$6"
}

MAIL_FILE="$CHECKMAILD_PATH/checkmaild.$MODE"
if [ ! -f "$MAIL_FILE" ];
then
  $DTMFBOX $SRC_ID -speak "Scheck maeil Datendatei nicht gefunden."
  return 1
fi

# read first line and output status
MAIN_INFO=`cat "$MAIL_FILE" | $HEAD -n 1`
parse_main_info $MAIN_INFO

let NEW_MAIL=`echo "$MAIN_STATUS" | sed -e 's/\(.*\)\/.*/\1/g' -e 's/00\(.\)/\1/g' -e 's/0\(..\)/\1/g'`
let OLD_MAIL=`echo "$MAIN_STATUS" | sed -e 's/.*\/\(.*\)/\1/g' -e 's/00\(.\)/\1/g' -e 's/0\(..\)/\1/g'`
let OLD_MAIL=$OLD_MAIL-$NEW_MAIL

SAY=""
if [ "$NEW_MAIL" = "0" ]; then SAY="Sie haben keine neuen I Maeils"; fi
if [ "$NEW_MAIL" = "1" ]; then SAY="Sie haben eine neue I Maeil"; fi
if [ "$SAY" = "" ]; then SAY="Sie haben $NEW_MAIL neue I Maeils"; fi
$DTMFBOX $SRC_ID -speak "$SAY" 
sleep 4

SAY=""
if [ "$OLD_MAIL" = "0" ]; then SAY="Sie haben keine alten I Maeils"; fi
if [ "$OLD_MAIL" = "1" ]; then SAY="Sie haben eine alte I Maeil"; fi
if [ "$SAY" = "" ]; then SAY="Sie haben $OLD_MAIL alte I Maeils"; fi
$DTMFBOX $SRC_ID -speak "$SAY"
Die Scripte könnt Ihr gern diskutieren, nutzen und verändern. Ich würde mich freuen, wenn vielleicht auch andere DTMF-Box-Nutzer mal ihre Scripte zur Verfügung stellen könnten, die vielleicht noch viel ausgereifter sind, als mir das mit meinen ersten Linux-Schritten gelingen konnte.
 
Zuletzt bearbeitet:
noch Probleme

Hi Accuvue,

nette Sache, wenn das weiter geht. Bekomme den Wetterstream dennoch nicht angesagt.
Er springt in "Njews Stream nicht hinterlegt".

Habe einen Menüpunkt hinzugefügt:

# [SECTION:Weatherstream]
WETTER_STREAM1="http://podcast.donnerwetter.de/podcast.php" # 1. Wetterstream

Eine Idee, was falsch läuft?
 
Fast richtig, lieber Olihacker.

Richtig wäre der Eintrag
Code:
# [SECTION:Wetter]
WETTER_STREAM1="http://podcast.donnerwetter3.de/podcast.php" # 1. Donnerwetter
gewesen.

Funktionierts damit?
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.