The Frankenstein Automation Gateway now also supports to write OPC UA values to the graph database Neo4j.
At startup it can also write the OPC UA node structure into the graph database, so that the basic model of the OPC UA server is mirrored to the graph database. For that you have to add the “Schemas” section in the config file (see an example configuration file below). There you can choose which RootNodes (and all sub nodes) of your OPC UA systems should be mirrored to the graph database.
Once you have the (simplified) OPC UA information model in the graph database, you can add on top of that your own knowledge graph data and create relations to OPC UA nodes of your machines to enrich the semantic data of the OPC UA model.
With that model you can leverage the power of your Knowledge Graphs in combination with live data from your machines and use Cypher queries to get the knowledge out of the graph.
Here we see an example of the OPC UA server from the SCADA System WinCC Open Architecture. The first level of nodes below the “Objects” node represent Datapoint-Types (e.g. PUMP1) followed by the Datapoint-Instances (e.g.: PumpNr) and below that we see the datapoint elements (e.g. value => speed). An datapoint element is an OPC UA variable where we also see the current value from the SCADA system.
Example Gateway configuration file: Database: Logger: - Id: neo4j Enabled: true Type: Neo4j Url: bolt://nuc1.rocworks.local:7687 Username: "neo4j" Password: "manager" Schemas: - System: opc1 # Replicate node structure to the graph database RootNodes: - "ns=2;s=Demo" # This node and everything below this node - System: winccoa1 # Replicate the nodes starting from "i=85" (Objects) node WriteParameters: BlockSize: 1000 Logging: - Topic: opc/opc1/path/Objects/Demo/SimulationMass/SimulationMass_Float/+ - Topic: opc/opc1/path/Objects/Demo/SimulationMass/SimulationMass_Double/+ - Topic: opc/opc1/path/Objects/Demo/SimulationMass/SimulationMass_Int16/+ - Topic: opc/winccoa1/path/Objects/PUMP1/# - Topic: opc/winccoa1/path/Objects/ExampleDP_Int/#