hotloop
GitHub

Integrations OPC UA

OPC UA

Verified live

Prefer this one when a device offers a choice. It browses, it is properly secured, and it subscribes.

Verified against Microsoft opc-plc (C#)Emberburn (Python)

The driver subscribes rather than polls. The server sends a value when it changes, at a rate it can sustain, instead of being asked the same question every scan by a client with no idea whether anything moved. If a server refuses a subscription, the driver falls back to batched reads rather than failing the device.

Address nodes by namespace URI. Browse returns the URI form for exactly this reason, because the URI does not move when a server reloads.

A bare string is rejected as an address. The underlying library would happily read Temperature as ns=0;s=Temperature, which means a typo parses cleanly into a node that does not exist and the tag reads bad forever. An explicit form is required, so the mistake surfaces when you save it.

Addressing

AddressMeans
nsu=http://opcua.edge.server;s=Zone1_TemperatureGood. The namespace URI is part of the model and does not move.
ns=3;s=Zone1_TemperatureWorks until it doesn't. The index depends on load order.
The trap

A namespace index is assigned in whatever order the server happens to load its namespaces. Add a namespace, upgrade firmware, and index 3 quietly becomes something else, so every reading is wrong with no error anywhere.

Configuration

securityPolicysecurityModeusernamepasswordcertFilekeyFilesubscribepublishIntervalMssamplingIntervalMsbrowseMaxNodesbrowseRoot