Архив рубрики: Публикации

Что такое DSL (Digital Subscriber Line) и как это работает

Цифровая абонентская линия (DSL) — это технология высокоскоростного Интернета, которая позволяет передавать цифровые данные по проводам телефонной сети. DSL не мешает телефонной линии; одна и та же линия может использоваться как для Интернет, так и для обычных телефонных служб. Скорость загрузки DSL колеблется между 384 Кбит/с и 20 Мбит/с. Самой популярной реализацией DSL сегодня является Асимметричная цифровая абонентская линия (ADSL). Это асимметрично, потому что скорость загрузки и загрузки не одинакова (не синхронизирована). Загрузка обычно происходит намного медленнее, чем загрузка, поскольку она обычно не так необходима, как высокая скорость загрузки.

Следует отметить, что расстояние, на которое данные должны перемещаться, несколько снижает скорость загрузки и загрузки. Современный ADSL может обрабатывать 24 Мбит / с на 2-километровом участке провода. Однако, когда провод имеет длину более 2 километров (или что-то большее, чем 1,25 мили), передача данных уменьшается. Именно из-за этого, в то время как ADSL может иметь большую скорость загрузки, чем дальше человек от поставщика услуг, тем меньше вероятность того, что он получит. Поэтому поставщики услуг склонны рекламировать низкий бал, но потребитель может получить больше. Все зависит от расстояния, которое должна пройти информация по медным проводам.

DSL разделяет частоты, используемые в одиночной телефонной линии, на две основные полосы. Высокочастотный диапазон используется для отправки данных ISP, а низкочастотная полоса используется для отправки речевых данных. Благодаря этой технологии мы можем наслаждаться доступом в Интернет, одновременно пользуясь телефоном. DSL можно легко установить и работать вместе с любым существующим оборудованием для вашей стандартной телефонной линии.

Обычный DSL

Обычная DSL — это стандартная форма DSL, которая требует передачи существующей наземной линии передачи данных и голоса. В обычной DSL клиенты обычно объединяют телефон и Интернет вместе и имеют доступ одновременно. Голосовые сигналы передаются по проводам на гораздо более низкой частоте, чем сигналы данных, и, таким образом, позволяют передавать данные, не мешая речевым сигналам по той же линии.

Naked DSL

В naked DSL клиенты не обязаны иметь существующую стационарную связь, имеющую доступ к Интернету. Это позволяет клиентам отказаться от дополнительных сборов, связанных с стационарными телефонами, и переключиться в первую очередь на их план сотового телефона. Было много споров по поводу naked DSL, но неизбежно, многие провайдеры телефонов были вынуждены предложить его в рамках своих упакованных планов.

Настройка DSL

Для DSL-сервиса необходим DSL-модем (известный как DSL-приемопередатчик) для подключения к телефонной линии или разъему. Затем DSL-модем подключается к компьютеру. В конце телефонной линии телефонная линия подключается к цифровому мультиплексору доступа к абонентской линии (DSLAM). DSLAM — это в основном сетевое устройство, которое подключает несколько линий DSL к высокоскоростному интернет-магистрали.

DSL-модем, DSLAM и компьютер должны быть синхронизированы друг с другом, чтобы служба DSL работала должным образом. Процесс синхронизации выглядит следующим образом:

  • Когда модем DSL включен, он проходит самотестирование.
  • Затем DSL-модем проверяет свое соединение с компьютером через порт Ethernet или USB.
  • Затем DSL-модем пытается синхронизировать с DSLAM.

Процесс синхронизации обычно длится несколько секунд. В модемах DSL есть индикатор, обозначенный как DSL или LINK. Если процесс синхронизации будет успешным, зеленый индикатор останется включенным.

Технологии DSL

Было много версий DSL, поскольку за эти годы это было многократно обновлено. Ниже приведен полный список версий и типов DSL, которые стали доступны для общественности.

Цифровая абонентская линия ISDN

Цифровая абонентская линия ISDN была одной из первых форм DSL и использовала технологию, известную как ISDN для передачи сигналов.

Цифровая абонентская линия с высокой скоростью передачи данных

Цифровая абонентская линия с высокой скоростью передачи данных была первым устройством DSL, которое использовало витые медные кабели для передачи сигналов в высокочастотном спектре.

Симметричная цифровая абонентская линия

В Symmetric Digital Subscriber Line одинаковое количество данных загружается и загружается в любой момент времени.

Симметричная высокоскоростная цифровая абонентская линия

Симметричная высокоскоростная цифровая абонентская линия была создана для более быстрой замены Symmetric Digital Subscriber Line.

Асимметричная цифровая абонентская линия

В Асимметричной цифровой абонентской линии загружается больше информации, чем загружается в любой момент времени.

Асимметричная цифровая абонентская линия 2

Асимметричная цифровая абонентская линия 2 обеспечивала качество, которого не хватало предшественнику.

Асимметричная цифровая абонентская линия 2 Plus

Асимметричная цифровая абонентская линия 2 Plus увеличила скорость передачи данных DSL на 200%.

Асимметричная цифровая абонентская линия Plus Plus

Асимметричная цифровая абонентская линия Plus Plus была создана в Японии и увеличила скорость передачи данных DSL до 50 мегабит в секунду и увеличила спектр, используемый для 3,75 мегагерц.

Адаптивная цифровая абонентская линия

Адаптивная цифровая абонентская линия используется для снижения скорости при увеличении диапазона и производительности сигнала.

Высокоскоростная цифровая абонентская линия

Высокоскоростная цифровая абонентская линия была просто более быстрой версией предыдущих моделей.

Высокоскоростная цифровая абонентская линия 2

Высокоскоростная цифровая абонентская линия 2 была изобретена для замены уже увеличенных скоростей высокоскоростной цифровой абонентской линии.

Etherloop

Etherloop — это технология, позволяющая использовать кабель Ethernet для передачи данных и голоса по телефонной линии.

Uni-DSL

Uni-DSL — это система, внедренная Texas Instruments, которая работает со всеми формами DMT, который представляет собой метод разделения частот на высокие и низкие сигналы, позволяющий передавать данные и голос по одному и тому же проводу одновременно.

Гигабитная цифровая абонентская линия

Гигабитная цифровая абонентская линия предлагает скорости, которые раньше никогда не видели в сообществе DSL, способных передавать данные со скоростью примерно 128 Мбит / с.

Универсальная цифровая абонентская линия с высокой скоростью передачи данных

Универсальная цифровая абонентская линия с высоким битрейтом — это новейшая версия DSL и является примером волоконно-оптической технологии. Цифровая абонентская линия универсальной высокой скорости передачи данных обеспечивает чрезвычайно быструю скорость и надежное обслуживание при правильной установке.

ADSL (асинхронный DSL)

ADSL (асимметричный DSL) — это тип DSL, где пропускная способность по восходящему и нисходящему каналам назначается различной пропускной способностью. Типичные конфигурации сегодня — 2 Мбайт ниже по течению и 128 КБ вверх по течению.

Downstream — это данные, которые вы загружаете по сети в локальные системы. Upstream — это данные, которые вы отправляете из своих локальных систем по всей сети.

IDSL (ISDN через DSL)

IDSL (ISDN через DSL) является стандартом 144Kb для DSL. IDSL используется, когда другие типы DSL недоступны. IDSL работает медленно и относительно дорого, но иногда это может быть наилучшим вариантом.

RADSL (адаптируемая скорость DSL)

RADSL (Rate Adaptive DSL) — это асимметричный DSL-вариант, который может регулировать скорость DSL-соединения в зависимости от расстояния от центрального офиса (CO) и качества соединения.

SDSL (симметричный DSL)

SDSL (однолинейная DSL) — это тип DSL, в котором восходящий и нисходящий каналы настроены на одну и ту же полосу пропускания. SDSL обычно работает на скорости 1,5 Мбит / с вверх и вниз по течению.

VDSL (очень высокая скорость передачи DSL)

VDSL (очень высокая скорость передачи данных DSL) — это асимметричная версия DSL, которая работает на очень высоких скоростях, но только на расстоянии до 1000 футов от центрального офиса (CO).

DSL Lite

DSL Lite — это асимметричный вариант DSL, который размещает разделитель DSL в центральном офисе telco, а не в помещении клиента.

G.SHDSL (однопарная высокоскоростная DSL)

G.SHDSL (однопарная высокоскоростная цифровая абонентская линия) представляет собой вариант SDSL, который определен стандартом МСЭ G.991. Он работает на симметричных скоростях от 192 Кбит / с до 2304 Кбит / с по одной линии и 384 Кбит / с — 4608 Кбит / с по двум парам.

Европейцы относятся к G.SHDSL как «SDSL», вызывая путаницу с существующим оборудованием SDSL.

DSL-фильтры

В большинстве домов есть две пары проводов от местной телефонной компании. Если в доме используется только одна телефонная линия, DSL можно установить на вторую пару.

Если в доме используются обе телефонные линии, DSL должен использовать одну проводную пару с голосовым трафиком. Это делается с использованием фильтра DSL.

Фильтр DSL представляет собой небольшую коробку, прикрепленную к проводной паре, чтобы разделить ее на две отдельные пары проводов — одну для голосового трафика, а другую для трафика DSL.



2018-10-01T09:57:07
Вопросы читателей

FreePBX, Elastix. Уведомление о пропущенных вызовах

Очень часто, когда возникают большие нагрузки на операторов, клиент может долго ожидать ответа и может не дождавшись положить трубку. В результате, потенциальный клиент до вас не дозвонился, но он обязательно дозвонится до кого-то из ваших конкурентов. Поэтому необходим своевременный отчет о таких пропущенных вызовах, чтобы можно было быстро перезвонить человеку.

Уведомления при потерянных вызовах на IVR

Если вызовы поступают на IVR, и звонящий не дождавшись ответа положил трубку, то для отчетов правим файл /etc/asterisk/extensions_override_freepbx.conf

# nano /etc/asterisk/extensions_override_freepbx.conf

 

[ivr-1] ;Номер ivr

exten => h,1,System(python /usr/local/bin/sendmail.py "Пропущенный вызов в ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}с номера ${CALLERID(name)}")


Сохраняем и делаем reload астериска. Тепер. если позвонивший положит трубку слушая голосовое меню, то на почту прийдет уведомление. Сам  sendmail.py находится в конце статьи.

Уведомление в группах вызова

Если необходимо уведомлять о потерянных вызовах в группах вызова, то также правим файл /etc/asterisk/extensions_override_freepbx.conf

# nano /etc/asterisk/extensions_override_freepbx.conf

 

[ext-group]

exten => h,1,System(python /usr/local/bin/sendmail.py "Пропущенный вызов в ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}с номера ${CALLERID(name)}")

exten => h,2,Macro(hangupcall,)

 Уведомление в очередях

Если же вызов поступает в очередь, то в /etc/asterisk/extensions_override_freepbx.conf  прописываем

[ext-queues]

exten => h,1,ExecIf($["${CDR(dstchannel)}"=""]?System(python /usr/local/bin/sendmail.py "Пропущенный вызов в ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} с номера ${CALLERID(name)}"))

exten => h,2,Macro(hangupcall,)

Сам файл sendmail.py

#!/usr/bin/python

# -*- coding: utf-8 -*-

from email.MIMEText import MIMEText

import smtplib

import sys

sender = 'noanswer@yourdomain.ru' # От кого

recivers = 'youremail' # Ваш e-mail

host = "localhost"

text = sys.argv[1]

msg = MIMEText(text, "", "utf-8")

msg["Subject"] = "Уведомление о пропущенном вызове"

smtpObj = smtplib.SMTP('localhost')

smtpObj.sendmail(sender, recivers, msg.as_string())

smtpObj.close()


Не забудте дать права на запуск

chmod 755 /usr/local/bin/sendmail.py



2018-09-29T23:30:16
Asterisk

Asetrisk, распознавание и генерации речи с помощью yandex speechkit

В этой статье я расскажу как с помощью asterisk и  yandex speechkit, можно организовать интерактивный диалог с помощью голоса. В качестве примера создадим систему для голосового сбора показаний счетчиков горячей и холодной воды, сразу скажу, что это просто пример, а не рабочая версия, просто здесь показана сама идея организации диалога.

Итак, настройка Asterisk, для простоты настраивать будем через ael:

На Астериске организован цикл while

1234567 => {

Answer;

Set(audio=/var/lib/asterisk/sounds/custom/enteraccount);

flag=1;

label=1;

while (${flag} = 1){

Background(${audio});

Record(/tmp/${UNIQUEID}label${label}.wav,3,20);

Agi(yandex.agi,/tmp/${UNIQUEID}, ${label});

label=${label}+1;



                  };



    };

В начале позвонившему проигрывается фудио файл «enteraccount» с просьбой назвать лицевой счет

На каждом шаге цикла, позвонившему человеку проигрывается аудио файл «audio», путь к которому получен из agi скрипта, далее записывается ответ, и путь к полученному записанному файлу отправляется agi скрипту, также в скрипт отправляется текущий шаг «label», после чего шаг увеличивается на 1, и цикл повторяется. Из agi скрипта астерис получает 2 параметра, это обязательный параметр «audio», путь к аудиофайлу который нужно проиграть, и не обязательный «label», метка с помощью которой происходит синхронизация астериска и agi. Выход из цикла происходит если человек положил трубку, а также если из agi прийдет параметр «flag» не равный 1.

Еще неплохо бы после завершения вызова удалить все временные файлы, для этого в макросе который срабатывает после завершения вызова пропишем

[macro-hangupcall]

exten => s,1,System(find /tmp/ -name "${UNIQUEID}*" | xargs rm);

На этом настройка астериска завершена.

Далее сам скрипт yandex.agi, написанный на python, для работы необходимо установить pyst

# wget http://heanet.dl.sourceforge.net/project/pyst/pyst/0.6.50/pyst-0.6.50.zip

# unzip pyst-0.6.50.zip

# cd pyst-0.6.50

# python setup.py install

Сам agi:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import urllib2

import urllib

import sys

import random

from xml.dom.minidom import *

import os

import asterisk.agi



agi=asterisk.agi.AGI()

uuid=''

key='28b22b47-a7b0-40d2-892d-ad79bbdbc304'

def yadexASR(uuid, key, topic, callid):

# Функция для преобразования аудио файла в текст

# Генерим уникальный код id для запроса

    while (len(uuid)<32):

        uuid=uuid+random.choice('1234567890abcdef')

    #Ссылка для пост запроса 

    url = 'https://asr.yandex.net/asr_xml?uuid=%s&key=%s&topic=%s&lang=ru-RU' % (uuid, key, topic)

    filename = callid+'.wav'

    #Считываем файл в двоичном режиме

    audio = open(filename,'rb').read()

    #Указываем тип аудиофайла для заголовка в POST запрос

    headers={'Content-Type': 'audio/x-pcm;bit=16;rate=8000'}

    #Отправляем запрос

    request = urllib2.Request(url, data=audio, headers=headers)

    response = urllib2.urlopen(request)

    #Считываем ответ

    answer=response.read()

    # Создаем xml файл для полученного ответа

    f_answer=('%s.xml' % callid)

    f=open(f_answer, 'w')

    # записываем в файл ответ полученный на POST запрос (ответ получен в xml формате)

    f.write(answer)

    f.close()

    # Парсим xml файл

    xml = parse(f_answer)

    # Выбираем из файла значение между тегами variant

    var = xml.getElementsByTagName('variant')

    # Выбираем первое значение из xml файла, оно же наиболее точное в распознании

    result=var[0].childNodes[0].nodeValue

    return result



def generate(key,text, file):

# Функция для преобразования текста в аудио формат

    #Форматируем текс для GET запрса (нужен для корректной обработки кирилици)

    text_f=urllib.quote_plus(text.encode('utf-8'))

    #отправляем запрос на яндекс

    url='http://tts.voicetech.yandex.net/generate?text=%s&format=mp3&lang=ru-RU&speaker=jane&key=%s' % (text_f, key)

    # Сохраняем айдио файл в file

    urllib.urlretrieve(url, file)



if sys.argv[2].replace(' ','')=="1":

    agi.verbose('label='+sys.argv[2].replace(' ',''))

    try:

        # Распознаем полученный файл

        result=yadexASR(uuid, key, 'notes', sys.argv[1]+'label'+sys.argv[2].replace(' ',''))

        # Формируем ответ

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Вы сказали '+result+u'Скажите да или Нет', file+'.mp3')

        agi.set_variable('audio', file)

    except:

        agi.set_variable('audio', '/var/lib/asterisk/sounds/custom/enteraccount')

        agi.set_variable('label', '0')

        agi.verbose('label=0')



elif sys.argv[2].replace(' ','')=="2":

    agi.verbose('label='+sys.argv[2].replace(' ',''))

    try:

        result=yadexASR(uuid, key, 'notes', sys.argv[1]+'label'+sys.argv[2].replace(' ',''))

    except:

        agi.set_variable('label', '1')

    if 'Да' in str(result.encode('utf-8')):

        agi.verbose('Yes')

        #///////////////////////////////

        # Здест должна быть проверка на существование абонента в базе данных

        #/////////////////////////////

    

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Показания какого счетчика вы хотите сообщить горячего или холодного?', file+'.mp3')

        agi.set_variable('audio', file)

    elif 'Нет' in str(result.encode('utf-8')):

        agi.verbose('No')

        # Ставим метку в 0 что бы вернуться к шагй 1 и проигрываем файл

        agi.set_variable('label', '0')

        agi.set_variable('audio', '/var/lib/asterisk/sounds/custom/enteraccount')

    else:

        agi.verbose('Error')

        # Если ответ не да и ни нет, говорим об ошибки и ставим метку на 1 что бы вернуться к шагу 2

        agi.set_variable('label', '1')

elif sys.argv[2].replace(' ','')=="3":

    agi.verbose('label='+sys.argv[2].replace(' ',''))

    try:

        result=yadexASR(uuid, key, 'notes', sys.argv[1]+'label'+sys.argv[2].replace(' ',''))

    except:

        agi.set_variable('label', '2')

    if 'Горяч' in str(result.encode('utf-8')):

        agi.verbose('Hot')      

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Сообщите показания горячего счетчика', file+'.mp3')

        agi.set_variable('audio', file)

    elif 'Холод' in str(result.encode('utf-8')):

        agi.verbose('Cold')     

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Сообщите показания холодного счетчика', file+'.mp3')

        agi.set_variable('audio', file)

    else:

        agi.verbose('Error')

        agi.set_variable('label', '2')

elif sys.argv[2].replace(' ','')=="4":

    agi.verbose('label='+sys.argv[2].replace(' ',''))

    try:

        result=yadexASR(uuid, key, 'notes', sys.argv[1]+'label'+sys.argv[2].replace(' ',''))      

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Ваши показания '+result+u'Скажите да или Нет', file+'.mp3')

        agi.set_variable('audio', file)

    except:

        agi.set_variable('label', '3')

        agi.verbose('label=3')

elif sys.argv[2].replace(' ','')=="5":

    try:

        result=yadexASR(uuid, key, 'notes', sys.argv[1]+'label'+sys.argv[2].replace(' ',''))

    except:

        agi.set_variable('label', '1')

    if 'Да' in str(result.encode('utf-8')):

        

        #/////////////

        #Обрабатываем результат и заносим в базу

        #/////////////

 

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Хотите сообщить показания другого счетчика да или нет?', file+'.mp3')

        agi.set_variable('audio', file)

    elif 'Нет' in str(result.encode('utf-8')):

        agi.set_variable('label', '2')

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Показания какого счетчика вы хотите сообщить горячего или холодного?', file+'.mp3')

        agi.set_variable('audio', file)

    else:

        agi.verbose('Error')

        agi.set_variable('label', '2')

elif sys.argv[2].replace(' ','')=="6":

    try:

        result=yadexASR(uuid, key, 'notes', sys.argv[1]+'label'+sys.argv[2].replace(' ',''))

    except:

        agi.set_variable('label', '1')

    if 'Да' in str(result.encode('utf-8')):

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Показания какого счетчика вы хотите сообщить горячего или холодного?', file+'.mp3')

        agi.set_variable('audio', file)

        agi.set_variable('label', '2')

    elif 'Нет' in str(result.encode('utf-8')):

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Досвидания', file+'.mp3')

        agi.set_variable('audio', file)

    else:

        agi.verbose('Error')

        file=sys.argv[1]+'outlabel'+sys.argv[2].replace(' ','')

        generate(key, u'Хотите сообщить показания другого счетчика да или нет', file+'.mp3')

        agi.set_variable('label', '5')



2018-09-29T23:27:08
Asterisk

Elastix, права на прослушивание записей и просмотр статистики звонков

По умолчанию прослушивать запись и просматривать статистику всех звонков в Elastix может только пользователь admin, все остальные пользователи могут прослушивать и просматривать статистику только своих звонков. Если же нужно разрешить пользователю из группы Operator доступ ко всем звонкам, но при этом не делать его администратором, то в Elastix, в файле:

var/www/html/libs/paloSantoACL.class.php

В функции:

function isUserAdministratorGroup($username)

после строчки:

 $is = array_search('1', $arrGroup);

Добавить следующий код:

if(isset($arrGroup['Operator']))

$is=true;


После этого все пользователи группы Operator смогут просматривать отчет по всем звонкам, а также прослушивать все разговоры.



2018-09-29T23:25:09
Asterisk

Сброс пароля на админку в django

Что делать если вы забали пароль от админки к django? Есть как минимум 2 решения проблемы.

Первое решение просто поменять пароль на root или другого суперпользователя, которого вы создали при создании базы данных. Для этого входим в manage.py shell

python manager.py shell

и набираем

>>>from django.contrib.auth.models import User

>>>user = User.objects.get( username='root')

>>>user.set_password(«password»)

>>>user.save()

Второй способ еще проще, он также пригодится если вы вместе с паролем забыли и логин от админки, в этом случае можно создать нового суперпользователя, для этого в терминале вводим

python manage.py createsuperuser

 И вводим новые данные.



2018-09-29T23:09:18
Django

Настройка PPTP клиент в MikroTik RouterOS

Для настройки подключения к серверу PPTP на микротике, нужно зайти в меню РРР и добавить новый PPTP Client интерфейс, на вкладке Dial Out прописываем следующие параметры:

ConnectTo — ip адрес PPTP сервера

User — логин для подключения к РРТР серверу

Password — пароль для подключения к РРТР серверу

Add Default Route — указываем если хотим что бы весь наш трафик шел через РРТР тунель.

Dial on Demand — установите этот флажок, если вы хотите, чтобы Mikrotik подключался к провайдеру только если с одного из ваших устройств запрошено подключение к интернет. И держал соединение отключенным, если выход в интернет никому не требуется.

 

Обучающий курс по настройке MikroTik

Нужно разобраться с MikroTik, но не определились с чего начать? В курсе «Настройка оборудования MikroTik» все по порядку. Подойдет и для начала работы с этим оборудованием, и для того, чтобы систематизировать знания. Это видеокурс из 162 уроков и 45 лабораторных работ, построен на официальной программе MTCNA. Проходить можно, когда удобно и пересматривать по необходимости – материалы курса выдаются бессрочно. Также есть 30 дней на личные консультации с автором. На пробу выдают 25 уроков бесплатно, заказать их можно на странице курса.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.



2018-09-29T23:03:44
Микротик