OPC UA con Python
La forma más rápida de entender OPC UA es hablar con un servidor desde el código. Este tutorial usa asyncua (la biblioteca libre y de código abierto opcua-asyncio) para conectar, explorar, leer, escribir y suscribirse: las cuatro cosas que hará el 90% de las veces.
1. Instale
pip install asyncua
2. Conectar y leer un valor
import asyncio
from asyncua import Client
URL = "opc.tcp://localhost:4840/freeopcua/server/"
async def main():
async with Client(url=URL) as client:
# Read a node by its NodeId (namespace index + identifier)
node = client.get_node("ns=2;i=2")
value = await node.read_value()
print("Value:", value)
asyncio.run(main())
3. Explore el espacio de direcciones
async with Client(url=URL) as client:
objects = client.nodes.objects
for child in await objects.get_children():
name = await child.read_browse_name()
print(name)
4. Escribir un valor
from asyncua import ua
async with Client(url=URL) as client:
node = client.get_node("ns=2;i=3")
await node.write_value(ua.DataValue(ua.Variant(42.0, ua.VariantType.Double)))
5. Suscribirse a cambios de dato
Las suscripciones le empujan las actualizaciones en lugar de sondear: la forma correcta de vigilar un valor.
class Handler:
def datachange_notification(self, node, val, data):
print("Change:", node, val)
async with Client(url=URL) as client:
handler = Handler()
sub = await client.create_subscription(500, handler) # 500 ms
node = client.get_node("ns=2;i=2")
await sub.subscribe_data_change(node)
await asyncio.sleep(30) # keep running to receive changes
Conectar de forma segura
Para Sign & Encrypt, cargue su certificado y su clave antes de conectar:
await client.set_security_string(
"Basic256Sha256,SignAndEncrypt,client-cert.der,client-key.pem")
El servidor debe confiar en su certificado (moverlo de rejected a trusted). Detalles: seguridad y certificados de OPC UA.
Leer nodos en Python es el paso uno. Convertir ese flujo en acciones priorizadas y con su coste en planta es lo que hace Jemba.
Ver Jemba →FAQ
¿Qué biblioteca OPC UA de Python debería usar?
asyncua(opcua-asyncio) es la librería asíncrona mantenida activamente y la elección habitual. La antigua síncronapython-opcuaestá obsoleto en su favor.¿Puedo construir un servidor OPC UA en Python?
¿Qué es un NodeId?
ns=2;i=2(índice de espacio de nombres 2, identificador entero 2) ons=3;s=Temperature(identificador de cadena).Última actualización: 4 de septiembre de 2026 · Recurso educativo. Los nombres de las bibliotecas son marcas comerciales de sus titulares.