Ir al contenido principal
Todas las coleccionesConecta tus dispositivos
Conectar el gateway Teltonika TRB140 Modbus IoT a Ubidots usando HTTP
Conectar el gateway Teltonika TRB140 Modbus IoT a Ubidots usando HTTP

Enviar datos Modbus TCP a Ubidots usando gateways Teltonika.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de una semana
Teltonika TRB140 LTE Router | Getic

El TRB140 es un dispositivo IoT ultra pequeño, liviano y eficiente en energía con opciones de conectividad LTE Cat 4 y Ethernet Gigabit de misión crítica. Su entorno Linux ofrece un alto grado de personalización.

Este gateway es perfecto para proyectos y aplicaciones donde un solo dispositivo debe actualizarse con conectividad a Internet confiable y segura.

En esta guía, el TRB extrae datos de humedad y temperatura de un servidor Modbus y luego envía los datos a Ubidots a través de HTTP.

Esta guía también debería funcionar para otros routers y gateways Teltonika que admiten el protocolo Modbus, como:

  • Serie RUT1, RUT2 y RUT3

  • Serie RUT9

  • Serie RUTX

  • RUTM50

  • Serie TRB1 y TRB2

  • TRB500

Siga los pasos 1 a 4 de la siguiente guía para aprender a configurar el hardware, acceder a él a través de Ethernet y configurar el servicio Modbus en su dispositivo. Una vez completado, regrese aquí.

1. Configurar el servicio de Datos al Servidor

El siguiente paso es configurar el envío de los datos recuperados del servidor Modbus a Ubidots.

Vaya a UbidotsDispositivosFunciones y cree una nueva UbiFunction.

  • Dele cualquier nombre que considere apropiado.

  • Establezca el método en POST.

  • Establezca el runtime en Python 3.11 Lite.

  • Establezca el token de Ubidots.

En la sección de código, pegue lo siguiente:

import requests
import time
import ast
import json

# Base url to perform request to Ubidots API
BASE_URL = "https://industrial.api.ubidots.com"

REQUESTS_FUNCTIONS = {"get": requests.get, "post": requests.post}

# If you changed the data configuration name to other
# than the one used in the article, set this variable to that name
DATA_CONFIGURATION_NAME: str = 'ModbusServerDataHTTP'

def main(args):
# Print args for debug
print(args)
# Get the payload containing the data of our interest
data: dict = args[DATA_CONFIGURATION_NAME]
# Build the device label using the server name and its ip address
device_label: str = data['server_name'].replace('_', '-') + '-' + data['ip'].replace('.', '-')
# Get the variable's name
variable_label: str = data['name']
# Divide the value by 10 according to the device's datasheet. Adjust this accordingly
value: int = int(data['data']) / 10
# Get the Ubidots token
token: str = args.get('token', None)

if token is None:
print("[ERROR] Please configure you Ubidots token for this Ubifunction or define it within it.")
return {"status": "error"}

if not data:
print("No data")
return {"error" : "No data present in the payload"}

payload: dict = {variable_label : value}
req = update_device(device_label, payload, token)

print("[INFO] Request result:")
print(req.text)

return {"status": "Ok", "result": req.json()}



def update_device(device, payload, token):
"""
updates a variable with a single dot
"""

url = "{}/api/v1.6/devices/{}".format(BASE_URL, device)
headers = {"X-Auth-Token": token, "Content-Type": "application/json"}

req = create_request(url, headers, payload, attempts=5, request_type="post")

return req

def create_request(url, headers, data, attempts, request_type):
"""
Function to create a request to the server
"""

request_func = REQUESTS_FUNCTIONS.get(request_type)

kwargs = {"url": url, "headers": headers}

if request_type == "post":
kwargs["json"] = data

try:
req = request_func(**kwargs)
print("[INFO] Request result: {}".format(req.text))
status_code = req.status_code
time.sleep(1)

while status_code >= 400 and attempts < 5:
req = request_func(**kwargs)
print("[INFO] Request result: {}".format(req.text))
status_code = req.status_code
attempts += 1
time.sleep(1)

return req
except Exception as e:
print("[ERROR] There was an error with the request, details:")
print(e)
return None

Haga clic en el botón "save & deploy" para guardar la UbiFunction. Después de esto, asegúrese de copiar la URL del endpoint HTTPS de la función:

Vuelva a la interfaz de configuración web del TRB140 y vaya a Services Data to Server.

Si viene directamente de la guía anterior, asegúrese de deshabilitar la conexión MQTT creada antes, solo para asegurarse de que los datos se envíen a través de HTTP.

Después de eso, en la sección ADD NEW INSTANCE, escriba un NEW COLLECTION NAME, y luego haga clic en el botón "ADD":

Una vez que haga eso, aparecerá la pantalla de DATA CONFIGURATION con una configuración vacía. Edítela para establecer la siguiente configuración:

  • Complete el campo "name" con cualquier nombre que le ayude a identificar esta configuración. Una cosa a tener en cuenta es que la carga útil que recibirá en Ubidots está bajo la clave payload/<data-configuration-name> . Por ejemplo, si nombra esta configuración ModbusServerData, entonces los datos que llegan a Ubidots estarán bajo Payload modbusserverdata.ame, diferente al utilizado para la conexión MQTT anterior. En esta guía, el nombre utilizado fue ModbusServerDataHTTP.

  • En el campo "type", elija Modbus. Esto seleccionará la fuente de datos como los datos del servidor Modbus.

  • En "format type", seleccione JSON. Esto es para que los datos recibidos en Ubidots sean un JSON y no una cadena con formato JSON.

  • Asegúrese de habilitar la opción "send as object".

  • Deje los demás ajustes sin cambios.

Desplácese hacia abajo hasta encontrar el botón para continuar con la configuración y haga clic en él:

En la siguiente página de configuración, asegúrese de activar el botón "enable" junto a GENERAL SETTINGS y deje el format type configurado en JSON.

Puede establecer el período de publicación de datos yendo a la pestaña ADVANCED SETTINGS. Aquí, la opción "period" le permite seleccionar el intervalo de envío de datos en segundos. Una vez hecho esto, haga clic en el botón "next".

Una vez que se muestre la SERVER CONFIGURATION, configure lo siguiente:

  • Seleccione el "type" en HTTP.

  • En el campo "server address", configure la URL del endpoint HTTPS de la función obtenida anteriormente.

  • En la sección HTTP headers, agregue los siguientes encabezados:

Header

Value

Content-type

application/json

X-Auth-Token

Su token de cuenta Ubidots

Luego, haga clic en el botón "SAVE & APPLY".

2. Comprobar los datos recibidos en Ubidots

Al completar los pasos anteriores, podrá ver los datos recibidos en su dispositivo en Ubidots a través de la UbiFunction:

¿Ha quedado contestada tu pregunta?