Ejemplo n.º 1
0
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])
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
    # 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()