Thứ Hai, 24 tháng 3, 2014

Sử dụng Raspberry Pi (hoặc máy tính) và modem quay số cũ làm máy trả lời điện thoại

Bước 1: Kết nối phần cứng
Kết nối modem quay số gắn ngoài có chức năng thoại với máy tính (qua cáp USB - RS232), cắm đường dây điện thoại và điện thoại cố định (qua cáp RJ11) vào hai cổng RJ11 tương ứng. Có thể cắm thêm microphone và loa (headphone) vào các ngõ microphone và speaker của modem.
Bước 2: Cài đặt phần mềm
Trên máy tính chạy Ubuntu hoặc Raspberry Pi chạy Raspbian, cài đặt các phần mềm cần thiết:
sudo apt-get install mgetty mgetty-voice mgetty-pvftools
Bước 3: Kiểm tra modem (bước này không bắt buộc nhưng nên thực hiện)
Cắm điện, bật công tắc, kiểm tra modem và cáp kết nối bằng minicom:
sudo apt-get install minicom
minicom -D /dev/ttyUSB0
Trong cửa sổ minicom, gõ ATZ, modem phải hiển thị chữ OK, không có chữ OK có nghĩa là modem không khởi tạo được, nguyên nhân có thể do chưa có điện vào modem hoặc cáp USB-RS232 bị hỏng. minicom cho phép tương tác với modem qua các lệnh AT, ví dụ gõ ATZ, modem trả lời OK, gõ ATI, ATI1, ATI2, ATI3… modem đưa ra câu trả lời tương ứng cho các lệnh này.
Ấn Ctrl-A sau đó X để thoát minicom.
hoặc dùng gnome-ppp, kppp...
Bước 4: Cấu hình ban đầu
Sửa đổi tập tin /etc/mgetty/voice.conf, dòng voice_devices sửa thành
voice_devices ttyUSB0
Sửa đổi tham số rings trong tập tin nếu cần thiết, đây là số lần đổ chuông trước khi hệ thống tự động chấp nhận cuộc gọi và kích hoạt chế độ máy trả lời điện thoại (số lần đổ chuông mặc định là 3, tối thiểu là 2).
rings 3
Thêm pi (hoặc người dùng hiện tại) vào nhóm voice.
sudo usermod -a -G voice pi
Bước 5A: Thu âm thông báo nhắc nhở (phương pháp 5A3 có thể thực hiện sau nếu không xác định được kiểu hoặc tốc độ lấy mẫu của modem)
Có một số cách khác nhau để thu âm thông báo nhắc nhở
5A1: Dùng điện thoại
Kiểm tra thiết bị với vm (không bắt buộc)
sudo vm devicetest
Thu âm trực tiếp thành định dạng tương thích với modem sử dụng điện thoại
sudo vm record standard.rmd
hoặc
sudo vm record -t standard.rmd
Chờ vm hiển thị thông báo Recording message… nhấc điện thoại lên và nói vào ống nói của điện thoại. Để dừng thu âm, ấn Ctrl-C.
5A2: Dùng microphone cắm vào modem
sudo vm record -m standard.rmd
Đối với cách 5A1 và cách 5A2, thông tin nhật ký của vm được lưu trong /var/log/mgetty/vm.log, mỗi phiên vm chiếm một vài dòng. Tập tin này có thể cho biết thông tin về kiểu modem, ví dụ:
detecting voice modem type
Multitech 2834ZDXv detected
initializing Multitech 2834 voice modem
Để biết tốc độ lấy mẫu mà modem hỗ trợ, chuyển đổi tập tin rmd thành pvf và kiểm tra tốc độ tập tin pvf bằng các lệnh:
rmdtopvf standard.rmd test.pvf
file test.pvf
test.pvf: portable voice format (binary 1 8000 32)
Thông số 8000 trong kết quả trên nghĩa là tốc độ lấy mẫu mà modem hỗ trợ là 8000 Hz.
5A3: Dùng tập tin wav thu âm hoặc tập tin wav đã có sẵn (cách này cần biết trước kiểu và tốc độ lấy mẫu của modem)
Để thu âm, có thể dùng chương trình thu âm mặc định trên Ubuntu, ví dụ thông báo nhắc nhở được lưu thành voice.wav (âm thanh PCM không nén, mono, 32 bit).
- Chuyển đổi sang 16 bit:
sox voice.wav -b 16 voice16.wav
- Kiểm tra lại định dạng của âm thanh:
file voice16.wav
voice16.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 22050 Hz
- Nghe lại (không bắt buộc):
sox voice16.wav -t alsa
- Chuyển đổi wav thành pvf ở tốc độ mà modem hỗ trợ (ở đây là 8000 Hz)
wavtopvf voice16.wav | pvfspeed -s 8000 > voice.pvf
- Kiểm tra lại định dạng của âm thanh:
file voice.pvf
voice.pvf: portable voice format (binary 1 8000 32)
- Nghe lại (không bắt buộc):
pvfspeed -s 8000 voice.pvf | pvftowav | sox -t wav - -t alsa
- Chuyển đổi pvf thành định dạng tương thích với modem (ở đây là MT_2834, 4 bit)
pvftormd MT_2834 4 voice.pvf standard.rmd
Chạy pvftormd -L để biết các kiểu modem được hỗ trợ. Có thể xem các tập tin nhật ký trong thư mục /var/log/mgetty để biết kiểu của modem mà vgetty phát hiện được. Nếu định dạng hoặc tốc độ của standard.rmd không tương thích với modem, người gọi sẽ không nghe thấy thông báo nhắc nhở.
- Kiểm tra lại định dạng của âm thanh:
file standard.rmd
standard.rmd: raw modem data (Multitech2834 / compression type 0x0400)
Bước 5B: Nghe lại thông báo nhắc nhở (không bắt buộc, chung cho cả ba cách thu âm ở bước 5A)
- Nghe lại trên ống nghe của điện thoại
sudo vm play standard.rmd
hoặc
sudo vm play -t standard.rmd
- Nghe lại trên loa (headphone) cắm vào modem:
sudo vm play -s standard.rmd
- Nghe lại trên Raspberry Pi hoặc máy tính:
rmdtopvf standard.rmd | pvfspeed -s 8000 | pvftowav | sox -t wav - -t alsa
Bước 5C: Đặt thông báo nhắc nhở vào đúng vị trí
sudo cp standard.rmd /var/spool/voice/messages/standard.rmd
Bước 6: Cấu hình để vgetty chạy tự động
Trên Raspbian
Sửa /etc/inittab, tìm đoạn
# Example how to put a getty on a modem line.
#
#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3
thêm vào ngay dưới đoạn đó dòng
USB0:2345:respawn:/usr/sbin/vgetty ttyUSB0
Thêm dấu # để bỏ bớt các getty không cần thiết từ tty2 đến tty6, ttyAMA0.
Chạy
sudo telinit q
để cập nhật init mà không phải khởi động lại
Trên Ubuntu
Tạo tập tin /etc/init/ttyUSB0.conf với nội dung
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec /usr/sbin/vgetty ttyUSB0
Khởi động lại
Nếu chỉ muốn chạy thủ công
sudo vgetty /dev/ttyUSB0
Thông tin nhật ký của vgetty được lưu trong /var/log/mgetty/vg_ttyUSB0.log. Thông tin này có thể cho biết modem có khởi tạo được hay không, kiểu modem là gì, có phát được thông báo nhắc nhở không (thông báo lỗi nếu định dạng hoặc tốc độ lấy mẫu của tập tin standard.rmd không tương thích với modem, xem lại bước 5A để biết cách tạo tập tin tương thích)...
Bước 7: Thử nghiệm máy trả lời tự động
Dùng một điện thoại khác gọi tới số điện thoại cố định, sau 3 tiếng chuông, hệ thống sẽ chuyển sang chế độ trả lời tự động. Điện thoại gọi sẽ nghe thấy thông báo nhắc nhở tự động và có thể để lại lời nhắn. Lời nhắn để lại cho điện thoại cố định được lưu trong thư mục /var/spool/voice/incoming.
Bước 8: Phát lại lời nhắn đã lưu
- Trên ống nghe của điện thoại:
vm play message.rmd
hoặc
vm play -t message.rmd
- Trên loa (headphone) cắm vào modem:
vm play -s message.rmd
- Trên Raspberry Pi (hoặc máy tính):
rmdtopvf message.rmd | pvftowav | sox -t wav - -t alsa
rmdtopvf message.rmd | pvfspeed -s 8000 | pvftowav | sox -t wav - -t alsa
Bước 9: Xử lý cuộc gọi tự động dựa vào thông tin số gọi đến (đây là bước mở rộng, không bắt buộc)
Tạo tập tin /etc/mgetty/message.sh với quyền +x có nội dung (chỉ là ví dụ)
#!/bin/bash


MESSAGE=$1
CALLERID=$2
CALLNAME=$3


WAVFILE=`echo $MESSAGE | sed 's/.rmd$/.wav/'`


rmdtopvf $MESSAGE | pvfspeed -s 8000 | pvftowav >$WAVFILE


echo "Number: $CALLERID Name: $CALLNAME" >> /home/pi/incomings.txt


exit 0
Sửa đổi dòng message_program trong /etc/mgetty/message.sh thành
message_program /etc/mgetty/message.sh

Bài này được viết sau khi đã kiểm tra thực tế (từ bước 1 đến bước 8), sử dụng thông tin tham khảo từ http://frank.harvard.edu/~coldwell/answering_machine/

Không có nhận xét nào: