async def history(request): if request.param == 'dict': h = HistoryDict() await h.init() yield h await h.stop() elif request.param == 'sqlite': h = HistorySQLite(':memory:') await h.init() yield h await h.stop()
async def create_history_server(sqlite=False) -> HistoryServer: history_server = HistoryServer() await history_server.srv.init() history_server.srv.set_endpoint(f'opc.tcp://127.0.0.1:{port_num if not sqlite else port_num1}') await history_server.srv.start() if sqlite: history = HistorySQLite(":memory:") await history.init() history_server.srv.iserver.history_manager.set_storage(history) await create_var(history_server) await create_srv_events(history_server) return history_server
async def main(): # setup our server server = Server() # Configure server to use sqlite as history database (default is a simple memory dict) server.iserver.history_manager.set_storage( HistorySQLite("my_datavalue_history.sql")) # initialize server await server.init() 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 = await server.register_namespace(uri) # get Objects node, this is where we should put our custom stuff objects = server.get_objects_node() # populating our address space myobj = await objects.add_object(idx, "MyObject") myvar = await myobj.add_variable(idx, "MyVariable", ua.Variant(0, ua.VariantType.Double)) await myvar.set_writable() # Set MyVariable to be writable by clients print(myvar) # starting! await server.start() # enable data change history for this particular node, must be called after start since it uses subscription await server.historize_node_data_change(myvar, period=None, count=100) try: count = 0 while True: await asyncio.sleep(1) count += 0.1 await myvar.set_value(math.sin(count)) finally: # close connection, remove subscriptions, etc await server.stop()
myevgen = server.get_event_generator(etype, myobj) myevgen.event.Severity = 500 myevgen.event.MyStringProperty = ua.Variant("hello world") myevgen.event.MyNumericProperty = ua.Variant(-456) # get another event generator for the myobj node which generates different custom events myevgen2 = server.get_event_generator(etype2, myobj) myevgen2.event.Severity = 123 myevgen2.event.MyOtherProperty = ua.Variant(1.337) # get an event generator for the server node which generates BaseEventType serverevgen = server.get_event_generator() serverevgen.event.Severity = 111 # Configure server to use sqlite as history database (default is a simple in memory dict) server.iserver.history_manager.set_storage(HistorySQLite("my_event_history.sql")) # starting! server.start() # enable history for myobj events; must be called after start since it uses subscription server.iserver.enable_history_event(myobj, period=None) # enable history for server events; must be called after start since it uses subscription server_node = server.get_node(ua.ObjectIds.Server) server.historize_node_event(server_node, period=None) try: count = 0 while True: time.sleep(1)
# 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 custom stuff objects = server.get_objects_node() # populating our address space myobj = objects.add_object(idx, "MyObject") myvar = myobj.add_variable(idx, "MyVariable", ua.Variant(0, ua.VariantType.Double)) myvar.set_writable() # Set MyVariable to be writable by clients # Configure server to use sqlite as history database (default is a simple memory dict) server.iserver.history_manager.set_storage( HistorySQLite("my_datavalue_history.sql")) # starting! server.start() # enable data change history for this particular node, must be called after start since it uses subscription server.historize_node_data_change(myvar, period=None, count=100) try: count = 0 while True: time.sleep(1) count += 0.1 myvar.set_value(math.sin(count)) finally: