5. MQTT – Registro de mensajes en archivo.txt con Python

Para registrar los eventos de un determinado dispositivo para analizar su comportamiento y registrarlo en un archivo txt se puede usar la librería Paho en Python. El proceso de registro desde luego se puede realizar en un gestor de datos como Home Assistant, se supondrá en éste caso que no está disponible..

Se crea un archivo, al que se añade una linea por cada registros de mensajes MQTT.

Para el ejemplo los datos de guardan sin procesar.

# grabando mensajes MQTT
# configurar los parámetros para la creacion de archivo de texto
import paho.mqtt.client as mqtt

# INGRESO
# Parametros para la conexión
servidormqtt = "192.168.xx.xx"
topicolee = "oficina/+/dispositivo/#"
# Para el archivo.txt
cuentamensaje = 0
nombrearchivo = 'unreporte.txt'
archivo = open(nombrearchivo,'w')
archivo.close()  # Cierra el archivo

# FUNCIONES, para conectar y recibir mensaje MQTT
# Al recibir CONNACK desde el servidor.
def on_connect(client, userdata, flags, rc):
    print("Conexión/código de resultado: "+str(rc))

    # Inicio o renovación de subscripción
    client.subscribe(topicolee)

    return()

# el tópico tiene una publicación
def on_message(client, userdata, msg):
    global cuentamensaje
    print(msg.topic+" "+str(msg.payload))
    unmensaje = msg.topic+" "+str(msg.payload)

    # Archivo en modo añadir 'append'
    archivo = open(nombrearchivo,'a')
    unalinea = unmensaje + '\n'
    archivo.write(unalinea)
    
    cuentamensaje = cuentamensaje + 1
    print('\n mensajes recibidos: ', cuentamensaje)

    return()

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(servidormqtt, 1883, 60)
client.loop_forever()

Archivos py o txt desde PC a Raspberry Pi

Para transferir los archivos de Python o de texto generados se encuentra dispobible la instrucción scp. Luego de ejecutar la instrucción se pedirá la clave de acceso del usuario pi para copiar el archivo en el directorio proyecto/

scp archivo.py pi@192.168.xx.xx:projecto/

Para el caso contrario se usa una instrucción semejante pero con los parametros al contrario, observe que termina en un «.»

scp pi@192.168.xx.xx:projecto/archivo.txt .

En el enlace de la referencia se encuentran más instrucciones al respecto

Referencia: https://www.raspberrypi.org/documentation/remote-access/ssh/scp.md