Back to snippets
asyncua_opcua_server_with_namespace_and_variable_update.py
pythonA 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())