El R1520 de Robustel es un gateway de alto rendimiento, de grado industrial, provisto de conectividad de red 4G LTE de doble SIM, lo que permite un acceso a internet rápido y confiable en áreas remotas. Tiene las interfaces necesarias para conectarse a sensores/dispositivos que cuentan con varios protocolos de conexión diferentes, como Modbus Serial RS-485, RS-232, Modbus TCP/IP, Modo AP de Wi-Fi, entrada/salida digital (DI/DO), entrada analógica (AI).
Además de sus amplias características de hardware, el software del R1520 también se destaca: Puedes gestionar y configurar el R1520 accediendo a RobustOS, el sistema operativo de router propietario de Robustel, desde cualquier navegador web. RobustOS facilita al usuario la configuración y gestión de los servicios en el R1520, como MQTT, Modbus, etc., gracias a su enfoque sin código.
Requisitos
Cualquier sensor con interfaz Modbus RS485. Esta guía utilizará el Sensor de Temperatura y Humedad XY-MD02
1. Configura el R1520 para conectarse a internet
Proporciona energía al R1520 conectándolo usando el conector de alimentación incluido como se muestra a continuación:
Conecta el puerto Ethernet del router a una PC con un cable Ethernet estándar.
Para poder iniciar sesión en el R1520, configura manualmente la PC con una dirección IP estática en la misma subred que la dirección del gateway (192.168.0.1); por lo tanto, la dirección IP estática de tu PC debe estar en la subred 192.168.0.x.
Ingresa a la interfaz web del gateway, escribiendo 192.168.0.1 en la barra de búsqueda de tu navegador web:
Cuando se te soliciten las credenciales, usa admin en ambos campos y presiona el botón LOGIN.
Nota: Los siguientes pasos están destinados a configurar el R1520 para conectarse a internet utilizando el modo Cliente Wi-Fi. Si necesitas conectarlo a internet usando Ethernet o celular, consulta la documentación oficial.
Una vez que se cargue la interfaz web, haz clic en Interface → WiFi y establece los siguientes parámetros:
Modo: Cliente.
Región: establece el código de tu país de acuerdo con ISO 3166-1 alpha-2.
Haz clic en Interface → Link Manager. Haz clic en el menú desplegable Primary Link y selecciona WLAN. Una vez que hayas hecho esto, la entrada WLAN se mostrará en la sección Link Settings.
Haz clic en el botón edit correspondiente a la entrada WLAN .
Una vez en la página de configuración de WLAN, edita los siguientes ajustes como se especifica a continuación y luego haz clic en el botón Submit .
Tipo de Conexión: DHCP.
SSID: Establece el SSID de tu red local.
Conectar a SSID Oculto: Establece esta opción de acuerdo a tus requisitos. Sin embargo, en esta guía, estará deshabilitada.
Contraseña: Establece la contraseña de tu red local.
Habilitar: Habilita esta función de acuerdo a tus requisitos. En esta guía, estará habilitada.
Después de hacer clic en el botón Submit , serás llevado a la visualización anterior. Haz clic en el botón Submit de esta página y luego haz clic en Save & Apply. Si este paso se completa con éxito, tu R1520 se conectará a internet.
2. Descarga e instala las aplicaciones E2C requeridas
Regístrate en Robustel's RCMS Cloud.
Una vez que inicies sesión, haz clic en App Center, selecciona E2C APP y luego utiliza el filtro Series para seleccionar R1520 Series.
Descarga tanto la e2c_s_modbus como la e2c_n_mqtt aplicaciones E2C. Estas aplicaciones permiten al usuario manejar la interfaz Modbus y el servicio MQTT respectivamente.
Regresa a la interfaz web del R1520.
Ve a System → App Center.
Haz clic en el botón de explorar y selecciona cualquiera de las dos aplicaciones E2C descargadas previamente. Una vez que localices el archivo, haz clic en el botón Install . Repite este paso hasta que hayas instalado ambas E2C Apps y luego haz clic en el botón Save & Apply .
Después de instalar las dos aplicaciones, se mostrarán en la sección Installed Apps .
3. Configura el E2C-Modbus
Nota: Esta guía asume que tu sensor ya está conectado a la interfaz Modbus RS485 del R1520. Si ese no es el caso, consulta la documentación de hardware del dispositivo para saber más sobre su interfaz Modbus.
En la interfaz web del R1520, ve a Edge2Cloud → E2C Modbus y edita los siguientes ajustes en la pestaña General Settings :
Habilitar: Habilita esta opción haciendo clic en el control deslizante y asegurándote de que esté en la posición ON .
Configurar Etiquetas en GUI: Habilita esta opción haciendo clic en el control deslizante y asegurándote de que esté en la posición ON . Esto te permitirá configurar qué esclavo Modbus y qué dirección deseas leer, así como asignar Etiquetas a ello; todo desde la interfaz gráfica.
Todos los demás ajustes que no se mencionaron quedan a criterio del usuario para configurarlos de acuerdo a sus requisitos.
En la sección Serial Port Settings edita los siguientes ajustes:
Puerto del Dispositivo: Selecciona COM2 del menú desplegable. Este es el puerto virtual encargado de la interfaz Serial RS485.
Baud Rate, Data Bits, Stop Bits, Parity: Selecciona estos ajustes de acuerdo a la configuración de tu sensor.
En la sección Channels , haz clic en el ícono "+" para agregar las Etiquetas:
Una vez que hagas clic en el ícono "+" , se mostrará la siguiente visualización. Allí, edita los ajustes de la siguiente manera:
Etiqueta: Esta es la etiqueta asociada a esta variable. Es decir, en el archivo JSON de salida, esta variable aparecerá como
{"xy-md02-temperature" : <some numerical value>}
Tipo: Esta es la interfaz a través de la cual se ejecutará el protocolo Modbus. En esta guía, se utiliza RTU ya que el sensor está conectado a través del puerto serial al R1520. No obstante, debes seleccionar esto de acuerdo a tu implementación particular.
Slave ID: Esta es la dirección del dispositivo esclavo del que deseas leer.
Código de Función: Debes seleccionar esto de acuerdo a lo que deseas leer del sensor. En este caso, tanto la temperatura como la humedad son input register, sin embargo, selecciona esto de acuerdo a tus requisitos.
Dirección: Esta es la dirección del input register que se requiere leer. Ajusta este valor de acuerdo a tus requisitos.
Haz clic en el botón Submit para guardar los cambios.
Repite el proceso anterior para cada sensor/register/coil que necesites. Al final, debería verse como se muestra a continuación. Haz clic en el botón Submit y luego presiona Save & Apply.
Nota: En este ejemplo particular, se requieren enviar los valores de dos diferentes input register a Ubidots: temperatura y humedad, por eso se muestran dos diferentes Channels arriba.
Si todo se configuró correctamente, las lecturas del sensor pueden visualizarse en la pestaña Status como se muestra a continuación:
4. Configura el E2C-Broker
Ve a Edge2Cloud → E2C Broker. Haz clic en la pestaña General
Edita los ajustes de la siguiente manera:
Habilitar: Establece el control deslizante en ON para habilitar el Broker.
Guardar mensaje en la base de datos: Establece el control deslizante en ON.
Habilitar Acceso Remoto: Establece el control deslizante en ON.
Otros parámetros no mencionados deben configurarse de acuerdo a los requisitos del usuario.
Haz clic en el botón Submit y luego presiona Save & Apply.
5. Configura el E2C-MQTT
Ve a tu cuenta de Ubidots Devices → Functions.
Crea una nueva Function y edita su código. Pega el siguiente, pero primero, realiza los siguientes cambios:
Establece el token de Ubidots que deseas usar para esta aplicación en la variable token en la línea 7.
Edita el diccionario operations_on_data para que sus claves coincidan con las Etiquetas que estás asignando a cada registro Modbus en la E2C Modbus App del R1520.
Edita el diccionario operations_on_data para que sus valores coincidan con las operaciones requeridas en cada variable.
Por ejemplo, si usaste "xyz-sensor-reading-1" y "xyz-sensor-reading-2" como nombres de Etiquetas en la E2C Modbus App, entonces las claves del diccionario operations_on_data deberían ser "xyz-sensor-reading-1" y "xyz-sensor-reading-2".
Además, debes editar la función lambda de acuerdo a las operaciones requeridas en los datos según la hoja de datos de tu sensor. Por ejemplo, el sensor utilizado en esta guía reporta los valores de temperatura y humedad, ambos multiplicados por un factor de 10, por lo que para obtener la medición real, es necesario dividir el valor obtenido por 10.
import requestsimport timeREQUESTS_FUNCTIONS = {"get": requests.get, "post": requests.post}BASE_URL = "https://industrial.api.ubidots.com"excluded_keys = ["deviceType", "subDeviceId", "timestamp"]token = '<your-ubidots-token>'operations_on_data = { "xy-md02-temperature": lambda x: x / 10, "xy-md02-humidity" : lambda x: x / 10,}def main(args): #Print arguments for debugging purpose print(args) incoming_payload_list = args['payload']['payload'] device_label = args['topic'].rsplit('/')[-1] payload = {} for each_device_json in incoming_payload_list: for each_device_key, each_device_value in each_device_json.items(): if each_device_key in excluded_keys: continue if isinstance(each_device_json[each_device_key], dict): if each_device_key in excluded_keys: continue inner_json = each_device_json[each_device_key] for inner_key,inner_value in inner_json.items(): if not inner_key in excluded_keys: payload[inner_key] = {"value" : operations_on_data[inner_key](inner_value), "timestamp" :inner_json['timestamp'] } else: payload[each_device_key] = each_device_value # Use the remaining parameters as payload req = update_device(device_label, payload, token) # Prints the request result 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 reqdef 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
Después de editar el código, haz clic en el botón Make it live .
Copia la HTTPs Endpoint URL correspondiente a esta función. Será algo como:
https://parse.ubidots.com/prv/<your-ubidots-username>/<your-ubifunction-name>
Regresa a la interfaz web del R1520.
Haz clic en la pestaña Status y desplázate hacia abajo hasta la sección LAN Status. Copia la dirección MAC de tu R1520. Esto se utilizará como un identificador único en Ubidots.
Ve a Edge2Cloud → E2C MQTT. Allí, selecciona la pestaña MQTT .
En la pestaña General Settings edita los siguientes ajustes:
Habilitar: Establece el control deslizante en la posición ON para habilitar el servicio MQTT.
MQTT TLS Habilitar: Desactiva esta opción. Este tutorial no utilizará cifrado. Si necesitas TLS, consulta la documentación para configurarlo.
Servidor Remoto: functions.ubidots.com. Este es el endpoint dedicado de Ubidots para UbiFunctions.
Puerto Remoto: 1883. Este es el puerto para conexión no asegurada.
Nombre de Usuario: Tu nombre de usuario de Ubidots.
Contraseña: Tu Token de Ubidots.
ID de Cliente: Cualquier cadena de caracteres aleatoria y única de 15 caracteres de longitud.
Todos los demás ajustes no mencionados quedan a criterio del usuario para ser configurados.
En la pestaña Topic Settings , establece el Publish Topic, Response Topic y Subscribe Topic a:
/prv/<your-ubidots-username>/<your-ubifunction-name>/<your-r1520-mac-address>
Por ejemplo, si tu nombre de usuario de Ubidots es JohnDoe, el nombre de la función es Robustel App, y la dirección MAC de tu dispositivo es F1:AB:7D:C1:56:AF, entonces el tema es:
/prv/johndoe/robustel-app/f1ab7dc156af
Haz clic en el botón Submit y luego presiona Save & Apply.
Si todo se configuró correctamente, al dirigirte a la pestaña Status en la aplicación E2C MQTT debería mostrarse el estado Connected .
Además, en este punto, deberías poder ver un dispositivo recién creado en tu cuenta de Ubidots, cuyo nombre es precisamente la dirección MAC del R1520 y sus variables son las Etiquetas establecidas en la E2C Modbus App en la interfaz web del R1520.