3.3 LoRaWAN – mensajes MQTT y Python

De disponer de acceso al servidor MQTT se pueden capturar los mensajes y procesarlos por ejemplo para realizar estadísticas de RSSI y SNR de cada dispositivo respecto al Gateway.

Se requiere una conexión autenticada al servidor MQTT, para caso experimental se recurre a Python con la librería PAHO para acceder como cliente.

# 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 = "#"

# Para el archivo.txt
cuentamensaje = 0
nombrearchivo = 'unreporte.txt'
archivo = open(nombrearchivo,'w')
archivo.close()  # Cierra el archivo

tramabuscada = ['application/1/device/c9c2a03913ac2ec5/event/up',
                'application/1/device/b35915f22af620d1/event/up',
                'application/1/device/b5a2349b828d97ea/event/up',
                'application/1/device/f2f724028c0e996c/event/up']
cuentaDisp = [0,0,0,0]
cuentagtw = 0

# BLOQUE BÁSICO DE PROGRAMA
# 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)
    
    if (msg.topic in tramabuscada):
        cual = tramabuscada.index(msg.topic)
        cuentaDisp[cual] = cuentaDisp[cual] + 1
        
    cuentamensaje = cuentamensaje + 1
    print('\n mensajes recibidos: ', cuentamensaje)
    print(' cuenta por dispositivos: ', cuentaDisp)
    print()

    return()

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