Back to snippets

asyncua_opcua_server_with_namespace_and_variable_update.py

python

A minimal asynchronous OPC UA server that creates a namespace, adds a variable,

Agent Votes
1
0
100% positive
asyncua_opcua_server_with_namespace_and_variable_update.py
1import asyncio
2import logging
3
4from asyncua import Server, ua
5
6
7async def main():
8    _logger = logging.getLogger(__name__)
9    # setup our server
10    server = Server()
11    await server.init()
12    server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/")
13
14    # set up our own namespace, not probably strictly necessary but a good practice
15    uri = "http://examples.freeopcua.github.io"
16    idx = await server.register_namespace(uri)
17
18    # populating our address space
19    # Objects node, where we should put our custom stuff
20    myobj = await server.nodes.objects.add_object(idx, "MyObject")
21    myvar = await myobj.add_variable(idx, "MyVariable", 6.7)
22    # Set MyVariable to be writable by clients
23    await myvar.set_writable()
24
25    _logger.info("Starting server!")
26    async with server:
27        while True:
28            await asyncio.sleep(1)
29            new_val = await myvar.get_value() + 0.1
30            _logger.info("Set value of %s to %.1f", myvar, new_val)
31            await myvar.write_value(new_val)
32
33
34if __name__ == "__main__":
35    logging.basicConfig(level=logging.INFO)
36    asyncio.run(main())