extended output and readme
This commit is contained in:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
    "opcua": [
 | 
			
		||||
        {
 | 
			
		||||
            "enabled": "true",
 | 
			
		||||
            "type": "structured",
 | 
			
		||||
            "type": "flat",
 | 
			
		||||
            "url": "opc.tcp://172.16.3.60:4840",
 | 
			
		||||
            "name": "apl",
 | 
			
		||||
            "period": 1.0,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user