Auto provisioning для grandstream или вынимаем и вкладываем душу в GXP1165

от автора

До недавнего времени в качестве VoIP аппаратов мы использовали продукцию Fanvil. И в целом всем были довольны. Управление из единой точки есть, качество связи удовлетворительное, но оставалось ощущение какой-то незаконченности или даже недосказанности (понимайте как хотите :))) В общем поиск «идеального телефона» в фоновом режиме, но все время продолжался. И вот мне в руки попал Grandstream GXP1165. Имея более именитого производителя данная модель находится в той же ценовой категории, что и китайские Fanvil-ы. Обладает всеми необходимыми функциями и имеет более интуитивное обозначение на кнопках и портах подключения. Кроме того, с некоторых пор, одним из решающих факторов при выборе IP телефона для меня является функция авто провижинга. Данная модель grandstream его обещала. Об этом дальше и пойдет речь.

Мой опыт работы с функцией auto provisioning основывался на уже упомянутой китайской продукции. И я наивно полагал, что с Grandstream все будет выглядеть примерно также. В общем-то так и вышло. Но я не предполагал насколько примерно все окажется. Чтобы не быть голословным приведу два куска настроек с одного и другого аппарата. Настройки получены путем экспорта файла.
Fanvil:

Static IP       :192.168.1.179 Static NetMask     :255.255.255.0 Static GateWay     :192.168.1.1 Default Protocol   :2 Primary DNS        :202.96.134.133 Alter DNS          :202.96.128.68 DHCP Mode          :1 DHCP Dns           :1 Domain Name        : Host Name          :VOIP Pppoe Mode         :0 HTL Start Port     :10000 HTL Port Number    :200 SNTP Server        :209.81.9.7 

А теперь держитесь. Кусок настроек из конфига grandstream:

P335=2 P90=0 P91=0 P212=1 P92=0 P93=0 P338=0 P1339=0 P94=0 P2340=0 P95=0 P2341=0 P2342=0 P96=97 P2343=0 P97=1 P99=0 P10=168 P11=0 P2346=0 P2347=0 P12=160 P13=255 P2348=0 P14=255 

А! Как вам?! Впечатлены? По правде говоря я вас немножко обманул. Рабочий конфиг телефона выглядит иначе. Но зато вы можете представить мою растерянность, когда я увидел конфигурацию которую скачал с аппарата.
Сразу видны плюсы и минусы одного и другого собрата. Китайцы сделали настройки более приближенные к человеческому пониманию. Зато американцев выручает хорошее количество документации. В конечном итоге выручило оно и меня.
Файл конфигурации для grandstream можно создать двумя способами. При помощи утилит на сайте производителя (инструменты есть для Windows и для Linux) и в ручную, через XML файл. С первым способом у меня не сложилось. Поэтому опишу второй.
Как вы уже поняли, названия полей конфигурации зашифрованы и найти их описание не то чтобы сложно, но порыть инет пришлось. Что-то взял тут, что-то здесь и в целом получился вот такой файл.

<?xml version="1.0" encoding="UTF-8" ?>  <gs_provision version="1">  <mac>000a91547c9c</mac>  <config version="1">  <!-- Admin Password -->  <P2>PasswordQWER</P2>  <P3>Grandstream</P3>  <!-- SIP Registration. 0-no,1-yes -->  <P31>1</P31>  <!-- Register Expiration (in minutes. default 1 hour, max 45 days) -->  <P32>60</P32>  <!-- Authenticate password -->  <P34>SIPassword</P34>  <!-- SIP User ID -->  <P35>111</P35>  <!-- Authenticate ID -->  <P36>111</P36>  <P40>5561</P40>  <!-- SIP Server -->  <P47>sip.address.ru:5561</P47>  <!-- DNS Mode. 0-A Record, 1-SRV, 2-NAPTR/SRV, 3-Use Configured IP -->  <P103>0</P103>  <!-- Time Format 0-12, 1-24 -->  <P122>1</P122>  <P148>Grandstream Provisioning</P148>  <P237>config.address.ru</P237>  <!-- Account Name. Cannot be empty. -->  <P270>TestConfig</P270>  <!-- Account 1 -->  <!-- Account Active (In Use). 0-no, 1-yes -->  <P271>1</P271>  <!-- Enable Phonebook. 0(Disabled)/1(HTTP)/2(TFTP)/3(HTTPS) -->  <P330>1</P330>  <!-- Phone Book XML Server Path -->  <P331>config.address.ru</P331>  <!-- Phone Book Download Interval (in minutes) -->  <P332>5</P332>  <!-- Remove Manually-edited entries on Download. Possible values: 0(No)/1(Yes) -->  <P333>1</P333>  <!-- XML FILE ENCRYPTION -->  <P1349>password123</P1349>  <P1362>ru</P1362>  <!-- Degree Unit. auto - Automatic, f - Fahrenheit, c - Celsius. Default is auto -->  <P1379>c</P1379>  </config>  </gs_provision>  

Данный конфиг позволяет зарегистрировать аппарат на SIP сервере работающем по не стандартному порту 5561. Также включены незначительные особенности вроде отображения погоды в Цельсиях и настройки пути к адресной книге. Параметры которые не указаны, будут установлены по умолчанию.
Готовый файл необходимо зашифровать.

openssl enc -e -aes-256-cbc -k password123 -in basefile.xml -out cfg000d91447b9b.xml  

Имя файла должно иметь вид cfg[macaddress].xml. Раздавать файл будем через HTTP, поэтому просто выкладываем его в /var/www/ (Установку apache в виде apt-get install apache2, извините, описывать не буду :))
Далее по аналогии с Fanvil-ами автоматизируем этот процесс.
Создадим файл users со следующим содержимым:

000a91547c9c 111 SIPassword User Grand 

Обратите внимание, mac адрес должен быть написан маленькими буквами.

… и bash файл который будет брать настройки из users

#!/bin/bash uspath=/opt/neoflex/gxp1165 usfile=(`cat $uspath/users`) macdir=/var/www/ a=0 #macaddrr b=1 #number c=2 #pass d=3 #2name e=4 #1name while [ ${usfile[$a]} ] do dfile=$macdir'cfg'${usfile[$a]} cat <<EOF >>$dfile <?xml version="1.0" encoding="UTF-8" ?> <gs_provision version="1"> <mac>${usfile[$a]}</mac> <config version="1"> <!-- Admin Password --> <P2>PasswordQWER</P2> <P3>DisplayTest</P3> <!-- SIP Registration. 0 - no, 1 - yes --> <P31>1</P31> <!-- Register Expiration (in minutes. default 1 hour, max 45 days) --> <P32>60</P32> <!-- Authenticate password --> <P34>${usfile[$c]}</P34> <!-- SIP User ID --> <P35>${usfile[$b]}</P35> <!-- Authenticate ID --> <P36>${usfile[$b]}</P36> <P40>5561</P40> <!-- SIP Server --> <P47>sip.server.ru:5561</P47> <!-- DNS Mode. 0 - A Record, 1 - SRV, 2 - NAPTR/SRV, 3 - Use Configured IP. Default is 0 --> <P103>0</P103> <!-- Time Format --> <P122>1</P122> <P148>Grandstream Provisioning</P148> <!-- HTTP Firmware Update Server --> <P192>config.server.ru</P192> <P237>config.server.ru</P237> <!-- Account Name. Cannot be empty. --> <P270>${usfile[$d]} ${usfile[$e]}</P270> <!-- Account 1 --> <!-- Account Active (In Use). 0 - no, 1 - yes --> <P271>1</P271> <!-- Enable Phonebook0(Disabled)/1(HTTP)/2(TFTP)/3(HTTPS) --> <P330>1</P330> <!-- Phone Book XML Server Path --> <P331>sip.server.ru</P331> <!-- Phone Book Download Interval (in minutes) --> <P332>60</P332> <!-- Remove Manually-edited entries on Download. Possible values: 0 (No) / 1 (Yes) --> <P333>1</P333> <!-- XML FILE ENCRYPTION --> <P1349>password</P1349> <P1362>ru</P1362> <!-- Update Interval.Default is 15 --> <P1378>60</P1378> <!-- Degree Unit. auto - Automatic, f - Fahrenheit, c - Celsius. Default is auto --> <P1379>c</P1379> </config> </gs_provision> EOF openssl enc -e -aes-256-cbc -k password -in $dfile -out $dfile.xml rm $dfile a=`expr $a + 5` b=`expr $b + 5` c=`expr $c + 5` d=`expr $d + 5` e=`expr $e + 5` done 

Все. На выходе /var/www/ получаем зашифрованный XML-ник cfg000a91547c9c.xml
В настройках самого аппарата достаточно прописать путь к серверу конфигурации и пароль для расшифровки конфиг файла.

image
Внизу нажимаем кнопку «Сохранить и применить» и отправляем в ребут кнопкой «Перезагрузка» в верхнем правом углу экрана.

Но на этом я не успокоился. В процессе рытья в документации мне попалось описание настройки адресной книги для телефона. И я, не долго думая, забабахал скрипт который генерит phonebook.xml собирая его из sip конфигов.
Важно! У меня параметр callerid имеет вид SecondName FirsName<111>. То есть все экстеншены должны иметь поле callerid и именно с тремя значениямиt.

#!/bin/bash a=0 b=1 c=2 book=phonebook.xml echo | sed -n '/callerid\=/p' /etc/asterisk/sip*.conf| sed s'/callerid\=//'g | sed s'/</ /'g | sed s'/>//'g | sed s'/;//'g >> tmp.file spisok=(`cat tmp.file`) echo '<?xml version="1.0" encoding="UTF-8"?>' >> $book echo "<AddressBook>" >> $book while [ ${spisok[a]} ];do cat <<EOF >>$book     <Contact>         <LastName>${spisok[a]}</LastName>         <FirstName>${spisok[b]}</FirstName>         <Phone>             <phonenumber>${spisok[c]}</phonenumber>             <accountindex>1</accountindex>             <downloaded>0</downloaded>         </Phone>         <Groups>             <groupid>2</groupid>         </Groups>     </Contact> EOF a=`expr $a + 3` b=`expr $b + 3` c=`expr $c + 3` done echo "</AddressBook>" >>$book cp phonebook.xml /var/www/ rm tmp.file 

Если путь к адресной книге прописан правильно, то после перезагрузки справочник будет подтянут на аппарат. Убедиться в этом можно будет нажав кнопку с телефонной книгой на корпусе телефона или в настройках через web интерфейс.

image

Но и этого мне было мало. Итак. Финальный аккорд.
Пожалуй единственным минусом аппарата можно назвать скудный выбор рингтонов. Всего три да и те какие-то страшненькие. Но! Рингтоны можно залить свои!
Описан способ для Linux. Уилита для Windows здесь.
Скачиваем и распаковываем утилиту

wget http://www.grandstream.com/tools/Ring_Tone_Generator/linux_music_ring_tone_gen.zip unzip linux_music_ring_tone_gen.zip 

Переименовываем sox.linux в просто sox и назначаем права

mv sox.linux sox chmod 755 sox 

Читаем readme.
./sox sound.wav ring1.ring
Все просто. На входе wav файл на выходе ring1.ring. Файлов может быть не более трех ring1.ring, ring2.ring и ring3.ring соответственно. Размер не более 100 Кб, сами авторы рекомендуют не более 70Кб для каждого файла. Получившимся ring-ам необходимо поменять расширение на .bin и залить например туда же где и конфиг файлы.
Для заливки рингтонов в конфиг файле служит поле <P192>. Оно описывает путь к файлам обновления.
Все. Пускаем телефон в ребут и командой tail -f /var/log/apache/access.log смотрим чего происходит. Выглядеть будет примерно вот так.

192.168.0.16 -- [05/Nov/2013:17:15:52 +0400] "GET /language.txt HTTP/1.1" 404 480 "-" "Grandstream Model HW GXP1165 SW 1.0.5.26 DevId 000a91547c9c" 192.168.0.16 -- [05/Nov/2013:17:16:10 +0400] "GET /cfg000a91547c9c HTTP/1.0" 200 1787 "-" "Grandstream Model HW GXP1165 SW 1.0.5.26 DevId 000a91547c9c" 192.168.0.16 -- [05/Nov/2013:17:16:14 +0400] "GET /cfg000a91547c9c.xml HTTP/1.0" 200 1849 "-" "Grandstream Model HW GXP1165 SW 1.0.5.26 DevId 000a91547c9c" 192.168.0.16 -- [05/Nov/2013:17:16:32 +0400] "GET /gxp1160fw.bin HTTP/1.0" 404 537 "-" "Grandstream Model HW GXP1165 SW 1.0.5.26 DevId 000a91547c9c" 192.168.0.16 -- [05/Nov/2013:17:16:36 +0400] "GET /gxp1160fw.bin HTTP/1.0" 404 537 "-" "Grandstream Model HW GXP1165 SW 1.0.5.26 DevId 000a91547c9c" 192.168.0.16 -- [05/Nov/2013:17:16:38 +0400] "GET /ring1.bin HTTP/1.0" 200 65847 "-" "Grandstream Model HW GXP1165 SW 1.0.5.26 DevId 000a91547c9c" 192.168.0.16 -- [05/Nov/2013:17:16:39 +0400] "GET /ring2.bin HTTP/1.0" 200 39388 "-" "Grandstream Model HW GXP1165 SW 1.0.5.26 DevId 000a91547c9c" 192.168.0.16 -- [05/Nov/2013:17:16:42 +0400] "GET /ring3.bin HTTP/1.0" 404 533 "-" "Grandstream Model HW GXP1165 SW 1.0.5.26 DevId 000a91547c9c"  

ссылка на оригинал статьи http://habrahabr.ru/post/200982/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *