IoT en mi vida. Cómo crear una oficina inteligente, así como rastrear el crecimiento de papas en su apartamento gracias a IoT

¡Os saludo, khabrovchianos!

En 2020, todos sabemos qué es Internet de las cosas y por qué es necesario. Pero, ¿cuántos de nosotros estamos familiarizados con las plataformas en la nube que representan una de las capas más significativas en IoT? Vamos a hacerlo bien.

No es ningún secreto que la heterogeneidad de los protocolos complica significativamente los procesos de conexión de dispositivos inteligentes, su configuración y procesamiento de datos. Problemas similares se están abordando a través de la nube de Internet de las cosas. Hoy, usando una de las plataformas rusas de Internet de las cosas como ejemplo, mostraré lo fácil que es conectar dispositivos con diferentes protocolos, así como usar la información recibida para construir procesos de automatización.

En la plataforma que uso habitualmente para mis tareas, ya he implementado la interacción con dispositivos que funcionan mediante protocolos como MQTT, Wialon Combine, Wialon IPS, Galileosky, Modbus y algunos otros.

Además de utilizar los protocolos presentados, para dispositivos que no tienen acceso a Internet, es posible escribir agentes de software, algunos intermediarios entre el equipo y la plataforma que están instalados en otro dispositivo (por ejemplo, Raspberry Pi) y conectados a este equipo.

Suponga que desea garantizar la interacción con un dispositivo que funciona en uno de los protocolos presentados. En este caso, será suficiente completar tres pasos:

  1. configurar el modelo con los parámetros y comandos deseados;
  2. crear un objeto con un identificador único en la plataforma;
  3. configurar el dispositivo para conectarse a la plataforma.

Analicemos algunos casos y veamos cómo se conecta todo.

Caso No. 1 Agile-gong


Para empezar, un día nuestro equipo pensó seriamente en cómo automatizar los procesos de trabajo en la oficina.

Entonces, de acuerdo con el concepto Ágil, al mediodía, todos los empleados se reúnen en la reunión diaria. Es fácil perderse una notificación en Slack sobre una próxima reunión durante el trabajo y no es muy conveniente distraerse con el reloj ... Así que la idea nació para crear Agile-gong, un sistema de notificación de sonido automatizado.

¿Cómo se implementa? Iron es NodeMCU (un análogo en miniatura de Arduino con un módulo de Wi-Fi incorporado), un servoaccionamiento y un condensador. Cada día de la semana a las 12 en punto, debe asegurarse de que el eje de salida del servoaccionamiento con el equipo de impacto al final esté girado en un ángulo suficiente para hacer sonar el gong y notificar a todos sobre el aumento.

El diagrama de conexión para el hierro es bastante simple:

imagen

El código cableado en NodeMCU proporciona:

  1. instalación de conexión Wi-Fi y conexión a la plataforma utilizando el protocolo MQTT;
  2. establecer la posición inicial del servo en 0 grados;
  3. publicación de mensajes con datos sobre la situación actual;
  4. suscribirse a comandos y girar el servo ángulo 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;
}


En el lado de la plataforma, se ha desarrollado un modelo de dispositivo. Describe los parámetros que se pueden recibir del dispositivo y los comandos que se le pueden enviar. En la interpretación del comando MQTT, estos son mensajes para el cliente con un determinado tema y datos, en nuestro caso, los datos contienen el ángulo de rotación necesario.

imagen

Luego se creó un objeto con un identificador mediante el cual se produce la autorización en la plataforma. Después de conectarse, la pantalla se ve de la siguiente manera:

imagen

en los equipos hay una opción para enviar un comando de rotación en un ángulo de 0 y 90 grados.

imagen

Ahora necesita agregar scripts de automatización. Crearemos una máquina automática que, cuando llegue el momento adecuado, pasará a un estado de rotación de 90 grados, luego en el ciclo para un número configurable de repeticiones, realizará el número necesario de golpes y volverá al estado de espera inicial de 12 horas.

Cada escenario de automatización es un cierto diagrama de bloques que define la lógica del comportamiento del objeto. Una vez registrado dicho escenario, puede tener en cuenta todos los cambios que se producen con el dispositivo y, basándose exactamente en los cambios que se han producido, el dispositivo podrá realizar las acciones apropiadas automáticamente, sin enviar un comando al usuario.
La máquina resultante puede usarse no solo para un dispositivo en particular.

Por ejemplo, puede hacer exactamente el mismo sistema con un gong e instalarlo en otra oficina de su oficina. Luego tendrá el mismo modelo, dos objetos diferentes y una máquina que se ejecuta en dos objetos.

imagen

Caso No. 2 Sensor de dióxido de carbono


La segunda solución útil para nosotros fue conectar un sensor de dióxido de carbono. También conectado a través de MQTT. Nuevamente, el esquema de ensamblaje de hierro es trivial.

imagen

Sí, por cierto, estábamos involucrados en la implementación del primer y segundo caso dentro del hackathon dentro de la empresa. Y ninguno de nosotros estaba inmerso en el trabajo del hierro, y no había necesidad de esto.

imagen

Además, el procedimiento es el mismo. El modelo incluye el parámetro ppm (1000 ppm = 0.1% del contenido de 2), que el dispositivo transmite, pero no es muy obvio, por lo tanto, otro parámetro se mostró inmediatamente en el modelo: el porcentaje de contenido de CO2. Se calcula como ppm dividido por 10000.

imagen

Aquí también puede observar dos comandos para encender la bombilla. Decidieron usarlo como indicación. Y lo gestionamos, por supuesto, desde la máquina plataforma. Después de conectar el dispositivo, la visualización de los parámetros es la siguiente. Estos valores se aceptan y se muestran en tiempo real, pero también puede ver los paquetes acumulados pasados ​​en el historial o mostrar un gráfico de cambios de parámetros durante un período determinado.

imagen

El autómata para este objeto funciona de la siguiente manera. En el estado superior, la luz se apaga. En la parte inferior, encienda el temporizador por un minuto y encienda la bombilla. La transición del primer estado al segundo ocurre por el evento de recibir datos del dispositivo con la condición de que el valor de ppm sea más de 600 unidades. El retorno (transición del segundo estado al primero) ocurre cuando se dispara el temporizador.

imagen

Puedes tener dos preguntas.

  1. ¿Por qué automático? ¿No es más fácil registrar tales condiciones en el hardware en sí? Después de todo, todo es tan simple aquí.
  2. ¿Por qué hay un temporizador?

De hecho, el beneficio de la máquina es incluso en un caso tan simple. Puse este sensor con una bombilla en mi escritorio para la depuración, y cada vez que venía a trabajar, la luz se encendía, ya que el valor umbral en la máquina era bastante bajo. Durante un tiempo probé diferentes valores en la máquina y como resultado llegué al valor óptimo de 600 unidades. Para seleccionar el valor deseado, solo necesitaba cambiar el valor en la máquina y guardarlo. Sin parpadeo del dispositivo. Y si transferimos este dispositivo a una oficina donde es necesario mantener las mejores condiciones de aire y es necesaria una ventilación frecuente, entonces el valor puede cambiarse nuevamente. Rápido y conveniente.

Aquí hay un temporizador por un minuto. Esto es necesario para que por un minuto estemos en un estado de alto CO2 y no reaccionemos al hecho de que por un tiempo el alto valor continúa llegando. De lo contrario, parpadearíamos constantemente una bombilla, haciendo transiciones hasta que el aire acondicionado se normalice. Ya podría adivinar que es posible hacer una transición al estado inicial de una manera diferente. También en el caso de recibir datos, pero en los cuales la condición opuesta es verdadera - ppm <600. Entonces estaremos en el segundo estado exactamente hasta que llegue el valor normal.

Caso No. 3 ACS


El ejemplo más complejo será la descripción de trabajar con un sistema de control y gestión de acceso, que es un módulo electrónico diseñado para controlar el acceso a las instalaciones, teniendo en cuenta los tiempos de paso y los eventos.

imagen

El controlador procesa la información proveniente del lector con la interfaz de salida Wiegand y, utilizando el relé incorporado, conmuta el actuador, el bloqueo electromagnético. No tiene conexión a Internet ni conectividad visible a la plataforma. Sin embargo, tiene su propio protocolo para intercambiar datos con la computadora de control, gracias al cual es posible enviar comandos al controlador, como leer desde el controlador, escribir en el controlador, abrir / cerrar la cerradura y otros. Por lo tanto, en este caso, se organizó un enfoque no estándar: el uso del agente, que mencioné al principio del artículo.

El trabajo en el protocolo del controlador se implementó en código C ++ y se lanzó para su ejecución en la Raspberry Pi, que a su vez se conectó al controlador a través de RS-485 a través de un convertidor de interfaz. La tarea principal del programa es conectarse a la plataforma, serializar comandos y deserializar los datos recibidos del controlador. Por lo tanto, pudimos hacer que el dispositivo sea "inteligente" utilizando una pequeña capa de software.

El modelo del dispositivo es el siguiente:

imagen

La información principal del controlador son los eventos. Se trata de la plataforma en formato JSON e incluye campos:

  • hora del evento,
  • código de evento
  • Número de tarjeta de empleado.

Un modelo también se utiliza para analizar campos JSON para varios parámetros.

imagen

En la interfaz del objeto, se ve así:

imagen

Y esta es la interfaz para enviar comandos:

imagen

Puede notar que hay un comando no solo para leer el búfer de eventos, sino también para escribir nuevos límites. Los límites del búfer se almacenan en la memoria del controlador: el principio y el final. Cuando un comando de lectura llega al dispositivo, estos límites se leen y dentro de estos límites, se realiza la lectura desde el búfer de eventos. El final del límite del búfer se desplaza automáticamente en el controlador cuando se reciben nuevos eventos. Pero el borde inicial del búfer debe reescribirse (indicando el borde final después de la última lectura) para no volver a leer los mismos datos. Pero esto debe hacerse solo después de que los datos del evento se hayan enviado con éxito a la plataforma. También es conveniente bloquear el recibo de datos y luego enviar un comando para reescribir los límites en la máquina.

imagen

Este proyecto encontró su continuación en la integración con nuestro sistema interno de CRM, en el que en la página de información sobre los empleados siempre vemos información actualizada sobre quién está o no en la oficina. Además, se muestra la hora de entrada / salida de la oficina, se considera el número total de horas por mes.

imagen

imagen

Los datos se toman de la plataforma utilizando la API RESTful. La plataforma API proporciona la capacidad de trabajar, interactuar y usar las entidades de la plataforma y sus datos en sistemas externos como portales web, aplicaciones móviles y web o, como en nuestro caso, sistemas CRM.

También hay casos en que una persona invitada / entrega de alimentos o alguien que necesita abrir la puerta ha acudido a la empresa. Para no usar su tarjeta y, por lo tanto, no transmitir lecturas incorrectas sobre su estado, puede usar el botón "Desbloquear" en la plataforma. Y si una persona necesita ser recibida en la puerta, entonces es conveniente hacer lo mismo desde una aplicación móvil.

Caso No. 4 Smart Garden


Mi historia personal con el jardín en el apartamento comenzó con el telón de fondo de un loco pánico de personas y la compra de productos. Una vez más, yendo a la tienda y viendo los estantes vacíos donde deberían estar las papas, decidí usar la última papa encontrada en el refrigerador no para su propósito previsto. Planté esta papa en una maceta enorme. Con un experimento tan ingenuo, comenzó mi jardín en el alféizar de la ventana, que dos meses después ya se ve así: como

imagen

no sé qué cultivador, y el jardín necesita aún más agua que flores, rápidamente encontré un problema que olvidé regar. No hablaré sobre los sistemas de riego automático, este es un tema muy importante y es bastante difícil organizar su trabajo cualitativamente. En cambio, tuve las siguientes ideas:

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

La interfaz se verá así: la

imagen

máquina para el primer caso se ve así. La transición al estado en el que se envía la notificación se realiza bajo una condición difícil: en una de las plantas la humedad es inferior a lo normal. El enlace entre las condiciones es OR.

imagen

El retorno al estado inicial ocurre de acuerdo con la condición: en todas las plantas la humedad del suelo es más alta de lo normal, racimo I. La

imagen

máquina para el segundo caso es la siguiente. La transición se lleva a cabo de acuerdo con el planificador, el restablecimiento es la transición incondicional.

imagen

Y finalmente, la máquina para el último caso:

imagen

estas máquinas se ejecutan en el mismo objeto y funcionan en paralelo.

imagen

Quizás esto es todo lo que quería cubrir en mi artículo. La idea principal que quería transmitir era que trabajar con la plataforma de Internet de las cosas facilita increíblemente la creación de procesos de negocio de cualquier complejidad, porque en este caso solo necesita estudiar una interfaz: la interfaz de la plataforma, que evita una inmersión profunda en el trabajo de hierro y su programación

All Articles