udvnl

 
<<< Back

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

В связи с переходом на полуудаленную работу у меня появилась задумка управления (включения) рабочего компьютера с программой удаленного управления (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 меню.

Discuss (0) (6)

See also:
2023-11-03 Пару мыслей о совместном применении SIP телефонии и систем «Умного Дома», а также немного об организации независимого от Internet канала связи с УД.
2023-10-14 Контроль SystemD и инструмент работы с системными логами через веб браузер
2023-10-10 Установка SIP сервера FreeSWITCH 1.10.10 на Raspberry Pi OS Lite (Debian11)
2023-01-03 Установка MajorDoMo с помощью скрипта от SergeJey на Raspberry Pi
2022-12-09 Где Телефон?
2022-05-30 Вариант установки Majordomo на Windows 10 с использованием пакета XAMPP. Немного о переносе и создании тестовой копии системы с Raspberry PI на Windows
2022-03-09 Небольшие заметки по подключению и использованию сервиса CONNECT
2022-02-27 Zigbee2mqtt, немного о стиках CC2531 и Sonoff USB Zigbee 3.0 Dongle Plus (сравнение, подключение, тестирование).
2021-09-23 Второй раз в первый класс. Часть 1: начало работы c базовым образом для RPi.
2020-07-06 Чтение файлов из образа img Операционной системы. Возможность записи образа на меньшую по размеру SD карту памяти
2020-06-19 Raspberry Pi: немного о резервном копировании и актуальной копии системы
2020-05-07 Установка VoIP сервера FreeSWITCH с частичной интеграцией в систему MajorDoMo
2020-04-28 Установка базового образа MajorDoMo на Raspberry Pi. Начало первые шаги.
2019-10-07 Возможность создания видео звонков у MajorDoMo (RPI +WebCam)
2019-09-11 Создание голосового оповещения MajorDoMo
2019-08-21 Установка USB аудиокарты и настройка звука в Raspberry Pi
2019-04-04 Сертификация в Z-Wave
2019-03-11 RPI Monitor полезное ПО для Raspberry PI и Orange Pi
2019-02-04 Тестирование пропускной способности канала Ethernet (Wi-Fi) с помощью утилиты IPerf
2018-12-23 Пошаговая инструкция с картинками по установки MajorDoMo на Raspberry Pi 3 с помощью скрипта от Immortal
2018-10-20 Установка Freeswitch 1.8.2 на Debian 9 (Raspbian Stretch) на базовый образ системы «Умного дома» MajorDomo
2018-08-14 Создание беспроводного «умного дома». На основе технологии Linux, Z-Wave и ПО MajorDoMo. Включение первого устройства Z-Wave и первые шаги по автоматизации
2018-07-08 Создание беспроводного «умного дома». На основе технологии Linux, Z-Wave и ПО MajorDoMo. Включение контроллера RaZberry и первые шаги по Z-Wave
2018-06-29 Пошаговая инструкция по установке образа Majordomo на Raspberry Pi
2018-06-21 Удаленное наблюдение за близкими, но к сожалению, больными людьми.

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

На форуме: udvnl