Issues (20)

examples/server-callback.py (1 issue)

1
import sys
2
sys.path.insert(0, "..")
3
import logging
4
from datetime import datetime
5
import asyncio
6
7
try:
8
    from IPython import embed
9
except ImportError:
10
    import code
11
12
    def embed():
13
        vars = globals()
14
        vars.update(locals())
15
        shell = code.InteractiveConsole(vars)
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable code does not seem to be defined.
Loading history...
16
        shell.interact()
17
18
19
from asyncua import ua, uamethod, Server
20
from asyncua.common.callback import CallbackType
21
22
23
24
def create_monitored_items(event, dispatcher):
25
    print("Monitored Item")     
26
27
    for idx in range(len(event.response_params)) :
28
        if (event.response_params[idx].StatusCode.is_good()) :
29
            nodeId = event.request_params.ItemsToCreate[idx].ItemToMonitor.NodeId
30
            print(f"Node {nodeId} was created")
31
         
32
    
33
def modify_monitored_items(event, dispatcher):
34
    print('modify_monitored_items')
35
36
37
def delete_monitored_items(event, dispatcher):
38
    print('delete_monitored_items')
39
40
41
async def main():
42
    # optional: setup logging
43
    logging.basicConfig(level=logging.WARN)
44
    #logger = logging.getLogger("asyncua.address_space")
45
    # logger.setLevel(logging.DEBUG)
46
    #logger = logging.getLogger("asyncua.internal_server")
47
    # logger.setLevel(logging.DEBUG)
48
    #logger = logging.getLogger("asyncua.binary_server_asyncio")
49
    # logger.setLevel(logging.DEBUG)
50
    #logger = logging.getLogger("asyncua.uaprocessor")
51
    # logger.setLevel(logging.DEBUG)
52
    logger = logging.getLogger("asyncua.subscription_service")
53
    logger.setLevel(logging.DEBUG)
54
55
    # now setup our server
56
    server = Server()
57
    await server.init()
58
    #await server.disable_clock()
59
    #server.set_endpoint("opc.tcp://localhost:4840/freeopcua/server/")
60
    server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/")
61
    server.set_server_name("FreeOpcUa Example Server")
62
63
    # setup our own namespace
64
    uri = "http://examples.freeopcua.github.io"
65
    idx = await server.register_namespace(uri)
66
67
    # get Objects node, this is where we should put our custom stuff
68
    objects = server.nodes.objects
69
70
    # populating our address space
71
    myfolder = await objects.add_folder(idx, "myEmptyFolder")
72
    myobj = await objects.add_object(idx, "MyObject")
73
    myvar = await myobj.add_variable(idx, "MyVariable", 6.7)
74
    await myvar.set_writable()    # Set MyVariable to be writable by clients
75
   
76
77
    # starting!
78
    await server.start()
79
    
80
    # Create Callback for item event 
81
    server.subscribe_server_callback(CallbackType.ItemSubscriptionCreated, create_monitored_items)
82
    server.subscribe_server_callback(CallbackType.ItemSubscriptionModified, modify_monitored_items)
83
    server.subscribe_server_callback(CallbackType.ItemSubscriptionDeleted, delete_monitored_items)
84
    
85
    while True:
86
        await asyncio.sleep(1)
87
88
89
if __name__ == '__main__':
90
    asyncio.run(main())
91