Internet das coisas na minha vida. Como criar um escritório inteligente e acompanhar o crescimento de batatas em seu apartamento, graças à IoT

Saúdo-vos, Khabrovchians!

Em 2020, todos sabemos o que é a Internet das Coisas e por que é necessária. Mas quantos de nós estão familiarizados com plataformas em nuvem que representam uma das camadas mais significativas da IoT? Vamos acertar.

Não é segredo que a heterogeneidade dos protocolos complica significativamente os processos de conexão de dispositivos inteligentes, sua configuração e processamento de dados. Problemas semelhantes estão sendo resolvidos através da nuvem da Internet das Coisas. Hoje, usando uma das plataformas russas da Internet das Coisas como exemplo, mostrarei como é fácil conectar dispositivos com diferentes protocolos, além de usar as informações recebidas para criar processos de automação.

Na plataforma que costumo usar para minhas tarefas, já implementei a interação com dispositivos que trabalham usando protocolos como MQTT, Wialon Combine, Wialon IPS, Galileosky, Modbus e outros.

Além de usar os protocolos apresentados, para dispositivos que não têm acesso à Internet, é possível escrever agentes de software - alguns intermediários entre o equipamento e a plataforma que são instalados em outro dispositivo (por exemplo, Raspberry Pi) e conectados a esse equipamento.

Suponha que você queira garantir a interação com um dispositivo que funcione em um dos protocolos apresentados. Nesse caso, será suficiente concluir três etapas:

  1. configure o modelo com os parâmetros e comandos desejados;
  2. crie um objeto com um identificador exclusivo na plataforma;
  3. configure o dispositivo para conectar-se à plataforma.

Vamos analisar alguns casos e ver como tudo se conecta.

Caso No. 1 Agile-gong


Para começar, um dia nossa equipe pensou seriamente em como automatizar os processos de trabalho no escritório.

Portanto, de acordo com o conceito Agile, ao meio-dia, todos os funcionários se reúnem na reunião diária. É fácil perder uma notificação no Slack sobre uma próxima reunião durante o trabalho e não é muito conveniente se distrair com o relógio ... Então nasceu a ideia de criar o Agile-gong - um sistema automatizado de notificação sonora.

Como é implementado? O ferro é o NodeMCU (um análogo em miniatura do Arduino com um módulo Wi-Fi embutido), um servo drive e um capacitor. Todos os dias da semana, às 12 horas, você precisa garantir que o eixo de saída do servoconversor com equipamento de impacto no final seja girado em um ângulo suficiente para tocar o gongo e notificar a todos sobre o aumento.

O diagrama de conexão do ferro é bastante simples:

imagem

O código conectado ao NodeMCU fornece:

  1. instalação de conexão Wi-Fi e conexão à plataforma usando o protocolo MQTT;
  2. definir a posição inicial do servo em 0 graus;
  3. publicação de mensagens com dados sobre a situação atual;
  4. assinando comandos e girando o ângulo do servo por comando.

#include "Arduino.h"
#include "EspMQTTClient.h" /* https://github.com/plapointe6/EspMQTTClient */
// Servo library
#include <Servo.h>

// Object Servo with name myservo
Servo myservo;
int pos;

EspMQTTClient client(
  "<wifi-ssid>",
  "<wifi-password>",

  "<MQTT Broker server ip>",
  "<ric-mqtt-client-id>"
  );


void setup() {
  Serial.begin(9600);
  move(0);
}

void onConnectionEstablished() {
  Serial.println("connected");
  client.subscribe("move", [] (const String& payload)  {
	int angle = payload.toInt();
	if (angle != pos) {
  	move(angle);
	}
	client.publish("position", payload);
  });
}

void loop() {
  client.loop();
}

void move(const int angle)
{
	myservo.attach(5);
	myservo.write(angle);
	delay(800);
	myservo.detach();
	pos = angle;
}


No lado da plataforma, um modelo de dispositivo foi desenvolvido. Ele descreve os parâmetros que podem ser recebidos do dispositivo e os comandos que podem ser enviados a ele. Na interpretação do comando MQTT, são mensagens para o cliente com um determinado tópico e dados; no nosso caso, os dados contêm o ângulo de rotação necessário.

imagem

Em seguida, um objeto foi criado com um identificador pelo qual ocorre a autorização na plataforma. Após a conexão, a exibição é a seguinte:

imagem

Nas equipes, existe a opção de enviar um comando de rotação nos ângulos de 0 e 90 graus.

imagem

Agora você precisa adicionar scripts de automação. Criaremos uma máquina automática que, quando chegar a hora certa, entrará em um estado de rotação de 90 graus e, no ciclo de um número configurável de repetições, fará o número necessário de golpes e retornará ao estado inicial de espera de 12 horas.

Cada cenário de automação é um determinado diagrama de blocos que define a lógica do comportamento do objeto. Após registrar esse cenário, é possível levar em consideração todas as alterações que ocorrem com o dispositivo e, com base exatamente nas alterações ocorridas, o dispositivo poderá executar ações apropriadas automaticamente, sem enviar um comando ao usuário.
A máquina resultante pode ser usada não apenas para um dispositivo específico.

Por exemplo, você pode criar exatamente o mesmo sistema com um gongo e instalá-lo em outro escritório no seu escritório. Então você terá o mesmo modelo, dois objetos diferentes e uma máquina rodando em dois objetos.

imagem

Caso nº 2 Sensor de dióxido de carbono


A segunda solução útil para nós foi conectar um sensor de dióxido de carbono. Também conectado via MQTT. Novamente, o esquema de montagem de ferro é trivial.

imagem

Sim, a propósito, estávamos envolvidos na implementação do primeiro e do segundo casos dentro do hackathon dentro da empresa. E nenhum de nós estava imerso na obra de ferro, e não havia necessidade disso.

imagem

Além disso, o procedimento é o mesmo. O modelo inclui o parâmetro ppm (1000 ppm = 0,1% do conteúdo de 2) que o dispositivo transmite, mas não é muito óbvio; portanto, outro parâmetro foi exibido imediatamente no modelo - a porcentagem de conteúdo de CO2. É calculado como ppm dividido por 10000.

imagem

Aqui você também pode observar dois comandos para ligar a lâmpada. Eles decidiram usá-lo para indicação. E nós gerenciamos, é claro, a partir da máquina da plataforma. Depois de conectar o dispositivo, a exibição dos parâmetros é a seguinte. Esses valores são aceitos e exibidos em tempo real, mas você também pode visualizar pacotes acumulados no passado no histórico ou exibir um gráfico de alterações de parâmetros durante um determinado período.

imagem

O autômato para esse objeto funciona da seguinte maneira. No estado superior, a luz apaga. Na parte inferior - inicie o temporizador por um minuto e acenda a lâmpada. A transição do primeiro estado para o segundo ocorre pelo evento de recebimento de dados do dispositivo com a condição de que o valor em ppm seja superior a 600 unidades. O retorno (transição do segundo estado para o primeiro) ocorre quando o timer é acionado.

imagem

Você pode ter duas perguntas.

  1. Por que automático? Não é mais fácil registrar essas condições no próprio hardware? Afinal, tudo é tão simples aqui.
  2. Por que existe um cronômetro?

De fato, o benefício da máquina é mesmo em um caso tão simples. Coloquei esse sensor com uma lâmpada em minha mesa para depuração e, toda vez que eu chegava ao trabalho, a luz acendia, pois o valor limite da máquina era bastante baixo. Por um tempo, tentei valores diferentes na máquina e, como resultado, cheguei ao valor ideal de 600 unidades. Para selecionar o valor desejado, eu só precisava alterar o valor na máquina e salvá-lo. Sem piscar do dispositivo. E se transferirmos este dispositivo para um escritório onde é necessário manter as melhores condições de ar e ventilação freqüente, então o valor pode ser novamente simplesmente alterado. Rápido e conveniente.

Aqui está um cronômetro por um minuto. Isso é necessário para que, por um minuto, possamos estar em um estado de alto CO2 e não reagirmos ao fato de que por um tempo o alto valor continua a chegar. Caso contrário, piscaríamos constantemente uma lâmpada, fazendo transições até que o ar condicionado normalize. Você já poderia adivinhar que é possível fazer uma transição para o estado inicial de uma maneira diferente. Também no caso de recebimento de dados, mas no qual a condição oposta é verdadeira - ppm <600. Então estaremos no segundo estado exatamente até que o valor normal chegue.

Caso No. 3 ACS


O exemplo mais complexo será a descrição do trabalho com um sistema de controle e gerenciamento de acesso, que é um módulo eletrônico projetado para controlar o acesso às instalações, contabilizando tempos de passagem e eventos.

imagem

O controlador processa as informações provenientes do leitor com a interface de saída Wiegand e, usando o relé embutido, alterna o atuador - a trava eletromagnética. Não possui conexão à Internet e conectividade visível à plataforma. No entanto, possui protocolo próprio para troca de dados com o computador de controle, graças ao qual é possível enviar comandos ao controlador, como leitura do controlador, gravação no controlador, abertura / fechamento da trava e outros. Portanto, nesse caso, foi organizada uma abordagem não padronizada - o uso do agente, que mencionei no início do artigo.

O trabalho no protocolo do controlador foi implementado no código C ++ e iniciado para execução no Raspberry Pi, que por sua vez foi conectado ao controlador via RS-485 através de um conversor de interface. A principal tarefa do programa é conectar-se à plataforma, serializar comandos e desserializar os dados recebidos do controlador. Assim, conseguimos tornar o dispositivo "inteligente" usando uma pequena camada de software.

O modelo do dispositivo é o seguinte:

imagem

As principais informações do controlador são eventos. Ele vem para a plataforma no formato JSON e inclui campos:

  • hora do evento,
  • código do evento
  • número do cartão de funcionário.

Um modelo também é usado para analisar campos JSON para vários parâmetros.

imagem

Na interface do objeto, fica assim:

imagem

E esta é a interface para o envio de comandos:

imagem

Você pode perceber que há um comando não apenas para ler o buffer de eventos, mas também para escrever novos limites. Os limites do buffer são armazenados na memória do controlador - o começo e o fim. Quando um comando de leitura chega ao dispositivo, esses limites são lidos e dentro desses limites, a leitura do buffer de eventos ocorre. O final do limite do buffer é alterado automaticamente no controlador quando novos eventos são recebidos. Mas a borda inicial do buffer precisa ser reescrita (indicando a borda final após a última leitura) para não ler os mesmos dados novamente. Mas isso precisa ser feito somente após os dados do evento terem sido enviados com sucesso para a plataforma. Também é conveniente bloquear o recebimento de dados e, em seguida, enviar um comando para reescrever os limites na máquina.

imagem

Este projeto encontrou sua continuação em integração com o nosso sistema interno de CRM, no qual, na página de informações sobre os funcionários, sempre vemos informações atualizadas sobre quem está ou não no escritório. Além disso, a hora de entrada / saída do escritório é exibida, o número total de horas por mês é considerado.

imagem

imagem

A coleta de dados da plataforma é realizada usando a API RESTful. A API da plataforma fornece a capacidade de trabalhar, interagir e usar as entidades da plataforma e seus dados em sistemas externos como portais da Web, aplicativos móveis e da Web ou, como no nosso caso, sistemas de CRM.

Também existem casos em que uma pessoa que entrega comida / convidado ou alguém que precisa abrir a porta chegou à empresa. Para não usar seu cartão e, portanto, não transmitir leituras incorretas sobre seu status, você pode usar o botão "Desbloquear" na plataforma. E se uma pessoa precisar ser encontrada na porta, é conveniente fazer o mesmo em um aplicativo móvel.

Caso No. 4 Jardim Inteligente


Minha história pessoal com o jardim do apartamento começou no contexto de um pânico louco de pessoas e compra de produtos. Mais uma vez, indo à loja e vendo as prateleiras vazias onde as batatas deveriam estar, decidi usar a última batata encontrada na geladeira, não para a finalidade pretendida. Plantei esta batata em uma panela enorme. Com um experimento tão ingênuo, meu jardim no parapeito da janela começou, que depois de dois meses já se parece com o seguinte:

imagem

Como eu não sei qual cultivador e o jardim precisa de mais água do que flores, eu rapidamente encontrei um problema que esqueci de regá-lo. Não vou falar sobre sistemas de irrigação automática, isso é um tópico demais e é muito difícil organizar seu trabalho qualitativamente. Em vez disso, tive as seguintes idéias:

  1. - , - . , .
  2. , , , — . , , , . , .
  3. – 18:00, 6:00. , — . , , / , .

A interface ficará assim: A

imagem

máquina para o primeiro caso se parece com isso. A transição para o estado em que a notificação é enviada é feita sob uma condição difícil - em uma das plantas a umidade está abaixo do normal. O link entre as condições é OR.

imagem

O retorno ao estado inicial ocorre de acordo com a condição - em todas as plantas a umidade do solo é maior que o normal, grupo I. A

imagem

máquina para o segundo caso é a seguinte. A transição é realizada de acordo com o planejador, a redefinição é a transição incondicional.

imagem

E, finalmente, a máquina para o último caso:

imagem

essas máquinas estão funcionando no mesmo objeto e funcionam em paralelo.

imagem

Talvez isso seja tudo o que eu queria abordar no meu artigo. A idéia principal que eu queria transmitir era que trabalhar com a plataforma Internet das Coisas facilita incrivelmente a criação de processos de negócios de qualquer complexidade, pois nesse caso você precisa estudar apenas uma interface - a interface da plataforma, que evita imersão profunda no trabalho de ferro e ferro. sua programação.

All Articles