diff --git a/newmodeljsonparse.py b/newmodeljsonparse.py index 20cb058cd8eb014792f6a7291490aa2a43b57c1b..05476f773b1212cab327e7eec3e0ed8e406a066b 100644 --- a/newmodeljsonparse.py +++ b/newmodeljsonparse.py @@ -264,6 +264,17 @@ def getEvents(list1, component, jsoncomponents): return list1 +def getStreams(list1, component, jsoncomponents): + for stream in component["streams"]: + list1.append(stream) + if iskeythere(list(component.keys()), "baseComponent"): + for search in jsoncomponents: + if search["uuid"] == component["baseComponent"]: + return getEvents(list1, search, jsoncomponents) + else: + return list1 + + def buildComponents(interfacesreturn, variabledict, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters, jsonfunctions, objcomponentsclone): for obj in jsoninterfaces: rootobj = {} @@ -294,26 +305,29 @@ def buildComponents(interfacesreturn, variabledict, jsoninterfaces, jsoncomponen return interfacesreturn, variabledict -def instantiateComponents(typesdict, interfaces, jsoncomponents, headnode, instantiatedict, eventsdict): +def instantiateComponents(typesdict, interfaces, jsoncomponents, headnode, instantiatedict, eventsdict, streamsdict): count = 0 countcomponent = 0 for interface in interfaces: root = interface events = getEvents([], root, jsoncomponents) + streams = getStreams([], root, jsoncomponents) components = getInterfaceparam([], root, "components", jsoncomponents, jsoncomponents) if interface["name"] in list(instantiatedict.keys()): count += 1 instantiatedict[str(interface["uuid"])] = wf.writeobjects(typesdict[str(interface["name"])], interface["name"], instantiatedict[str(headnode["uuid"])], count) eventsdict[str(interface["uuid"])] = events + streamsdict[str(interface["uuid"])] = streams if len(components) > 0: - instantiateComponents(typesdict, components, jsoncomponents, interface, instantiatedict, eventsdict) + instantiateComponents(typesdict, components, jsoncomponents, interface, instantiatedict, eventsdict, streamsdict) - return instantiatedict, eventsdict + return instantiatedict, eventsdict, streamsdict def instantiate(typesdict, interfaces, jsoncomponents): instantiatedict = {} eventsdict = {} + streamsdict ={} for interface in interfaces: root = {} count = 0 @@ -321,10 +335,12 @@ def instantiate(typesdict, interfaces, jsoncomponents): if interface["rootComponent"] == component["uuid"]: root = component events = getEvents([], root, jsoncomponents) + streams = getStreams([], root, jsoncomponents) components = getInterfaceparam([], root, "components", jsoncomponents, jsoncomponents) instantiatedict[str(interface["uuid"])] = wf.writeinterface(typesdict[str(interface["name"])], interface["name"], count) eventsdict[str(interface["uuid"])] = events - return instantiateComponents(typesdict, components, jsoncomponents, interface, instantiatedict, eventsdict) + streamsdict[str(interface["uuid"])] = streams + return instantiateComponents(typesdict, components, jsoncomponents, interface, instantiatedict, eventsdict, streamsdict) def main(): @@ -372,17 +388,30 @@ def main(): returnval = instantiate(typesdict, jsoninterfaces, jsoncomponents) instantiatedict = returnval[0] eventsdict = returnval[1] + streamsdict = returnval[2] + print("Streamsdict:") + print(streamsdict) print("Instantiatedict: ") print(instantiatedict) print("Eventsdict: ") print(eventsdict) generatordict = {} + streamgendict = {} for key in list(eventsdict.keys()): - eventlist = wf.writeevents(eventsdict[key], instantiatedict[key], {}, {}) + eventlist = wf.writeevents(eventsdict[key], instantiatedict[key], {}) generatordict.update(eventlist) + + for key in list(streamsdict.keys()): + streamlist = wf.writestreams(streamsdict[key], instantiatedict[key], {}) + streamgendict.update(streamlist) + wf.writendpt1() + for key in list(eventsdict.keys()): wf.triggerevents(generatordict, eventsdict[key], instantiatedict[key], variabledict[key], jsonmeasurements, jsonparameters) + + for key in list(streamsdict.keys()): + wf.triggerstreams(streamgendict, streamsdict[key], instantiatedict[key], variabledict[key], jsonmeasurements, jsonparameters) wf.writendpt2() diff --git a/writefile.py b/writefile.py index 033ae3fa3c63fb7e6d463d7b5919f9df516ff4f0..b4e62109b331e4e3dc426bb1ae753468b7785fd1 100644 --- a/writefile.py +++ b/writefile.py @@ -80,7 +80,7 @@ _logger = logging.getLogger('asyncua') #creating dataypes for parameters and measurements measurementtype = await server.nodes.base_data_type.add_data_type(idx, "Measurement") parametertype = await server.nodes.base_data_type.add_data_type(idx, "Parameter") -""") +""") def openobject(objname, description): server = open("opcua-server.py", "a") writeindent = " " @@ -201,7 +201,7 @@ def writeinterface(objtype, objname, count): return objtypename -def writeevents(events, component, eventlist, eventgenlist): +def writeevents(events, component, eventlist): server = open("opcua-server.py", "a") writeindent = " " #eventelements = [] @@ -210,12 +210,38 @@ def writeevents(events, component, eventlist, eventgenlist): eventname = (event["element"].lower()).replace(" ", "") + component + str(event["severity"]) eventgenname = eventname + "generator" eventlist[eventname] = eventgenname + severity = 0 + if event["severity"] == "debug": + severity = 200 + elif event["severity"] == "info": + severity = 400 + elif event["severity"] == "warning": + severity = 600 + elif event["severity"] == "error": + severity = 800 + elif event["severity"] == "critical": + severity = 1000 #print(eventname) server.write(writeindent + eventname + " = await server.create_custom_event_type(idx, \"" + str(event["element"]) + " " + str(event["severity"]) + "\", ua.ObjectIds.SystemEventType)\n") server.write(writeindent + str(eventlist[eventname]) + " = await server.get_event_generator(" + eventname + ", " + component + ")\n") + server.write(writeindent + str(eventlist[eventname]) + ".event.Severity = " + str(severity) + "\n") return eventlist +def writestreams(streams, component, streamslist): + server = open("opcua-server.py", "a") + writeindent = " " + # eventelements = [] + for stream in streams: + # eventelements.append(event["element"]) + streamname = (stream["measurement"].lower()).replace(" ", "") + component + streamgenname = streamname + "generator" + streamslist[streamname] = streamgenname + server.write(writeindent + streamname + " = await server.create_custom_event_type(idx, \"" + str(stream["measurement"]) + "\", ua.ObjectIds.SystemEventType)\n") + server.write(writeindent + str(streamslist[streamname]) + " = await server.get_event_generator(" + streamname + ", " + component + ")\n") + return streamslist + + def writendpt1(): server = open("opcua-server.py", "a") server.write(""" @@ -266,6 +292,47 @@ def triggerevents(generatordict, eventslist, component, variablelist, jsonmeasur +def triggerstreams(generatordict, streamslist, component, variablelist, jsonmeasurements, jsonparameters): + server = open("opcua-server.py", "a") + indent = 3 + for stream in streamslist: + writeindent = "" + streamname = "" + valuename = "stream" + ((stream["measurement"]).lower()).replace(" ", "") + for i in range(indent): + writeindent += " " + for variable in variablelist: + if variable["name"] == stream["measurement"]: + for measurement in jsonmeasurements: + if measurement["uuid"] == variable["value"]: + streamname = measurement["name"] + for parameter in jsonparameters: + if parameter["uuid"] == variable["value"]: + streamname = parameter["name"] + server.write(writeindent + valuename + " = await " + component + ".get_child([\"2:" + streamname + "\"])\n") + generatorname = generatordict[(stream["measurement"].lower()).replace(" ", "") + component] + if stream["streamType"] == "update": + server.write(writeindent + "save" + valuename + " = await " + valuename + ".get_value()\n") + server.write(writeindent + "if (await " + valuename + ".get_value()) != " + "save" + valuename + ":\n") + writeindent += " " + server.write(writeindent + "await " + generatorname + ".trigger()\n") + server.write(writeindent + "save" + valuename + " = await " + valuename + ".get_value()\n") + writeindent = "" + for i in range(indent): + writeindent += " " + + if stream["streamType"] == "fixed": + server.write(writeindent + "time = count%" + str(stream["intervalValue"]) + "\n") + server.write(writeindent + "if time == 0:\n") + server.write(writeindent + "await " + generatorname + ".trigger()\n") + writeindent = "" + for i in range(indent): + writeindent += " " + + + + + def writendpt2(): server = open("opcua-server.py", "a") server.write("""