Всем привет!
Завалилось у меня тут несколько 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) Скрипты, я их честно не проверял, а просто скопировал.
Прослушивание сообщений:
- #!/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 2007Options:
-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 :
- #!/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 формат:
- #!/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
Редкий материал. Спасибо, добавил в закладки.
Комментарий от www2 — Май 11, 2009 @ 9:04 дп
Будет ли это все работать с Winmodem`ом:
01:02.0 Communication controller: Conexant Systems, Inc. CX06834-11 HCF V.92 56k Data/Fax/Voice/Spkp Modem (rev 89)
После установки драйверов с linmodems.org определился как /dev/ttySHCF0
После команды
/andrey# vm record -m -l ttySHCF0 -v standard.rmd
vm: recording voice file standard.rmd
Recording message…
Recording complete.
файл standard.rmd имеет размер 0 байт
В чем может быть причина?
И еще вопрос:
1) Записать с помощью микрофона
«Подключаем микрофон, даём команду и говорим:»
Подключать в разъем MIC звуковой карты или MIC модема?
Комментарий от Andrey — Май 16, 2009 @ 10:58 пп
Если модем проставился и работает почему бы и нет.
Наверное в звуковую карту.
Я просто скачал звуковой файл из интернета и сконвертировал его.
Запиши сообщение в wav файл и сконвертируй его.
standard.rmd – Это файл приветствия автоответчика.
Позвони себе домой и проверь автоответчик.
Без файла приветствия просто модем сигнал «ПИК» в линию подаст и начнёт писать сообщение.
Если что, следи за логами программы.
Комментарий от itbg — Май 16, 2009 @ 11:10 пп
Такой вопрос:
В /etc/inittab пишим
# starting vgetty
S1:2345:respawn:/usr/sbin/vgetty ttyS0
В конце пишу естественно ttySHCF0
Но в Ubuntu нет inittab…
Как запустить vgetty на ttyshcf0 при старте системы в Ubuntu?
Комментарий от Andrey — Май 17, 2009 @ 3:08 пп
Вроде в Ubuntu отказались от использования inittab и перешли на систему upstart
Лично я Ubuntu не использую.
А без этой строчки автоответчик не работает ?
Почитай ТУТ кое-какую информацию о upstart в Ubuntu
Комментарий от itbg — Май 17, 2009 @ 8:12 пп
Подзабил на внутренний PCI Winmodem. Достал Zyxel omni 56K EE для своих экспериментов.
Задача: настроить для начала автоответчик, затем по возможности, отправку и прием факсов.
Пока что использую Ubuntu. Но выбор дистрибутива не критичен. Какие подводные камни ожидают?
Пока что с upstart`ом разбираюсь..
Комментарий от Andrey — Май 18, 2009 @ 5:08 пп
Итак, для Ubuntu-like дистрибутивов:
В каталоге /etc/event.d/ создал файл ttyS0
Его содержимое:
start on stopped rc2
start on stopped rc3
start on stopped rc4
start on stopped rc5
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
respawn
exec /usr/sbin/vgetty ttyS0
Теперь автоответчик заработал по инструкции.
Комментарий от Andrey — Май 31, 2009 @ 7:18 пп
Поздравляю!
Теперь и Ты можешь наслаждаться прелестями старой техники :)
Комментарий от itbg — Май 31, 2009 @ 8:28 пп
Теперь с факсами поэкспериментировать желание появилось…
Hylafax ?
И еще. Возможность отправки факсов- это доп. услуга на АТС или ничего дополнительно подключать не нужно?
Комментарий от Andrey — Май 31, 2009 @ 9:06 пп
Приём и отправку факсов осуществляет модем.
Ничего дополнительного включать не нужно.
Я факсами не пользуюсь, поэтому этих настроек не касался.
Комментарий от itbg — Май 31, 2009 @ 10:20 пп