Nuvem Smart Home. Parte 1: Controlador e sensores



Hoje, graças ao rápido desenvolvimento de microeletrônica, canais de comunicação, tecnologias da Internet e Inteligência Artificial, o tópico de casas inteligentes está se tornando cada vez mais relevante. A habitação humana sofreu mudanças significativas desde a Idade da Pedra e na era da Revolução Industrial 4.0 e a Internet das Coisas se tornou conveniente, funcional e segura. Estão chegando ao mercado soluções que transformam um apartamento ou uma casa de campo em sofisticados sistemas de informação, gerenciados de qualquer lugar do mundo usando um smartphone. Além disso, o conhecimento de linguagens de programação não é mais necessário para a interação homem-máquina - graças aos algoritmos de reconhecimento e síntese de fala, uma pessoa fala sua língua nativa com uma casa inteligente.

Alguns sistemas domésticos inteligentes atualmente no mercado são um desenvolvimento lógico de sistemas de vigilância por vídeo baseados na nuvem, cujos desenvolvedores perceberam a necessidade de uma solução abrangente, não apenas para o monitoramento, mas também para o gerenciamento de objetos remotos.

Oferecemos a você uma série de três artigos, que informarão sobre todos os principais componentes do sistema de casa inteligente em nuvem, desenvolvido pessoalmente pelo autor e colocado em operação. O primeiro artigo é dedicado ao equipamento cliente terminal instalado dentro de uma casa inteligente, o segundo à arquitetura de um sistema de armazenamento em nuvem e processamento de dados e, finalmente, o terceiro a um aplicativo cliente para gerenciar o sistema em dispositivos móveis e estacionários.

Equipamento Doméstico Inteligente


Primeiro, vamos falar sobre como fazer uma casa inteligente fora de um apartamento, chalé ou chalé comuns. Para isso, geralmente é necessário colocar o seguinte equipamento em casa:

  1. sensores que medem vários parâmetros ambientais;
  2. atuadores atuando em objetos externos;
  3. um controlador que executa cálculos de acordo com as medições do sensor e a lógica incorporada e emite comandos para os atuadores.

A figura a seguir mostra o diagrama de uma casa inteligente, na qual existem sensores para vazamento de água (1) no banheiro, temperatura (2) e iluminação (3) no quarto, uma tomada inteligente (4) na cozinha e uma câmera de vigilância por vídeo (5) no corredor.



Atualmente, os sensores sem fio que operam sob os protocolos RF433, Z-Wave, ZigBee, Bluetooth e WiFi são amplamente utilizados. Suas principais vantagens são a facilidade de instalação e uso, além de baixo custo e confiabilidade, porque Os fabricantes procuram trazer seus dispositivos para o mercado de massa e disponibilizá-los para o usuário médio.

Normalmente, sensores e atuadores são conectados por meio de uma interface sem fio ao controlador doméstico inteligente (6) - um microcomputador especializado que integra todos esses dispositivos em uma única rede e os controla.

No entanto, algumas soluções podem combinar um sensor, um atuador e um controlador ao mesmo tempo. Por exemplo, um soquete inteligente pode ser programado para ligar ou desligar uma programação e uma câmera de vigilância por vídeo baseada na nuvem pode gravar vídeo com base em um sinal de um detector de movimento. Nos casos mais simples, você pode ficar sem um controlador separado, mas para criar um sistema flexível com muitos cenários, é necessário.

Para conectar o controlador doméstico inteligente à rede global, pode ser usado um roteador de Internet convencional (7), que há muito tempo é um eletrodoméstico familiar em qualquer residência. Há mais um argumento a favor do controlador de casa inteligente - se a conexão com a Internet for perdida, a casa inteligente continuará funcionando normalmente devido ao bloco lógico armazenado dentro do controlador e não no serviço em nuvem.

Controlador de casa inteligente


O controlador para o sistema de casa inteligente em nuvem discutido neste artigo foi desenvolvido com base no microcomputador de placa única Raspberry Pi 3 modelo B + , lançado em março de 2018 e com recursos e desempenho suficientes para tarefas domésticas inteligentes. Ele consiste em um processador Cortex-A53 de quatro núcleos com arquitetura ARMv8-A de 64 bits, com clock de 1,4 GHz, além de 1 GB de RAM, Wi-Fi 802.11ac, Bluetooth 4.2 e um adaptador Ethernet de gigabit que funciona via barramento USB 2.0.



A montagem do controlador é muito simples - o microcomputador (1) é instalado em uma caixa de plástico (2) e, em seguida, um cartão microSD de 8 GB com software (3) e um controlador de rede USB Z-Wave (4) são inseridos nos slots correspondentes. O controlador doméstico inteligente é conectado à rede elétrica por meio de um adaptador de energia de 5V, 2.1A (5) e um cabo USB-micro-USB (6). Cada controlador possui um número de identificação exclusivo, que é registrado no arquivo de configuração na primeira inicialização e é necessário para a interação com os serviços domésticos inteligentes em nuvem.

O software Smart Home Controller foi desenvolvido pelo autor deste artigo, com base no sistema operacional Linux Raspbian Stretch . Consiste nos seguintes subsistemas principais:

  • processo do servidor para interagir com o equipamento doméstico inteligente e a nuvem;
  • interface gráfica do usuário para configurar o controlador e os parâmetros operacionais;
  • Bancos de dados para armazenar a configuração do controlador.



O banco de dados do controlador doméstico inteligente é baseado no SQLite DBMS incorporado e é um arquivo no cartão SD com o software do sistema. Ele serve como um repositório da configuração do controlador - informações sobre o equipamento conectado e seu estado atual, um bloco de regras de produção lógica, além de informações que requerem indexação (por exemplo, nomes de arquivos do arquivo de vídeo local). Quando o controlador é reinicializado, essas informações são salvas, o que torna possível restaurar o controlador em caso de falta de energia.

A interface gráfica do controlador doméstico inteligente é desenvolvida no PHP 7 usando o microframework Slim . O servidor da Web lighttpd , que geralmente é usado em dispositivos incorporados devido ao seu bom desempenho e aos baixos requisitos de recursos, é responsável pela operação do aplicativo.


(clique na imagem para abrir em resolução maior)

A principal função da interface gráfica é conectar equipamentos domésticos inteligentes (câmeras IP e sensores) ao controlador. O aplicativo da Web lê a configuração e o status atual do controlador e dos dispositivos conectados a ele no banco de dados SQLite. Para alterar a configuração do controlador, ele envia comandos de controle no formato JSON por meio da API RESTful do processo do servidor.

Processo do servidor


O processo do servidor é um componente-chave que realiza todo o trabalho básico de automação dos processos de informação que compõem a base de uma casa inteligente: recebimento e processamento de dados sensoriais, emissão de ações de controle, dependendo da lógica subjacente. O objetivo do processo do servidor é interagir com o equipamento doméstico inteligente, seguir as regras da lógica de produção, receber e processar comandos da interface gráfica e da nuvem. O processo do servidor neste controlador doméstico inteligente é implementado como um aplicativo multiencadeado desenvolvido em C ++ e lançado como um serviço systemd separado do sistema operacional Linux Raspbian .

Os principais blocos do processo do servidor são:

  1. Gerenciador de Mensagens
  2. Servidor de câmera IP;
  3. Servidor de dispositivo Z-Wave;
  4. Regras de lógica de produção do servidor;
  5. Banco de dados de configuração do controlador e o bloco de regras lógicas;
  6. Servidor de API RESTful para interagir com a interface gráfica;
  7. Cliente MQTT para interagir com a nuvem.

Os blocos do processo do servidor são implementados como fluxos separados, cujas informações são transmitidas na forma de mensagens no formato JSON (ou estruturas de dados que representam esse formato na memória do processo).



O principal componente do processo do servidor é o gerenciador de mensagens , que roteia mensagens no formato JSON para todos os blocos do processo do servidor. Os tipos de campos de informações da mensagem JSON e os valores que eles podem aceitar estão listados na tabela:

deviceTypeprotocolomessageTypedeviceStatecomando
cameraonvifsensorDataemstreaming (On / Off)
sensorzwavecomandoforagravação (On ​​/ Off)
efetormqttbusinessLogicRulestreaming (On / Off)evice (Adicionar / Remover)
businesslogicconfigurationDatagravação (On ​​/ Off)
bluetoothdeviceStateerro
wifi
rf


Por exemplo, uma mensagem de um detector de movimento da câmera é assim:

{ "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 produção


Para receber ou enviar uma mensagem do expedidor, o bloco de processos do servidor assina mensagens de um determinado tipo. A assinatura é uma regra lógica de produção do tipo "If ... then ..." , apresentada no formato JSON e um link para o manipulador de mensagens dentro do bloco de processo do servidor. Por exemplo, para que o servidor da câmera IP possa receber comandos da GUI e da nuvem, é necessário adicionar a seguinte regra:

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

Se as condições especificadas no antecedente (lado esquerdo) da regra forem verdadeiras, a regra (lado direito) da regra será executada e o manipulador obterá acesso ao corpo da mensagem JSON. O antecedente suporta operadores lógicos que executam comparação de pares de valores-chave JSON:

  1. igual a "igual";
  2. diferente de "not_equal";
  3. menos "menos";
  4. mais "maior";
  5. menor ou igual a "less_or_equal";
  6. maior que ou igual a maior_ou_equal.

Os resultados da comparação podem ser vinculados usando os operadores de álgebra booleana:

  1. E "e";
  2. OR "ou";
  3. NÃO "não".

Assim, escrevendo operadores e operandos na notação polonesa, é possível formar condições bastante complexas com um grande número de parâmetros.

Exatamente o mesmo mecanismo, baseado em mensagens JSON e regras de produção no formato JSON, é usado no bloco do servidor lógico de produção para representar conhecimento e fazer inferência lógica usando dados sensoriais de sensores residenciais inteligentes.

Usando um aplicativo móvel, o usuário cria scripts de acordo com os quais uma casa inteligente deve funcionar. Por exemplo: "Se o sensor para abrir a porta da frente tiver funcionado, acenda a luz no corredor" . O aplicativo lê os identificadores de sensores (sensor de abertura) e atuadores (soquete inteligente ou lâmpada inteligente) do banco de dados e gera uma regra lógica no formato JSON, que é enviada ao controlador doméstico inteligente. Esse mecanismo será discutido em mais detalhes no terceiro artigo de nossa série, onde falaremos sobre um aplicativo cliente para gerenciar uma casa inteligente.

O mecanismo de lógica de produção discutido acima é implementado usando a biblioteca RapidJSON , um analisador SAX do formato JSON em C ++. A leitura e a análise consistentes de uma matriz de regras de produção facilitam a implementação da função de correspondência de dados nos 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); } } } 

Aqui o pFact é uma estrutura que contém pares de valores-chave de uma mensagem JSON, m_Rules é uma matriz de sequência de regras de produção. A comparação da mensagem recebida e da regra de produção é executada na função reader.Parse (ruleStream, ruleHandler) , em que ruleHandler é um objeto que contém a lógica dos operadores booleanos e de comparação. sRuleId é um identificador de regra exclusivo, graças ao qual é possível armazenar e editar regras dentro do banco de dados de um controlador doméstico inteligente. m_pActions - uma matriz com os resultados da inferência lógica: mensagens JSON contendo consistentes da base de regras e encaminhadas ao gerenciador de mensagens para que os fluxos de assinantes possam processá-las.

O desempenho do RapidJSON é comparável à função strlen () e os requisitos mínimos de recursos do sistema permitem que essa biblioteca seja usada em dispositivos incorporados. O uso de mensagens e regras lógicas no formato JSON permite implementar um sistema flexível de troca de informações entre todos os componentes do controlador doméstico inteligente.

Sensores e atuadores Z-Wave


A principal vantagem de uma casa inteligente é que ela pode medir independentemente vários parâmetros ambientais e executar funções úteis, dependendo da situação. Para isso, sensores e atuadores são conectados ao controlador doméstico inteligente. Na versão atual, esses são dispositivos sem fio operando de acordo com o protocolo Z-Wave a uma frequência alocada de 869 MHz para a Rússia. Por seu trabalho, eles são combinados em uma rede mesh, na qual estão presentes repetidores de sinal para aumentar a área de cobertura. Os dispositivos também possuem um modo especial de economia de energia - eles passam a maior parte do tempo no modo de suspensão e enviam informações apenas quando seu estado muda, o que pode prolongar significativamente a vida útil da bateria embutida.



No mercado, agora você pode encontrar um número bastante grande de diferentes dispositivos Z-Wave. Como exemplo, considere alguns:

  1. O soquete inteligente Zipato PAN16 pode medir os seguintes parâmetros: consumo de energia (kW / h), potência (W), tensão (V) e corrente (A) na rede elétrica. Ele também possui um interruptor interno com o qual você pode controlar o aparelho elétrico conectado;
  2. O sensor de vazamento Neo Coolcam detecta a presença de líquido derramado fechando os contatos da sonda remota;
  3. O detector de fumaça Zipato PH-PSG01 é acionado quando partículas de fumaça entram na câmara do analisador de gás;
  4. O sensor de movimento Neo Coolcam analisa a radiação infravermelha do corpo humano. Além disso, há um sensor de luz (Lx);
  5. O multisensor Philio PST02-A mede temperatura (° C), exposição à luz (%), abertura de porta, presença de uma pessoa na sala;
  6. Controlador de rede Z-Wave USB Stick ZME E UZB1, ao qual os sensores estão conectados.

É muito importante que os dispositivos e o controlador trabalhem na mesma frequência; caso contrário, eles simplesmente não se verão no momento da conexão. Até 232 dispositivos podem ser conectados a um controlador de rede Z-Wave, o suficiente para um apartamento ou uma casa de campo. Para expandir a área de cobertura da rede em ambientes fechados, um soquete inteligente pode ser usado como repetidor de sinal.



No processo do servidor do controlador doméstico inteligente, discutido no parágrafo anterior, o servidor Z-Wave é responsável por interagir com os dispositivos Z-Wave. Para obter informações dos sensores, ele usa a biblioteca OpenZWave em C ++, que fornece uma interface para interação com um controlador USB da rede Z-Wave e trabalha com muitos sensores e atuadores. O valor do parâmetro ambiental medido pelo sensor é registrado pelo servidor Z-Wave na forma de uma mensagem 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" } 

Em seguida, ele é encaminhado ao gerenciador de mensagens do processo do servidor para que os threads do assinante possam recebê-lo. O assinante principal é o servidor lógico de produção, que compara os valores dos campos da mensagem nos antecedentes das regras lógicas. Os resultados da saída lógica que contêm comandos de controle são enviados de volta ao gerenciador de mensagens e de lá eles vão para o servidor Z-Wave, que os decodifica e os envia para o controlador USB da rede Z-Wave. Então eles caem no dispositivo executivo, que muda o estado do ambiente, e a casa inteligente, portanto, faz um trabalho útil.


(clique na imagem para abrir em resolução maior)

Os dispositivos Z-Wave são conectados na interface gráfica do controlador doméstico inteligente. Para fazer isso, vá para a página com a lista de dispositivos e clique no botão "Adicionar". O comando add através da API RESTful entra no processo do servidor e, em seguida, é enviado pelo gerenciador de mensagens ao servidor Z-Wave, que coloca o controlador Z-Wave USB no modo de adição de dispositivo especial. Em seguida, no dispositivo Z-Wave, é necessário fazer uma série de pressionamentos rápidos (3 pressionamentos em 1,5 segundos) do botão de serviço. Um controlador USB conecta o dispositivo à rede e envia informações sobre ele ao servidor Z-Wave. Isso, por sua vez, cria um novo registro no banco de dados SQLite com os parâmetros do novo dispositivo. Após um intervalo de tempo predeterminado, a interface gráfica retorna à página da lista de dispositivos Z-Wave, lê as informações do banco de dados e exibe o novo dispositivo na lista. Ao mesmo tempo, cada dispositivo recebe seu próprio identificador exclusivo, usado nas regras de inferência de produção e ao trabalhar na nuvem. A operação deste algoritmo é mostrada no diagrama UML:


(clique na imagem para abrir em resolução maior)

Conexão de câmera IP


O sistema doméstico inteligente em nuvem discutido neste artigo é uma modernização do sistema de vigilância por vídeo em nuvem, também desenvolvido pelo autor, que está no mercado há vários anos e possui muitas instalações na Rússia.

Para sistemas de vigilância por vídeo em nuvem, um dos problemas agudos é a escolha limitada de equipamentos com os quais a integração pode ser feita. O software responsável pela conexão com a nuvem é instalado dentro da câmera de vídeo, o que imediatamente exige muito do seu hardware - o processador e a quantidade de memória livre. Isso explica principalmente o preço mais alto das câmeras de vigilância por vídeo baseadas na nuvem em comparação às câmeras IP convencionais. Além disso, é necessária uma longa fase de negociações com os fabricantes de câmeras de CFTV para obter acesso ao sistema de arquivos da câmera e a todas as ferramentas de desenvolvimento necessárias.



Por outro lado, todas as câmeras IP modernas possuem protocolos padrão para interagir com outros equipamentos (em particular, DVRs). Portanto, o uso de um controlador separado que se conecta usando o protocolo padrão e transmite fluxos de vídeo de câmeras IP para a nuvem fornece vantagens competitivas significativas para os sistemas de vigilância por vídeo na nuvem. Além disso, se o cliente já instalou um sistema de vigilância por vídeo baseado em câmeras IP simples, torna-se possível expandi-lo e transformá-lo em uma casa inteligente nublada e completa.

O protocolo mais popular para sistemas de vigilância por vídeo IP, que agora é suportado por todos os fabricantes de câmeras IP sem exceção, é o ONVIF Profile S , cujas especificações existem na linguagem de descrição de serviços web WSDL . Usando utilitários do kit de ferramentas gSOAP , é possível gerar o código fonte dos serviços que trabalham com câmeras 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, obtemos um conjunto de arquivos de cabeçalho "* .h" e de origem "* .cpp" em C ++, que podem ser colocados diretamente em um aplicativo ou em uma biblioteca separada e compilados usando o compilador GCC. Devido às muitas funções, o código é grande e requer otimização adicional. O microcomputador Raspberry Pi 3 modelo B + tem desempenho suficiente para executar esse código, mas se houver necessidade de portar o código para outra plataforma, é necessário escolher a arquitetura do processador e os recursos do sistema corretamente.

As câmeras IP compatíveis com o padrão ONVIF, quando operam em uma rede local, são conectadas a um grupo multicast especial com o endereço 239.255.255.250 . Existe um protocolo WS-Discovery , que permite automatizar a pesquisa de dispositivos na rede local.

A interface inteligente do controlador doméstico inteligente implementa a função de busca de câmeras IP na linguagem PHP, o que é muito conveniente ao interagir com serviços da Web por meio de mensagens XML. Quando você seleciona os itens de menu Dispositivos> Câmeras IP> Digitalizar , o algoritmo de pesquisa de câmeras IP é iniciado, exibindo o resultado em uma tabela:


(clique na imagem para abrir em resolução maior)

Ao adicionar uma câmera ao controlador, você pode especificar as configurações segundo as quais ela irá interagir com a nuvem. Também nesta fase, é atribuído automaticamente um identificador de dispositivo exclusivo, pelo qual ele pode ser facilmente identificado no futuro na nuvem.



Em seguida, uma mensagem é gerada no formato JSON contendo todos os parâmetros da câmera adicionada e enviada ao processo do servidor do controlador doméstico inteligente por meio do comando API RESTful, em que os parâmetros da câmera são decodificados e armazenados no banco de dados SQLite interno e também são usados ​​para iniciar os seguintes threads de processamento:

  1. estabelecer uma conexão RTSP para receber fluxos de vídeo e áudio;
  2. transcodificação de áudio dos formatos G.711 mu-Law, G.711 A-Law, G.723, etc. para o formato AAC;
  3. transcodificar fluxos de vídeo H.264 e áudio AAC para o contêiner FLV e transmiti-lo para a nuvem usando RTMP;
  4. estabelecer uma conexão com o ponto final do detector de movimento da câmera IP via protocolo ONVIF e sua pesquisa periódica;
  5. gerar periodicamente uma imagem de visualização em miniatura e enviá-la para a nuvem usando o protocolo MQTT;
  6. gravação local de fluxos de vídeo e áudio na forma de arquivos separados no formato MP4 em um cartão SD ou Flash de um controlador doméstico inteligente.



Para estabelecer uma conexão com as câmeras, transcodificando, processando e gravando fluxos de vídeo no processo do servidor, são utilizadas funções da biblioteca FFmpeg 4.1.0.

No experimento de teste de desempenho, três câmeras foram conectadas ao controlador:

  1. HiWatch DS-I114W (resolução - 720p, formato de compressão - H.264, taxa de bits - 1 Mb / s, som G.711 mu-Law);
  2. MDC-M6290FTD-1 microdigital (resolução - 1080p, formato de compressão - H.264, taxa de bits - 1 Mb / s, sem som);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (resolução - 1080p, formato de compactação - H.264, taxa de bits - 1,5 Mb / s, som AAC).



Todos os três fluxos foram enviados simultaneamente para a nuvem, a transcodificação do som foi realizada apenas em uma câmera e a gravação do arquivo local foi desativada. A utilização da CPU foi de aproximadamente 5%, o uso da RAM foi de 32 MB (por processo) e 56 MB (total com SO).

Assim, aproximadamente 20 a 30 câmeras (dependendo da resolução e taxa de bits) podem ser conectadas ao controlador doméstico inteligente, o que é suficiente para um sistema de vigilância por vídeo de uma casa de três andares ou um pequeno armazém. Nas tarefas em que é necessário alto desempenho, você pode usar um nettop com um processador multinúcleo Intel e o Linux Debian Sarge OS. Atualmente, o controlador está em operação de teste e os dados sobre seu desempenho serão atualizados.

Interação na nuvem


O Cloud Smart Home armazena dados do usuário (medições de vídeo e sensor) na nuvem. A arquitetura de armazenamento em nuvem será discutida em mais detalhes no próximo artigo de nossa série. Agora vamos falar sobre a interface para transmitir mensagens informativas do controlador doméstico inteligente para a nuvem.

Os estados dos dispositivos conectados e as medições dos sensores são transmitidos usando o protocolo MQTT , que é frequentemente usado em projetos de IoT devido à sua simplicidade e eficiência energética. O MQTT usa um modelo cliente-servidor quando os clientes assinam determinados tópicos no broker e publicam suas mensagens. O broker envia mensagens para todos os assinantes de acordo com as regras determinadas pelo nível de QoS (Qualidade de Serviço):

  • QoS 0 - no máximo uma vez (sem garantia de entrega);
  • QoS 1 - pelo menos uma vez (com confirmação de entrega);
  • QoS 2 - exatamente uma vez (com confirmação de entrega adicional).

No nosso caso, o Eclipse Mosquitto é usado como um broker MQTT. O nome do tópico é o identificador exclusivo do controlador doméstico inteligente. O cliente MQTT dentro do processo do servidor se inscreve neste tópico e converte nele mensagens JSON provenientes do gerenciador de mensagens. Por outro lado, as mensagens do broker MQTT são enviadas a eles no gerenciador de mensagens, que as multiplexa para seus assinantes no processo do servidor:



Para transmitir mensagens sobre o estado do controlador doméstico inteligente, é usado o mecanismo de mensagens salvas e as mensagens retidas do protocolo MQTT. Isso permite que você monitore corretamente os momentos de reconexões durante falhas de energia.

O cliente MQTT foi desenvolvido com base na implementação da biblioteca Eclipse Paho em C ++.

Os fluxos de mídia H.264 + AAC são enviados para a nuvem usando o protocolo RTMP, onde um cluster de servidores de mídia é responsável por seu processamento e armazenamento. Para distribuir de maneira ideal a carga no cluster e selecionar o servidor de mídia menos carregado, o controlador de casa inteligente faz uma solicitação preliminar ao balanceador de carga em nuvem e só envia o fluxo de mídia.

Conclusão


O artigo examinou uma implementação específica de um controlador doméstico inteligente baseado no microcomputador Raspberry Pi 3 B +, que pode receber, processar informações e gerenciar equipamentos usando o protocolo Z-Wave, interagir com câmeras IP usando o protocolo ONVIF e também trocar dados e comandos com a nuvem Serviço de protocolo MQTT e RTMP. Um mecanismo de lógica de produção foi desenvolvido com base em uma comparação de regras e fatos lógicos apresentados no formato JSON.

Agora, o controlador doméstico inteligente está passando por uma operação experimental em várias instalações em Moscou e na região de Moscou.

Na próxima versão do controlador, está planejado conectar dispositivos de outros tipos (RF, Bluetooth, WiFi, com fio). Para conveniência dos usuários, o procedimento para conectar sensores e câmeras IP será transferido para o aplicativo móvel. Também existem idéias para otimizar o código de processo do servidor e portar o software para o sistema operacional OpenWrt . Isso economizará em um controlador separado e transferirá a funcionalidade de uma casa inteligente para um roteador doméstico comum.

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


All Articles