MyQttSatellite -- Cliente MQTT para mapear mensajes a comandos


#1

Índice

1. ¿Qué es MyQttSatellite?
2. ¿Qué hace MyQttSatellite?
3. Licencia MyQttSatellite
4. ¿Será MyQttSatellite liberado como OpenSource?
5. ¿Cómo instalar MyQttSatellite?
6. Actualizando MyQttSatellite
7. Mapeando comandos
8. Como crear comandos de respuesta
9. Cambiar usuario de ejecución del MyQttSatellite
10. MyQttSatellite Support

1. ¿Qué es MyQttSatellite?

Es un servicio de lado cliente que actúa como cliente de un broker o servidor MQTT esperando recibir mensajes que son traducidos a comandos que son ejecutados en orden.
Tiene un diseño altamente concurrente que usa #Akka y #Scala pero se asegura de que los mensajes son procesados en orden.

Está diseñado para la ejecución a largo plazo, con keep-alive y funciones de supervisión de conexión de manera que siempre esté disponible. Opera con un consumo de memoria bajo (150MB) de manera estable.

2. ¿Qué hace MyQttSatellite?

Esencialmente, ayuda a hacer de puente entre un nodo ejecutando MyQttSatellite y un Servidor/Broker #MQTT de manera que puede recibir mensajes de comando para implementar operaciones y opcionalmente responder con contenido que es enviado a topics configurados por el remitente.

Los casos de uso son:

  • Enviar estados de servicio/nodo (temp, estado del disco, mediciones de sensores)

  • Proporcionar acceso a nodos críticos o con información sensible que disponen de recursos que pueden ser expuestos por un API #MQTT.

  • Proporcionar terminación MQTT, traduciendo los mensajes que opcionalmente generan salida y que son enviados a topics configurados por el remitente.

3. Licencia MyQttSatellite

MyQttSatellite es FreeWare. Usted puede:

  1. Usarlo sin ningún coste ni ningún limite.
  2. Puede redistribuirlo
  3. Se proporciona tal cual, sin ninguna garantía expresa o implícita
  4. No se le requiere hacer ninguna atribución

4. ¿Será MyQttSatellite liberado como OpenSource?

Sí. Debería ser pronto.

5. ¿Cómo instalar MyQttSatellite?

  1. Asegúrese de tener instalado java. MyQttSatellite necesita java para funcionar. Ejecute lo siguiente para comprobar que tiene java desplegado. Si no tiene java, consulte el manual del proveedor del sistema operativo para desplegar la última versión disponible de Java 8:

    > java -version

  2. Descargue MyQttSatellite:

    > cd /usr/src
    > wget --no-check-certificate https://www.aspl.es/downloads/myqtt-satellite/myqtt-satellite-all-0.2.43.zip

  3. Instálelo con lo siguiente:

    > unzip myqtt-satellite-all-0.2.43.zip
    > ./deploy.sh
    > ./install.sh # ONLY first time myqtt-satellite is installed

  4. Ahora vaya a su cuenta MyQttHub y cree uno o dos dispositivos #MQTT para conectar a la plataforma. Puede usar un único dispositivo #MQTT para publicar y recibir o puede tener dos dispositivos #MQTT, uno para publicar y otro para hacer recepción de mensajes.

  5. Con estos dispositivos MQTT creados, habra su fichero de configuración: /etc/MyQttSatellite/conf/application.conf

    1. Configure el host para apuntar a node02.myqtthub.com

    2. Configure la sección del reader para ajustar la cuenta de recepción de mensajes:

    # reader configuration to receive messages
    reader {
    enabled = true
    client-id = “clientid”
    username = “username”
    password = “apassword”
    }

    1. Haga lo mismo en la sección del publicador (publisher). Si no espera publicar nada, desactívelo con enabled=false.

    # separate user to publish responses or information

    publisher {
    enabled = true
    client-id = “publisher.clientid”
    username = “publisher.username”
    password = “klasdflkj”
    }

  1. Ahora configure los ajustes SMTP de manera que pueda obtener notificaciones de los mensajes ejecutados, dentro de la sección mail.settings.

  2. Reinicie el servicio:

    > systemctl restart myqtt-satellite.service

    Después de eso, compruebe los registros ejecutando lo siguiente para ver si está funcionando sin errores:

    > tail -f /var/log/syslog /var/log/myqtt-satellite.log

6. Actualizando MyQttSatellite

Asumiendo que ya tiene una instalación de MyQttSatellite funcionando, simplemente descargue la nueva release, desempaquete, despliegue y reinicie. Así sería:

  1. Descargue MyQttSatellite como de costumbre:

    > cd /usr/src
    > wget --no-check-certificate https://www.aspl.es/downloads/myqtt-satellite/myqtt-satellite-all-NUEVA-VERSION.zip

  2. Despliegue la versión actualizada con:

    > unzip myqtt-satellite-all-NUEVA-VERSION.zip
    > ./deploy.sh

  3. Reinicie el servicio:

    > systemctl restart myqtt-satellite.service

7. Mapeando comandos

Dentro del fichero de configuración /etc/MyQttSatellite/conf/application.conf encontrará la siguiente sección que explica cómo mapear mensajes MQTT a comandos:

# Command mapper : defines how subscriptions are mapped to commands
# Syntax:
#    <subscription>  ->   <command>
#
# Inside <commnad> can be configured any command that uses:
#
#   - <messageFile> : file where message body was received
#   - <topic> : topic for message received
#   - <qos> : message received QoS
#
command-mapper = [
    "pas/events/# -> myqtt_myqtt_worker.py --file <messageFile>"
]

La idea es bastante simple y directa: una lista de cadenas de preferencia donde cada elemento mapea un filtro MQTT a un comando que puede usar <messageFile>, <qos> y/o <topic> para producir un comando final completo que será ejecutando en orden por MyQttSatellite.

Decimos “en orden” porque si hay varios mensajes recibidos, son gestionados de manera concurrente pero su ejecución se realiza de manera bloqueante y en serie.

La sección de ejemplo por defecto describe un comando que mapea: pas/events/# al comando myqtt_myqtt_worker.py --file <mesageFile>.

Eso es, cualquier mensaje MQTT recibido y que encaje con el filtro pas/events/# hará que se ejecute dicho comando.

Recuerde que después de configurar un mapeo, tendrá que reiniciar MyQttSatellite.

8. Como crear comandos de respuesta

En caso de que esté ejecutando un servicio tipo consulta (request-reply), haga que su comando genere una salida con el siguiente formato:

X-Publish-Reply-To-Topic: <topic>

<contenido del mensaje>

Es decir, formato MIME, donde generamos la cabecera X-Publish-Reply-To-Topic junto con el contenido.
Esto será detectado por MyQttSatellite generando un PUBLISH al topic indicado por la salida del comando, y con contenido, la salida del comando.

9. Cambiar usuario de ejecución del MyQttSatellite

Por defecto, al instalarse el software, se crea un usuario de privilegio bajo: myqttsatellite

Este usuario es el mas seguro si se está integrando MyQttSatellite con APIs, librerías, puertos o accesos a base de datos como SQL.

En caso de que sea necesario cambiar el usuario de ejecución debido a que MyQttSatellite necesita permisos mayores o distintos, tan solo hay que editar el fichero:

/etc/systemd/system/myqtt-satellite.service

Actualizando las siguientes variables para que usen el usuario que se desee:

User=myqttsatellite
Group=myqttsatellite

Consideraciones de seguridad:
Esta configuración puede ser usada, incluso, para que el usuario de ejecución sea root. En tal caso, asegurarse de que sea totalmente necesario así como extremar las precauciones de lo que se ejecuta.

Una vez hecho el cambio al usuario del sistema con el que ejecutará MyQttSatellite, reiniciar con:

>> /etc/init.d/myqtt-satellite restart

10. Soporte MyQttSatellite

Para reportar fallos, problemas o ayuda, por favor, use este foro: abra un tema para explicar su caso.


MyQttHub ES -- Empieza por aquí