¿Buscas alguna otra cosa?
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”}}