Завалилось у меня тут несколько 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