Continúo una breve serie de artículos sobre la creación de "Smart Home" y las instrucciones paso a paso para la autoinstalación / configuración.
Pero ahora se tratará principalmente de Freeswitch y telefonía IP.
En agosto, el desarrollador de la plataforma abierta de telefonía IP VoIP FreeSWITCH, Signalwire, publicó un lanzamiento público de la nueva versión del software: 1.8. (1.8.2 ya ha sido lanzado).
En relación con el lanzamiento de esta versión de la plataforma de telefonía IP Freesfitch 1.8, se decidió instalarlo en Raspberry 3 con la imagen básica del sistema doméstico inteligente MajorDoMo instalado, bajo el sistema operativo Raspbian (Debian 9 Stretch) con algunos elementos de automatización del hogar.

Debajo del corte, una descripción de la instalación de una plataforma VoIP desde la fuente con algunas notas y explicaciones.
Tres meses después del lanzamiento y anuncio del lanzamiento público de la versión 1.8 en la guía de instalación de Debian 9 en el sitio web oficial, FreeSWITCH ha publicado actualmente las instrucciones de instalación.
→
Instalación de FreeSWITCH 1.8Sin embargo, no pude instalar ninguna de las opciones en las instrucciones de mi Rasberry. No hace mucho tiempo hubo una advertencia sobre incompatibilidades y tuvo que instalarse desde los códigos fuente. También en la documentación oficial puede encontrar la instalación en Raspberry Pi, pero ya está desactualizada. Por lo tanto, describiré mi opción de instalación en Raspberry P, haciendo una pequeña instrucción paso a paso. En artículos anteriores intenté describir cómo y dónde comenzar a trabajar con el terminal y la línea de comandos, por lo tanto, si es un poco confuso, recomiendo leer los artículos anteriores (los enlaces se darán al final del artículo). El principio es el mismo, lo hizo: funcionó, revisó dos veces, preparó las instrucciones para que el hijo mayor pudiera repetir y entender un poco qué y cómo estaba haciendo.
Instalación de FreeSWITCH 1.8.2 desde la fuente
Conéctese a Raspberry a través de Putty.
Para evitar escribir sudo antes de cada comando, ejecute el comando sudo –i. Después de eso, trabajamos con los derechos del administrador del sistema, que cambiaron automáticamente al directorio raíz. Para saber en qué directorio se encuentra, puede ejecutar el comando Pwd.
Actualización del sistema:
apt-get update apt-get upgrade
Vaya al directorio de inicio, luego descargue la versión 1.8.2 de freeswitch:
cd /home/pi git clone https://freeswitch.org/stash/scm/fs/freeswitch.git -bv1.8.2 freeswitch
Una vez completada la descarga, la carpeta de origen de Freswitch aparece en el directorio de inicio. Vaya a él (ruta completa: / home / pi / freeswitch) e instale los programas necesarios para construir desde la fuente y vaya al directorio freeswitch:
cd freeswitch apt-get install autoconf libtool libtool-bin
Antes de compilar un programa desde la fuente, primero debe ensamblar el configurador, ejecutar:
./bootstrap.sh –j
La plataforma Freeswitch tiene una estructura modular, así que antes de instalar, edite la lista de módulos necesarios:
nano /freeswitch/modules.conf
En su mayor parte, la lista se ha mantenido como por defecto, he desactivado algunos códecs de video, opal, png.
Módulo de idioma ruso conectado, puntos finales mod curl, mod_portaudio,
Instale dependencias para la configuración y el ensamblaje del servidor. Usamos el indicador –y para que el equipo responda automáticamente Sí a todas las preguntas del sistema:
apt-get install -y g++ zlib1g-dev libjpeg9 pkg-config sqlite3 libsqlite3-dev libcurl4-openssl-dev libpcre3 libpcre3-dev libspeexdsp-dev libldns-dev libedit-dev libtiff-dev apt-get install -y yasm lua5.2 lua5.2-dev libsndfile-dev portaudio19-dev
Los paquetes que instale dependen de los complementos. Si falta un paquete, puede aparecer un error en los siguientes dos pasos.
Configuración e instalación del servidor FreeSWITCH
Después de eso, debe ejecutar el configurador para verificar todas las dependencias, así como instalar opciones de compilación adicionales. El configurador construirá el Makefile basado en el conocimiento adquirido y el archivo makefile.am.
Ejecutamos el comando:
./configure --enable-system-lua
Si todo salió bien, recibimos el siguiente mensaje:

Pasemos a la instalación en sí:
make make install
Si el resultado es positivo, Freeswitch se instala por defecto en el
/usr/local/freeswitch
; al final de la configuración, podemos ver la lista y la ubicación de los directorios FS.
Si se produjo un error durante la instalación o la configuración, como mod_lua.cpp: 37: 17: error fatal: lua.h: No existe dicho archivo o directorio #include "lua.h", debe instalar las bibliotecas necesarias con el comando de búsqueda. No pude instalar freeswitch con los paquetes liblua5.3-0 liblua5.3-dev, tuve que instalar la versión 5.2. Apt search lua

Instale archivos de sonido con soporte de idioma ruso:
make cd-sounds-install make cd-sounds-ru-install cd-moh-install
El proceso de instalación se puede completar.
Para evitar que los archivos pequeños de la base de datos se escriban en la memoria flash y aumenten su vida útil, agregamos la línea en el archivo / etc / fstab:
tmpfs /usr/local/freeswitch/db tmpfs defaults 0 0
Después de reiniciar, los archivos temporales creados por FS se escribirán en la RAM.
Configuración del sistema después de instalar FreeSWITCH.
Hay una advertencia en la documentación de FreeSWITCH, por lo que no recomiendo intentar ejecutar FS inmediatamente después de la instalación.
** ¡Atención! Si instaló FreeSWITCH desde la fuente, debe establecer permisos en directorios y archivos. Si ejecuta FreeSWITCH después de la instalación, se iniciará de forma predeterminada como 'root'. Los permisos de directorio deben cambiarse antes del lanzamiento inicial. **Cree un nuevo usuario y establezca permisos y cambie los propietarios a archivos FreeSwitch
cd /usr/local groupadd freeswitch adduser --quiet --system --home /usr/local/freeswitch --gecos "FreeSWITCH open source softswitch" --ingroup freeswitch freeswitch --disabled-password chown -R freeswitch:freeswitch /usr/local/freeswitch/ chmod -R ug=rwX,o= /usr/local/freeswitch/ chmod -R u=rwx,g=rx /usr/local/freeswitch/bin/*
A continuación, copie el archivo de inicio automático en systemd, renómbrelo, cambie los derechos de acceso.
FreeSWITCH viene con un archivo systemd que, si se configura correctamente durante el arranque, monitorea FreeSWITCH y lo inicia como un demonio, lo reinicia si FS no funciona.
cp /home/pi/freeswitch/debian/freeswitch-systemd.freeswitch.service /etc/systemd/system/freeswitch.service chmod +x /etc/systemd/system/freeswitch.service
Hacemos un enlace al archivo de inicio y creamos un enlace al archivo de inicio de la consola FS:
ln -s /usr/local/freeswitch/bin/freeswitch /usr/bin/freeswitch ln -s /usr/local/freeswitch/bin/fs_cli /usr/bin/fs_cli
Agregue el servicio de freeswitch a la carga automática:
systemctl enable freeswitch systemctl daemon-reload systemctl start freeswitch
Después de eso, mi FS no se inició de todos modos, produjo un error con un archivo * .pid, acabo de editar el archivo de inicio automático
nano /etc/systemd/system/freeswitch.serviceComentando la siguiente línea en el archivo:
# PIDFile = / run / freeswitch / freeswitch.pid.
Por si acaso, sobrecargamos Raspberry (como recordará, mientras trabajamos desde la raíz):
reboot
Después de reiniciar, damos el comando nuevamente, ingresamos a través de sudo -i, ejecutamos htop y vemos los procesos de FreeSWITCH en ejecución.
Un poco sobre la configuración inicial:
Después de la instalación, FreeSWITCH está listo para funcionar, por defecto hay 20 suscriptores con los números 1000-1019. La contraseña predeterminada para los suscriptores de VoIP se especifica en el archivo
/usr/local/freeswitch/conf/vars.xml y es 1234. El directorio
/ usr / local / freeswitch / conf / derectory / default contiene 20 archivos xml, cada uno de los cuales es responsable del suscriptor con el número correspondiente Podemos establecer una contraseña para cada suscriptor, cambiando el nombre del archivo y los datos en su contenido, podemos cambiar la numeración y la capacidad del suscriptor.
Si necesita hacer esto, luego de editar los archivos necesita iniciar la consola
fs_cli
:
fs_cli
y en la ventana de la consola le damos el comando
reloadxml
. Con este comando, FS vuelve a leer los archivos XML y acepta los cambios.

Salga de la consola:
ctrl+D
o escribiendo
/exit
o
/quit
Ahora intentemos conectar a los suscriptores de IP. Para verificar la conexión, utilicé en una PC con Windows: los softphones MicroSIP y PhonerLite y en un teléfono móvil con sistema operativo Android CSipSimle, la configuración es la siguiente (nombre de cuenta - número de teléfono, servidor SIP - la dirección de nuestra Raspberry:
Un icono verde en la barra de estado inferior de estos programas significa que el suscriptor está autorizado en nuestro servidor VoIP y está listo para comunicarse.

Al marcar el número, podemos verificar la llamada del suscriptor y algunas otras funciones de la IP PBX.
Pero no veo una aplicación especial en casa para una PBX típica de oficina. Intentemos usar funciones más avanzadas de FreeSWITCH.
Freeswitch tiene una estructura modular, los complementos se pueden ver en el archivo
modules.conf.xml
Edítelo, apagué los códecs de video y conecté el módulo de idioma ruso y mod_xml_rpc.
nano /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml</> <source><!-- -->
en la línea anterior y posterior al nombre del módulo. Deshabilitar: por el contrario, colocando estos símbolos, un pequeño ejemplo, el primer módulo está encendido, el segundo está deshabilitado:
<load module="mod_xml_rpc"/> <!-- <load module="mod_xml_curl"/> -->
Después de eso, si desea cambiar, editamos la configuración simple (puerto, usuario, contraseña) del módulo en el archivo xml_rpc.conf.xml, que se encuentra en el mismo directorio.
nano /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
Predeterminado: usuario - freeswitch, contraseña funciona, puerto 8080.
Sobrecargamos frisvitch o el servidor en sí. Hay varias formas de hacer esto: reiniciar todo el sistema (reiniciar) utilizando los comandos de control de servicio:
systemctl stop freeswitch
luego
systemctl start freeswitch
o
systemctl restart freeswitch
.
Después de eso, al escribir
http://IP_RASPBERRY:8080/portal/index.html#
en el navegador y pasar por debajo del interruptor de usuario con la contraseña funciona, ingresamos al pequeño panel de administración de FreesWITCH. Podemos ver el estado, usuarios registrados, etc.

Intentemos ir un poco más allá:
Al escribir una solicitud en el navegador, se muestra el estado de FS:
http://freeswitch:works@IP_RASPBERRY:8080/webapi/sofia?status%20profile%20internal

La sintaxis es bastante simple, si el comando contiene más de una palabra, entonces la primera y segunda palabras están separadas por un signo de interrogación, y el resto por espacios.
Intentemos ejecutar este comando desde MajorDoMo: desde la página principal de "Smart Home" vaya al
Panel de control - ConsolaEn él escribimos el comando:
GetURL("http://freeswitch:works@IP_RASPBERRY:8080/webapi/sofia?status%20profile%20internal")
En respuesta, obtenemos el estado de nuestro servidor VoIP.

Ahora prueba el siguiente experimento:
La idea es iniciar una llamada (usando la función de origen) desde el lado de Smart Home al suscriptor con el número 1001 (MicroSip), y luego transferir la llamada completada al plan de marcado para las llamadas salientes al 1002 (PhonerLite). El comando API se ve así: el usuario original / 1001 1002 XML predeterminado inicia una llamada al número de consola 1001, después de que se levanta el teléfono (se levanta automáticamente), se llama al número y al 1002 desde el plan de marcado predeterminado.
Lo traducimos a una forma comprensible para MajorDoMo y el navegador:
GetURL("http://freeswitch:works@192.168.43.60:8080/webapi/originate?user/1001%201002%20XML%20default")
Primero, suena un softphone, después de unos segundos hay una llamada al segundo.

Como conclusión, o una pequeña implementación práctica
No hace mucho tiempo tuve la necesidad de establecer comunicación con una persona que físicamente no podía llamar (marcar) en un teléfono celular. Por el momento, la necesidad de esto ha desaparecido, pero aún así decidió comprobar la viabilidad. Usando una puerta de enlace VoIP (una solución más asequible en terminaciones FXS o una puerta de enlace GSM más costosa), el botón inalámbrico de "casa inteligente" puede implementarse si lo desea.
Segunda opción: el sistema de hogar inteligente MajorDoMo tiene un asistente de voz Alice. Ahora puede intentar conectar la "Casa inteligente" con el propietario y su teléfono móvil a través de redes públicas.
Algunos enlaces
→
Sitio web ClueCon del desarrollador FreeSWITCH→
Documentación en inglés FreeSWITCH→
Sitio del desarrollador MajorDoMo→
Primera parte: una pequeña instrucción paso a paso para instalar el sistema operativo Smart Home basado en una computadora de placa única Raspberry, módulo Z-Way RaZberry y software MajorDoMo→
Segunda parte: continuación: módulo Z-Way RaZberry y software MajorDoMo→
Parte tres: Continuar creando una casa inteligente inalámbrica