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) |
|
|
|
|
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
|
|
|
|