def test_instantiate_1(self): # Create device type dev_t = self.opc.nodes.base_object_type.add_object_type(0, "MyDevice") v_t = dev_t.add_variable(0, "sensor", 1.0) p_t = dev_t.add_property(0, "sensor_id", "0340") ctrl_t = dev_t.add_object(0, "controller") prop_t = ctrl_t.add_property(0, "state", "Running") # Create device sutype devd_t = dev_t.add_object_type(0, "MyDeviceDervived") v_t = devd_t.add_variable(0, "childparam", 1.0) p_t = devd_t.add_property(0, "sensorx_id", "0340") # instanciate device nodes = instantiate(self.opc.nodes.objects, dev_t, bname="2:Device0001") mydevice = nodes[0] self.assertEqual(mydevice.get_node_class(), ua.NodeClass.Object) self.assertEqual(mydevice.get_type_definition(), dev_t.nodeid) obj = mydevice.get_child(["0:controller"]) prop = mydevice.get_child(["0:controller", "0:state"]) self.assertEqual(prop.get_type_definition().Identifier, ua.ObjectIds.PropertyType) self.assertEqual(prop.get_value(), "Running") self.assertNotEqual(prop.nodeid, prop_t.nodeid) # instanciate device subtype nodes = instantiate(self.opc.nodes.objects, devd_t, bname="2:Device0002") mydevicederived = nodes[0] prop1 = mydevicederived.get_child(["0:sensorx_id"]) var1 = mydevicederived.get_child(["0:childparam"]) var_parent = mydevicederived.get_child(["0:sensor"]) prop_parent = mydevicederived.get_child(["0:sensor_id"])
def test_instantiate_string_nodeid(self): # Create device type dev_t = self.opc.nodes.base_object_type.add_object_type(0, "MyDevice2") v_t = dev_t.add_variable(0, "sensor", 1.0) v_t.set_modelling_rule(True) p_t = dev_t.add_property(0, "sensor_id", "0340") p_t.set_modelling_rule(True) ctrl_t = dev_t.add_object(0, "controller") ctrl_t.set_modelling_rule(True) prop_t = ctrl_t.add_property(0, "state", "Running") prop_t.set_modelling_rule(True) # instanciate device nodes = instantiate(self.opc.nodes.objects, dev_t, nodeid=ua.NodeId("InstDevice", 2, ua.NodeIdType.String), bname="2:InstDevice") mydevice = nodes[0] self.assertEqual(mydevice.get_node_class(), ua.NodeClass.Object) self.assertEqual(mydevice.get_type_definition(), dev_t.nodeid) obj = mydevice.get_child(["0:controller"]) obj_nodeid_ident = obj.nodeid.Identifier prop = mydevice.get_child(["0:controller", "0:state"]) self.assertEqual(obj_nodeid_ident, "InstDevice.controller") self.assertEqual(prop.get_type_definition().Identifier, ua.ObjectIds.PropertyType) self.assertEqual(prop.get_value(), "Running") self.assertNotEqual(prop.nodeid, prop_t.nodeid)
def test_instantiate_1(self): dev_t = self.opc.nodes.base_data_type.add_object_type(0, "MyDevice") v_t = dev_t.add_variable(0, "sensor", 1.0) p_t = dev_t.add_property(0, "sensor_id", "0340") ctrl_t = dev_t.add_object(0, "controller") prop_t = ctrl_t.add_property(0, "state", "Running") mydevice = instantiate(self.opc.nodes.objects, dev_t, bname="2:Device0001") self.assertEqual(mydevice.get_type_definition(), dev_t.nodeid) obj = mydevice.get_child(["0:controller"]) prop = mydevice.get_child(["0:controller", "0:state"]) self.assertEqual(prop.get_type_definition().Identifier, ua.ObjectIds.PropertyType) self.assertEqual(prop.get_value(), "Running") self.assertNotEqual(prop.nodeid, prop_t.nodeid)
server = Server() server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/") # setup our own namespace, not really necessary but should as spec uri = "http://examples.freeopcua.github.io" idx = server.register_namespace(uri) # get Objects node, this is where we should put our nodes objects = server.get_objects_node() # populating our address space myobj = objects.add_object(idx, "MyObject") myvar = myobj.add_variable(idx, "MyVariable", 6.7) myvar.set_writable() # Set MyVariable to be writable by clients dev = server.nodes.base_object_type.add_object_type(0, "MyDevice") dev.add_variable(0, "sensor1", 1.0) mydevice = instantiate(server.nodes.objects, dev, bname="2:Device0001") node_list = [dev, mydevice[0], myobj, myvar] # starting! server.start() exporter = XmlExporter(server) exporter.build_etree(node_list, ['http://myua.org/test/']) exporter.write_xml('ua-export.xml') server.stop()
# setup our server server = Server() server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/") # setup our own namespace, not really necessary but should as spec uri = "http://examples.freeopcua.github.io" idx = server.register_namespace(uri) # create our custom object type dev = server.nodes.base_object_type.add_object_type(0, "MyDevice") dev.add_variable(0, "sensor1", 1.0) dev.add_property(0, "device_id", "0340") ctrl = dev.add_object(0, "controller") ctrl.add_property(0, "state", "Idle") # instantiate our new object type mydevice = instantiate(server.nodes.objects, dev, bname="2:Device0001") #mydevice = server.nodes.objects.add_object(2, "Device0001", objecttype=dev) # specificying objecttype to add_object also instanciate a node type mydevice_var = mydevice.get_child(["0:controller", "0:state"]) # get proxy to our device state variable # starting! server.start() try: mydevice_var.set_value("Running") embed() finally: # close connection, remove subcsriptions, etc server.stop()