server-events-history.py
Go to the documentation of this file.
1 import sys
2 sys.path.insert(0, "..")
3 import time
4 from datetime import datetime
5 
6 from opcua import ua, Server
7 from opcua.server.history_sql import HistorySQLite
8 
9 
10 if __name__ == "__main__":
11 
12  # setup our server
13  server = Server()
14  server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/")
15 
16  # setup our own namespace, not really necessary but should as spec
17  uri = "http://examples.freeopcua.github.io"
18  idx = server.register_namespace(uri)
19 
20  # get Objects node, this is where we should put our custom stuff
21  objects = server.get_objects_node()
22 
23  # populating our address space
24  myobj = objects.add_object(idx, "MyObject")
25 
26  # Creating a custom event: Approach 1
27  # The custom event object automatically will have members from its parent (BaseEventType)
28  etype = server.create_custom_event_type(2, 'MyFirstEvent', ua.ObjectIds.BaseEventType,
29  [('MyNumericProperty', ua.VariantType.Float),
30  ('MyStringProperty', ua.VariantType.String)])
31  # create second event
32  etype2 = server.create_custom_event_type(2, 'MySecondEvent', ua.ObjectIds.BaseEventType,
33  [('MyOtherProperty', ua.VariantType.Float)])
34 
35  # get an event generator for the myobj node which generates custom events
36  myevgen = server.get_event_generator(etype, myobj)
37  myevgen.event.Severity = 500
38  myevgen.event.MyStringProperty = ua.Variant("hello world")
39  myevgen.event.MyNumericProperty = ua.Variant(-456)
40 
41  # get another event generator for the myobj node which generates different custom events
42  myevgen2 = server.get_event_generator(etype2, myobj)
43  myevgen2.event.Severity = 123
44  myevgen2.event.MyOtherProperty = ua.Variant(1.337)
45 
46  # get an event generator for the server node which generates BaseEventType
47  serverevgen = server.get_event_generator()
48  serverevgen.event.Severity = 111
49 
50  # Configure server to use sqlite as history database (default is a simple in memory dict)
51  server.iserver.history_manager.set_storage(HistorySQLite("my_event_history.sql"))
52 
53  # starting!
54  server.start()
55 
56  # enable history for myobj events; must be called after start since it uses subscription
57  server.iserver.enable_history_event(myobj, period=None)
58 
59  # enable history for server events; must be called after start since it uses subscription
60  server_node = server.get_node(ua.ObjectIds.Server)
61  server.historize_node_event(server_node, period=None)
62 
63  try:
64  count = 0
65  while True:
66  time.sleep(1)
67  count += 0.1
68 
69  # generate events for subscribed clients and history
70  myevgen.trigger(message="This is MyFirstEvent " + str(count))
71  myevgen2.trigger(message="This is MySecondEvent " + str(count))
72  serverevgen.trigger(message="Server Event Message")
73 
74  # read event history from sql
75  end_time = datetime.utcnow()
76  server_event_history = server_node.read_event_history(None, end_time, 0)
77 
78  finally:
79  # close connection, remove subscriptions, etc
80  server.stop()


ros_opcua_impl_python_opcua
Author(s): Denis Štogl , Daniel Draper
autogenerated on Tue Jan 19 2021 03:12:44