# Example configuration file for VILLASnode # # This example includes all valid configuration options for the server. # Please note, that using all options at the same time does not really # makes sense. The purpose of this example is to serve as a reference. # # The syntax of this file is similar to JSON. # A detailed description of the format can be found here: # http://www.hyperrealm.com/libconfig/libconfig_manual.html#Configuration-Files # # Author: Steffen Vogel # Copyright: 2016, Institute for Automation of Complex Power Systems, EONERC ## # Some global settings are used by multiple configuration files # and therefore defined in separate files @include "global.conf" @include "plugins.conf" ############ Dictionary of nodes ############ nodes = { udp_node = { # The dictionary is indexed by the name of the node. type = "socket", # Type can be one of: socket, opal, file, gtfpga, ngsi # Start the server without arguments for a list of supported node types. ### The following settings are specific to the socket node-type!! ### layer = "udp", # Layer can be one of: # udp Send / receive UDP packets # ip Send / receive IP packets # eth Send / receive raw Ethernet frames (IEEE802.3) header = "gtnet-skt:fake", # Header can be one of: # default | villas Use VILLASnode protocol (see struct msg) (default) # none | gtnet-skt Use no header, send raw data as used by RTDS GTNETv2-SKT # fake | gtnet-skt:fake Same as 'none', but use first three data values as # sequence, seconds & nanoseconds timestamp # In this mode values are uint32_t not floats! endian = "network", # Endianess of header and data: # big | network Use big endianess. Also know as network byte order (default) # little Use little endianess. local = "127.0.0.1:12001", # This node only received messages on this IP:Port pair remote = "127.0.0.1:12000" # This node sents outgoing messages to this IP:Port pair vectorize = 30 # Receive and sent 30 samples per message (combining). }, ethernet_node = { type = "socket", # See above. ### The following settings are specific to the socket node-type!! ### layer = "eth", local = "*:12002", # It's possible to use an '*' for both the port and address # in UDP / TCP and IP modes. # This will choose a random port. # And listen on all available interfaces. remote = "12:34:56:78:90:12003", # Currently IPv6 is not supported! netem = { # Network emulation settings # Those settings can be specified for each node invidually! delay = 100000, # Additional latency in microseconds jitter = 30000, # Jitter in uS distribution = "normal", # Distribution of delay: uniform, normal, pareto, paretonormal loss = 10 # Packet loss in percent duplicate = 10, # Duplication in percent corrupt = 10 # Corruption in percent } }, opal_node = { # The server can be started as an Asynchronous process type = "opal", # from within an OPAL-RT model. ### The following settings are specific to the opal node-type!! ### send_id = 1, # It's possible to have multiple send / recv Icons per model recv_id = 1, # Specify the ID here. reply = true }, file_node = { type = "file", ### The following settings are specific to the file node-type!! ### in = { uri = "logs/input.log", # These options specify the path prefix where the the files are stored mode = "r", # The mode in which files should be opened (see open(2)) epoch_mode = "direct" # One of: direct (default), wait, relative, absolute epoch = 10 # The interpretation of this value depends on epoch_mode (default is 0). # Consult the documentation of a full explanation rate = 2.0 # A constant rate at which the lines of the input files should be read # A missing or zero value will use the timestamp in the first column # of the file to determine the pause between consecutive lines. splitted = false }, out = { uri = "logs/output_%F_%T.log" # The output path accepts all format tokens of (see strftime(3)) mode = "a+" # You might want to use "a+" to append to a file split = 100, # Split output file every 100 MB } }, gtfpga_node = { type = "gtfpga", ### The following settings are specific to the gtfpga node-type!! ### slot = "01:00.0", # The PCIe slot location (see first column in 'lspci' output) id = "1ab8:4005", # The PCIe vendor:device ID (see third column in 'lspci -n' output) rate = 1 }, ngsi_node = { type = "ngsi", ### The following settings are specific to the ngsi node-type!! ### endpoint = "http://46.101.131.212:1026",# The HTTP REST API endpoint of the FIRWARE context broker entity_id = "S3_ElectricalGrid", entity_type = "ElectricalGridMonitoring", timeout = 5, # Timeout of HTTP request in seconds (default is 1) verify_ssl = false, # Verification of SSL server certificates (default is true) mapping = [ # Format: "AttributeName(AttributeType)" "PTotalLosses(MW)", "QTotalLosses(Mvar)" ] } }; ############ List of paths ############ paths = ( { enabled = true, # Enable this path (default: true) reverse = true, # Setup a path in the reverse direction as well (default: false) in = "acs", # Name of the node we receive messages from (see node dictionary) out = "sintef", # Name of the node we send messages to. rate = 100, # Send message over this path with a fixed (constant) rate (default: 0). # Setting this value to 0 will disable this feature. hook = "print", # Register custom hook funktion (see src/hooks.c) poolsize = 30 # The amount of samples which are kept in a circular buffer. # This number must be larger than the 'vectorize' settings of all # associated input and output nodes! }, { enabled = false, reverse = false, in = "opal_node", # There's only a single source node allowed! out = [ "udp_node", "tcp_node" ], # Multiple destination nodes are supported too. hook = [ "print", "decimate:10" ] # Same is true for hooks. # Multipe hook functions are executed in the order they are specified here. }, { in = "socket_node", out = "file_node", # This path includes all available example hooks. hook = [ "ts", # Replace the timestamp of messages with the time of reception "skip_unchanged:0.1", # Skip messages whose values have not changed more than 0.1 from the previous message. "skip_first:10", # Skip all messages which have been received in the first 10 seconds "print", # Print all messages to stdout "decimate:2", # Only forward every 2nd message "convert:fixed", # Convert all values to fixed precission. Use 'float' to convert to floating point. "fir:0" # Apply finite impulse response filter to first value. # Coefficients are hard-coded in 'include/config.h'. ] } );