Exporting Device Data

The main purpose with an OPC-UA server is to provide access to real world objects. External information is stored in the address space in the form of variable nodes. Variable nodes have value attributes. The following section shows how to connect attributes with real world objects.

Value Callback

The value callback is a function and is used for both reading and writing.

function callback(nodeId, value)
end

Write Callback Parameters

nodeId of type Node Identifiers (NodeID)

The Node ID of the node to modify.

value of type Variant

The new variable value set by the client.

return

Not used

Read Callback Parameters

nodeId of type Node Identifiers (NodeID)

The Node ID of the node to read.

return of type Variant

The return value is returned to the client.

Error reporting

To report an error, the callback should raise a LUA error with a suitable OPC-UA status code.

function callback(nodeId, value)
  error(ua.StatusCode.BadDeviceFailure)
end

Custom data source example

local resp = server:addNodes(request)
for _,res in ipairs(resp.results) do
  if res.statusCode ~= ua.StatusCode.Good and res.statusCode ~= ua.StatusCode.BadNodeIdExists then
    error(res.statusCode)
  end
end

-- Callback that will be called for Read/Write operations
function callback(nodeId, newValue)
  if newValue ~= nil then
    -- writing data
    ua.Tools.printTable("newValue", newValue, trace)
    ua.Tools.printTable("deviceData", deviceData, trace)

    if value.int32 == nil then
      error(ua.StatusCode.BadInvalidArgument)
    end

    deviceData = newValue
  else
    -- reading data
    ua.Tools.printTable("read deviceData", deviceData, trace)
    return deviceData
  end
end

Full source