async def test_write_callback(mocker): server = Server() idx = 0 # get Objects node, this is where we should put our custom stuff opc_url = f"opc.tcp://127.0.0.1:{port_num}/freeopcua/server/" server.set_endpoint(opc_url) await server.init() objects = server.nodes.objects # populating our address space myobj = await objects.add_object(idx, "MyObject") myvar = await myobj.add_variable(idx, "MyVariable", 6.7) await myvar.set_writable() # Set MyVariable to be writable by clients # starting! await server.start() mocked_create_monitored_items = mocker.patch( 'tests.test_callback_service.create_monitored_items') mocked_write_items = mocker.patch( 'tests.test_callback_service.write_items') # Create Callback for item event server.subscribe_server_callback(CallbackType.ItemSubscriptionCreated, mocked_create_monitored_items) server.subscribe_server_callback(CallbackType.PostWrite, mocked_write_items) assert not mocked_create_monitored_items.called assert not mocked_write_items.called client = Client(opc_url) async with client: var = await client.nodes.objects.get_child( [f"{idx}:MyObject", f"{idx}:MyVariable"]) handler = SubscriptionHandler() # We create a Client Subscription. subscription = await client.create_subscription(500, handler) nodes = [var] await subscription.subscribe_data_change(nodes) assert mocked_create_monitored_items.called await subscription.delete() await var.set_value(69.0) assert mocked_write_items.called await server.delete_nodes([myobj, myvar])
async def main(): # optional: setup logging logging.basicConfig(level=logging.WARN) #logger = logging.getLogger("asyncua.address_space") # logger.setLevel(logging.DEBUG) #logger = logging.getLogger("asyncua.internal_server") # logger.setLevel(logging.DEBUG) #logger = logging.getLogger("asyncua.binary_server_asyncio") # logger.setLevel(logging.DEBUG) #logger = logging.getLogger("asyncua.uaprocessor") # logger.setLevel(logging.DEBUG) logger = logging.getLogger("asyncua.subscription_service") logger.setLevel(logging.DEBUG) # now setup our server server = Server() await server.init() #await server.disable_clock() #server.set_endpoint("opc.tcp://localhost:4840/freeopcua/server/") server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/") server.set_server_name("FreeOpcUa Example Server") # setup our own namespace uri = "http://examples.freeopcua.github.io" idx = await server.register_namespace(uri) # get Objects node, this is where we should put our custom stuff objects = server.nodes.objects # populating our address space myfolder = await objects.add_folder(idx, "myEmptyFolder") myobj = await objects.add_object(idx, "MyObject") myvar = await myobj.add_variable(idx, "MyVariable", 6.7) await myvar.set_writable() # Set MyVariable to be writable by clients # starting! await server.start() # Create Callback for item event server.subscribe_server_callback(CallbackType.ItemSubscriptionCreated, create_monitored_items) server.subscribe_server_callback(CallbackType.ItemSubscriptionModified, modify_monitored_items) server.subscribe_server_callback(CallbackType.ItemSubscriptionDeleted, delete_monitored_items) while True: await asyncio.sleep(1)
# setup our own namespace uri = "http://examples.freeopcua.github.io" idx = server.register_namespace(uri) # get Objects node, this is where we should put our custom stuff objects = server.nodes.objects # populating our address space myfolder = objects.add_folder(idx, "myEmptyFolder") myobj = objects.add_object(idx, "MyObject") myvar = myobj.add_variable(idx, "MyVariable", 6.7) myvar.set_writable() # Set MyVariable to be writable by clients # starting! server.start() # Create Callback for item event server.subscribe_server_callback(CallbackType.ItemSubscriptionCreated, create_monitored_items) server.subscribe_server_callback(CallbackType.ItemSubscriptionModified, modify_monitored_items) server.subscribe_server_callback(CallbackType.ItemSubscriptionDeleted, delete_monitored_items) print("Available loggers are: ", logging.Logger.manager.loggerDict.keys()) try: # enable following if you want to subscribe to nodes on server side embed() finally: server.stop()