Подключение к внешней базе

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Alien
Сообщения: 191
Зарегистрирован: Пт дек 20, 2013 4:46 pm
Благодарил (а): 72 раза
Поблагодарили: 38 раз

Подключение к внешней базе

Сообщение Alien » Чт янв 28, 2016 10:30 pm

Туплю, подскажите, знатоки.
Есть желание написать модуль для asterisk. Решил начать с простого - выборки звонков, а там может и дальше. И вот туплю - не выходит.
Рабочий, без МД, код выдачи страницы с записями на автоответчике:
СпойлерПоказать

Код: Выделить всё

<?php
// определяем начальные данные
$db_host = 'ХОСТ';
$db_name = 'БАЗА АСЕРИСК';
    $db_username = 'ПОЛЬЗОВАТЕЛЬ';
    $db_password = 'ПАРОЛЬ';
    $db_table_to_show = 'cdr';
// соединяемся с сервером базы данных
    $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
      or die("Could not connect: " . mysql_error());
// подключаемся к базе данных
    mysql_select_db($db_name, $connect_to_db)
      or die("Could not select DB: " . mysql_error());
// выбираем все значения из таблицы
    $qr_result = mysql_query("select * from " . $db_table_to_show . " WHERE filename <> 'none'")
      or die(mysql_error());
// выводим на страницу сайта заголовки HTML-таблицы
    echo '<table border="1" bgcolor="#ffffff">';
    echo '<thead>';
    echo '<tr>';
    echo '<th>Время</th>';
    echo '<th>С</th>';
    echo '<th>На</th>';
    echo '<th>Файл</th>';
    echo '</tr>';
    echo '</thead>';
    echo '<tbody>';
// выводим в HTML-таблицу все данные клиентов из таблицы MySQL
   while($data = mysql_fetch_array($qr_result)){
      echo '<tr>';
      echo '<td>' . $data['calldate'] . '</td>';
      echo '<td>' . $data['src'] . '</td>';
      echo '<td>' . $data['dst'] . '</td>';
      echo '<td><audio src="/cached/records/'. $data['filename'] . '" controls></audio></td>';
      echo '</tr>';
   }
    echo '</tbody>';
   echo '</table>';
// закрываем соединение с сервером  базы данных
    mysql_close($connect_to_db);
?>
С горем пополам вроде понял как модули и темплейты работают. В модуле хелп и настройки сохраняющиеся сделал.
Пытаюсь сделать вывод записей.
Темплейт:
СпойлерПоказать

Код: Выделить всё

<!-- table search records -->
[#if ARECORDS#]
    <table border="1" bgcolor="#ffffff">
    <thead>
    <tr>
        <th><#LANG_ADATE#></th>
        <th><#LANG_AFROM#></th>
        <th><#LANG_ATO#></th>
        <th><#LANG_ARECORD#></th>
    </tr>
    </thead>
    <tbody>
[#begin ARECORDS#]
    <tr>
        <td>[#calldate#]</td>
        <td>[#src#]</td>
        <td>[#dst#]</td>
        <td><audio src="[#AFILEDIR#]'.[#filename#]. '" controls></audio></td>
    </tr>
[#end ARECORDS#]
    </tbody>
    </table>
[#else RESULT#]
    <#LANG_ANORECORDS#>
[#CALLDATE#]
[#endif ARECORDS#]
 
Модуль поиска записей:
СпойлерПоказать

Код: Выделить всё

<?php
/*
* @version 0.1 (wizard)
*/

$db_host = $this->config['A_HOST'];
$db_port = $this->config['A_PORT'];
$db_name = $this->config['A_BASE'];
$db_username = $this->config['A_USERNAME'];
$db_password = $this->config['A_PASSWORD'];
$db_table = $this->config['A_TABLE'];

// соединяемся с сервером базы данных
    $ast_db = mysql_connect($db_host, $db_username, $db_password)
      or die("Could not connect: " . mysql_error());
// подключаемся к базе данных
    mysql_select_db($db_name, $ast_db)
      or die("Could not select DB: " . mysql_error());
// выбираем все значения из таблицы
    $qry = mysql_query("SELECT * FROM ".$db_table." WHERE filename <> 'none'")
      or die(mysql_error());


while ($res = mysql_fetch_array($qry)) {
$out['ARECORDS']['CALLDATE'] = $res['CALLDATE'];
$out['ARECORDS']['SRC'] = $res['SRC'];
$out['ARECORDS']['DST'] = $res['DST'];
$out['ARECORDS']['FILENAME'] = $res['FILENAME'];
}
    mysql_close($ast_db);

?>
И ничего :( Туплю даже на этом, куда уж там к сортировкам переходить.
Ткните носом, пожалуйста, как это грамотно сделать?

Заранее благодарен.
Ubuntu на Banana pi M2U Connect
Alien
Сообщения: 191
Зарегистрирован: Пт дек 20, 2013 4:46 pm
Благодарил (а): 72 раза
Поблагодарили: 38 раз

Re: Подключение к внешней базе

Сообщение Alien » Пт янв 29, 2016 11:35 am

Все, туп закончился :) Правильной будет такая конструкция:

Код: Выделить всё

while ($res[] = mysql_fetch_array($qry,MYSQL_ASSOC)) {
$out['ARECORDS'] = $res;
}
 
Ubuntu на Banana pi M2U Connect
eygen
Сообщения: 393
Зарегистрирован: Чт сен 25, 2014 5:37 pm
Откуда: Екатеринбург
Благодарил (а): 25 раз
Поблагодарили: 52 раза

Re: Подключение к внешней базе

Сообщение eygen » Вт фев 02, 2016 2:30 pm

Хвастайся, интересно что у тебя вышло :)
Alien
Сообщения: 191
Зарегистрирован: Пт дек 20, 2013 4:46 pm
Благодарил (а): 72 раза
Поблагодарили: 38 раз

Re: Подключение к внешней базе

Сообщение Alien » Вт фев 02, 2016 2:49 pm

Кое-что выходит :) на гитхабе лежит https://github.com/szolenko/app_asterisk
Пока не добавляю - понял что нужно код переписывать.
Астериски по-разному настроены и колонки в таблице записей разговоров могут отличаться, так что переделываю модуль с тонкими настройками на таблицы.
Пока играюсь с историей звонков. Как выйдет хоть какой целостный модуль - открою ветку форума в модулях и попрошу Сергея добавить в МД. Пока смысла нет - дольше прийдется на вопросы отвечать, чем модуль пилить :)
В планах взаимодействие с астериском. Пока реализовывал общение отдельными скриптами на стороне астериска, хочется впилить функционал в одном месте с управлением от МД, но это еще далеко в планах - я не волшебник, только учусь.
А вообще буду рад услышать комментарии по желаемому функционалу между МД и астериском.
Ubuntu на Banana pi M2U Connect
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

Re: Подключение к внешней базе

Сообщение Vit » Вт фев 02, 2016 4:44 pm

а какое железо нужно, чтобы начать это реализовывать?
Alien
Сообщения: 191
Зарегистрирован: Пт дек 20, 2013 4:46 pm
Благодарил (а): 72 раза
Поблагодарили: 38 раз

Re: Подключение к внешней базе

Сообщение Alien » Вт фев 02, 2016 4:53 pm

Вариантов железа много - главное использование ПО asterisk. У меня в роутере два sip-телефона. Выход на мобильную связь через свисток huawei, можно много свистков и, соответственно, много операторов. В принципе ничто не мешает поднять sip-клиент на андроиде и звонить по интернету через свою АТС на город.
Ubuntu на Banana pi M2U Connect
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

Re: Подключение к внешней базе

Сообщение Vit » Вт фев 02, 2016 4:56 pm

т.е. нужно sip телефон и по? или плату какую то еще нужно?
Alien
Сообщения: 191
Зарегистрирован: Пт дек 20, 2013 4:46 pm
Благодарил (а): 72 раза
Поблагодарили: 38 раз

Re: Подключение к внешней базе

Сообщение Alien » Ср фев 03, 2016 10:32 am

Asterisk это программная АТС, которая в свою очередь - маршрутизатор звонков. Дальше все зависит от желаемого результата, уровня знаний и количества вложений, но возможно все.
К примеру реализации. Исходные данные:
1. Два мобильных оператора, значит для их подключения к системе нужны два свистка (я реализовал на Huawei E180).
2. Городская сеть, значит нужна плата FXO usb или pci - нужно искать. В моем случае роутер TP-Link TD-VG3631 имеет линию.
3. Провайдер IP-телефонии, если есть и нужен - международные звонки, к примеру, или местный телеком предоставляет для внутренней сети.
4. Свои абоненты могут реализовываться на чем угодно. На сервере МД, смартфоне и планшетах-терминалах в комнатах можно поставить программные SIP-телефоны; можно купить "железные" IP-телефоны; обычные телефонные аппараты можно подключить через Cisco ATA или, как в моем случае, через тот-же TD-VG3631.

А дальше реализовываем сценарии маршрутизации как душа пожелает и знания позволят :)
1. Внутренние звонки между комнатами/телефонами и т.д., домофон. Есть идея озвучивать показания счетчиков на домофон, чтобы контролеры дальше домофона не ходили ;)
2. Входящий звонок на городскую сеть. Сервер приветствует звонящего, может уточнить кому именно адресован звонок, в стиле: "Для соединения с Сергеем нажмите 1" и т.д. Пробует соединить с нужным внутренним абонентом и при неудачной попытке предлагает оставить сообщение на автоответчик. Ночью все звонки - на автоответчик. Проверка автоответчика удаленно, отправка через инет сообщений с автоотчетчика.
3. Звоним со своего телефона (без платы за соединение) себе домой, набираем секретный код, номер городской сети и имеем выход на город/межгород/другого оператора баз оплаты.
4. При определенных событиях Алиса нам звонит и сообщает о проблемах, либо шлет смс, для реализации уведомлений при отсутствующем интернете.
и т.д. и т.п.
Настройка диалплана может быть из файла и из базы данных, то есть Алиса на лету может реагируя на события подправлять диалплан. В общем непаханое поле... :)
Ubuntu на Banana pi M2U Connect
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: Подключение к внешней базе

Сообщение ErmolenkoM » Ср фев 03, 2016 10:59 am

Alien писал(а): Есть идея озвучивать показания счетчиков на домофон, чтобы контролеры дальше домофона не ходили ;)
не прокатит, контролеры на то и контролеры, что бы контролировать показания счетчиков, они их смотрят, проверяют пломбы, иногда фотографируют.

А Asterisk у меня тоже есть - в мечтах, покачто :-)
aka msh555
Cubian на Cubietruck, Connect
Alien
Сообщения: 191
Зарегистрирован: Пт дек 20, 2013 4:46 pm
Благодарил (а): 72 раза
Поблагодарили: 38 раз

Re: Подключение к внешней базе

Сообщение Alien » Ср фев 03, 2016 11:13 am

Контролеры у нас разные бывают, точнее цели у них разные. Когда проверить прибор, а когда только за показаниями счетчика приходят. Оставляют бумажку, чтоб перезвонить передать показания.
Ubuntu на Banana pi M2U Connect
Ответить