Nueva plataforma IoT de código abierto


Existen numerosos protocolos y formatos de datos de IoT, ,algunos de ellos son más populares, como MQTT y JSON, y algunos otros  son   «bastante raros». Normalmente la mayoría de las plataformas IoT brindan soporte para los protocolos y formatos de datos más populares desde el primer momento, pero es difícil respaldar a todos en una sola solución.

Con el crecimiento de la comunidad de código abierto de la plataforma Thingsboard, ha comenzado a recibir solicitudes sobre el soporte de protocolos IoT, como OPC-UA y algunos formatos de datos específicos, de modo que también han decidido implementar esta funcionalidad como un proyecto separado de código abierto que  permitirá unir la plataforma API a, literalmente, cualquier dispositivo.

El diagrama de flujo de datos es el siguiente

thingsboard

 

IoT Gateway está construido sobre Java, pero es diferente de proyectos similares que aprovechan la tecnología OSGi pues la idea es similar a una arquitectura de microservicios. Después de todo, hay otros lenguajes de programación (C, C ++, Python, Javascript, Go, etc.) que pueden ser más adecuados para el desarrollo de aplicaciones para dispositivos de IoT de destino, especialmente cuando hablamos de API de idiomas y bibliotecas existentes para trabajar con puertos serie , GPIO, I2C y nuevos módulos y sensores que se lanzan todos los días.

El Gateway proporciona API’s  de integración simples y encapsula tareas comunes relacionadas con el tablero de tareas: aprovisionamiento de dispositivos, persistencia y entrega de datos locales, conversores / adaptadores de mensajes, y más.

Como desarrollador de aplicaciones, puede elegir Python, Go, C / C ++ y otros idiomas y conectarse a la puerta de enlace de Thingsboard a través de un intermediario MQTT externo o un servidor OPC-UA. Los dispositivos que admiten otros protocolos se pueden conectar a la puerta de enlace implementando extensiones personalizadas.

La puerta de enlace IoT de Thingsboard ofrece las siguientes características:

  • Extensión OPC-UA para recopilar datos de dispositivos que están conectados a servidores OPC-UA.
  • Extensión MQTT para recopilar datos que se publican en intermediarios MQTT externos.
  • Persistencia de los datos recopilados para garantizar la entrega de datos en caso de fallas de red y hardware.
  • La reconexión automática a los grupos de tableros de cartón.
  • Mapeo simple pero poderoso de los datos y mensajes entrantes en un formato unificado.

El objetivo de lanzamiento inicial de Gateway es llevar la función de recopilación de datos de Bagsboard a dispositivos compatibles con OPC-UA y MQTT. El proyecto Gateway se encuentra actualmente en la etapa de desarrollo activo, y debemos esperar  a los lanzamientos de características principales en los próximos  meses pero el objetivo es unir todas las demás características de Panel de pruebas y permitir configurar y administrar dispositivos de IoT a través de la puerta de enlace usando los widgets y paneles de control de Thingsboard.

 

En este post vamos  a ver como  recopilar y visualizar algunos datos del dispositivo IoT con ThingsBoard permitiendo :

  • Registrar  su dispositivo IoT
  • Administrar credenciales del dispositivo
  • Mandar  los datos del dispositivo a su instancia de ThingsBoard utilizando los protocolos MQTT, CoAP o HTTP
  • Crear un tablero para visualizar los datos

Configuración y requisitos

Si no tiene acceso a una instancia de ThingsBoard en ejecución, use Live Demo o la Guía de instalación para solucionar esto.

Todas las instalaciones de ThingsBoard están equipadas con una cuenta de demostración que simplifica la experiencia del primer usuario. Esta cuenta demo contiene varios dispositivos, cuadros de mando, reglas y complementos preaprovisionados instalados. Tenga en cuenta que puede eliminar esta cuenta en la implementación de producción.

También puede usar emuladores de dispositivo ThingsBoard para simular dispositivos de la vida real y jugar con las API del lado del servidor, la visualización de datos y la lógica de procesamiento.

En este  ejemplo  solo utilizaremos una cuenta de administrador de inquilino preaprovisionada y como hardware una Raspberry Pi 3.

Iniciar sesión como administrador de inquilinos

El primer paso es iniciar sesión en la interfaz de usuario web de administración.

Si está utilizando la instalación local de ThingsBoard, puede iniciar sesión en la interfaz de usuario web de administración utilizando la cuenta predeterminada:

Si usa Live Demo, puede iniciar sesión en el servidor Live Demo utilizando la cuenta de administrador del inquilino (la que creó durante el registro).

imagen

Abra el panel Dispositivos y haga clic en el botón «+» en la esquina inferior derecha de la página.

imagen

Rellene y guarde el nombre del dispositivo (por ejemplo, «SN-001») aunque más adelante se le llamará $ DEVICE_NAME.

Como los nombres de dispositivo deben ser únicos, por lo general es una buena idea llamar al nombre del dispositivo según un número de serie único u otro identificador de dispositivo. Haga clic en el botón «Agregar» agregará la tarjeta del dispositivo correspondiente al panel.

imagen

Haga clic en la «tarjeta del dispositivo» que hemos creado en el paso anterior. Esta acción abrirá el panel de «detalles del dispositivo».

Haga clic en el botón «administrar credenciales» en la parte superior del panel. Esta acción abrirá una ventana emergente con credenciales del dispositivo.

imagen

La ventana de credenciales del dispositivo mostrará el token de acceso al dispositivo generado automáticamente que puede cambiar. Guarde este token de dispositivo. Más tarde se lo llamará $ ACCESS_TOKEN .

imagen

¡Felicitaciones! ¡Acaba de aprovisionar su primer dispositivo! Ahora puede enviar algunos datos de este dispositivo a ThingsBoard para su visualización y análisis.

Envío de datos

Para simplificar   enviaremos datos utilizando el protocolo MQTT, CoAP o HTTP desde su PC local.Consulte otros  ejemplos para ejemplos avanzados de varias plataformas de hardware.

Ahora  que ya  tiene creado las credenciales  del   dispositivo ,iInstale el cliente preferido MQTT (Mosquitto o MQTT.js), CoAP (CoAP.js) o HTTP (cURL) con los siguientes comandos.

resources/node-mqtt.sh 
# Assuming you have Node.js and NPM installed on your Windows/Linux/MacOS machine npm install mqtt -g

Cree una carpeta para almacenar todos los archivos necesarios para este ejemplo y descargue a esta carpeta o cree los siguientes archivos de datos:

  • attributes-data.json – contiene dos valores de atributos del dispositivo: la versión del firmware y el número de serie.
  • telemetry-data.json – contiene tres valores de series temporales: temperatura, humedad y bandera activa.

Tenga en cuenta que los datos en estos archivos están básicamente en formato de clave-valor. Puede usar sus propias claves y valores. Consulte la referencia de protocolo MQTT , CoAP o HTTP para obtener más detalles.

resources/attributes-data.json 
{ "firmware_version" : "1.0.1" ,   "serial_number" : "SN-001" } 

Envio de  datos usando MQTT, CoAP o HTTP

Descargue los siguientes archivos a la carpeta creada previamente de acuerdo con el cliente preferido:

Si está utilizando un script de shell (* .sh), asegúrese de que sea ejecutable:

chmod +x * .sh

Antes de ejecutar el script, no olvide:

  • reemplace $ ACCESS_TOKEN por uno de la ventana Credenciales del dispositivo .
  • reemplace $ THINGSBOARD_HOST con 127.0.0.1 (en caso de instalación local) o demo.thingsboard.io (en caso de live-demo).

Finalmente, ejecute el script * .sh o * .bat correspondiente para enviar datos al servidor.

A continuación en estos enlaces  esta  el contenido de los scripts proporcionados.

resources/mqtt-js.sh 
#!/bin/sh # Set ThingsBoard host to "demo.thingsboard.io" or "localhost" export THINGSBOARD_HOST = demo.thingsboard.io # Replace YOUR_ACCESS_TOKEN with one from Device credentials window. export ACCESS_TOKEN = YOUR_ACCESS_TOKEN # Read serial number and firmware version attributes ATTRIBUTES = $( cat attributes-data.json ) export ATTRIBUTES # Read timeseries data as an object without timestamp (server-side timestamp will be used) TELEMETRY = $( cat telemetry-data.json ) export TELEMETRY # publish attributes and telemetry data via mqtt client node publish.js

Visualización de los datos del dispositivo en la interfaz de usuario web

Una vez que ejecute los comandos enumerados arriba, debería ver los atributos y los últimos datos de telemetría en las pestañas de detalles correspondientes del dispositivo.

imagen

imagen

Crear un nuevo tablero para visualizar los datos

La forma más fácil de crear un nuevo tablero es seleccionar los atributos del dispositivo y mostrarlos en el widget

imagen

Una vez que haga clic en el botón «Mostrar en el widget», verá un panel de «vista previa del widget» donde puede

  • Seleccionar paquete de widgets
  • Seleccione el widget preferido
  • Agregar widget al panel nuevo o existente

imagen

Agreguemos nuestro primer widget al nuevo tablero llamado «SN-001 Dashboard»

imagen

Agreguemos  también un widget para visualizar la temperatura:

imagen

Haga clic en Mostrar en el widget y seleccione Paquete de indicadores digitales . Use el carrusel para seleccionar el widget del termómetro como se muestra a continuación.

imagen

Tenga en cuenta que en este caso, agregaremos un widget a un panel ya existente. También seleccionaremos la opción «Open dashboard» para ver los resultados de nuestro trabajo.

imagen

Finalmente, podemos ver nuestro nuevo tablero.

Ahora podemos editar el tablero para:

  • Configurar la configuración del tablero
  • Ajustar tamaños de widgets y diseño
  • Modificar la configuración avanzada del widget individual
  • Agregue nuevos widgets o elimine los existentes
  • Widgets de importación / exportación

imagen

Mas info en https://thingsboard.io/docs/getting-started-guides/helloworld/

Detector de movimiento inteligente


En este ejemplo    volveremos a  usar  un economico NodeMCU ,junto con un  sensor de movimiento PIR  y la plataforma de IoT  Carriots para  construir, usando el IDE de Arduino, un  detector de movimiento inteligente para comerciales y hogar.

El tema  gira en torno a la seguridad de un edificio o casa o una zona restringida detectando cualquier movimiento dentro de un rango específico con un sensor PIR . Gracias al  IoT, además de detectar objetos en movimientos podemos hacer  muchas más cosas como por ejemplo:

  • Encender un dispositivo mediante un relé (en el ejemplo es una luz durante unos 30 segundos).
  •  Al mismo tiempo enviar un correo electrónico al usuario, utilizando la IOT – plataforma Carriots sobre WIFI.
  • El relé se puede conectar a cualquier luz del dispositivo, alarma, cámara, sistema de seguridad…
  • Incluso el disparo puede ser SMS, llamar a las autoridades, llamando a otros servicios…

Node MCU es una plataforma para el desarrollo de proyectos IoT que integra el famoso chip ESP8266, el cual se ha extendido enormemente debido a su facilidad para desarrollar proyectos open source  a los que indudablemente se une su bajisimo precio comparado con otras opciones.
De este componente destaca  integra capacidades de comunicación via WiFi , conteniendo en su interior  microprocesador que puede ser programado fácilmente usando en conocido lenguaje de programación Lua o vía Arduino IDE.

¿Se pregunta cómo controlar  su económico ESP8266 de forma remota desde cualquier lugar del mundo?

En este post repasaremos precisamente el proceso, paso a paso, de cómo escribir código en el IDE de Arduino y programar su ESP8266 permitiendo  que el código  escrito para  el ESP8266 se comunique con la plataforma  de Iot   Carrriots,  la cual  nos va  permitir monitorear  y controlar el ESP8266.

Los pasos  a seguir   para conectar un ESP8266   a  Carriots   son los siguientes:

  •  Instalación del IDE de Arduino .Si aun no lo tiene instalado ,se puede hacer  desde aqui
  • Instalación  del paquete de la placa ESP8266 en Arduino IDE  siguiendo las instrucciones del sitio : https://github.com/esp8266/Arduino
esp
  • Instalación de los controladores USB

Es necesario instalar el controlador USB requerido en su ordenador  para que pueda programar el ESP8266.  Independientemente de la opción de firmware que elijamos, primero necesitamos comunicarnos con la placa de desarrollo ESP-12E utilizando la interfaz USB de la computadora.

El módulo USB a Serial UART incluido en la placa es Silicon Labs ‘CP2012, para lo cual generalmente necesitamos instalar los controladores de puerto COM virtual (VCP) fácilmente disponibles para su sistema operativo específico.Una vez instalado, debemos verificar que el CP2102 sea reconocido por su ordenador

Una vez que el controlador está instalado, podemos conectar el cable USB al puerto USB de la computadora y la placa. Después de hacerlo, deberíamos ver el mensaje: software del controlador del dispositivo instalado correctamente.

Además, podemos verificar manualmente que todo funcione correctamente siguiendo estos pasos:

Abra el Administrador de dispositivos (disponible a través del Panel de control → Sistema y seguridad → Administrador de dispositivos en la sección Sistema)
Debajo de la entrada Puertos (COM & LPT), debe haber un puerto abierto llamado USB-SERIAL CP2102 (COM) donde hay un número típicamente mayor o igual a 3.

  • Carriots

Carriots es una Plataforma como Servicio (PaaS en sus siglas en inglés) diseñada para proyectos del Internet de las Cosas (IoT) y de Máquina a Máquina (M2M)

Carriots es una plataforma IoT creada en España  que  permite crear potentes productos y servicios IoT  haciendo posible conectar fácilmente “sus cosas” al Internet de las Cosas.

Se  pueden construya sus apps inteligentes con Carriots en pocos pasos.

  1. Conectar Dispositivos
  2. Recopilar Datos
  3. Gestionar Dispositivos y Datos
  4. Construir APPs

Principales ventajas

  • Listo para empezar a desarrollar.
  • Minimizar tiempo de desarrollo.
  • Gestión simplificada de múltiples proyectos: Arquitectura de 7 niveles
  • Amplia variedad de APIs y potente SDK: REST API y SDK
  • Escalabilidad inmediata
  • Inicio gratuito y pago por uso.
  • Alojamiento simplificado: Oferta PaaS para escalabilidad fiable.

 

Hardware

Ahora preparado el entorno , necesitamos el hw  que lo permita , el cual  como vamos a ver,  es muy simple reduciendose a la placa o NodeMCU, una placa de relé, el sensor PIR  y una fuente de 5V DC

Sensor PIR

El sensor PIR usado , es del tipo HC-SR501, de bajo coste   el cual es ampliamente utilizado en diversos equipos eléctricos de detección automática, productos para el control automático especialmente a batería.Tiene alta sensibilidad, alta fiabilidad, bajo consumo de energía, el modo de operación de bajo voltaje.

Especificaciones:

  •  Dimensiones: Cerca de 3,2 x 2,4 cm (L x W).
  •  Rango de tensión: 5V-20V DC.
  •  Corriente estática: < 50uA
  •  Voltaje de salida: 3,3 V (alto) / 0V (bajo)
  •  Modo del disparador: L (no se puede gatillo repetida), H gatillo repetida (Repetición predeterminado de disparo)
  •  El Tiempo de retardo: 0,3 seg 18 seg (ajustable)
  •  Temperatura De funcionamiento: -15 C a 70

 Placa de rele

Por  precio  es mucho mas asequible optar por una placa    de  2 reles    con salida de relé máxima: DC 30V / 10A, AC 250V / 10A. Es  importanet   que el interfaz de tarjeta de relé sea de 5v . En nuestro caso es de 2 canales y cada canal necesita 15-20mA actual controlador

Este tipo de placas es de fácil instalación por el microcontrolador como Arduino, 8051, AVR, PIC, DSP, BRAZO, MSP430, PLC, lógica TTL pues solo ha que conectar la alimentacion  y dos cables de datos en caso de necesitar los dos canales 

Resumiendo , estos son los componentes  necesarias:

  • Placa de desarrollo de NodeMcu Lua WIFI Internet de las cosas basado en ESP8266 – 1 (capacidad de MCU y WIFI)
  • Sensor PIR ( hemos hablado  en este blog )
  • 1 módulo de relé con opto aislamiento de  5V1
  • Fuente de alimentación conmutada  220V/5v ( nos sirve cuaqluier cargador de movil  con salida microusb)
  • Placa Protoboard

Diagrama del circuito:

El circuito   no incluye dificultad alguna ,pues se reduce a conectar el sensor PIR a +5V  y la salida binaria al pin D2, el módulo de rele a +5v   y al pin D2    y por  supuesto la alimentación del circuito que puede ser bien a baterías  o  bien por medio del  propio micro-usb   usado para programar el  NodeMcu

Resumiendo las conexiones con las siguientes:

  • NodeMCU (ESP8266 Dev Kit) D1—> INI del relé
  • NodeMCU (ESP8266 Dev Kit) D2—> Digital sensor PIR
  • NodeMCU (ESP8266 Dev Kit) VCC—> VCC (+) de la batería
  • NodeMCU (ESP8266 Dev Kit) GND—> GND (-) de la batería
  • Relé de VCC—> VCC (+) de la batería
  • Relé de tierra—> GND (-) de la batería
  • PIR Sensor VCC—> VCC (+) de la batería
  • PIR Sensor de tierra—> GND (-) de la batería

Software

Una vez el hardware  montado nos toca escribir el código  el código utilizando el IDE de Arduino para hacer que NodeMCU trabaje con un relé, sensor de movimiento PIR y utilizar IOT plataforma carriots sobre WIFI

El autor se  encontró con  algunos puntos problemas  en el diseño del programa  para ejecutar en la placa NodeMcu;

  • Compruebe que los pines de NodeMcu  están dando la entrada o salida correcta como se están asumiendo, por ejemplo, asegurándose  que usted no está tomando el pin 4 (GPIO) como un pin de entrada asi que por defecto que este pin debe leer…
  • Utilizar un método directo de get y post HTTP en lugar de utilizar una función de visualización por BLYNK o Thinger.io.
  • Observe  que el PIR da salida permanentemenet alta durante un par de envíos pero se necesita traer retraso para evitar el envío de múltiples correos electrónicos. Con algunos servicios como BLYNK este retraso causa un problema  asi que  es mejro a llamar a esa función una vez despues  de 6 o 7 seg.
  • Una vez satisfecha la condición de if loop, llamar a una función, en lugar de escribir todo con el bucle. Esto aporta claridad del código y ayuda en la resolución de problemas.
  • Se  puede  ajustar la sensibilidad del PIR para reducir el tiempo que permanece alta.

A continuación veamos el codigo completo del sw  que habrá que subir  a la placa desde el entorno  de Arduino:

«ESP8266WiFi.h»

const char * ssid = «NETGXXXXX»;   //red wifi a la que se conectara

const char * clave = «XXXXXXXXX»;  //clave red wifi para coenctarse

const char * servidor = «api.carriots.com»;

const String APIKEY = XXXXXXXXXX»; //Sustituir con su apikey de Carriots

 const  String DEVICE = «[email protected]»; //Reemplazar por el id_developer del dispositivo de  carriots

int ledpin = 4;

pirpin INT = 12;

int pirstate = LOW;

int val = 0;

void setup() {

Serial.Begin(115200);

Delay(10);

pinMode(ledpin,OUTPUT);

pinMode(pirpin,INPUT);

Serial.println(«calibrando»);

for (int i = 0; i < 20; i ++) {

Serial.Print(«.»);

Delay(1000);

}

//iniciar wifi

Serial.println();

Serial.println();

Serial.Print («conectarse»);

Serial.println(SSID);

WiFi.begin (ssid, clave);

while  (WiFi.status()! = WL_CONNECTED) {

Delay(500);

Serial.Print(«.»);

}

Serial.println(«»);

Serial.println («Wi-Fi conectado»);

Serial.println («dirección IP:»);

Serial.println(WiFi.localIP());

}

//función para hablar con la plataforma Carriot

void sendStream()

{

String txt = «»; //Texto para enviar

if (pirstate == HIGH)

{/ / alarma

txt = «Detecta movimiento;»

} else {/ / alarma en

txt = «Algo mal»;

}

 

Serial.println(txt);

Serial.println(Val); / / para fines de depuración

Client WiFiClient;

const int httpPort = 80;

if  (client.connect (servidor, 80)) {/ / si hay una conexión exitosa

Serial.println(F(«Conectedo»));

//Construir el campo de datos

String json = «{\»protocol\»:\»v2\»,\»device\»:\»»+DEVICE+»\»,\»at\»:\»now\»,\»data\»:{\»light\»:\»»+txt+»\ «}}»;

//Realizar una solicitud HTTP

Client.println («POST /streams HTTP/1.1»);

Client.println («Host: api.carriots.com»);

Client.println («Accept: aplicación/json»);

Client.println («User-Agent: Arduino-Carriots»);

Client.println («Content-Type: aplicación/json»);

Client.Print («carriots.apikey:»);

Client.println(APIKEY);

Client.Print («Content-Length:»);

int thisLength = json.length();

Client.println(thisLength);

Client.println («conexión: cerrar»);

Client.println();

Client.println(JSON);

}

Else {}

//Si no tiene una conexión con el servidor:

Serial.println (F («Conexión fallida»));

}

}

 

void loop() {}

Val = digitalRead(pirpin);

Serial.println(Val);

if(Val == HIGH) {}

digitalWrite(ledpin,HIGH);

if  (pirstate == LOW) {

Serial.println («movimiento detectado»);

pirstate = HIGH;

Serial.println (F («secuencia de enviar»));

sendStream();

Delay(30000);

}

/ * {while(client.available())}

String linea = client.readStringUntil(‘\r’);

Serial.Print(line);

Delay(30000);

} */

}

Else {}

digitalWrite(ledpin,LOW);

if(pirstate == HIGH) {}

Serial.println («movimiento detectado correo enviado»);

pirstate = LOW;

}

}

}

Programación de disparadores de Carriots enviar Email:

Una vez   que  tenga desplegado el  sw en su  placa NodeMcu  ,la capacidad de activar un correo debe ser  programado o configurado en la plataforma de Internet para este producto que está utilizando (la plataforma Carriots IOT) . Si no sabe como hacerlo en el siguiente video podemso  ver  como  familiarizarse con las funciones y cómo utilizarlas:

 

Obviamente esto podría programarse para llamada, o un texto o una alarma a la policía o quien sea. !Como podemos adivinar   las posibilidades  son infinitas!.

Fuente