Acessando o terminal Raspberry Pi usando MQTT

Accediendo al terminal Raspberry Pi usando MQTT

En este artículo, aprenderemos cómo acceder a Raspberry Pi desde cualquier parte del mundo usando MQTT. Todo esto se hará con un script en Python.

Ya hay varias aplicaciones disponibles para acceder a terminales basadas en Linux a través de control remoto/red, pero todas requieren reenvío de puertos, pero MQTT lo permite sin reenvío de puertos.

No necesitaremos ningún reenvío de puerto. Esto también será independiente de la plataforma porque usaremos Python para interactuar con el sistema y ejecutarlo dentro de Linux, Windows e incluso OSX.

Herramientas requeridas/bibliotecas requeridas
Biblioteca Python basada en MQTT – paho
IDE de Python
Sistema Linux/Windows

Informaciones técnicas
Vincularemos la pila de protocolos MQTT al terminal usando Python. La biblioteca "OS" de Python también es capaz de interactuar con terminales y procesos del sistema.

Por lo tanto, escribiremos un script en Python que se comunicará con un corredor MQTT y transferirá y recibirá datos. Todos los datos recibidos serán canalizados (transferidos) al proceso del terminal del sistema.

La salida de los procesos del sistema también se redirigirá a una respuesta/mensaje MQTT sobre un tema (MQTT usa temas para comunicarse).

Diagrama de bloques

Figura 1 Terminal MQTT

El script del terminal está suscrito a un tema – terminal
Publicar sobre el tema – terminal/salida

Los clientes están suscritos a un tema – terminal/salida
Publicar sobre el tema – terminal

Ambos están conectados al corredor – broker.hivemq.com
En puerto – 1883

¿Como funciona el sistema?
El sistema se instala con el script Python, escucha un tema MQTT específico (terminal) y se conecta a un broker MQTT. Cualquier cliente que quiera acceder a la terminal está publicando comandos sobre ese tema (terminal). Cuando un cliente envía un comando a nuestro script de terminal, lo lee y el comando se filtra de ese mensaje. Luego, ese comando se envía a la terminal, el resultado de ese comando se combina en una cadena y se publica para ese cliente en ese hilo.

Entendiendo el código fuente
Podemos escribir dos scripts, uno para el propio terminal y otro para acceder al mismo.

Guión de terminal
Dividiremos nuestro código fuente en dos categorías para facilitar su comprensión.

  1. Interactuar con el terminal del sistema
  2. Comunicación MQTT

Interactuar con el terminal del sistema
Python es un lenguaje de programación/scripting de alto nivel. Python tiene varias bibliotecas disponibles para hacer cosas. En primer lugar, necesitaremos una biblioteca que pueda interactuar con nuestro sistema; también debe ser independiente de la plataforma. Entonces, hay una biblioteca llamada " OS " en Python incorporada para acceder al sistema operativo. Importaremos la biblioteca en la parte superior de nuestro script. Con esto, puedes realizar mucho trabajo fácilmente.
Importar sistema operativo

Ahora sabemos que el script debe ser multitarea o threaded, porque a veces un comando tarda mucho en completarse y no queremos que sea rechazado en el periodo en el que pasamos otro comando. Esto se puede hacer usando la biblioteca de subprocesos, así que importemos eso también.

Importar subproceso

Ahora que hemos importado las bibliotecas, necesitamos crear una variable que pueda contener el comando y su salida. Más adelante veremos cómo almacenar comandos en esta variable MQTT.
Para guardar el comando – datos
Para salida de comando: stdout_value

Todo lo que necesitamos está hecho. Estaremos enviando y recibiendo datos sobre estas variables. Entonces, creemos un subproceso, que enviará directamente el comando "datos" al terminal y almacenará la salida en las variables "stdout_value".
El significado de esta línea ahora es el siguiente:
proceso = Es una variable que almacena el subproceso completo, entradas-salidas y errores.
subprocess.Popen = esto significa que le estamos diciendo al proceso que canalizaremos (daremos entrada y obtendremos salida) algunos datos y sacaremos algunos de ellos.
salida estándar = Almacena la salida del proceso anterior.
stderr = Almacena el error, si lo hay
stdin = es para entrada de comando de entrada de cadena

Ahora que hemos iniciado el proceso, debemos eliminar el resultado del comando y el error, si lo hubiera.
stdout_value = proc.stdout.read + proc.stderr.read

Ahora estamos revisando el resultado leyendo " proc.stdout.read" .

El "stdout_value" es la variable que enviaremos a nuestro cliente en MQTT para su salida. Entonces, presentemos a continuación y aprendamos cómo se realiza la comunicación MQTT.

Comunicación MQTT
En primer lugar, importaremos las bibliotecas necesarias para MQTT.
importar paho.mqtt.client como mqtt
importar paho.mqtt.publish cómo publicar

Ahora declararemos una variable llamada cliente con cliente mqtt.
cliente = mqtt.Cliente

Ahora crearemos dos funciones que son devoluciones de llamada 1. Recibir mensajes 2. Hacer algo en una conexión exitosa.
client.on_connect=on_connect
client.on_message=on_message

Finalmente, nos conectaremos al broker MQTT en un puerto e iniciaremos el cliente dentro de un bucle sin bloqueo.
cliente.connect(“corretor.hivemq.com”, 1883, 60)
cliente.loop_start

Una vez que la conexión sea exitosa, podemos enviar mensajes utilizando este método de publicación.
publicar.single(tema, datos_mensaje, nombre de host =”broker.hivemq.com”)

o podemos crear una función/método para hacer esto.
def enviar(mensaje,publicar_t):

Este método utiliza el parámetro de entrada " mensaje " como el mensaje que debemos enviar al corredor con el tema.

Ahora tenemos una función que se activa al recibir datos del corredor MQTT. Almacenaremos cualquier mensaje recibido del broker en un mensaje variable, dentro del método “ in_message ”.
mensaje = str(msg.carga útil)

La sintaxis del mensaje recibido será.
cmd: “comando a ejecutar”

Ahora necesitamos eliminar la cadena "cmd:" y almacenar el comando restante.

en la variable “datos” para procesar el comando.
datos = mensaje.reemplazar(“cmd:”,””)

Ahora, para enviar la salida, llamamos a nuestro método de envío con los parámetros de salida y pasamos el resultado.
enviar (stdout_value, toipc_publish_result)

Ruta de acceso
El script de acceso es solo una función que recibe mensajes del broker MQTT y recibe entradas del usuario para publicar en el script, lo cual se explica por sí mismo en el código.

Así es como podemos acceder al sistema completo usando MQTT.

Nota: no utilice subprocesos comunes para crear acceso a la terminal porque estará dando acceso a todo el sistema.

contenido relacionado

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.