¿Buscas alguna otra cosa?

Tunnel – Customización de JSON y topics de envío en las tramas de datos enviados por MTX-Tunnel.

Detalles del escenario:

  • Se necesita monitorizar 8 sensores de contacto seco. En estado de las entradas debe enviarse rápidamente a una plataforma MQTT (ejemplo Cervello) al producirse un cambio en una de éstas. También se necesita monitorizar 2 sensores analógicos, uno de tipo 0-10V y otro de tipo 4-20mA. Cada vez que el sensor 0-10V varíe 100mV o el sensor 4-20mA varie 0.15mA, el valor de los sensores debe enviarse al bróker MQTT
  • También debe enviarse de forma periódica, cada 60 segundos, el estado del módem (cobertura, tecnología usada, IP actual, etc)
  • El bróker MQTT necesita recibir las telemetrías en topics determinados, así como el formato de los JSON deben tener un formato específico, por lo que debe configurarse el MTX-Tunnel apropiadamente para permitir ajustar estos requerimientos

Solución: MTX-Tunnel firmware + MTX-IOT-S [4-N]

Archivo de configuración config.txt:

Configuración Observaciones
GPRS_apn: movistar.es
GPRS_login: MOVISTAR
GPRS_password: MOVISTAR
GPRS_timeout: 0 MTX_pin: 0000
MTX_model: 199802407
MTX_mode: none
MTX_ping: 30
MTX_pingIP: 8.8.8.8
MTX_numGSMErrors: 180
MTX_TPProtocol: ntp
MTX_TPServer: ntp.roa.es
MTX_TPServer2: es.pool.ntp.org
MTX_TPFormat: unix
SMS_allPhones: on
SMS_sendIP: on
SMS_ATEnabled: on
SMS_ATResponse: on
MQTT_enabled: on
MQTT_server: tcp://broker.mqttdashboard.com:1883
MQTT_id: [IMEI]
MQTT_login:
MQTT_password:
MQTT_attopic1: [IMEI]/AT
MQTT_atrtopic: [IMEI]/ATR
MQTT_qos: 1
MQTT_keepalive: 60
MQTT_defaultIOQos: 1
MQTT_defaultOTopic: /IOCHANGE
DNS_enabled: on
DNS_mode: mqtt
DNS_exdended: on
DNS_period: 60
DNS_mqttTopic: DNS
GPIO_mode0: input
GPIO_config0: mqtt;2;0
GPIO_mode1: input
GPIO_config1: mqtt;2;0
GPIO_mode2: input
GPIO_config2: mqtt;2;0
GPIO_mode3: input
GPIO_config3: mqtt;2;0
GPIO_mode4: input
GPIO_config4: mqtt;2;0
GPIO_mode5: input
GPIO_config5: mqtt;2;0
GPIO_mode6: input
GPIO_config6: mqtt;2;0
GPIO_mode7: input
GPIO_config7: mqtt;2;0
ADC_mode0: voltage
ADC_config0: mqtt;100;0
ADC_mode1: current
ADC_config1: mqtt;150;0
GPRS APN provided by GSM operator
GPRS Login
GPRS Password
Modem is permanently connected to GPRS
PIN if it has one
Device model
Gateways used
Every 30 minutes PING check
Google IP (f.e.) to ping
Reset if no registry on GSM network in 1800 secs.
Time synch protocol
Time server
Time server backup
Unix time format
IP by SMS authorized
IP by SMS authorized
AT by SMS allowed
SMS AT responses activated
MQTT service
MQTT broker, format protocol://url:port
Device ID in broker
Username
Password
MTX topic to recieve AT commands
Topic where MTX sends responses to AT commands
QoS established
Keepalive
MQoS to inform of output changes in real time
MQTT topic to inform of output changes in real time
DNS to send status
Sending mode
Also sending GPIOs and ADCs
Period of sending, also when data changes
Topic to send status data
GPIO0 configured as an input
GPIO0 MQTT configuration
GPIO1 configured as an input
GPIO1 MQTT configuration
GPIO2 configured as an input
GPIO2 MQTT configuration
GPIO3 configured as an input
GPIO3 MQTT configuration
GPIO4 configured as an input
GPIO4 MQTT configuration
GPIO5 configured as an input
GPIO5 MQTT configuration
GPIO6 configured as an input
GPIO6 MQTT configuration
GPIO7 configured as an input
GPIO7 MQTT configuration
ADC0 as voltage input
ADC0 MQTT configuration
ADC0 as current input
ADC1 MQTT configuration

Detalles

  • La configuración de las entradas como “mqtt;2;0” indica lo siguiente. Recuerde que todos los parámetros van separados entre ellos por punto y coma ;
    “mqtt” > La entrada se configura para enviar los estados de las Entradas digitales por MQTT
    “2” > El 2 indica que se configura la entrada digital para enviar un mensaje MQTT tanto por activación de la entrada (cuando ésta se cierra llevándola a masa) como por desactivación de la entrada (cuando se abre). En caso de querer enviar un mensaje MQTT únicamente al cerrar la entrada (llevandola a masa) habría que indicar un valor “1”
    “0” > Indica el timeout de la entrada digital. Eso quiere decir que se enviará el cambio de la entrada digital siempre que se produzca. Si por ejemplo estuviera configurado un valor “10”, como ocurre con GPIO4 y GPIO5, aunque se produzcan múltiples activaciones en la entrada digital, nunca se va a enviar más de 1 mensaje MQTT en esos 10 segundos
  • El formato standard de envío de los mensajes de entradas Digitales sigue la estructura JSON que se muestra en el siguiente ejemplo:
    {
    “IMEI”:”354033091487838”,
    “TYPE”:”GPIO”,
    “TS”:” 2020-02-08T18:35:15Z”
    “ID”:”0”,
    “VALUE”:1,
    “DIR”:”INPUT”
    }

    Donde:
    – IMEI: indica el IMEI del módem MTX
    – TYPE: indica el tipo de trama. “GPIO” es para tramas de E/S digitales
    – TS: Timestamp (formato unix especificado en MTX_TPFormat)
    – ID: indica el índice de la GPIO (0=GPIO0, 1=GPIO1 … ,7=GPIO7)
    – VALUE: indica el valor de la entrada (0,1) – DIR: indica el tipo de pin (INPUT / OUTPUT)  
  • El formato de envío estándar de los mensajes relativos a las entradas analógicas, siguen la estructura JSON que se muestra en el siguiente ejemplo:
    {
    “IMEI”:”354033091487838”,
    “TYPE”:”ADC”,
    “TS”:” 2020-02-08T19:15:12Z”
    “ID”:0,
    “VALUE”:7750
    “MODE”:”voltage”
    }

    Donde:
    – IMEI: indica el IMEI del módem MTX
    – TYPE: indica el tipo de trama. ADC = entrada analógica
    – TS: Timestamp (formato unix especificado en MTX_TPFormat)
    – ID: indica el índice del ADC (0=ADC0,1=ADC1)
    – VALUE: indica el valor de la entrada (en mV o mA)
    – MODE: indica el modo de trabajo de la entrada (“voltage” / ”current”)  
  • Los datos de las entradas/salidas digitales configuradas como “mqtt” se envían hacia el topic configurado en el parámetro “MQTT_defaultIOTopic” y QoS especificado en el parámetro “MQTT_defaultIOQos”.
  • Las tramas DNS, tramas de estado, tendrían un formato como el que sigue en el siguiente ejemplo:
    {“IMEI”:”354033091487838”,”TYPE”:”DNS”,”TS”:”2020-02-09T13:02:24Z”,”P”:””,”IP”:”95.126.2.167”,”CSQ”:9,”TECH”:”4G”,”VER”:”11.00”,”AUX”:””,”MOD”:”MTX-IOT-4G-S”}
  • Customizando los JSON y los Topics. Ahora imaginemos que se desea enviar las tramas DNS en el formato de json:
    {“data”:
    {“IMEI”:”354033091487838”,”TYPE”:”DNS”,”TS”:”2020-02-09T13:04:25Z”,”P”:””,”IP”:”95.126.2.167”,”CSQ”:9,”TECH”:”4G”,”VER”:”11.00”,”AUX”:””,”MOD”:”MTX-IOT-4G-S”,VCC:12000}
    }
    También queremos customizar las tramas de las entradas digitales y las entradas analógica de la misma manera.
    {“data”:
    {“IMEI”:”354033091487838”,”TYPE”:”ADC”,”TS”:”2020-02-09T13:01:21Z”,”ID”:1,”VALUE”:22774,”MODE”:”current”}
    }
    Y además queremos enviar las tramas DNS al topic “topicDNS”, y cada GPIO y ADC a un topic determinado, por ejemplo “topicGPIO0”, “topicGPIO1”, “topicGPIO2”, …. , “topicGPIO8”, “topicADC0” y “topic ADC1”
    Pues para ello, en el fichero config.txt debe añadirse la siguiente estructura de configuración:
    JSON_config1: {“TYPE”:”DNS”,”MQTT”:{“TOPIC”:”topicDNS”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config2:{“TYPE”:”GPIO0”,”MQTT”:{“TOPIC”:”topicGPIO0”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config3: {“TYPE”:”GPIO1”,”MQTT”:{“TOPIC”:”topicGPIO1”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config4: {“TYPE”:”GPIO2”,”MQTT”:{“TOPIC”:”topicGPIO2”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config5: {“TYPE”:”GPIO3”,”MQTT”:{“TOPIC”:”topicGPIO3”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config6: {“TYPE”:”GPIO4”,”MQTT”:{“TOPIC”:”topicGPIO4”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config7: {“TYPE”:”GPIO5”,”MQTT”:{“TOPIC”:”topicGPIO5”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config8: {“TYPE”:”GPIO6”,”MQTT”:{“TOPIC”:”topicGPIO6”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config9: {“TYPE”:”GPIO7”,”MQTT”:{“TOPIC”:”topicGPIO7”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config10:{“TYPE”:”GPIO8”,”MQTT”:{“TOPIC”:”topicGPIO8”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config11: {“TYPE”:”ADC0”,”MQTT”:{“TOPIC”:”topicADC0”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config12: {“TYPE”:”ADC1”,”MQTT”:{“TOPIC”:”topicADC1”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    Con la configuración anterior conseguimos encapsular el JSON estándar enviado por el MTX-Tunnel, en otro JSON customizado. Desglosemos un ejemplo:
    JSON_config1: {“TYPE”:”DNS”,”MQTT”:{“TOPIC”:”topicDNS”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    Esta configuración indica:
    TYPE: Tipo de trama que se pretende formatear. En este caso la trama “DNS”.
    MQTT: Parámetros de MQTT que se utilizarán para dicha trama (en caso de no especificar el JSON. 
    MQTT, se toma como topic el especificado en DNS_mqttTopic y el QoS será “0” para esta trama.
    FORMAT: Indica el formato que se pretende enviar. MTX-Tunnel utilizará el formato indica, SUBSTITUYENDO el texto indicado en “JSON-MTXTUNNEL” (comillas incluidas) por la trama original DNS que utiliza el MTX-Tunnel.
    Es decir, para este nuevo formato de trama:
    {“data”:”JSON-MTXTUNNEL”}}
    Se reemplazará el texto resaltado en rojo por el JSON estándar para las tramas DNS.
    {“data”:
    {“IMEI”:”354033091487838”,”TYPE”:”DNS”,”TS”:”2020-02-09T13:04:25Z”,”P”:””,”IP”:”95.126.2.167”,”CSQ”:9,”TECH”:”4G”,”VER”:”11.00”,”AUX”:””,”MOD”:”MTX-IOT-4G-S”,VCC:12000}
    }
    Otro ejemplo.
    JSON_config2:{“TYPE”:”GPIO0”,”MQTT”:{“TOPIC”:”topicGPIO0”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    Esta configuración indica:
    TYPE: Tipo de trama que se pretende formatear. En este caso la trama “GPIO0”. (Tenga en cuenta que para las tramas GPIO y ADC, en TYPE debe especificarse el índice de la entrada asociada, es decir, GPIOx y ADCx). 
    MQTT: Parámetros de MQTT que se utilizarán para dicha trama (en caso de no especificar el JSON. 
    MQTT, para las tramas E/S se toma como topic el especificado en MQTT_defaultIOTopic y el QoS será el especificado en MQTT_defaultIOQos para esta trama.
    FORMAT: Indica el formato que se pretende enviar. MTX-Tunnel utilizará el formato indica, SUBSTITUYENDO el texto indicado en “JSON-MTXTUNNEL” (comillas incluidas) por la trama original DNS que utiliza el MTX-Tunnel.
    Es decir, para este nuevo formato de trama:
    {“data”:”JSON-MTXTUNNEL”}}
    Se reemplazará el texto resaltado en rojo por el JSON estándar para las tramas DNS.
    {“data”:
    { “IMEI”:”354033091487838”,”TYPE”:”GPIO”,”TS”:” 2020-02-08T18:35:15Z”,”ID”:”0”, “VALUE”:1,”DIR”:”INPUT” }
    }
    MTX-Tunnel utiliza diversos tipos de trama: DNS, GPIOx, ADCx como se ha visto en los párrafos anteriores, pero también envía otros tipos de datos como IOS (datalogger de E/S), GPS (posicionamiento GPS), MODB (datos modbus), TEMP (lecturas de sondas de temperatura), POWER (estado de alimentación externa) y SERIAL (datalogger serie)
    Todos los tipos de JSON pueden customizarse, incluidos el TOPIC y QoS (en caso de utilizar MQTT), añadiendo en el fichero config.txt, las configuraciones siguiente en los parámetro
    JSON_config JSON_config13: {“TYPE”:”IOS”,”MQTT”:{“TOPIC”:”topicIOS”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config14: {“TYPE”:”GPS”,”MQTT”:{“TOPIC”:”topicGPS”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config15:{“TYPE”:”MODB”,”MQTT”:{“TOPIC”:”topicMODB”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config16: {“TYPE”:”TEMP”,”MQTT”:{“TOPIC”:”topicTEMP”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config17: {“TYPE”:”POWER”,”MQTT”:{“TOPIC”:”topicPOWER”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}
    JSON_config18:{“TYPE”:”SERIAL”,”MQTT”:{“TOPIC”:”topicSERIAL”,”QOS”:1},”FORMAT”:{“data”:”JSON-MTXTUNNEL”}}