27 серпня 2012 р.

OpenWRT, TP-Link 1043 - INTERNET RADIO tuner

OpenWRT, TP-Link 1043 -  простий інтернет радіо приймач

Продовжуючи експерименти з OpenWrt Attitude додав можливості використовувати Router TP-Link 1043, як Інтренет радіо тюнер.
Навіщо ? По-перше цікаво, в друге іноді включаю радіо на вихідних але комп'ютер принципово не вмикаю - відпочиваю від нього, і по-третє це економія електроенергії,  бо мій комп'ютер: CPU Intel i7, RAM 24 GB... використовує електроенергії достатньо.

Як було вказанно у попередній публікації я маю, док сктанцію:
Notebook Dock Model #1500325A, що може через USB - підключати деякі мультимедійні пристрої: LPT (PL-2305H), COM (PL-2303HX), SOUND 5.1 (C-Media Electronics, Inc. Storm HP-USB500 5.1 Headset), Ehternet (ASIX AX88772), USB Hub.
Notebook Dock Model #1500325A



Notebook Dock Model #1500325A

Notebook Dock Model #1500325A
PL-2303HX. PL-2305H
До док станції, на малюнку, підключено USB накопичувач, RS-232 (COM) кабель для MPCS, стерео вихід до аудіо системи, USB кабель CDMA терміналу, підключення до TP-Link 1043 через USB, та блок зовнішнього живлення. Ще також підключається принтер "EPSON R220" за потребою у вільний USB.

Радіо прослуховувати можна такою командою, wget -c -q -O - $url | madplay. Якщо використовується mp3 кодек. Не підтримуються mp4, ogg. Для більшого функціоналу потрібно використовувати пакет MPD.
Я налаштував роутер так що - кнопка  роутера WPS може, вмикати радіо якщо утримувати її 5 сек, вимикати радіо якщо утримувати її 10 сек, та переключати послідовно радіостанції з заздалегідь створеного списку (.m3u), якщо утримувати її до 1 сек.

Робоча тека:
/etc/radiotuner
Файли:
playlist.m3u - m3u play list
radio-load.sh - завантажує програвач до фонового програвання
radio-start.sh - відтворює першу радіостанцію зі списку, або бажану, частина назва котрої була передана через параметр.
radio-stop.sh - зупиняє програвач, та поточну радіостанцію.
radio-next-station.sh - зупиняє поточну радіостанцію, і програвач переходить до наступної радіостанції.
/var/run/radiotuner.pid - ідентифікатор запущеного процесу програвача.

Використувується пакет madplay - MAD is an MPEG audio decoder.
#opkg install madplay 
radio-start.sh:
#!/bin/sh
#http://www.lexxai.pp.ua 
want=$1
pl=/etc/radiotuner/playlist.m3u
while true; do
 cat "$pl" | \
  while read url; do \
    curr=$url
    if [ $(echo "$url" | grep -E -v "^#") ];  then
      name=$(echo "$before"|awk -F , '/^#EXTINF/ {print ($2)}')
      if [  -z $want ] || [ ! -z $(echo "$name" |grep -oi -e "$want") ] ; then
       echo "play: $name" |logger -t 'online-radio'
       wget -c -q -O - $url 2>/dev/null| madplay -q  -
      fi
    fi
    before=$curr
  done
done
radio-next-station.sh:
#!/bin/sh
killall wget
radio-stop.sh:
#!/bin/sh
killall radio-start.sh
killall wget
radio-load.sh:
#!/bin/sh
./radio-start.sh $1 &
playlist.m3u:
#EXTM3U
#EXTINF:0,"eradio.com.ua: E-radio"
http://62.149.13.129:8500/eradio_hi
#EXTINF:0,"eradio.com.ua: E-radio rock"
http://etoradio.cc.colocall.com:8500/e-rock_hi
#EXTINF:0,"MFM"
http://urg.adamant.net:8080/online128
#EXTINF:0,"uh-radio"
http://online.uhradio.com.ua:8001/efir
#EXTINF:0,"Radio 24"
http://stream1.lux.fm:9010
#EXTINF:0,"Radio Rocks"
http://online.radioroks.com.ua:8000/RadioROKS
#EXTINF:0,"DJFM"
http://media.brg.ua:8010/;stream.nsv
#EXTINF:0,"PerecFM"
http://radio.stilnoe.fm:8080/radio-stilnoe
#EXTINF:0,"Sharmanka"
http://217.20.164.163:8006/;

Buttons

Використанні матеріали з [ http://wiki.openwrt.org/doc/howto/hardware.button ]

Для керування плеєром використовуються можливості клавіші WPS, для її функціювання створимо файл:  

/etc/hotplug.d/button/00-button:
. /etc/functions.sh
do_button () {
        local button
        local action
        local handler
        local min
        local max
        config_get button $1 button
        config_get action $1 action
        config_get handler $1 handler
        config_get min $1 min
        config_get max $1 max
        [ "$ACTION" = "$action" -a "$BUTTON" = "$button" -a -n "$handler" ] && {
                [ -z "$min" -o -z "$max" ] && eval $handler
                [ -n "$min" -a -n "$max" ] && {
                        [ $min -le $SEEN -a $max -ge $SEEN ] && eval $handler
                }
        }
}
config_load system
config_foreach do_button button
І внесемо параметри для різного функціоналу з залежності від тривалості натискання клавіші WPS.

/etc/config/system:

config button
        option button 'wps'
        option action 'released'
        option handler '/etc/radiotuner/radio-next-station.sh'
        option min '0'
        option max '1'

config button
        option button 'wps'
        option action 'released'
        option handler '/etc/radiotuner/radio-load.sh'
        option min '3'
        option max '8'

config button
        option button 'wps'
        option action 'released'
        option handler '/etc/radiotuner/radio-stop.sh'
        option min '9'
        option max '14'

config button
        option button 'wps'
        option action 'released'
        option handler 'logger wifi, timed pressed: 19-50s'
        option min '19'
        option max '50'


Результати роботи протоколюються до лог файлу.
#logread -f 
Aug 25 03:31:16 OpenWrt user.notice online-radio: next station
Aug 25 03:31:25 OpenWrt user.notice online-radio: Loading
Aug 25 03:31:25 OpenWrt user.notice online-radio: play: "eradio.com.ua: E-radio"
Aug 25 03:31:51 OpenWrt user.notice online-radio: next station
Aug 25 03:31:56 OpenWrt user.notice online-radio: play: "eradio.com.ua: E-radio rock"
Aug 25 03:32:15 OpenWrt user.notice online-radio: next station
Aug 25 03:32:19 OpenWrt user.notice online-radio: play: "MFM"
Aug 25 03:32:29 OpenWrt user.notice online-radio: next station
Aug 25 03:32:33 OpenWrt user.notice online-radio: play: "uh-radio"
Aug 25 03:32:39 OpenWrt user.notice online-radio: next station
Aug 25 03:32:43 OpenWrt user.notice online-radio: play: "Radio 24"
Aug 25 03:32:51 OpenWrt user.notice online-radio: next station
Aug 25 03:33:00 OpenWrt user.notice online-radio: play: "Radio Rocks"
Aug 25 03:33:07 OpenWrt user.notice online-radio: next station
Aug 25 03:33:11 OpenWrt user.notice online-radio: play: "DJFM"
Aug 25 03:33:16 OpenWrt user.notice online-radio: next station
Aug 25 03:33:23 OpenWrt user.notice online-radio: play: "PerecFM"
Aug 25 03:33:29 OpenWrt user.notice online-radio: next station
Aug 25 03:33:33 OpenWrt user.notice online-radio: play: "Sharmanka"
Aug 25 03:33:40 OpenWrt user.notice online-radio: next station
Aug 25 03:33:48 OpenWrt user.notice online-radio: play: "eradio.com.ua: E-radio"
Aug 25 03:33:59 OpenWrt user.notice online-radio: Already started
Aug 25 03:34:27 OpenWrt user.notice online-radio: stopping


Використана: OpwnWRT ATTITUDE ADJUSTMENT (Bleeding Edge, r33206.
У якості USB Audio вважаю також можуть бути використанні, USB колонки, або USB sound card, наприклад. Що будуть сумусні за Linux DSP.

Додано з форуму: можна використати "curl http://...... | madplay - "


Цікаві посиланя до теми Інтернет радіо:


8 коментарів:

Zenko сказав...

Цікаво зроблено. Особливо скрипт radio-start.sh, але чесно кажучи в цій частині не можу збагнути, що тут робиться:

name=$(echo "$before"|awk -F , '/^#EXTINF/ {print ($2)}')
if [ -z $want ] || [ ! -z $(echo "$name" |grep -oi -e "$want") ] ; then
echo "play: $name" |logger -t 'online-radio'
Не могли б ви пояснити людині-початківцю. І ще думаю як би дописати сюди, щоб після вимкнення або обриву зв'язку завантажувалася та станція, яка була до цього, а не наступна по списку. =)

LeX Xai сказав...

playlist.m3u:
#EXTINF:0,"eradio.com.ua: E-radio"
http://62.149.13.129:8500/eradio_hi

Скрипт перебирає рядки плейлиста, і шукає рядки, якщо є назва, то запам'ятовує її, так як наступний радок є URL для цієї назви.

name=$(echo "$before"|awk -F , '/^#EXTINF/ {print ($2)}')
Шукаємо рядок що починаєтеся з #EXTINF, і вибираємо другий параметр (кома розподіляє), що вказує на назву радіостанції.


echo "play: $name" |logger -t 'online-radio'
Створити запис у системному "логу", logread -f


if [ -z $want ] || [ ! -z $(echo "$name" |grep -oi -e "$want") ] ; then

-z str1 рядок "str1" не існує (пуста).

$want дорівнює назві радіостанції що передається параметром до скрипта.
Якщо не передано назви, їдемо перебором плейлиста.
Якщо передали назву, то порівнюємо з назвою у "name" інакше пропуск.


Тому якщо вказати назву радіостанції то буде її постійний програш у випадку якщо був розрив.



Анонім сказав...

Я тут де-що переписав код от подивись. Може тебе зацікавить. http://neperesychna.blogspot.com/2014/09/wi-fi-tp-link-tl-mr-3020.html

LeX Xai сказав...

Дякую, але щось не зрозумів як назва передається до говоруна гугл ?

nameg=$(echo ${name// /%20})
wget -U "Mozilla/5.0" -O /etc/wifiradio/nazva.mp3 "http://translate.google.com/t

Alex Pertsow сказав...

добрий день могли б мені допомогти у створенні wifi радіоприймача на основі openwrt 15,05 і роутера asus wl-500g Все роблю за Вашими інструкціями, але не виходить, паку /etc/radiotuner або /etc/wifiradio потрібно самому створювати і вній ті файли скрипти, що в описі, і як тоді воно буде завантажуватись із роутером?

LeX Xai сказав...

Запуск реалізований через опрацювання натискання кнопки /etc/hotplug.d/button ...
Але спочатку треба перевірити щоб грала музика простим запуском скриптів.

або запуском:
wget -c -q -O - http://62.149.13.129:8500/eradio_hi 2>/dev/null| madplay -q -

Alex Pertsow сказав...

Добрий день, прошу ще допомогти у налаштуванні кнопки увімкнення і перемикання каналів. Роблю все відповідно Вашої інструкції і відповідно інструкцій на wiki.openwrt.org щодо налаштування кнопки, знаходжу її через logread -f називається wps бачу дії - натиснуто відпущено, все прописую та скрипт не спрацьовує, і вже не можу зрозуміти чи це той, що у etc/hotplug.d/button/00-button чи параметри для різного функціоналу з залежності від тривалості натискання клавіші WPS /etc/config/system.

Alex Pertsow сказав...

Все, вибачте, розібрався, запрацювало, дякую.


Коли забув ти рідну мову, біднієш духом ти щодня...
When you forgot your native language you would become a poor at spirit every day ...

Д.Білоус / D.Bilous
Рабів до раю не пускають. Будь вільним!

ipv6 ready