udvnl

<<< Назад

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

В связи с переходом на полуудаленную работу у меня появилась задумка управления (включения) рабочего компьютера с программой удаленного управления (Team Viewer, AnyDesk), посредством протокола Wake on LAN, дистанционно. Локальная сеть офиса находится за NAT, доступа извне к ней нет.
Возможно принцип решения пригодится и в системе домашней автоматизации, в качестве резервного канала, при отсутствии доступа к Internet, частого пропадания (или отключения) Internet или же нахождения сервера УД за NATом.

Исходные данные: имеем локальную сеть, в которой находятся ПК и сервер IP телефонии FreeeSWITCH. Сервер подключен к внешней сети через VoIP шлюзы GSM и канальное окончание FXS (стандартная 2-х проводная абонентская линия). IP доступ к внешней сети не имеет. Требуется, что бы по команде из-за пределов локальной сети, можно было отправить магический пакет, для дистанционного включения компьютера, с программой удаленного доступа (Team Viewer, AnyDesk).
Работоспособность решения дополнительно протестировал на базовом образе MajorDoMo для Raspberry PI v. 4.44. Версия Raspberry Pi 3B.
Установку и предварительную настройку сервера IP телефонии FreeSWITCH описывал Установка VoIP сервера FreeSWITCH с частичной инте...
1) Настраиваем ПК для работы с magic packet, в БИОСе и настройках сетевой карточки, и Windows. Настройку я описывать не буду, довольно много статей и инструкций есть в сети на эту тему.
2) Для того, что бы наш Raspberry Pi мог отправлять магический пакет по сети устанавливаем пакет etherwake
sudo apt-get install etherwake
Если БИОС и ОС настроены правильно, то после установки пакета Etherwake, включить ПК можно задав следующую команду на RPi :
sudo etherwake 04:0E:3C:8D:81:57
где 04:0E:3C:8D:81:57 MAC адрес удаленного ПК, для каждого компьютера он будет свой. Узнать этот адрес для компьютера с Windows можно в свойствах сетевых подключений или же набрав в командной строке Windows. Etherwake работает только от пользователя sudo.
ipconfig/All
Создадим Bash скрипт с единственной командой отправки пакета для пробуждения ПК.
sudo nano /home/test.sh
Содержимое файла скрипта:

#! /bin/bash
sudo etherwake 04:0E:3C:8D:81:57

Делаем его исполняемым:
sudo chmod +x /home/test.sh

3) Настраиваем сервер телефонии Freeswitch.
После установки сервера и предварительной настройки у нас уже есть работоспособная своя АТС. В ОС появился новый пользователь freeswitch.
Требуется дать ему право выполнения sudo без пароля.
Создаем группу для пользователей, которые будут использовать sudo без ввода пароля. В базовом образе эта эта группа уже существует.
sudo groupadd sudo
Добавить нашего пользователя freeswitch к этой группе:
sudo usermod -a -G sudo freeswitch
Кроме этого, я по аналогии с пользователем pi создал ещё одни файл:
sudo nano /etc/sudoers.d/010_freeswitch-nopasswd
Содержимое файла всего одна строчка:

freeswitch ALL=(ALL) NOPASSWD: ALL

После этого провереряем запуск нашего скрипта из под пользователя freeswitch:
sudo -u freeswitch /home/test.sh

Перейдём сейчас непосредственно к VoIP серверу.
Настройки диалплана находятся в одноименной папке /etc/freeswitch/dialplan/ . Основные настройки предустановленной (дефолтной) конфигурации хранятся в файде default.xml.
По умолчанию настроены внутренние номера (20 штук) 1000-1019 и довольно большое количество направлений и условий.
При наборе номера 5000 - идёт направление на IVR, интерактивное голосовое меню — система предварительно записанных голосовых сообщений, выполняющая функцию маршрутизации звонков внутри АТС с использованием информации, вводимой клиентом на клавиатуре телефона с помощью тонального набора. Язык по умолчанию - английский. Для смены языка требуется отредактировать файл
sudo nano /etc/freeswitch/vars.xml
удалив строки директорий с английским языком, вместо них установив директорию для русского и заменив страну по умолчанию на RU.
удаляемые строки:

  • <X-PRE-PROCESS cmd="set" data="soundprefix=$${soundsdir}/en/us/callie"/>
    <!--<Z-PRE-PROCESS cmd="set" data="soundprefix=$${soundsdir}/en/us/allison"/> -->*

sudo nano /etc/freeswitch/vars.xml

``` <X-PRE-PROCESS cmd="set" data="sound_prefix=$${sounds_dir}/ru/RU/vika"/>

<X-PRE-PROCESS cmd="set" data="default_country=RU"/>```

После перезагрузки сервера АТС, IVR меню станет проговаривать фразы на русском языке.
Можно собрать из файлов в коробке FreeSWITCH нужную вам фразу, можно использовать заранее записанный *.wav файл, указав полный путь.

Сейчас попробуем набрать номер 779. Он использует расширение eavesdrop (прослушивание), после набора номера идёт авто ответ на SIP сервере и посылка звонящему тональных сигналов. Его я и решил использовать.
Отредактируем дефолтный диалплан
sudo nano /etc/freeswitch/dialplan/default.xml
и добавляем всего одну строчку в секциии eavesdrop с номером 779. <action application="system" data="/home/test.sh"/>, которая и запускает ранее сделанный скрипт с посылкой магического пакета.
Номер (направление) я тоже решил поменять, можно указать любой, в качестве пин кода. В итоге секция у меня приняла такой вид:

<extension name="eavesdrop">
      <condition field="destination_number" expression="^7777$">
        <action application="answer"/>
<action application="system" data="/home/test.sh"/>
        <action application="set" data="eavesdrop_indicate_failed=tone_stream:/$
        <action application="set" data="eavesdrop_indicate_new=tone_stream://%($
        <action application="set" data="eavesdrop_indicate_idle=tone_stream://%$
        <action application="eavesdrop" data="all"/>
      </condition>
    </extension>

Сейчас при наборе номера 7777 идёт автоматический ответ, запуск скрипта, и посылка тоновых сигналов.
Изменим немного голосовое меню (IVR).
sudo nano /etc/freeswitch/ivr_menus/demo_ivr.xml
В домашней сети переадресация на внутренние номера не сильно то и нужна, поэтому я сделал следующее: заменил всего одну строку с регулярным выражением, вместо трансфера номера (цифры номерного плана 1000-1019) в XML features

<entry action="menu-exec-app" digits="/^(10[01][0-9])$/" param="transfer $1 XML features"/> 

я передаю набранный номер 7777 , с выполнением скрипта, в дефолтное направление:

<entry action="menu-exec-app" digits="/^(7777)$/" param="transfer 7777 XML default"/>

Задача можно сказать выполнена. После набора номера в голосовом меню запускается скрипт для включения ПК.
Перезапускаем из консоли freeswitch:
sudo systemctl restart freeswitch.service
И далее уже настраиваем, в зависимости от канала связи, свой VoIP шлюз, прописываем номер, диалплан и маршрут внешнего входящего вызова в IVR меню.

Обсуждение (0) (6)

Смотрите так же:
23.09.2021 Второй раз в первый класс. Часть 1: начало работы c базовым образом для RPi.
06.07.2020 Чтение файлов из образа img Операционной системы. Возможность записи образа на меньшую по размеру SD карту памяти
19.06.2020 Raspberry Pi: немного о резервном копировании и актуальной копии системы
07.05.2020 Установка VoIP сервера FreeSWITCH с частичной интеграцией в систему MajorDoMo
28.04.2020 Установка базового образа MajorDoMo на Raspberry Pi. Начало первые шаги.
07.10.2019 Возможность создания видео звонков у MajorDoMo (RPI +WebCam)
11.09.2019 Создание голосового оповещения MajorDoMo
21.08.2019 Установка USB аудиокарты и настройка звука в Raspberry Pi
04.04.2019 Сертификация в Z-Wave
11.03.2019 RPI Monitor полезное ПО для Raspberry PI и Orange Pi
04.02.2019 Тестирование пропускной способности канала Ethernet (Wi-Fi) с помощью утилиты IPerf
23.12.2018 Пошаговая инструкция с картинками по установки MajorDoMo на Raspberry Pi 3 с помощью скрипта от Immortal
20.10.2018 Установка Freeswitch 1.8.2 на Debian 9 (Raspbian Stretch) на базовый образ системы «Умного дома» MajorDomo
14.08.2018 Создание беспроводного «умного дома». На основе технологии Linux, Z-Wave и ПО MajorDoMo. Включение первого устройства Z-Wave и первые шаги по автоматизации
08.07.2018 Создание беспроводного «умного дома». На основе технологии Linux, Z-Wave и ПО MajorDoMo. Включение контроллера RaZberry и первые шаги по Z-Wave
29.06.2018 Пошаговая инструкция по установке образа Majordomo на Raspberry Pi
21.06.2018 Удаленное наблюдение за близкими, но к сожалению, больными людьми.

Минск, Беларусь

На форуме: udvnl