Commit ea4034d1 authored by zerox1212's avatar zerox1212

Update history examples

Cleanup examples and add an example for historizing a data value
parent 459f8ed9
import sys
sys.path.insert(0, "..")
import time
import math
from opcua import ua, Server
from opcua.server.history_sql import HistorySQLite
if __name__ == "__main__":
# 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)
# 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 in 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.iserver.enable_history_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:
# close connection, remove subscriptions, etc
server.stop()
import sys import sys
sys.path.insert(0, "..") sys.path.insert(0, "..")
import time import time
import logging from datetime import datetime
from opcua import ua, Server from opcua import ua, Server
from opcua.server.history_sql import HistorySQLite from opcua.server.history_sql import HistorySQLite
...@@ -23,8 +22,6 @@ if __name__ == "__main__": ...@@ -23,8 +22,6 @@ if __name__ == "__main__":
# populating our address space # populating our address space
myobj = objects.add_object(idx, "MyObject") 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
# Creating a custom event: Approach 1 # Creating a custom event: Approach 1
# The custom event object automatically will have members from its parent (BaseEventType) # The custom event object automatically will have members from its parent (BaseEventType)
...@@ -35,15 +32,18 @@ if __name__ == "__main__": ...@@ -35,15 +32,18 @@ if __name__ == "__main__":
etype2 = server.create_custom_event_type(2, 'MySecondEvent', ua.ObjectIds.BaseEventType, etype2 = server.create_custom_event_type(2, 'MySecondEvent', ua.ObjectIds.BaseEventType,
[('MyOtherProperty', ua.VariantType.Float)]) [('MyOtherProperty', ua.VariantType.Float)])
# get an event generator for the myobj node which generates custom events
myevgen = server.get_event_generator(etype, myobj) myevgen = server.get_event_generator(etype, myobj)
myevgen.event.Severity = 500 myevgen.event.Severity = 500
myevgen.event.MyStringProperty = ua.Variant("hello world") myevgen.event.MyStringProperty = ua.Variant("hello world")
myevgen.event.MyNumericProperty = ua.Variant(-456) 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 = server.get_event_generator(etype2, myobj)
myevgen2.event.Severity = 123 myevgen2.event.Severity = 123
myevgen2.event.MyOtherProperty = ua.Variant(1.337) myevgen2.event.MyOtherProperty = ua.Variant(1.337)
# get an event generator for the server node which generates BaseEventType
serverevgen = server.get_event_generator() serverevgen = server.get_event_generator()
serverevgen.event.Severity = 111 serverevgen.event.Severity = 111
...@@ -53,10 +53,10 @@ if __name__ == "__main__": ...@@ -53,10 +53,10 @@ if __name__ == "__main__":
# starting! # starting!
server.start() server.start()
# enable history for myobj events # enable history for myobj events; must be called after start since it uses subscription
server.iserver.enable_history_event(myobj, period=None) server.iserver.enable_history_event(myobj, period=None)
# enable history for server events # enable history for server events; must be called after start since it uses subscription
server_node = server.get_node(ua.ObjectIds.Server) server_node = server.get_node(ua.ObjectIds.Server)
server.iserver.enable_history_event(server_node, period=None) server.iserver.enable_history_event(server_node, period=None)
...@@ -65,11 +65,15 @@ if __name__ == "__main__": ...@@ -65,11 +65,15 @@ if __name__ == "__main__":
while True: while True:
time.sleep(1) time.sleep(1)
count += 0.1 count += 0.1
# generate events for subscribed clients and history
myevgen.trigger(message="This is MyFirstEvent " + str(count)) myevgen.trigger(message="This is MyFirstEvent " + str(count))
myevgen2.trigger(message="This is MySecondEvent " + str(count)) myevgen2.trigger(message="This is MySecondEvent " + str(count))
serverevgen.trigger(message="Server Event Message") serverevgen.trigger(message="Server Event Message")
res = server_node.read_event_history(None, None, 0) # read event history from sql
end_time = datetime.utcnow()
server_event_history = server_node.read_event_history(None, end_time, 0)
finally: finally:
# close connection, remove subscriptions, etc # close connection, remove subscriptions, etc
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment