Показаны сообщения с ярлыком gsm. Показать все сообщения
Показаны сообщения с ярлыком gsm. Показать все сообщения

18 янв. 2014 г.

Использование встроенной базы данных AstDB в Asterisk

AstDB является частью Asterisk  и устанавливается вместе с ним. Это простая БД (Barkley DB версии 1), без всяких заморочек. Если нужно подключить к Asterisk БД MySQL или PosrgreSQL - это тоже можно сделать, но для несложных задач вполне хватит и AstDB.

Предположим, у нас уже настроен GSM-модем в Asterisk - например, как я описывал здесь для модемов Huawei - и мы хотим звонить на мобильные номера наших абонентов (к примеру, в не рабочее время, когда они находятся вне доступа к SIP телефонам).

Хранится информация в БД с помощью трех понятий - семейство, ключ и значение. Семейство - это аналог таблицы, в которой хранятся пары ключ-значение.

Для начала, нам необходимо наполнить нашу БД номерами. Сделать это можно в процессе диалплана командой вроде:

exten => s,n,Set(DB(mobile/1112)=0991111111)

Здесь мы создаем (или модифицируем, если таковой ключ уже есть) ключ 1112 - SIP-номер для нашего абонента, в моем примере - в семейтве mobile. И присваиваем ему номер мобильного для этого абонента.

Но для большого количества абонентов делать такое не есть хорошо, тем более что БД хранит данные и после перезапуска Asterisk  и после перезагрузки сервера. Потому, целесообразнее - для моего примера - заранее заполнить БД данными из командной строки Asterisk.

Добавление/модификация значений:

database put <семейство> <ключ> <значение>
Пример: database put mobile 1112 0991111111

Для просмотра информации имеем команду:

database get <семейство> <ключ>

а также для просмотра всей БД:

database show

В плане набора (dialplan) пишем следующее:

...
; Вызываем макрос для дозвона по GSM, передавая ему SIP номер абонента как аргумент
exten => _1XXX,n,Macro(dial-mobile,${EXTEN})
....
[macro-dial-mobile]
; Вытаскиваем из БД значение номера для нужного абонента
; и помещаем в его переменную MobNumber
exten => 1,1(mobile),Set(MobNumber=${DB(mobile/${ARG1})})
; Звоним через GSM-модем
exten => 1,n,Dial(Dongle/dongle0/${MobNumber},100,dmghHtT)
...

Вот в общем-то и всё. 

25 окт. 2013 г.

Полезные команды Asterisk (буду дополнять)


1. Переполнение памяти SMS

Если нужно принять SMS-ку, а в консоли (asterisk -rvv) пишет следующее:

ERROR[15627]: at_response.c:1420 at_response_smmemfull: [dongle0] SMS storage is full

то, логично - нам необходимо почистить память для смс-ок.
Есть два вида памяти: 
  • память SIM
  • память модема
Для очистки памяти SIM применяем в консоли астериска последовательно команды:

dongle cmd <dongle_name> AT+CPMS=\"SM\",\"SM\",\"SM\" 
dongle cmd <dongle_name> AT+CMGD=1,4

Для очистки памяти модема применяем в консоли астериска последовательно команды:

dongle cmd dongle_name AT+CPMS=\"ME\",\"ME\",\"ME\" 
dongle cmd dongle_name AT+CMGD=1,4

Консолька нам выдасть что-то типа:

[dongle_name] 'AT+CMGD=1,4' Command queued for execute
[dongle_name] Got Response for user's command:'OK'
[Oct 25 07:41:57] NOTICE[15627]: at_response.c:1714 at_response: [dongle_name] Got Response for user's command:'OK'

Всё прошло гладко. Теперь можно принимать SMS-ки.

4 дек. 2012 г.

Проверка балланса GSM-модема, подключенного к Asterisk и формирование лога звонков за прошедшие сутки с отправкой по e-mail на Python 3

Недавно был описанный в заголовке таск.

Т. к. я очень люблю питончик, то скрипты пишу на нём. В скрипте выполняется команда астериска (USSD-запрос), далее вытягивается содержимое ответа на ussd, вытягивается лог звонков за сутки, формируется письмо в виде html и отсылается на заданные адреса по электронной почте.

1. Импорты необходимых библиотек:


#!/usr/bin/env python3
import os, smtplib, time, subprocess, shlex, sys, csv
from email.utils import formatdate
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

2. Формируем шапку письма - кому, куда, что и зачем :)


# me == my email address
# you == recipient's email address
# cc == copy's address
me = "asterisk@example.com"
сс = "recipient1@example.com"
you = "recipient2@example.com"
# Create message container - the correct MIME type is multipart/alternative.
msg = MIMEMultipart('alternative')
msg['Subject'] = "GSM modem balance ("+time.strftime("%m/%d/%Y",time.localtime())+")"
msg['From'] = me
msg['To'] = you+", "+cc
msg['Date'] = formatdate(localtime=True)

Отправка USSD-запроса сосстояния балланса и обработка результата. Для посылки запроса использую вызов bash команды через subprocess.call - может быть и слишком криво, но быстро и работает.

Затем идет пауза в 10 сек - необходима, чтобы пришел ответ от оператора.

17 авг. 2012 г.

Настройка модемов Huawei для работы с АТС Asterisk PBX

После некоторых мучений и поисков, что чего и куда, решил написать статью для потомков о настройке модемов Huawei для работы с АТС Asterisk.

Для начала установим необходимые пакеты. Всё нижесказанное для системы Debian. Для других дистрибутивов нужно будет подправить команды и возможно пути.

aptitude install asterisk-dev libusb libusb-dev subversion build-essential

Теперь идём на реальную вин-машину. Втыкаем туда нашего зверька, винда должна пошуршать дровами, затем надо установить из памяти устройства программульку U'manager. Она установит дрова именно на сам модем. Для верности, заходим в свойства в прожке и проверяем, виден ли наш модем.


Теперь скачиваем прожку для крякания модемчиков Хуявей тут Huawei_Modem_Unlocker.zip