Всем привет!
Завалилось у меня тут несколько
Voice модемов.
Два
Zyxel Omni 56k com-port и один
Acorp Sprinter 56k USB (софт модем)
Я уже про них давно забыл, со времён когда ещё сидел в интернете по
Dial UPНо на этой недели их спокойная и безмятежная жизнь на полке закончилась.
Мне пришла в голову очередная
идея:
Сделать автоответчик для дома.Первое, с чего я решил начать, так это подключение самого модема к серверу.
Для начала решил попробывать завести Soft modem
Acorp sprinter 56k USBПересобрал ядро, и принялся искать драйвера.
Для начала заглянул на страничку
www.linmodems.org и скачал там скрипт
scanModemОн сам определить Ваш модем и предложит скачать подходящий драйвер.
Мне же он предложил подгрузить модуль ядра и попробывать снова.
Пересобирать ядро и возиться с драйверами мне было неохота и я решил поставить
Zyxel Omni 56k с
COM-port'ом
После подсоединения модема к серверу у меня возник вопрос:
Как же проверить его работоспособность?
Погуглив я наткнулся на программу
minicomОна позволяет Вам общаться с устройствами через
COM portНо почему-то она так и не смогла увидеть мой модем.
Тогда я решил послать
AT команды напрямую через
COM portДелается это так:
Для начала ознакомимся с таблицей нумерации
COM портов
Serial Port |
DOS |
Linux |
I/O Port |
IRQ |
First |
COM1 |
/dev/ttyS0 |
03F8 |
4 |
Second |
COM2 |
/dev/ttyS1 |
02F8 |
3 |
Third |
COM3 |
/dev/ttyS2 |
03E8 |
4 |
Fourth |
COM4 |
/dev/ttyS3 |
02E8 |
3 |
По скольку мой модем подключён к первому
COM порту я послал на него следущую команду:
echo atdt3333333 > /dev/ttyS0
Эта команда говорит модему сделать звонок на номер
3333333Услышав щелчок модема я успокоился и понял что модем работает и воспринимает команды.
Но что-то он ни как не хотел работать.
После 2-х часов ковыряний выяснилось что
IRQ 4 (прерывание) на котором он работает был занят.
Пришлось подключать сервер к монитору и в
BIOS выключить
LPT порт.
Как альтернативное решение: можно было просто сменить
IRQ в
BIOS.
После этого я установил программы
wvdial и с помощью неё окончательно убедился в работоспособности модема.
Следующим шагом был шаг:
Выбор ПОПоскольку это была лишь идея, и я да же не знал, есть-ли такая программа вообще, то я решил спросить у народа.
К сожалению в моём
Twitter'e такую программу мне никто не подсказал и пришлось искать её самому.
Немного погуглив я сначала наткнулся на программу
vgetty и на её потомка
mgettyБыстренько нашёл её в своём репозитории и запустил процесс установки:
USE="fax" emerge mgetty
Спустя некоторое время всё скомпилировалось и я перешёл непосредственно к настройке программы.
Правим /etc/mgetty/voice.conf
port ttyS0 -- Последовательный порт
rings 3 -- Три звонка и поднимается трубка
answer_mode voice:fax:data -- Порядок ответа голос:факс:данные
rec_max_len 30 -- Задаем максимальную длину сообщения у меня 30 секунд.
rec_min_len 2 -- Минимальная длинна сообщения.
port_speed 115200 -- Устанавливаем скорость порта.
backup_message standard.rmd -- Файл приветственного сообщения.
phone_owner root -- Владелец файлов сообщений (root).
phone_group voice -- Группа файлов сообщений (voice).
phone_mode 0660 - Права для файлов сообщений (-rw--rw---).
В /etc/inittab пишим
# starting vgetty
S1:2345:respawn:/usr/sbin/vgetty ttyS0
В принципе уже всё готово.
Осталось записать файл приветствия для автоответчика.
Это можно сделать
двумя способами:
1) Записать с помощью микрофона
Подключаем микрофон, даём команду и говорим:
sudo /usr/bin/vm record -m -l ttyS0 -v standard.rmd
Результат можно прослушать так:
rmdtopvf -b standard.rmd | pvftowav > temp.wav && play temp.wav
2) Скачать запись автоответчика в интернете и сконвертировать в формат
rmd для своего модема.
Я пошёл именно таким путём
a) Конвертация
wav или
mp3 файла для последующей обработки
Для этого нам потребуется дополнительная программа -
soxДопустим мы скачали сообщение для автоответчика -
message.wavТогда конвертация будет выглядеть так:
sox message.wav -r 9600 -c 1 message_new.wav
Если Вы используете mp3 файл, то добавьте ключ -t mp3
sox -t mp3 message.mp3 -r 9600 -c 1 message_new.wav
б) Конвертация
wav файла в
pvf файл
wavtopvf message_new.wav message_new.pvf
в) Конвертация
pvf файла в
rmd файл для Вашего типа модема
Для этого нам потребуется утилита
pvftormdДаём следующую команду
pvftormd -L и выбираем свой или похожий модем из списка.
Затем выполняем конвертацию.
Конкретно для моего модема команда выглядит так:
pvftormd ZyXEL_Omni56K 4 message_new.pvf standard.rmd
г) Файл
standard.rmd помещаем в папку с сообщениями.
По умолчанию она находится тут:
/var/spool/voice/messages/
После этого Вы уже можете звонить себе и проверять результат.
Остался только один интересный вопрос:
Как забирать оставленные сообщения?
Существует несколько способов:
1) Сделать сетевую папку
2) Заходить на сервер и слушать их от туда через скрипт
3) Установить Flash плеер на сервер и через браузер прослушивать сообщения (Придумал сам)
Скрипты для конвертации сообщений в WAV или MP3 я выложу походу описания.
Рассмотрим каждый из них:
1) Тут всё просто, ставите Samba или NFS сервер и открываете доступ в сеть
2) Скрипты, я их честно не проверял, а просто скопировал.
Прослушивание сообщений:
Copy Source | Copy HTML
- #!/bin/bash
- #--------------------------------
- MINC=/var/spool/voice/incoming/
- MDIR=/home/$USER/msg
- #--------------------------------
- clear
- case "$1" in
- -h|--h|--he|--hel|--help)
- echo "
Copyringts (c) Andrey G-v 2007
Options:
-h, --help Показать справку и выйти
-v, --version Показать информацию о версии
"
- exit 1
- ;;
- -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
- echo "ubdate 0.1 "
- exit 1
- ;;
- -*)
- echo 1>&2 "$0: Unknown \`$1' option"
- echo 1>&2 "Try \`$0 --help' for more information"
- exit 1
- ;;
- esac
- clear
- echo -en " \33[33m
==============================
1) Новые сообщения:
2) Слушать старьё:
3) Выход:
==============================
Выберите действие :# \33[0m"
- read num
- case $num in
- 1)
- if !( [ -d $MDIR ] ); then
- mkdir $MDIR ;
- fi
- cd $MINC
- for i in `ls -x1 *.[Rr][Mm][Dd] 2> /dev/null`; do
- MSDATE=$(date -r $i +Msg-%d%m%y-%H%M%S.wav)
- rmdtopvf -b $i | pvftowav > $MDIR/$MSDATE
- done
- cd $MDIR
- for i in `ls -x1 *.[Ww][Aa][Vv] 2> /dev/null`; do
- echo "Играю "$i"..."
- play $i
- done
- rm -f $MINC/*.[Rr][Mm][Dd]
- ;;
- 2)
- clear
- cd $MDIR
- LSDIR=$(ls -x1 *.[Ww][Aa][Vv] 2> /dev/null)
- echo -en " \33[33m
==============================
$LSDIR
==============================
Имя фаила :# \33[0m"
- read PLFILE
- #ls -x1 *.[Ww][Aa][Vv]
- echo "Играю "$PLFILE"..."
- play $PLFILE
- ;;
- 3)
- clear
- echo "Не туда попал? :)"
- sleep 3
- ;;
- *)
- clear
- echo "ОШИБКА! НЕ ВЕРНЫЙ АРГУМЕНТ! :("
- exit 1
- ;;
- esac
Скрипт для уведомления о новых сообщениях на
Ваш e-mail :
Copy Source | Copy HTML
- #!/bin/bash
- MESDIR=`ls /var/spool/voice/incoming/*.[Rr][Mm][Dd] 2> /dev/null | wc -l`
- if [ $MESDIR != "0" ]; then
- echo Для Вас есть $MESDIR сообщение\(ний\). | mail -s "Есть сообщения на автоответчике" $USER # Имя пользователя
- fi
Настраиваем его запуск через
Cron и получаем уведомления.
3) Прослушиваем сообщения через Flash плеер прямо в браузере
Для начала нам нужно скачать подходящий
Flash плеер.
Я остановил свой выбор на
ЭТОМЕго самый главный плюс - он автоматически генерирует
playlist из mp3 файлов в папке.
Скачиваем, распаковываем и настраиваем свой
WEB сервер.
Сам же плеер настраивать практически не нужно.
Я просто скопировал его себе в
htdocs, удалил папку
mp3Затем сделал символическую ссылку папки
/var/spool/voice/incoming в папку с плеером, и переименовал ссылку в
mp3Ещё пришлось дать права на исполнения на некоторые папки.
Затем я написал скрипт, для перегона файлов автоответчика rmd в mp3 формат:
Copy Source | Copy HTML
- #!/bin/sh
- find /var/spool/voice/incoming -type f -mtime +30 -delete #удаляю файлы старше 30 дней
- cd /var/spool/voice/incoming
- for i in `ls -x1 *.[RrWw][MmAa][DdVv] 2> /dev/null`; do
- dm_date=$(date -r $i +Msg-%d%m%y-%H%M%S)
- /usr/bin/rmdtopvf -b $i _tmp.pvf > /dev/null 2>&1
- /usr/bin/pvftowav _tmp.pvf $dm_date.wav > /dev/null 2>&1
- /usr/bin/sox -t wav $dm_date.wav -t mp3 $dm_date.mp3 > /dev/null 2>&1
- done
- rm -f *.[Pp][Vv][Ff]
- rm -f *.[Rr][Mm][Dd]
- rm -f *.[Ww][Aa][Vv]
Его запуск я добавил в
Cron с интервалом в 5 минут.
А если
открыть WEB сервер в интернет, то можно слушать сообщения где угодно и когда угодно.
Кому интересно, тот может поднять свой
Dial IN сервер и стать провайдером модемного интернета :)
Источники:
Настройка телефонного автоответчика под LinuxНастройка vgetty для автоответчика+PPP