Control de GPIO de Raspberry Pi sobre MQTT usando ThingsBoard


ThingsBoard es una plataforma de servidor de código abierto que le permite monitorear y controlar dispositivos IoT. Es gratuita tanto para uso personal como comercial y puede implementarlo en cualquier lugar.

ThingsBoard es pues  una plataforma de IoT de código abierto que permite el desarrollo rápido, la gestión y la ampliación de los proyectos de IoT  de modo  que  puede:

  • Crear dispositivos de provisión y control.
  • Recopilar y visualizad datos de dispositivos.
  • Analizea datos del dispositivo y disparae alarmas.
  • Entregar datos del dispositivo a otros sistemas.
  • Habilitar las funciones específicas de casos de uso usando reglas y complementos personalizables.
  • Proporcionar la nube IoT lista para usar o ser la solución en las instalaciones que habilitará la infraestructura del lado del servidor para sus aplicaciones de IoT.

ThingsBoard es escalable pues es una plataforma escalable horizontalmente y compilación utilizando tecnologías líderes de código abierto, tolerante a errores  pues  no hay punto único de fallo ya que  cada nodo en el clúster es idéntico,es personalizable pues permite agregar nueva funcionalidad es fácil con widgets personalizables, motor de reglas y sistema de complementos, es s duradero  y es robusto y eficiente  pues  el nodo de servidor único puede manejar decenas o incluso cientos de miles de dispositivos según el caso de uso (un cluster ThingsBoard puede manejar millones de dispositivos). Asimismo también puede conectar dispositivos existentes a la plataforma usando ThingsBoard Gateway .

 

ThingsBoard le permite enviar llamadas de procedimiento remoto (RPC) desde aplicaciones del servidor a dispositivos y viceversa. Básicamente, esta característica le permite enviar comandos a dispositivos y recibir resultados de ejecución de comandos. Similarmente, puede ejecutar la solicitud desde el dispositivo, aplicar algunos cálculos u otra lógica del lado del servidor en el back-end y enviar la respuesta de regreso al dispositivo. Esta guía cubre las capacidades de ThingsBoard RPC. Después de leer esta guía, se familiarizará con los siguientes temas:

  • Tipos de llamadas RPC
  • Casos de uso de RPC básicos
  • Las API RPC del lado del cliente y del lado del servidor
  • Widgets RPC

Tipos de llamadas RPC

La característica de RPC de Thinsboard se puede dividir en dos tipos según el originador: llamadas RPC originadas en el dispositivo y originadas en el servidor. Para utilizar nombres más conocidos, denominaremos llamadas RPC originadas en el dispositivo como llamadas RPC del lado del cliente y llamadas RPC originadas en el servidor como llamadas RPC del lado del servidor .

imagen

Las llamadas RPC del lado del servidor se pueden dividir en un solo sentido y bidireccional:

  • La solicitud RPC unidireccional se envía al dispositivo sin confirmación de entrega y, obviamente, no proporciona ninguna respuesta del dispositivo. La llamada RPC puede fallar solo si no hay una conexión activa con el dispositivo objetivo dentro de un período de tiempo de espera configurable.imagen
  • La solicitud de RPC bidireccional se envía al dispositivo y espera recibir una respuesta del dispositivo dentro del tiempo de espera determinado. La solicitud del lado del servidor está bloqueada hasta que el dispositivo de destino responda a la solicitud.imagen

Vamos  a  ver una  aplicación de ejemplo    que  permitirá controlar GPIO de su dispositivo Raspberry Pi utilizando la interfaz de usuario web de ThingsBoard y observaremos el control de GPIO utilizando  un Led conectado a uno de los pines. El propósito de esta aplicación es demostrar las capacidades de ThingsBoard RPC .

Dispositivo RPC API

ThingsBoard está diseñado para ejecutarse y utilizarse en la mayoría del hardware, desde Raspberry PI local hasta potentes servidores en la nube. Las formas de configurar un cluster de ThingsBoard soporta los  siguientes sistemas operativos:

  • Windows : instale el clúster Thingboard en cualquier máquina preexistente que ejecute Windows.
  • Linux (Ubuntu y CentOS) : instala el clúster Thingboard en cualquier máquina preexistente que ejecute Linux.
  • Raspberry Pi 3 Modelo B (Raspbian Jessie) : instala el servidor Cassandra y Thingboard en una Raspberry Pi 3 modelo B.
  • Docker (Linux o Mac OS) : instala un clúster ThingsBoard de un nodo en tu máquina Linux o Mac OS para su desarrollo y prueba.
  • Docker (Windows) : instala un clúster ThingsBoard de un nodo en tu máquina con Windows para su desarrollo y prueba.
  • Instalación de AWC EC2 utilizando AMI : instale un clúster ThingsBoard de nodo único con AWI AMI público.

Asimismo , sin instalar nada ,también si esta es su primera experiencia con la plataforma, puede usar una demostración en vivo para ahorrar tiempo en la instalación (vea la página de documentación de demostración en vivo para más detalles).Ejempl

 

Ejemplo  control de un  led

En  este ejemplo  “hello world”   orientado a controlar un led usaremos  una   Raspberry Pi con una aplicación simple escrita en Python , que se conectará al servidor ThingsBoard a través de MQTT y escuchará los comandos RPC.

El estado GPIO actual y el widget de control GPIO se visualizaran utilizando el panel de control incorporado personalizable.

Por tanto tendrá que tener el servidor ThingsBoard en funcionamiento. Use Live Demo o la Guía de instalación para instalar ThingsBoard.

Lista de hardware y pinouts

  • Raspberry Pi : utilizaremos Raspberry Pi 3 Model B pero puede usar cualquier otro modelo.
  • Led y resistencia correspondiente
  • 2 cables de puente hembra a macho

Dado que nuestra aplicación permitirá controlar el estado de todos los pines GPIO disponibles, recomendamos conectar algunos LED a esos pines para mayor visibilidad. Puede usar culquier  instrucción básica u otra para cablear algunos LED.

Instalación de la biblioteca MQTT

El siguiente comando instalará la biblioteca MQTT Python:

sudo pip install paho-mqtt

La aplicación consiste en un único script python que está bien documentado. Tendrá que modificar la constante THINGSBOARD_HOST para que coincida con su dirección IP de instalación del servidor ThingsBoard o nombre de host. Utilice “demo.thingsboard.io” si está utilizando el servidor de demostración en vivo .

El valor de la constante ACCESS_TOKEN corresponde al dispositivo Raspberry Pi de muestra en datos de demostración preaprovisionados . Si está utilizando un servidor de demostración en vivo , obtenga el token de acceso para el “Dispositivo de demostración Raspberry Pi preaprovisionado”.

 

resources/gpio.py 
import paho.mqtt.client as mqtt
import RPi.GPIO as GPIO
import json

THINGSBOARD_HOST = 'YOUR_THINGSBOARD_IP_OR_HOSTNAME'
ACCESS_TOKEN = 'RASPBERRY_PI_DEMO_TOKEN'

# We assume that all GPIOs are LOW
gpio_state = {7: False, 11: False, 12: False, 13: False, 15: False, 16: False, 18: False, 22: False, 29: False,
              31: False, 32: False, 33: False, 35: False, 36: False, 37: False, 38: False, 40: False}


# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, rc, *extra_params):
    print('Connected with result code ' + str(rc))
    # Subscribing to receive RPC requests
    client.subscribe('v1/devices/me/rpc/request/+')
    # Sending current GPIO status
    client.publish('v1/devices/me/attributes', get_gpio_status(), 1)


# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
    print 'Topic: ' + msg.topic + '\nMessage: ' + str(msg.payload)
    # Decode JSON request
    data = json.loads(msg.payload)
    # Check request method
    if data['method'] == 'getGpioStatus':
        # Reply with GPIO status
        client.publish(msg.topic.replace('request', 'response'), get_gpio_status(), 1)
    elif data['method'] == 'setGpioStatus':
        # Update GPIO status and reply
        set_gpio_status(data['params']['pin'], data['params']['enabled'])
        client.publish(msg.topic.replace('request', 'response'), get_gpio_status(), 1)
        client.publish('v1/devices/me/attributes', get_gpio_status(), 1)


def get_gpio_status():
    # Encode GPIOs state to json
    return json.dumps(gpio_state)


def set_gpio_status(pin, status):
    # Output GPIOs state
    GPIO.output(pin, GPIO.HIGH if status else GPIO.LOW)
    # Update GPIOs state
    gpio_state[pin] = status


# Using board GPIO layout
GPIO.setmode(GPIO.BOARD)
for pin in gpio_state:
    # Set output mode for all GPIO pins
    GPIO.setup(pin, GPIO.OUT)

client = mqtt.Client()
# Register connect callback
client.on_connect = on_connect
# Registed publish message callback
client.on_message = on_message
# Set access token
client.username_pw_set(ACCESS_TOKEN)
# Connect to ThingsBoard using default MQTT port and 60 seconds keepalive interval
client.connect(THINGSBOARD_HOST, 1883, 60)

try:
    client.loop_forever()
except KeyboardInterrupt:
    GPIO.cleanup()

Este simple comando lanzará la aplicación:   python gpio.py

Visualización de datos

Para simplificar esta guía, en  “Raspberry PI GPIO Demo Dashboard” vemos los datos de demostración que están disponibles en cada instalación Thingboard. Aún puede modificar este panel: sintonizar, agregar, eliminar widgets, etc. Puede acceder a este panel iniciando sesión como administrador de inquilinos.

Utilizar en caso de instalación local de ThingsBoard.

 

Una vez que haya iniciado sesión, abra la página Dashboards-> Raspberry PI GPIO Demo Dashboard . Debe observar el tablero de demostración con el panel de control y estado de GPIO para su dispositivo. Ahora puede cambiar el estado de los GPIO usando el panel de control. Como resultado, verá que el estado de los LED cambia en el dispositivo y en el panel de estado.

A continuación se muestra la captura de pantalla del “Tablero Demo de Raspberry PI GPIO”.

imagen

 

 

El vídeo a continuación  resume  todo el proceso  citado llegando  hasta el resultado final :.

Anuncios

Control de cargas con Raspberry-pi usando MQTT


MQTT significa MQ Telemetry Transport, es decir hablamos de un protocolo de mensajería publicación / suscripción, extremadamente sencillo y ligero, diseñado para dispositivos limitados y bajo ancho de banda y latencia alta o redes no confiables , razón por lo cual  es ideal para IoT (Internet de las cosas).

Los principios de diseño se centran en  minimizar el ancho de banda de la red y los requisitos de recursos del dispositivo, a la vez que intentan asegurar la fiabilidad y cierto grado de garantía de las entregas. Estos principios también resultan ideales para conformar el protocolo ideal de la emergente (M2M) “máquina a máquina” o “Internet de las cosas”  que compone el universo de los dispositivos conectados, asi como  también para aplicaciones móviles en las que el ancho de banda y la energía de la batería están en juego

A partir de marzo de 2013, MQTT está en el proceso de normalización a someterse a OASIS.La especificación del protocolo ha sido publicada abiertamente con una licencia libre de regalías para muchos años, y empresas como Eurotech (anteriormente conocido como Arcom) han puesto en práctica el protocolo en sus productos.En noviembre de 2011 IBM y Eurotech anunciaron su participación conjunta en el Grupo de Trabajo de la Industria M2M Eclipse y la donación del código MQTT al proyecto Eclipse OPS  .

Muy resumidamente  un  sistema basado en  MQTT funciona mediante un Brocker, que es al fin y al cabo un pequeño servidor en el cual se pueden publicar temas llamados Topics.

mqrç

Una vez  publicados esos Topics  en el  Broker ,  otros dispositivos pueden suscribirse a éstos  para intercambiar información o simplemente para consumir información.

Hay muchas librerías para utilizar MQTT,  tanto con diversos microcontroladores (como por ejemplo Arduino)  , con el ESP8266 y por supuesto también con la Raspberry-Pi.

Como Broker, uno de los más famosos es Mosquitto  , el cual también puede correr en una Raspeberry-Pi

Para interectuar con el broker  , no tenemos que crear una nueva app , pues existe la aplicación  ioT Mqtt dashboard , gratuita desrcargable desde Google Play  (si está buscando una aplicación para administrar sus proyectos de IO utilizando el protocolo MQTT, dejar de buscar, aquí está 🙂

Con esta aplicación, puede controlar fácilmente los dispositivos cliente MQTT con pasos de configuración muy sencillas. En un momento  puede comunicarse con su  Arduino, o puede ordenar a su ESP8266 esclavo que haga algo,etc …

 

iot mqtt

Las principales funcionalidades de esta app:

  •  Muchas conexiones
  •  Conexión SSL
  •  Especificar su unidad de datos
  •  Visualizar los valores numéricos de una tabla de actualización en tiempo real
  •  Componentes de Publicaciones personalizables:
    + Texto
    + Botón
    + Interruptor
    + Barra de búsqueda
    + Cuadro de lista desplegable
    + Selector de color
    + botones multi
  • WIDGETS PANTALLA DE INICIO( Botón,Botón basculante (versión del componente widget de interruptor),Selector de color)

Nota:
– Usted puede encontrar el registro de errores en: almacenamiento externo (tarjeta SD) / MQTT-salpicadero / registro
– Los widgets de la pantalla principal se utilizan para publicar sólo! Ellos no se suscribe al tema y reflejan su estado.

El protocolo MQTT es pues un sencillo y ligero sistema diseñado especialmente para IoT (Internet Of Things) que funciona prácticamente en cualquier sitio y no consume apenas recursos  como lo vamos a ver , precisamente usando una Raspberry-PI al que simplemente se han conectado tres leds de colores a modo de ejemplo ,pero que obviamente se podría haber conectado cualquier carga , usando por ejemplo un simple relé o un driver de potencia.

El  esquema como podemos simplemente usa los pines 11,12 y 13 y la masa (pin6) del conector de aplicación de la Raspberry Pi   para conectar simplemente tres leds de colores al que solo se han conectado  tres simples resistencias para limitar la corriente que circula por el puerto:

esqeuma

Como una imagen (y si es en vídeo), vale mas que 1000 palabras , continuación en el siguiente vídeo podemos ver la aplicación ioT Mqtt dashboard , interactuar con una Raspberry Pi usando el esquema anterior:

 

 

Para mas información sobre este proyecto  se puede consultar los siguientes recursos: