extended output and readme

This commit is contained in:
Wolfgang Hottgenroth
2022-02-22 18:07:21 +01:00
parent 9ce5395547
commit da6574632c
6 changed files with 110 additions and 29 deletions

View File

@ -1,21 +1,25 @@
import re
import json
from AbstractDataObject import AbstractDataObject
from datetime import datetime
class FlatDataObject(AbstractDataObject):
def __init__(self, serverName, nameSpaceIndex, variableName, value):
def __init__(self, serverName, nameSpaceIndex, variableName, dataValue):
super().__init__(serverName + '/' + str(nameSpaceIndex) + '/' + variableName)
self.serverName = serverName
self.nameSpaceIndex = nameSpaceIndex
self.variableName = variableName
self.value = value
self.dataValue = dataValue
def getPayload(self):
payload = {
"serverName": self.serverName,
"nameSpaceIndex": self.nameSpaceIndex,
"variableName": self.variableName,
"value": self.value
"server": self.serverName,
"ns": self.nameSpaceIndex,
"d": self.variableName,
"value": self.dataValue.Value.Value,
"status": self.dataValue.StatusCode.name,
"t1": str(self.dataValue.SourceTimestamp),
"t2": str(self.dataValue.ServerTimestamp),
"t3": str(datetime.utcnow())
}
return json.dumps(payload)

View File

@ -36,13 +36,14 @@ class OpcUaRequester(threading.Thread):
try:
logger.debug(f"Trying {self.name} {self.url} ns={nodeSpec['ns']};{nodeSpec['n']}")
node = client.get_node(f"ns={nodeSpec['ns']};{nodeSpec['n']}")
value = await node.read_value()
dataValue = await node.read_data_value()
displayName = nodeSpec['d'] if ('d' in nodeSpec) else (await node.read_display_name()).Text
logger.debug(f"Got: {displayName=} = {value=}")
logger.debug(f"Got: {displayName=} = {dataValue.Value.Value=}")
if self.flat:
self.queue.put(FlatDataObject(self.name, nodeSpec['ns'], displayName, value))
self.queue.put(FlatDataObject(self.name, nodeSpec['ns'], displayName, dataValue))
else:
dataObject.add(displayName, value)
dataObject.add(displayName, dataValue)
self.stats.incOpcUaRequests()
except ua.UaError as e:
self.stats.incOpcUaErrors()

View File

@ -1,15 +1,22 @@
import re
import json
from AbstractDataObject import AbstractDataObject
from datetime import datetime
class StructuredDataObject(AbstractDataObject):
def __init__(self, topicPart):
super().__init__(topicPart)
self.keyValuePairs = {}
def add(self, key, value):
self.keyValuePairs[key] = value
def add(self, key, dataValue):
self.keyValuePairs[key] = {
"value": dataValue.Value.Value,
"status": dataValue.StatusCode.name,
"t1": str(dataValue.SourceTimestamp),
"t2": str(dataValue.ServerTimestamp),
"t3": str(datetime.utcnow())
}
def getPayload(self):
return json.dumps(self.keyValuePairs)

View File

@ -11,7 +11,7 @@
"opcua": [
{
"enabled": "true",
"type": "structured",
"type": "flat",
"url": "opc.tcp://172.16.3.60:4840",
"name": "apl",
"period": 1.0,