En el mundo del Internet de las Cosas (IoT), Linux ha surgido como un sistema operativo popular para dispositivos IoT. Su popularidad se puede atribuir a la flexibilidad, robustez, naturaleza de código abierto y un rico conjunto de herramientas, bibliotecas y utilidades que lo hacen ideal para soluciones IoT. Una de estas utilidades es Python, un lenguaje de programación poderoso, fácil de aprender y ampliamente utilizado.
Python, con su vasta selección de bibliotecas, simplifica la tarea de recolección, procesamiento y transmisión de datos. Permite que los dispositivos IoT se comuniquen con plataformas en la nube y envíen datos para un análisis y visualización más detallados.
Una amplia gama de dispositivos IoT industriales y gateways ahora funcionan con Linux, abriendo nuevas oportunidades para aprovechar el potencial de estos dispositivos. Algunos de ellos incluyen:
Robustel: Sus enrutadores industriales R3000 LG y R2000 Dual están impulsados por Linux y proporcionan conectividad segura y confiable.
NCD.io: NCD.io ofrece el Gateway Inalámbrico Industrial IoT Linux PR55-17B, que es capaz de realizar agregación de datos de alto rendimiento.
Advantech: La empresa ofrece una gama de dispositivos basados en Linux, incluyendo la serie ECU-1000 de gateways industriales IoT.
Red Lion: Su serie Sixnet® de RTUs (Unidades de Terminal Remoto) y enrutadores celulares IndustrialPro® SN-6000 vienen con plataformas Linux robustas.
Revolution Pi: La serie Revolution Pi, basada en la plataforma Raspberry Pi, son PLCs modulares, de código abierto y de grado industrial que funcionan con Linux.
OWASYS: Conocidos por sus avanzados dispositivos embebidos basados en Linux como los gateways IoT owa5X.
Dada la proliferación de estos dispositivos IoT basados en Linux, hemos creado un script de Python que puede enviar datos desde estos dispositivos a la plataforma Ubidots. Los datos pueden ser enviados a través de HTTP o MQTT, dos protocolos IoT ampliamente utilizados.
Script de Python
Desde la Línea de Comando:
Instalar Bibliotecas Requeridas: Si no están instaladas, instala las bibliotecas de Python necesarias usando pip:
pip install paho-mqttpip install requests
Crear archivo de Python: Crea un archivo llamado
ubidots_send.py
e ingresa el siguiente script:
import sysimport requestsimport jsonfrom paho.mqtt import client as mqtt_clientdef send_http(payload, device_label, token): url = f"https://industrial.api.ubidots.com/api/v1.6/devices/{device_label}" headers = {"X-Auth-Token": token, "Content-Type": "application/json"} response = requests.post(url, headers=headers, json=payload) print(response.text)def send_mqtt(payload, device_label, token): broker = 'industrial.api.ubidots.com' port = 1883 topic = f"/v1.6/devices/{device_label}" client_id = token username = token password = '' def connect_mqtt(): def on_connect(client, userdata, flags, rc): if rc == 0: print("¡Conectado al Broker MQTT!") else: print("Error al conectar, código de retorno %d\n", rc) client = mqtt_client.Client(client_id) client.username_pw_set(username, password) client.on_connect = on_connect client.connect(broker, port) return client def publish(client): msg = json.dumps(payload) result = client.publish(topic, msg) status = result[0] if status == 0: print(f"Enviar `{msg}` al tema `{topic}`") else: print(f"Error al enviar el mensaje al tema {topic}") client = connect_mqtt() publish(client)def main(): args = sys.argv if len(args) != 5: print("Uso: python script.py payload device_label token protocol") return # En esta línea, debes reemplazar las variables a continuación, con las que se esperan según tu aplicación: payload = dict(zip( ["engine_rpm", "oil_level", "oil_temperature", "fuel_level", "engine_temperature", "ambient_temperature", "runtime", "estimated_fuel_efficiency", "lat", "lng"], map(float, args[1].split(',')) )) device_label = args[2] token = args[3] protocol = args[4] if protocol == "http": send_http(payload, device_label, token) elif protocol == "mqtt": send_mqtt(payload, device_label, token) else: print("Protocolo inválido. Usa 'http' o 'mqtt'")if __name__ == "__main__": main()
3. Prepara tus Datos: En la siguiente línea, reemplaza las variables a continuación, con las que se esperan según tu aplicación:
payload = dict(zip(["engine_rpm", "oil_level", "oil_temperature", "fuel_level", "engine_temperature", "ambient_temperature", "runtime", "estimated_fuel_efficiency", "lat", "lng"], map(float, args[1].split(','))))
4. Ejecuta el Script: Ejecuta el script desde la terminal, pasando los argumentos requeridos: payload, etiqueta del dispositivo Ubidots, token de Ubidots y el protocolo deseado. Usa el siguiente comando, reemplazando los marcadores de posición con tus datos reales:
python ubidots_send.py "1000,50,80,75,100,20,300,15,40.712776,-74.005974" my-device my-token http
Por ejemplo:
python ubidots_send.py "1000,50,80,75,100,20,300,15,40.712776,-74.005974" my-device BBFF-UMrU5BPuGAltESk8UyHJXVkhTSudQ4 mqtt
Resultados
Después de ejecutar el comando, se espera la siguiente respuesta:
python ubidots_send.py "1000,50,80,75,100,20,300,15,40.712776,-74.005974" my-device BBFF-UMrU5BPuGAltESk8UyHJXVkhTSudQ4 mqtt Enviar `{"engine_rpm": 1000.0, "oil_level": 50.0, "oil_temperature": 80.0, "fuel_level": 75.0, "engine_temperature": 100.0, "ambient_temperature": 20.0, "runtime": 300.0, "estimated_fuel_efficiency": 15.0, "lat": 40.712776, "lng": -74.005974}` al tema `/v1.6/devices/my-device`
...y luego los datos se pueden ver en tu cuenta de Ubidots:
Otros encontraron útil...