Commit 82aaba97 authored by yogesh.m's avatar yogesh.m

update

parent 76ecbee6
...@@ -17,36 +17,12 @@ class asyncua_server(): ...@@ -17,36 +17,12 @@ class asyncua_server():
self.server=None self.server=None
self.idx=None self.idx=None
async def delete_all_objects(self): async def delete_nodes(self,nodes):
root_nodes=await self.server.get_root_node().get_children() for node in nodes:
obj_nodes=await root_nodes[0].get_children() node = "ns=3;i=" + node if node.isdigit() else "ns=3;s=" + node
for node in obj_nodes: node = self.server.get_node(node)
if("ns=" in str(node)):
print(node)
sub_obj = await self.server.get_node(node).get_children()
for del_node in sub_obj:
await self.server.delete_nodes([del_node])
await self.server.delete_nodes([node]) await self.server.delete_nodes([node])
async def add_object(self,obj,hierarchy):
if(hierarchy[obj]["name"]=="String"):
var_obj= await self.server.nodes.objects.add_folder(self.idx,obj )
val_array=pickle.loads(hierarchy[obj]["obj"])
for identifier in val_array:
if(val_array[identifier]["datatype"]==11):
var = await var_obj.add_variable(ua.NodeId(identifier,3),val_array[identifier]["node_name"], float(0.0))#ua.NodeId(ua.ObjectIds.Double))
await var.set_writable()
if (val_array[identifier]["datatype"] == 6):
var = await var_obj.add_variable(ua.NodeId(identifier,3), val_array[identifier]["node_name"], 0,ua.VariantType.Int32)#ua.NodeId(ua.ObjectIds.Int32))
await var.set_writable()
else:
await self.server.nodes.objects.add_folder(self.idx, obj)
async def add_variable(self,obj,var):
var = await obj.add_variable(self.idx,var, 11)
await var.set_writable()
return var
async def start_server(self,url,uri): async def start_server(self,url,uri):
# create a server # create a server
self.server = Server() self.server = Server()
...@@ -67,8 +43,41 @@ class asyncua_server(): ...@@ -67,8 +43,41 @@ class asyncua_server():
# stop the server # stop the server
await self.server.stop() await self.server.stop()
async def add_object(self,node, parent_node, hierarchy):
if (parent_node == None):
if (node.isdigit()):
node_index = "ns=3;i=" + node
else:
node_index = "ns=3;s=" + node
await self.server.nodes.objects.add_folder(node_index, hierarchy["name"])
else:
if (parent_node.isdigit()):
node_index = "ns=3;i=" + parent_node
else:
node_index = "ns=3;s=" + parent_node
node_space = self.server.get_node(node_index)
node_id="ns=3;i="+node if node.isdigit() else "ns=3;s="+node
if(hierarchy["type"]==1):
await node_space.add_object(node_id,hierarchy["name"])
elif(hierarchy["type"]==2):
print(hierarchy["datatype"])
if(hierarchy["datatype"]==11):
var = await node_space.add_variable(node_id,hierarchy["name"],float(0.0))
await var.set_writable()
elif(hierarchy["datatype"]==6):
var = await node_space.add_variable(node_id, hierarchy["name"], 0,ua.VariantType.Int32)
await var.set_writable()
elif (hierarchy["datatype"] == 24):
var = await node_space.add_variable(node_id, hierarchy["name"], 0, ua.VariantType.Null)
await var.set_writable()
else:
var = await node_space.add_variable(node_id, hierarchy["name"], None)
await var.set_writable()
asr = asyncua_server() asr = asyncua_server()
identifier_array_received=[] identifier_array_received=[]
identifier_array_existing=[]
def get_received_hierarchy_array(hierarchy): def get_received_hierarchy_array(hierarchy):
for key in hierarchy: for key in hierarchy:
if(key!="hash"): if(key!="hash"):
...@@ -84,35 +93,37 @@ async def get_existing_hierarchy_array(client,node_objects): ...@@ -84,35 +93,37 @@ async def get_existing_hierarchy_array(client,node_objects):
node = client.get_node(sub_obj) node = client.get_node(sub_obj)
children_nodes = await node.get_children() children_nodes = await node.get_children()
identifier = str(children_nodes[0].nodeid.Identifier) if children_nodes else "" identifier = str(children_nodes[0].nodeid.Identifier) if children_nodes else ""
node_class = await sub_obj.read_node_class()
if (identifier not in str(sub_obj)): if (identifier not in str(sub_obj)):
child_disp_name = await sub_obj.read_display_name()
identifier_name = sub_obj.nodeid.Identifier identifier_name = sub_obj.nodeid.Identifier
identifier_array_existing.append(str(identifier_name))
node_hierarchy[identifier_name] = await get_existing_hierarchy_array(client, children_nodes) node_hierarchy[identifier_name] = await get_existing_hierarchy_array(client, children_nodes)
node_hierarchy[identifier_name]["name"] = child_disp_name.Text
if (node_class._name_ == "Variable"):
datatype = await sub_obj.read_data_type_as_variant_type()
node_hierarchy[identifier_name]["datatype"] = datatype._value_
else: else:
disp_name = await sub_obj.read_display_name()
identifier_name = sub_obj.nodeid.Identifier identifier_name = sub_obj.nodeid.Identifier
node_hierarchy[identifier_name] = {} identifier_array_existing.append(str(identifier_name))
node_hierarchy[identifier_name]["name"] = disp_name.Text return identifier_array_existing
if (node_class._name_ == "Variable"):
datatype = await sub_obj.read_data_type_as_variant_type()
node_hierarchy[identifier_name]["datatype"] = datatype._value_
return node_hierarchy def add_nodes(nodes_to_add,hierarchy,parent_key=None):
for key in hierarchy:
if (key != "hash"):
if (isinstance(hierarchy[key], dict)):
if (key in nodes_to_add):
asyncio.run(asr.add_object(key, parent_key,hierarchy[key]))
add_nodes(nodes_to_add,hierarchy[key],key)
def analyse_hierarchy(hierarchy): def analyse_hierarchy(hierarchy):
array1=get_received_hierarchy_array(hierarchy) array1=get_received_hierarchy_array(hierarchy)
print(array1)
root_node=asr.server.get_root_node() root_node=asr.server.get_root_node()
object_root_node=asyncio.run(root_node.get_children()) object_root_node=asyncio.run(root_node.get_children())
node_objects= asyncio.run(object_root_node[0].get_children()) node_objects= asyncio.run(object_root_node[0].get_children())
print(node_objects) array2=asyncio.run(get_existing_hierarchy_array(asr.server,node_objects))
existing_h=asyncio.run(get_existing_hierarchy_array(asr.server,node_objects)) nodes_to_add=set(array1)-set(array2)
print(existing_h) nodes_to_delete=set(array2)-set(array1)
add_nodes(nodes_to_add,hierarchy)
asyncio.run(asr.delete_nodes(nodes_to_delete))
identifier_array_received.clear() identifier_array_received.clear()
identifier_array_existing.clear()
def hash_receive(): def hash_receive():
prev_hash = 0 prev_hash = 0
...@@ -123,13 +134,7 @@ def hash_receive(): ...@@ -123,13 +134,7 @@ def hash_receive():
hierarchy=pickle.loads(message) hierarchy=pickle.loads(message)
hierarchy=json.loads(hierarchy) hierarchy=json.loads(hierarchy)
if(prev_hash!=hierarchy["hash"] and asr.idx): if(prev_hash!=hierarchy["hash"] and asr.idx):
print("changed")
analyse_hierarchy(hierarchy) analyse_hierarchy(hierarchy)
asyncio.run(asr.delete_all_objects())
for object in hierarchy:
if(object!="hash"):
display_name=object
asyncio.run(asr.add_object(object,hierarchy))
prev_hash=hierarchy["hash"] prev_hash=hierarchy["hash"]
def st(): def st():
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment