Presentamos un método alternativo para conectar un WAGO PFC200 a Ubidots mediante una aplicación especializada de WAGO: Energy Data Management. Este enfoque no requiere el uso de la herramienta Codesys.
Requisitos
Una cuenta activa de Ubidots.
1. Controlador WAGO PFC200
El Controlador PFC200 de WAGO es un PLC de grado industrial que facilita el control y la visualización de tus proyectos gracias al sistema operativo Linux en tiempo real y Codesys. Su flexibilidad sin igual desbloquea muchas opciones de configuración para módulos de E/S digitales y analógicos, junto con módulos especializados que ofrecen potenciales, poderes y señales distintos, todo dentro de un solo dispositivo consolidado.
2. Configuración de Ubidots
La aplicación Energy Data Management de WAGO puede establecer conexiones con cualquier MQTT Broker configurándolo adecuadamente a través de la interfaz de gestión web del PLC. Sin embargo, los datos extraídos de los módulos de E/S del dispositivo y posteriormente transmitidos al tema de publicación son incompatibles con nuestro formato JSON de Ubidots (como se detalla en nuestra guía separada para el MQTT Broker). Esto implica que la conectividad directa para transmitir datos a un dispositivo específico dentro de una cuenta de Ubidots no es factible.
Por lo tanto, proporcionamos la alternativa presentada en esta guía, que implica conectar al broker de funciones. Al enviar tus datos a una UbiFunction, estos se analizan en un formato compatible con Ubidots. Posteriormente, los datos analizados se transmiten a tus dispositivos Ubidots. Por defecto, una UbiFunction acomoda exclusivamente el tipo de contenido application/JSON. Sin embargo, es importante tener en cuenta que no todos los protocolos de comunicación dependen de este formato específico para la transmisión de datos.
En escenarios donde se emplean formatos alternativos, tienes la opción de activar la función "raw" dentro de tu UbiFunction, como se muestra en la imagen a continuación. Esto te permite recibir datos en cualquier formato y analizarlos en un formato compatible con Ubidots. Sigue este artículo para obtener información adicional sobre la función raw.
Necesitas seleccionar un método POST y Python 3.11 Lite como el entorno de ejecución. Después de hacer que la función esté activa, copia la URL del endpoint HTTPS.
El código completo se proporciona a continuación para tu UbiFunction raw. Simplemente asegúrate de copiar y pegarlo en tu UbiFunction para una implementación sin problemas y luego ingresa el token de tu cuenta y la etiqueta de tu dispositivo.
import requests
import time
import json
# Ubidots configuration
UBIDOTS_URL = "https://industrial.api.ubidots.com"
TOKEN = "" #Enter here your account's token
DEVICE_LABEL = "" #Enter here your device label
def main(args):
print(args)
# Selecting variable label
data = json.loads(args['body'])['topic']
variable_label = str(data.split("/")[-1])
# Building variable payload
payload = json.loads(args['body'])['payload']
value = json.loads(payload.strip('"'))["value"]
ubi_payload = {
variable_label: value
}
# Send data to Ubidots
time.sleep(20)
update_device(DEVICE_LABEL, ubi_payload, TOKEN)
print(ubi_payload)
return {}
# Make a request
def make_request(method, url, headers = None, max_attempts = 5, params = None, data = None, json = None, timeout = 10):
attempts = 1
kwargs = {
"method": method.upper(),
"url": url,
"headers": headers,
"params": params,
"data": data,
"json": json,
"timeout": timeout
}
try:
req = requests.request(**kwargs)
status_code = req.status_code
time.sleep(1)
print("Status code: ", status_code)
while status_code >= 400 and attempts < max_attempts:
req = requests.request(**kwargs)
status_code = req.status_code
attempts += 1
time.sleep(1)
return req
except requests.ConnectionError as e:
print(f"Error de conexion: {e}")
return None
except requests.Timeout as e:
print(f"Connection timeout: {e}")
return None
except Exception as e:
print("[ERROR] There was an error with the request, details:")
print(e)
return None
# Send data to Ubidots
def update_device(device, payload, token):
url = "{}/api/v1.6/devices/{}".format(UBIDOTS_URL, device)
headers = {"X-Auth-Token": token, "Content-Type": "application/json"}
req = make_request("post", url, headers = headers, json = payload, max_attempts = 5)
Nota: Esta función está diseñada para enviar datos a un solo dispositivo, como se define en la variable DEVICE_LABEL. Sin embargo, si tienes la intención de transmitir datos a múltiples dispositivos, puedes incorporar una lógica sencilla para iterar a través de varias etiquetas de dispositivos dentro del código de la función principal. Al implementar un bucle, puedes enviar datos de manera eficiente a todos los dispositivos necesarios.
3. Gestión web del PFC200
Una vez que hayas configurado la UbiFunction, puedes acceder a la gestión web (WBM, en inglés) del PLC para configurar la conexión al broker MQTT correspondiente. Simplemente navega a la siguiente URL:
<PLC_IP_ADDRESS>/wbm/
Posteriormente, solo necesitarás ingresar tu nombre de usuario y contraseña.
Luego, ve a la sección "Conectividad en la nube" → "Conexión 1" e ingresa la siguiente configuración MQTT:
Plataforma en la nube: MQTT AnyCloud
Nombre del host: functions.ubidots.com
Número de puerto: 1883
ID de cliente: Una combinación alfanumérica. Debes seleccionar el ID de tu dispositivo Ubidots.
Usuario: Ingresa aquí el nombre de usuario de tu cuenta Ubidots.
Contraseña: Ingresa aquí el token de tu API de Ubidots.
Nota: La configuración de este broker solo necesita establecerse en esta sección de la gestión web. No hay necesidad de configurarlo en ningún otro lugar, incluyendo dentro de la Aplicación Energy Data Management de WAGO.
4. Aplicación Energy Data Management de WAGO
Energy Data Management de WAGO consiste en software de aplicación basado en web combinado con un sistema de control modular. Registra datos de medición para diferentes medios junto con variables de influencia para el monitoreo de energía, todo lo cual se procesa para análisis adicionales, archivado y generación de informes. Para acceder a la aplicación, ve a la siguiente URL:
<PLC_IP_ADDRESS>/webvisu/webvisu.htm
Después de iniciar sesión con tus credenciales, navega a la pestaña "Archivo" y luego procede al módulo "Conectividad en la nube".
En la sección "MQTT/otras plataformas en la nube" (conexión 1 o 2), pega la URL de la función que copiaste durante el paso inicial del proceso en el campo "Tema principal", con una ligera modificación:
Aquí tienes un ejemplo de una URL de función copiada directamente desde la UbiFunction:
https://parse.ubidots.com/prv/ubidots/test
Sin embargo, es necesario eliminar la parte del host de la URL, conservando solo la ruta:
/prv/ubidots/test --> Tema principal
Luego, haz clic en "Abrir la colección de mediciones MQTT":
En la sección "Mapping" → "Inputs", puedes configurar todas las entradas digitales y analógicas necesarias que deseas transmitir a tu dispositivo Ubidots. Cada registro contiene un nombre, una descripción y su valor correspondiente.
Nota: Solo se pueden transmitir valores numéricos a tus variables de Ubidots.
No olvides guardar tu configuración antes de cerrarla.
En el paso final, necesitarás hacer clic en "Abrir el diálogo de configuración del marco MQTT".
Aquí, necesitas elegir qué campos de tus colecciones de mediciones deseas enviar a tu dispositivo Ubidots. El paso crucial en este proceso es seleccionar la opción "Object Value" para cada campo de contenido habilitado.
Ahora, la UbiFunction recibirá todos los registros configurados en la aplicación de WAGO y los transmitirá a tu dispositivo seleccionado en Ubidots.