Completed
Push — master ( d1d067...128174 )
by Olivier
01:07
created

UaClient.get_all_refs()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 5
Bugs 0 Features 0
Metric Value
cc 1
c 5
b 0
f 0
dl 0
loc 2
rs 10
1
2
from opcua import ua
3
from opcua import Client
4
from opcua import Node
5
6
7
class UaClient(object):
8
    """
9
    OPC-Ua client specialized for the need of GUI client
10
    return exactly whant GUI needs, no customization possible
11
    """
12
13
    def __init__(self):
14
        self.client = None
15
        self._connected = False
16
        self._datachange_sub = None
17
        self._event_sub = None
18
        self._subs_dc = {}
19
        self._subs_ev = {}
20
21
    def get_node(self, nodeid):
22
        return self.client.get_node(nodeid)
23
24
    def connect(self, uri):
25
        self.disconnect()
26
        print("Connecting to ", uri)
27
        self.client = Client(uri)
28
        self.client.connect()
29
        self._connected = True
30
31
    def disconnect(self):
32
        if self._connected:
33
            print("Disconnecting from server")
34
            self._subs_dc = {}
35
            self._subs_ev = {}
36
            self._connected = False
37
            self._subscription = None
38
            self.client.disconnect()
39
            self.client = None
40
41
    def subscribe_datachange(self, node, handler):
42
        if not self._datachange_sub:
43
            self._datachange_sub = self.client.create_subscription(500, handler)
44
        handle = self._datachange_sub.subscribe_data_change(node)
45
        self._subs_dc[node.nodeid] = handle
46
        return handle
47
48
    def unsubscribe_datachange(self, node):
49
        self._datachange_sub.unsubscribe(self._subs_dc[node.nodeid])
50
51
    def subscribe_events(self, node, handler):
52
        if not self._event_sub:
53
            print("subscirbing with handler: ", handler, dir(handler))
54
            self._event_sub = self.client.create_subscription(500, handler)
55
        handle = self._event_sub.subscribe_events(node)
56
        self._subs_ev[node.nodeid] = handle
57
        return handle
58
59
    def unsubscribe_events(self, node):
60
        self._event_sub.unsubscribe(self._subs_ev[node.nodeid])
61
62
    def get_node_attrs(self, node):
63
        if not isinstance(node, Node):
64
            node = self.client.get_node(node)
65
        attrs = node.get_attributes([ua.AttributeIds.DisplayName, ua.AttributeIds.BrowseName, ua.AttributeIds.NodeId])
66
        return node, [attr.Value.Value.to_string() for attr in attrs]
67
68
    def get_children(self, node):
69
        descs = node.get_children_descriptions()
70
        descs.sort(key=lambda x: x.BrowseName)
71
        return descs
72
73