Cloud Smart Home. Parte 1: Controlador y sensores



Hoy, gracias al rápido desarrollo de la microelectrónica, los canales de comunicación, las tecnologías de Internet y la Inteligencia Artificial, el tema de los hogares inteligentes se está volviendo cada vez más relevante. La vivienda humana ha experimentado cambios significativos desde la Edad de Piedra y en la era de la Revolución Industrial 4.0 e Internet de las Cosas se volvió conveniente, funcional y segura. Llegan al mercado soluciones que convierten un apartamento o una casa de campo en sofisticados sistemas de información administrados desde cualquier parte del mundo utilizando un teléfono inteligente. Además, el conocimiento de los lenguajes de programación ya no es necesario para la interacción hombre-máquina: gracias a los algoritmos de reconocimiento de voz y síntesis de voz, una persona habla su idioma nativo con un hogar inteligente.

Algunos sistemas domésticos inteligentes actualmente en el mercado son un desarrollo lógico de sistemas de videovigilancia basados ​​en la nube, cuyos desarrolladores se dieron cuenta de la necesidad de una solución integral no solo para el monitoreo, sino también para administrar objetos remotos.

Le ofrecemos una serie de tres artículos, que le informarán sobre todos los componentes principales del sistema de hogar inteligente en la nube, desarrollado personalmente por el autor y puesto en funcionamiento. El primer artículo está dedicado al equipo del cliente terminal instalado dentro de una casa inteligente, el segundo a la arquitectura de un sistema de almacenamiento y procesamiento de datos en la nube, y finalmente, el tercero a una aplicación cliente para administrar el sistema en dispositivos móviles y estacionarios.

Equipamiento para el hogar inteligente


Primero, hablemos sobre cómo hacer una casa inteligente a partir de un apartamento, cabaña o cabaña ordinaria. Para esto, como regla, se requiere colocar el siguiente equipo en el hogar:

  1. sensores que miden varios parámetros ambientales;
  2. actuadores que actúan sobre objetos externos;
  3. un controlador que realiza cálculos de acuerdo con las mediciones del sensor y la lógica integrada, y emite comandos a los actuadores.

La siguiente figura muestra el diagrama de una casa inteligente, en la que hay sensores de fugas de agua (1) en el baño, temperatura (2) e iluminación (3) en el dormitorio, una toma inteligente (4) en la cocina y una cámara de video vigilancia (5) en el pasillo.



Actualmente, los sensores inalámbricos que operan bajo los protocolos RF433, Z-Wave, ZigBee, Bluetooth y WiFi son ampliamente utilizados. Sus principales ventajas son la facilidad de instalación y uso, así como el bajo costo y la confiabilidad, porque Los fabricantes buscan llevar sus dispositivos al mercado masivo y ponerlos a disposición del usuario promedio.

Los sensores y actuadores, por regla general, están conectados a través de una interfaz inalámbrica al controlador doméstico inteligente (6), un microordenador especializado que integra todos estos dispositivos en una sola red y los controla.

Sin embargo, algunas soluciones pueden combinar un sensor, un actuador y un controlador al mismo tiempo. Por ejemplo, se puede programar una toma inteligente para encender o apagar en un horario, y una cámara de videovigilancia basada en la nube puede grabar video en función de una señal del detector de movimiento. En los casos más simples, puede prescindir de un controlador separado, pero para crear un sistema flexible con muchos escenarios, es necesario.

Para conectar el controlador doméstico inteligente a la red global, se puede usar un enrutador de Internet convencional (7), que durante mucho tiempo ha sido un electrodoméstico familiar en cualquier hogar. Hay un argumento más a favor del controlador de casa inteligente: si se pierde la conexión a Internet, la casa inteligente continuará funcionando normalmente debido al bloque lógico almacenado dentro del controlador y no en el servicio en la nube.

Controlador de casa inteligente


El controlador para el sistema doméstico inteligente en la nube discutido en este artículo se desarrolló sobre la base del microordenador de placa única Raspberry Pi 3 modelo B + , que se lanzó en marzo de 2018 y tiene recursos y rendimiento suficientes para las tareas del hogar inteligente. Consiste en un procesador Cortex-A53 de cuatro núcleos con una arquitectura ARMv8-A de 64 bits, con velocidad de reloj de 1,4 GHz, así como 1 GB de RAM, Wi-Fi 802.11ac, Bluetooth 4.2 y un adaptador Gigabit Ethernet que funciona a través del bus USB 2.0.



Montar el controlador es muy simple: el microordenador (1) se instala en una caja de plástico (2), luego se inserta una tarjeta microSD de 8 GB con software (3) y un controlador de red USB Z-Wave (4) en las ranuras correspondientes. El controlador doméstico inteligente está conectado a la red eléctrica a través de un adaptador de corriente de 5V, 2.1A (5) y un cable USB-micro-USB (6). Cada controlador tiene un número de identificación único, que se registra en el archivo de configuración en el primer inicio y es necesario para la interacción con los servicios domésticos inteligentes en la nube.

El software de controlador de casa inteligente fue desarrollado por el autor de este artículo basado en el sistema operativo Linux Raspbian Stretch . Se compone de los siguientes subsistemas principales:

  • proceso de servidor para interactuar con equipos domésticos inteligentes y la nube;
  • interfaz gráfica de usuario para configurar el controlador y los parámetros operativos;
  • Bases de datos para almacenar la configuración del controlador.



La base de datos del controlador de casa inteligente se basa en el DBMS incorporado de SQLite y es un archivo en la tarjeta SD con el software del sistema. Sirve como depósito de la configuración del controlador: información sobre el equipo conectado y su estado actual, un bloque de reglas de producción lógicas, así como información que requiere indexación (por ejemplo, nombres de archivo del archivo de video local). Cuando se reinicia el controlador, esta información se guarda, lo que hace posible restaurar el controlador en caso de una falla de energía.

La interfaz gráfica del controlador doméstico inteligente se desarrolla en PHP 7 utilizando el microframework Slim . El servidor web lighttpd , que a menudo se usa en dispositivos integrados debido a su buen rendimiento y bajos requisitos de recursos, es responsable de la aplicación.


(haga clic en la imagen para abrir en una resolución más alta)

La función principal de la interfaz gráfica es conectar equipos domésticos inteligentes (cámaras IP y sensores) al controlador. La aplicación web lee la configuración y el estado actual del controlador y los dispositivos conectados desde la base de datos SQLite. Para cambiar la configuración del controlador, envía comandos de control en formato JSON a través de la API RESTful del proceso del servidor.

Proceso del servidor


El proceso del servidor es un componente clave que hace todo el trabajo básico de automatizar los procesos de información que constituyen la base de un hogar inteligente: recibir y procesar datos sensoriales, emitiendo acciones de control dependiendo de la lógica subyacente. El propósito del proceso del servidor es interactuar con el equipo doméstico inteligente, seguir las reglas de lógica de producción, recibir y procesar comandos desde la interfaz gráfica y la nube. El proceso del servidor en este controlador doméstico inteligente se implementa como una aplicación multiproceso desarrollada en C ++ y lanzada como un servicio systemd separado del sistema operativo Linux Raspbian .

Los bloques principales del proceso del servidor son:

  1. Administrador de mensajes
  2. Servidor de cámara IP;
  3. Servidor de dispositivo Z-Wave;
  4. Reglas lógicas de producción del servidor;
  5. Base de datos de configuración del controlador y el bloque de reglas lógicas;
  6. Servidor API RESTful para interactuar con la interfaz gráfica;
  7. Cliente MQTT para interactuar con la nube.

Los bloques del proceso del servidor se implementan como flujos separados, cuya información se transmite en forma de mensajes en formato JSON (o estructuras de datos que representan este formato en la memoria del proceso).



El componente principal del proceso del servidor es el administrador de mensajes , que enruta los mensajes en formato JSON para todos los bloques del proceso del servidor. Los tipos de campos de información de mensajes JSON y los valores que pueden aceptar se enumeran en la tabla:

tipo de dispositivoprotocolomessageTypedeviceStatecomando
camaraonvifsensorDataentransmisión (activar / desactivar)
sensorzwavecomandofueragrabación (activar / desactivar)
efectormqttbusinessLogicRuletransmisión (activar / desactivar)evice (Agregar / Eliminar)
lógica de negociosconfigurationDatagrabación (activar / desactivar)
bluetoothdeviceStateerror
wifi
rf


Por ejemplo, un mensaje de un detector de movimiento de cámara se ve así:

{ "vendor": "*****", "version": "3.0.0", "timestampMs": "1566293475475", "clientType": "gateway", "deviceId": "1616453d-30cd-44b7-9bf0-************", "deviceType": "camera", "protocol": "onvif", "messageType": "sensorData", "sensorType": "camera", "label": "motionDetector", "sensorData": "on" } 

Lógica de producción


Para recibir o enviar un mensaje del despachador, el bloque de proceso del servidor se suscribe a mensajes de cierto tipo. La suscripción es una regla lógica de producción del tipo "If ... then ..." , presentada en formato JSON, y un enlace al controlador de mensajes dentro del bloque de proceso del servidor. Por ejemplo, para que el servidor de la cámara IP pueda recibir comandos de la GUI y la nube, debe agregar la siguiente regla:

 { "if": { "and": [{ "equal": { "deviceId": "1616453d-30cd-44b7-9bf0-************" } }, { "equal": { "messageType": "command" } } ] }, "then": { "result": "true" } } 

Si las condiciones especificadas en el antecedente (lado izquierdo) de la regla son verdaderas, entonces la regla (lado derecho) de la regla se ejecuta y el controlador obtiene acceso al cuerpo del mensaje JSON. El antecedente admite operadores lógicos que realizan la comparación de pares clave-valor JSON:

  1. igual a "igual";
  2. no es igual a "not_equal";
  3. menos "menos";
  4. más "mayor";
  5. menor o igual que "menor_o igual";
  6. mayor o igual a mayor_o_equal.

Los resultados de la comparación se pueden vincular entre sí utilizando los operadores de álgebra booleana:

  1. Y "y";
  2. O "o";
  3. NO "no".

Por lo tanto, al escribir operadores y operandos en notación polaca, es posible formar condiciones bastante complejas con una gran cantidad de parámetros.

Exactamente el mismo mecanismo, basado en mensajes JSON y reglas de producción en formato JSON, se usa en el bloque del servidor lógico de producción para representar el conocimiento y hacer inferencia lógica usando datos sensoriales de sensores domésticos inteligentes.

Usando una aplicación móvil, un usuario crea scripts según los cuales una casa inteligente debería funcionar. Por ejemplo: "Si el sensor para abrir la puerta delantera ha funcionado, encienda la luz en el pasillo" . La aplicación lee los identificadores de los sensores (sensor de apertura) y los actuadores (toma inteligente o lámpara inteligente) de la base de datos y genera una regla lógica en formato JSON, que se envía al controlador doméstico inteligente. Este mecanismo se discutirá con más detalle en el tercer artículo de nuestra serie, donde hablaremos sobre una aplicación cliente para administrar un hogar inteligente.

El mecanismo de lógica de producción discutido anteriormente se implementa utilizando la biblioteca RapidJSON , un analizador SAX del formato JSON en C ++. La lectura y el análisis coherentes de una serie de reglas de producción facilitan la implementación de la función de coincidencia de datos dentro de los antecedentes:

 void CRuleEngine::Process(PProperties pFact) { m_pActions->clear(); rapidjson::Reader reader; for(TStringMap::value_type& rRule : m_Rules) { std::string sRuleId = rRule.first; std::string sRuleBody = rRule.second; CRuleHandler ruleHandler(pFact); rapidjson::StringStream ruleStream(sRuleBody.c_str()); rapidjson::ParseResult parseResult = reader.Parse(ruleStream, ruleHandler); if(!parseResult) { m_Logger.LogMessage( NLogger2::ePriorityLevelError, std::string("JSON parse error"), "CRuleEngine::Process()", std::string("RuleId: ") + sRuleId); } PProperties pAction = ruleHandler.GetAction(); if(pAction) { pAction->Set("ruleId", sRuleId); m_pActions->push_back(pAction); } } } 

Aquí pFact es una estructura que contiene pares clave-valor de un mensaje JSON, m_Rules es una matriz de cadenas de reglas de producción. La comparación del mensaje entrante y la regla de producción se realiza en la función reader.Parse (ruleStream, ruleHandler) , donde ruleHandler es un objeto que contiene la lógica de operadores booleanos y operadores de comparación. sRuleId es un identificador de regla único, gracias al cual es posible almacenar y editar reglas dentro de la base de datos de un controlador doméstico inteligente. m_pActions : una matriz con los resultados de la inferencia lógica: mensajes JSON que contienen consistentes de la base de reglas y se envían al administrador de mensajes para que las secuencias de suscriptores puedan procesarlos.

El rendimiento de RapidJSON es comparable a la función strlen () , y los requisitos mínimos de recursos del sistema permiten que esta biblioteca se use en dispositivos integrados. El uso de mensajes y reglas lógicas en formato JSON le permite implementar un sistema flexible de intercambio de información entre todos los componentes del controlador doméstico inteligente.

Sensores y Actuadores Z-Wave


La principal ventaja de un hogar inteligente es que puede medir de forma independiente varios parámetros ambientales y realizar funciones útiles según la situación. Para hacer esto, los sensores y actuadores están conectados al controlador de casa inteligente. En la versión actual, se trata de dispositivos inalámbricos que funcionan según el protocolo Z-Wave a una frecuencia especialmente asignada de 869 MHz para Rusia. Para su trabajo, se combinan en una red de malla, en la que los repetidores de señal están presentes para aumentar el área de cobertura. Los dispositivos también tienen un modo especial de ahorro de energía: pasan la mayor parte del tiempo en modo de suspensión y envían información solo cuando cambia su estado, lo que puede extender significativamente la vida útil de la batería incorporada.



En el mercado ahora puede encontrar una cantidad bastante grande de dispositivos Z-Wave diferentes. Como ejemplo, considere algunos:

  1. El zócalo inteligente Zipato PAN16 puede medir los siguientes parámetros: consumo de energía (kW / h), potencia (W), voltaje (V) y corriente (A) en la red eléctrica. También tiene un interruptor incorporado con el que puede controlar el aparato eléctrico conectado;
  2. El sensor de fugas Neo Coolcam detecta la presencia de líquido derramado al cerrar los contactos de la sonda remota;
  3. El detector de humo Zipato PH-PSG01 se activa cuando las partículas de humo ingresan a la cámara del analizador de gases;
  4. El sensor de movimiento Neo Coolcam analiza la radiación infrarroja del cuerpo humano. Además hay un sensor de luz (Lx);
  5. El multisensor Philio PST02-A mide la temperatura (° C), la exposición a la luz (%), la apertura de la puerta, la presencia de una persona en la habitación;
  6. Controlador de red Z-Wave USB Stick ZME E UZB1, al que están conectados los sensores.

Es muy importante que los dispositivos y el controlador funcionen a la misma frecuencia, de lo contrario, simplemente, no se verán en el momento de la conexión. Se pueden conectar hasta 232 dispositivos a un controlador de red Z-Wave, que es suficiente para un apartamento o una casa de campo. Para expandir el área de cobertura de la red en interiores, se puede usar un enchufe inteligente como repetidor de señal.



En el proceso del servidor del controlador doméstico inteligente, discutido en el párrafo anterior, el servidor Z-Wave es responsable de interactuar con los dispositivos Z-Wave. Para obtener información de los sensores, utiliza la biblioteca OpenZWave en C ++, que proporciona una interfaz para la interacción con un controlador USB de la red Z-Wave y funciona con muchos sensores y actuadores. El servidor Z-Wave registra el valor del parámetro ambiental medido por el sensor en forma de mensaje JSON:

 { "vendor": "*****", "version": "3.0.0", "timestampMs": "1566479791290", "clientType": "gateway", "deviceId": "20873eb0-dd5e-4213-a175-************", "deviceType": "sensor", "protocol": "zwave", "messageType": "sensorData", "homeId": "0xefa0cfa7", "nodeId": "20", "sensorType": "METER", "label": "Voltage", "sensorData": "229.3", "units": "V" } 

Luego se reenvía al administrador de mensajes de proceso del servidor para que los hilos de suscriptor puedan recibirlo. El suscriptor principal es el servidor lógico de producción, que compara los valores de los campos de mensaje en los antecedentes de las reglas lógicas. Los resultados de la salida lógica que contiene los comandos de control se envían de vuelta al administrador de mensajes y desde allí van al servidor Z-Wave, que los decodifica y los envía al controlador USB de la red Z-Wave. Luego caen en el dispositivo ejecutivo, que cambia el estado del entorno, y el hogar inteligente, por lo tanto, hace un trabajo útil.


(haga clic en la imagen para abrir en una resolución más alta)

Los dispositivos Z-Wave están conectados en la interfaz gráfica del controlador doméstico inteligente. Para hacer esto, vaya a la página con la lista de dispositivos y haga clic en el botón "Agregar". El comando add a través de la API RESTful ingresa al proceso del servidor y, luego, es enviado por el administrador de mensajes al servidor Z-Wave, que coloca el controlador USB Z-Wave en el modo especial de agregar dispositivos. A continuación, en el dispositivo Z-Wave, debe hacer una serie de pulsaciones rápidas (3 pulsaciones en 1,5 segundos) del botón de servicio. Un controlador USB conecta el dispositivo a la red y envía información sobre él al servidor Z-Wave. Eso, a su vez, crea un nuevo registro en la base de datos SQLite con los parámetros del nuevo dispositivo. Después de un intervalo de tiempo predeterminado, la interfaz gráfica vuelve a la página de la lista de dispositivos Z-Wave, lee información de la base de datos y muestra el nuevo dispositivo en la lista. Al mismo tiempo, cada dispositivo recibe su propio identificador único, que se utiliza en las reglas de inferencia de producción y cuando se trabaja en la nube. El funcionamiento de este algoritmo se muestra en el diagrama UML:


(haga clic en la imagen para abrir en una resolución más alta)

Conexión de cámara IP


El sistema de hogar inteligente en la nube discutido en este artículo es una modernización del sistema de videovigilancia en la nube, también desarrollado por el autor, que ha estado en el mercado durante varios años y tiene muchas instalaciones en Rusia.

Para los sistemas de videovigilancia en la nube, uno de los problemas agudos es la elección limitada de los equipos con los que se puede realizar la integración. El software responsable de la conexión a la nube se instala dentro de la videocámara, lo que inmediatamente exige mucho a su hardware: el procesador y la cantidad de memoria libre. Esto explica principalmente el mayor precio de las cámaras de videovigilancia basadas en la nube en comparación con las cámaras IP convencionales. Además, se requiere una larga etapa de negociaciones con los fabricantes de cámaras de CCTV para obtener acceso al sistema de archivos de la cámara y a todas las herramientas de desarrollo necesarias.



Por otro lado, todas las cámaras IP modernas tienen protocolos estándar para interactuar con otros equipos (en particular, DVR). Por lo tanto, el uso de un controlador separado que se conecta utilizando el protocolo estándar y transmite transmisiones de video desde cámaras IP a la nube proporciona ventajas competitivas significativas para los sistemas de videovigilancia en la nube. Además, si el cliente ya había instalado un sistema de videovigilancia basado en cámaras IP simples, entonces es posible expandirlo y convertirlo en un hogar inteligente nublado de pleno derecho.

El protocolo más popular para los sistemas de videovigilancia IP, que ahora es compatible con todos los fabricantes de cámaras IP sin excepción, es el ONVIF Profile S , cuyas especificaciones existen en el lenguaje de descripción de servicios web WSDL . Usando utilidades del kit de herramientas gSOAP , es posible generar el código fuente de los servicios que funcionan con cámaras IP:

 $ wsdl2h -o onvif.h \ https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl \ https://www.onvif.org/ver10/events/wsdl/event.wsdl \ https://www.onvif.org/ver10/media/wsdl/media.wsdl \ https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl $ soapcpp2 -Cwvbj -c++11 -d cpp_files/onvif -i onvif.h 

Como resultado, obtenemos un conjunto de archivos de encabezado "* .h" y de origen "* .cpp" en C ++, que pueden colocarse directamente en una aplicación o en una biblioteca separada y compilarse utilizando el compilador GCC. Debido a las muchas funciones, el código es grande y requiere una optimización adicional. El microordenador Raspberry Pi 3 modelo B + tiene un rendimiento suficiente para ejecutar este código, pero si es necesario portar el código a otra plataforma, es necesario elegir la arquitectura del procesador y los recursos del sistema correctamente.

Las cámaras IP que admiten el estándar ONVIF, cuando operan en una red local, están conectadas a un grupo especial de multidifusión con la dirección 239.255.255.250 . Existe un protocolo WS-Discovery , que le permite automatizar la búsqueda de dispositivos en la red local.

La interfaz inteligente del controlador doméstico inteligente implementa la función de búsqueda de cámaras IP en el lenguaje PHP, lo cual es muy conveniente cuando interactúa con servicios web a través de mensajes XML. Cuando selecciona los elementos del menú Dispositivos> Cámaras IP> Escanear , se inicia el algoritmo de búsqueda de cámaras IP, que muestra el resultado en una tabla:


(haga clic en la imagen para abrir en una resolución más alta)

Al agregar una cámara al controlador, puede especificar la configuración según la cual interactuará con la nube. También en esta etapa, se le asigna automáticamente un identificador de dispositivo único, por el cual se puede identificar fácilmente en el futuro dentro de la nube.



A continuación, se genera un mensaje en formato JSON que contiene todos los parámetros de la cámara agregada, y se envía al proceso del servidor del controlador doméstico inteligente a través del comando RESTful API, donde los parámetros de la cámara se decodifican y almacenan en la base de datos interna de SQLite, y también se utilizan para iniciar los siguientes subprocesos de procesamiento:

  1. establecer una conexión RTSP para recibir transmisiones de video y audio;
  2. transcodificación de audio desde los formatos G.711 mu-Law, G.711 A-Law, G.723, etc. a formato AAC;
  3. transcodificar transmisiones de video H.264 y audio AAC al contenedor FLV y transmitirlo a la nube usando RTMP;
  4. establecer una conexión con el punto final del detector de movimiento de la cámara IP mediante el protocolo ONVIF y su sondeo periódico;
  5. generar periódicamente una imagen de vista previa en miniatura y enviarla a la nube utilizando el protocolo MQTT;
  6. Grabación local de transmisiones de video y audio en forma de archivos separados en formato MP4 en una tarjeta SD o Flash de un controlador doméstico inteligente.



Para establecer una conexión con cámaras, transcodificar, procesar y grabar transmisiones de video en el proceso del servidor, se utilizan las funciones de la biblioteca FFmpeg 4.1.0.

En el experimento de prueba de rendimiento, se conectaron 3 cámaras al controlador:

  1. HiWatch DS-I114W (resolución - 720p, formato de compresión - H.264, velocidad de bits - 1 Mb / s, sonido G.711 mu-Law);
  2. Microdigital MDC-M6290FTD-1 (resolución - 1080p, formato de compresión - H.264, velocidad de bits - 1 Mb / s, sin sonido);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (resolución - 1080p, formato de compresión - H.264, velocidad de bits - 1.5 Mb / s, sonido AAC).



Las tres transmisiones se enviaron simultáneamente a la nube, la transcodificación de sonido se realizó solo desde una cámara y se deshabilitó la grabación del archivo local. La utilización de la CPU fue aproximadamente del 5%, el uso de RAM fue de 32 MB (por proceso), 56 MB (total con el sistema operativo).

Por lo tanto, se pueden conectar aproximadamente de 20 a 30 cámaras (dependiendo de la resolución y la velocidad de bits) al controlador doméstico inteligente, que es suficiente para un sistema de videovigilancia de una casa de tres pisos o un pequeño almacén. En tareas donde se requiere un alto rendimiento, puede usar una nettop con un procesador Intel multi-core y Linux Debian Sarge OS. Actualmente, el controlador está en operación de prueba y se actualizarán los datos sobre su rendimiento.

Interacción en la nube


El hogar inteligente en la nube almacena datos de usuario (mediciones de video y sensor) en la nube. La arquitectura de almacenamiento en la nube se analizará con más detalle en el próximo artículo de nuestra serie. Ahora hablemos de la interfaz para transmitir mensajes de información desde el controlador de casa inteligente a la nube.

Los estados de los dispositivos conectados y las mediciones del sensor se transmiten utilizando el protocolo MQTT , que a menudo se usa en proyectos de IoT debido a su simplicidad y eficiencia energética. MQTT utiliza un modelo cliente-servidor cuando los clientes se suscriben a ciertos temas dentro del intermediario y publican sus mensajes. El intermediario envía mensajes a todos los suscriptores de acuerdo con las reglas determinadas por el nivel de calidad de servicio (QoS):

  • QoS 0: como máximo una vez (sin garantía de entrega);
  • QoS 1: al menos una vez (con confirmación de entrega);
  • QoS 2: exactamente una vez (con confirmación de entrega adicional).

En nuestro caso, Eclipse Mosquitto se utiliza como corredor de MQTT. El nombre del tema es el identificador único del controlador de inicio inteligente. El cliente MQTT dentro del proceso del servidor se suscribe a este tema y traduce los mensajes JSON que provienen del administrador de mensajes. Por el contrario, los mensajes del agente MQTT se les envían en el administrador de mensajes, que luego los multiplexa a sus suscriptores dentro del proceso del servidor:



Para transmitir mensajes sobre el estado del controlador doméstico inteligente, se utiliza el mecanismo de mensajes guardados mensajes retenidos del protocolo MQTT. Esto le permite monitorear correctamente los momentos de reconexión durante fallas de energía.

El cliente MQTT se desarrolló en base a la implementación de la biblioteca Eclipse Paho en C ++.

Las transmisiones de medios H.264 + AAC se envían a la nube utilizando el protocolo RTMP, donde un grupo de servidores de medios es responsable de su procesamiento y almacenamiento. Para distribuir de manera óptima la carga en el clúster y seleccionar el servidor de medios menos cargado, el controlador doméstico inteligente realiza una solicitud preliminar al equilibrador de carga en la nube y solo entonces envía el flujo de medios.

Conclusión


El artículo examinó una implementación específica de un controlador doméstico inteligente basado en el microordenador Raspberry Pi 3 B +, que puede recibir, procesar información y administrar equipos usando el protocolo Z-Wave, interactuar con cámaras IP usando el protocolo ONVIF y también intercambiar datos y comandos con la nube Servicio de protocolo MQTT y RTMP. Se ha desarrollado un motor lógico de producción basado en una comparación de reglas lógicas y hechos presentados en formato JSON.

Ahora el controlador de casa inteligente se está sometiendo a una operación de prueba en varias instalaciones en Moscú y la región de Moscú.

En la próxima versión del controlador, se planea conectar dispositivos de otros tipos (RF, Bluetooth, WiFi, cableados). Para comodidad de los usuarios, el procedimiento para conectar sensores y cámaras IP se transferirá a la aplicación móvil. También hay ideas para optimizar el código de proceso del servidor y portar el software al sistema operativo OpenWrt . Esto ahorrará en un controlador separado y transferirá la funcionalidad de un hogar inteligente a un enrutador doméstico normal.

Source: https://habr.com/ru/post/467219/


All Articles