diff --git a/etc/WSCC_9bus_MV.conf b/etc/WSCC_9bus_MV.conf index c666a6925..755d44462 100644 --- a/etc/WSCC_9bus_MV.conf +++ b/etc/WSCC_9bus_MV.conf @@ -53,9 +53,6 @@ paths = ( offset = 0, signals = ["f0", "f1", "f2", "f3"] } -# { -# type = "print" -# } ) } ) diff --git a/etc/eric-lab.conf b/etc/eric-lab.conf index 6c8c31a21..9cf9954ca 100644 --- a/etc/eric-lab.conf +++ b/etc/eric-lab.conf @@ -4,24 +4,21 @@ # 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 # SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University # SPDX-License-Identifier: Apache-2.0 -name = "villas-acs" # The name of this VILLASnode. Might by used by node-types - # to identify themselves (default is the hostname). - +# The name of this VILLASnode. Might by used by node-types +# to identify themselves (default is the hostname) +name = "villas-acs" logging = { level = "debug" } http = { - port = 80 # Port for HTTP connections + # Port for HTTP connections + port = 80 } ## Dictionary of nodes diff --git a/etc/examples/example.conf b/etc/examples/example.conf index 945242b99..ca6075ee4 100644 --- a/etc/examples/example.conf +++ b/etc/examples/example.conf @@ -4,10 +4,6 @@ # 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 # SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University # SPDX-License-Identifier: Apache-2.0 @@ -19,5 +15,5 @@ # An example node. Define multiple nodes in the "nodes" dictionary @include "nodes/socket.conf" -# A list of example paths. Define multiple paths by appending them to the "paths" list. +# A list of example paths. Define multiple paths by appending them to the "paths" list @include "paths.conf" diff --git a/etc/examples/global.conf b/etc/examples/global.conf index 0fbbb653f..6e3403d71 100644 --- a/etc/examples/global.conf +++ b/etc/examples/global.conf @@ -1,8 +1,4 @@ -# Global configuration file for VILLASnode. -# -# 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 +# Global configuration file for VILLASnode # # Author: Steffen Vogel # SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University @@ -10,32 +6,39 @@ ## Global Options -affinity = 0x01 # Mask of cores the server should run on - # This also maps the NIC interrupts to those cores! +# Mask of cores the server should run on +# This also maps the NIC interrupts to those cores! +affinity = 0x01 -#priority = 50 # Priority for the server tasks. - # Usually the server is using a real-time FIFO - # scheduling algorithm +# Priority for the server tasks +# Usually the server is using a real-time FIFO +# scheduling algorithm - # See: https://github.com/docker/docker/issues/22380 - # on why we cant use real-time scheduling in Docker +# See: https://github.com/docker/docker/issues/22380 +# on why we cant use real-time scheduling in Docker +#priority = 50 -name = "villas-acs" # The name of this VILLASnode. Might by used by node-types - # to identify themselves (default is the hostname). +# The name of this VILLASnode. Might by used by node-types +# to identify themselves (default is the hostname) +name = "villas-acs" logging = { - level = "debug" # The level of verbosity for debug messages - # One of: "warn", "info", "error", "off", "info" + # The level of verbosity for debug messages + # One of: "warn", "info", "error", "off", "info" + level = "debug" + # File for logs + file = "/tmp/villas-node.log" - file = "/tmp/villas-node.log" # File for logs - - syslog = true # Log to syslogd + # Log to syslogd + syslog = true } http = { - enabled = true, # Do not listen on port if true + # Do not listen on port if true + enabled = true, - port = 80 # Port for HTTP connections + # Port for HTTP connections + port = 80 } diff --git a/etc/examples/hooks/digest.conf b/etc/examples/hooks/digest.conf index 75f7dcf5e..5789f25ca 100644 --- a/etc/examples/hooks/digest.conf +++ b/etc/examples/hooks/digest.conf @@ -9,7 +9,7 @@ paths = ( out = "file_node" hooks = ( - # Use a frame hook to generate NEW_FRAME annotations. + # Use a frame hook to generate NEW_FRAME annotations "frame", { type = "digest" diff --git a/etc/examples/hooks/dp.conf b/etc/examples/hooks/dp.conf index a59f54f8f..a9464c14e 100644 --- a/etc/examples/hooks/dp.conf +++ b/etc/examples/hooks/dp.conf @@ -13,8 +13,8 @@ paths = ( type = "dp" signal = "sine" - f0 = 50 # Hz - dt = 0.1 # seconds + f0 = 50 # In Hz + dt = 0.1 # In seconds # Alternative to dt # rate = 10 Hz diff --git a/etc/examples/hooks/gate.conf b/etc/examples/hooks/gate.conf index 36e9df7bb..911eb60ce 100644 --- a/etc/examples/hooks/gate.conf +++ b/etc/examples/hooks/gate.conf @@ -17,8 +17,8 @@ paths = ( threshold = 0.5 # Once triggered, keep active for: - duration = 5 # in seconds - samples = 100 # in number of samples + duration = 5 # In seconds + samples = 100 # In number of samples } ) } diff --git a/etc/examples/hooks/ip-dft-pmu.conf b/etc/examples/hooks/ip-dft-pmu.conf index 72dc0523a..de9a9c1a2 100644 --- a/etc/examples/hooks/ip-dft-pmu.conf +++ b/etc/examples/hooks/ip-dft-pmu.conf @@ -16,14 +16,23 @@ paths = ( "sine" ) - sample_rate = 1000, # sample rate of the input signal - dft_rate = 10, # number of phasors calculated per second + # Sample rate of the input signal + sample_rate = 1000, - estimation_range = 10, # the range around the nominal_freq in with the estimation is done - nominal_freq = 50, # the nominal grid frequnecy - number_plc = 10., # the number of power line cylces stored in the buffer + # Number of phasors calculated per second + dft_rate = 10, - angle_unit = "rad" # one of: rad, degree + # Yhe range around the nominal_freq in with the estimation is done + estimation_range = 10, + + # Yhe nominal grid frequnecy + nominal_freq = 50, + + # Yhe number of power line cylces stored in the buffer + number_plc = 10., + + # One of: rad, degree + angle_unit = "rad" } ) } diff --git a/etc/examples/hooks/lua.conf b/etc/examples/hooks/lua.conf index ca2adf33f..617192244 100644 --- a/etc/examples/hooks/lua.conf +++ b/etc/examples/hooks/lua.conf @@ -15,12 +15,12 @@ paths = ( type = "lua" # Enables or disables the use of signal names in the process() function - # of the Lua script. If disabled, numeric indices will be used. + # of the Lua script. If disabled, numeric indices will be used use_names = true # The Lua hook will pass the complete hook configuration to the prepare() # function. So you can add arbitrary settings here which are then - # consumed by the Lua script. + # consumed by the Lua script some_setting = "Hello World" this = { is = { @@ -39,14 +39,14 @@ paths = ( # # stop() Called when the node/path is stopped # - # restart() Called when the node/path is restarted. - # Falls back to stop() + start() if absent. + # restart() Called when the node/path is restarted + # Falls back to stop() + start() if absent # - # process(smp) Called for each sample which is being processed. + # process(smp) Called for each sample which is being processed # The sample is passed as a Lua table with the following # fields: - # - sequence The sequence number of the sample. - # - flags The flags field of the sample. + # - sequence The sequence number of the sample + # - flags The flags field of the sample # - ts_origin The origin timestamp as a Lua table containing # the following keys: # 0: seconds @@ -57,14 +57,14 @@ paths = ( # 1: nanoseconds # - data The sample data as a Lua table container either # numeric indices or the signal names depending - # on the 'use_names' option of the hook. + # on the 'use_names' option of the hook # - # periodic() Called periodically with the rate of the global 'stats' option. + # periodic() Called periodically with the rate of the global 'stats' option script = "../lua/hooks/test.lua" # Expression mode: We provide a mangled signal list including Lua expressions signals = ( - { name = "sum", type="float", unit = "V", expression = "smp.data.square * 10" }, + { name = "sum", type="float", unit = "V", expression = "smp.data.square * 10" }, # You can access any global variable set by the script { name = "sequence", type="float", unit = "V", expression = "global_var" }, @@ -76,7 +76,7 @@ paths = ( { name = "sum", type="float", unit = "V", expression = "math.sin(2 * math.pi * f * t)" }, { name = "random", expression = "smp.data.random" } - ) + ) }, { type = "print" diff --git a/etc/examples/hooks/pmu.conf b/etc/examples/hooks/pmu.conf index b915043ab..238bd002c 100644 --- a/etc/examples/hooks/pmu.conf +++ b/etc/examples/hooks/pmu.conf @@ -16,13 +16,20 @@ paths = ( "sine" ) - sample_rate = 1000, # sample rate of the input signal - dft_rate = 10, # number of phasors calculated per second + # Sample rate of the input signal + sample_rate = 1000, - nominal_freq = 50, # the nominal grid frequnecy - number_plc = 10., # the number of power line cylces stored in the buffer + # Number of phasors calculated per second + dft_rate = 10, - angle_unit = "rad" # one of: rad, degree + # The nominal grid frequnecy + nominal_freq = 50, + + # The number of power line cylces stored in the buffer + number_plc = 10., + + # One of: rad, degree + angle_unit = "rad" } ) } diff --git a/etc/examples/hooks/pmu_dft.conf b/etc/examples/hooks/pmu_dft.conf index 2b6f21b5d..0f1c669a5 100644 --- a/etc/examples/hooks/pmu_dft.conf +++ b/etc/examples/hooks/pmu_dft.conf @@ -16,21 +16,38 @@ paths = ( "sine" ) - sample_rate = 1000, # sample rate of the input signal - dft_rate = 10, # number of phasors calculated per second + # Sample rate of the input signal + sample_rate = 1000, - start_frequency = 49.7, # lowest frequency bin - end_frequency = 50.3, # highest frequency bin - frequency_resolution = 0.1, # frequency bin resolution + # Number of phasors calculated per second + dft_rate = 10, - window_size_factor = 1, # a factor with which the window will be increased - window_type = "hamming", # one of: flattop, hamming, hann - padding_type = "zero", # one of: signal_repeat, zero - frequency_estimate_type = "quadratic", # one of: quadratic + # Lowest frequency bin + start_frequency = 49.7, - pps_index = 0, # signal index of the PPS signal + # Highest frequency bin + end_frequency = 50.3, - angle_unit = "rad" # one of: rad, degree + # Frequency bin resolution + frequency_resolution = 0.1, + + # A factor with which the window will be increased + window_size_factor = 1, + + # One of: flattop, hamming, hann + window_type = "hamming", + + # One of: signal_repeat, zero + padding_type = "zero", + + # One of: quadratic + frequency_estimate_type = "quadratic", + + # Signal index of the PPS signal + pps_index = 0, + + # One of: rad, degree + angle_unit = "rad" } ) } diff --git a/etc/examples/hooks/print.conf b/etc/examples/hooks/print.conf index 9cb197349..466b8adc3 100644 --- a/etc/examples/hooks/print.conf +++ b/etc/examples/hooks/print.conf @@ -14,7 +14,7 @@ paths = ( output = "print_output_file.log" format = "villas.human" - # prefix = "[file_node] " # prefix and output are exclusive settings! + # prefix = "[file_node] " # Prefix and output are exclusive settings! } ) } diff --git a/etc/examples/nodes/api.conf b/etc/examples/nodes/api.conf index 35ed51237..7f4dccf99 100644 --- a/etc/examples/nodes/api.conf +++ b/etc/examples/nodes/api.conf @@ -8,16 +8,25 @@ nodes = { in = { signals = ( { - name = "" # Same as 'id' in uAPI context - description = "Volts on Bus A" # A human readable description of the channel - type = "float" # Same as 'datatype' in uAPI context + # Same as 'id' in uAPI context + name = "" + + # A human readable description of the channel + description = "Volts on Bus A" + + # Same as 'datatype' in uAPI context + type = "float" unit = "V" - payload = "events" # or 'samples' - rate = 100.0 # An expected refresh/sample rate of the signal + payload = "events" # Or 'samples' + + # An expected refresh/sample rate of the signal + rate = 100.0 + range = { min = 20.0 max = 100.0 } + readable = true writable = false } diff --git a/etc/examples/nodes/comedi.conf b/etc/examples/nodes/comedi.conf index d84679849..d77bb30e8 100644 --- a/etc/examples/nodes/comedi.conf +++ b/etc/examples/nodes/comedi.conf @@ -11,7 +11,7 @@ nodes = { rate = 1000, signals = ( - # note: order in this array defines order in villas sample + # Note: order in this array defines order in villas sample { channel = 0, range = 0, aref = 0, name = "temperature_int" }, { channel = 1, range = 0, aref = 0, name = "loopback_ao0" }, { channel = 2, range = 0, aref = 0, name = "loopback_ao1" }, @@ -23,11 +23,11 @@ nodes = { # Note: buffer size and rate shouldn't be changed at the moment # output sample rate rate = 40000, - # comedi write buffer in kilobytes + # Comedi write buffer in kilobytes bufsize = 24, signals = ( - # note: order in this array corresponds to order in villas sample + # Note: order in this array corresponds to order in villas sample { name = "ao0", channel = 0, range = 0, aref = 0 }, { name = "ao1", channel = 1, range = 0, aref = 0 }, { name = "ao2", channel = 2, range = 0, aref = 0 }, @@ -69,10 +69,10 @@ nodes = { paths = ( # 2-ch sine # { - # in = [ "sine1.data[0]", "sine2.data[0]" ] - # out = "pcie6259" - # rate = 10000 - # mask = () + # in = [ "sine1.data[0]", "sine2.data[0]" ] + # out = "pcie6259" + # rate = 10000 + # mask = () # } # Remote data via UDP diff --git a/etc/examples/nodes/ethercat.conf b/etc/examples/nodes/ethercat.conf index acca7e394..4081a5701 100644 --- a/etc/examples/nodes/ethercat.conf +++ b/etc/examples/nodes/ethercat.conf @@ -4,7 +4,7 @@ ethercat = { coupler = { position = 0 - vendor_id = 0x00000002 # Backhoff + vendor_id = 0x00000002 # Beckhoff product_code = 0x044c2c52 # EK1100 } diff --git a/etc/examples/nodes/file.conf b/etc/examples/nodes/file.conf index d64c6b880..609846ffd 100644 --- a/etc/examples/nodes/file.conf +++ b/etc/examples/nodes/file.conf @@ -3,31 +3,40 @@ nodes = { file_node = { - type = "file" + type = "file" - ### The following settings are specific to the file node-type!! ### - - uri = "logs/input.log", # These options specify the URI where the the files are stored - #uri = "logs/output_%F_%T.log" # The URI accepts all format tokens of (see strftime(3)) + # These options specify the URI where the the files are stored + # The URI accepts all format tokens of (see strftime(3)) + uri = "logs/input.log", + # uri = "logs/output_%F_%T.log" format = "csv" in = { - 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 + # One of: direct (default), wait, relative, absolute + epoch_mode = "direct" - 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. - eof = "rewind" # Rewind the file and start from the beginning. + # The interpretation of this value depends on epoch_mode (default is 0) + # Consult the documentation of a full explanation + epoch = 10 - buffer_size = 0 # Creates a stream buffer if value is positive + # 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 + rate = 2.0 + + # Rewind the file and start from the beginning + eof = "rewind" + + # Creates a stream buffer if value is positive + buffer_size = 0 }, out = { - flush = false # Flush or upload contents of the file every time new samples are sent. + # Flush or upload contents of the file every time new samples are sent + flush = false - buffer_size = 0 # Creates a stream buffer if value is positive + # Creates a stream buffer if value is positive + buffer_size = 0 } } } diff --git a/etc/examples/nodes/iec60870-5-104-sequence.conf b/etc/examples/nodes/iec60870-5-104-sequence.conf index b5e3ae12a..673c91640 100644 --- a/etc/examples/nodes/iec60870-5-104-sequence.conf +++ b/etc/examples/nodes/iec60870-5-104-sequence.conf @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 nodes = { - iec104_node_seq = { + iec104_node_seq = { type = "iec60870-5-104" address = "0.0.0.0" port = 2404 @@ -18,7 +18,7 @@ nodes = { # Interpret the duplicate IOAs as a sequence by incrementing the # IOA with each duplication. This only applies to two adjacent # signals with the same IOA. Specifying an IOA twice with other - # IOAs inbetween is an error. + # IOAs inbetween is an error duplicate_ioa_is_sequence = true } } diff --git a/etc/examples/nodes/iec60870-5-104.conf b/etc/examples/nodes/iec60870-5-104.conf index 66e4943c5..db36d1beb 100644 --- a/etc/examples/nodes/iec60870-5-104.conf +++ b/etc/examples/nodes/iec60870-5-104.conf @@ -3,7 +3,7 @@ nodes = { - iec104_node = { + iec104_node = { type = "iec60870-5-104" # Network address and port of the server @@ -22,14 +22,16 @@ nodes = { # Map signals to information object addresses and ASDU data types # one ASDU per specified asdu_type_id/asdu_type+with_timestamp is # send for each sample. Signals of the same type are collected - # in a single ASDU. + # in a single ASDU signals = ( { # The ASDU data type asdu_type = "normalized-float" - # add 56 bit unix timestamp to ASDU + + # Add 56 bit unix timestamp to ASDU with_timestamp = false - # the information object address of this signal + + # The information object address of this signal ioa = 4202832 }, { diff --git a/etc/examples/nodes/loopback.conf b/etc/examples/nodes/loopback.conf index 1c78af3fa..ab1ff9ebf 100644 --- a/etc/examples/nodes/loopback.conf +++ b/etc/examples/nodes/loopback.conf @@ -3,9 +3,14 @@ nodes = { loopback_node = { - type = "loopback", # A loopback node will receive exactly the same data which has been sent to it. - # The internal implementation is based on queue. - queuelen = 1024, # The queue length of the internal queue which buffers the samples. - mode = "polling" # Use busy polling for synchronization of the read and write side of the queue + # A loopback node will receive exactly the same data which has been sent to it + type = "loopback", + + # The internal implementation is based on queue + # The queue length of the internal queue which buffers the samples + queuelen = 1024, + + # Use busy polling for synchronization of the read and write side of the queue + mode = "polling" } } diff --git a/etc/examples/nodes/modbus.conf b/etc/examples/nodes/modbus.conf index 564b5fdb6..3c7fe9d59 100644 --- a/etc/examples/nodes/modbus.conf +++ b/etc/examples/nodes/modbus.conf @@ -8,20 +8,20 @@ nodes = { # Required transport type. Can be either "rtu" or "tcp" transport = "tcp" - # Optional timeout in seconds when waiting for responses from a modbus server. - # Default is 1.0. + # Optional timeout in seconds when waiting for responses from a modbus server + # Default is 1.0 response_timeout = 1.0 # - # Settings for transport = "tcp". + # Settings for transport = "tcp" # - # Required remote IP address. + # Required remote IP address remote = "127.0.0.1" - # Optional remote port. - # Default is 502. + # Optional remote port + # Default is 502 port = 502 @@ -29,10 +29,10 @@ nodes = { # Settings for transport = "rtu" # - # Required device file. + # Required device file device = "/dev/ttyS0" - # Required baudrate. + # Required baudrate baudrate = 9600 # Required parity. One of "none", "even" and "odd" @@ -44,102 +44,102 @@ nodes = { # Required stop bits. One of 1, 2 stop_bits = 1 - # The modbus unit ID. - # Required for transport = "rtu". - # Optional for transport = "tcp". + # The modbus unit ID + # Required for transport = "rtu" + # Optional for transport = "tcp" unit = 1 - # Optional polling rate for the modbus remote reads. - # Defaults to 10. + # Optional polling rate for the modbus remote reads + # Defaults to 10 rate = 10 in = { signals = ( - # A 32-bit IEEE 754 floating point value. - # This spans 2 registers. + # A 32-bit IEEE 754 floating point value + # This spans 2 registers { - # Required type = "float". + # Required type = "float" type = "float" - # Required address of the lowest register. + # Required address of the lowest register address = 0x50 - # Optional endianess for joining the 2 16-bit registers into a 32-bit value. - # Defaults to "big". + # Optional endianess for joining the 2 16-bit registers into a 32-bit value + # Defaults to "big" word_endianess = "big" - # Optional endianess for the 2 bytes within a register. - # Defaults to "big". + # Optional endianess for the 2 bytes within a register + # Defaults to "big" byte_endianess = "big" - # Optional scale that should be applied to the integer value. - # Defaults to 1. + # Optional scale that should be applied to the integer value + # Defaults to 1 scale = 10 - # Optional offset that should be applied to the integer value after scaling. - # Defaults to 0. + # Optional offset that should be applied to the integer value after scaling + # Defaults to 0 offset = 2 }, - # A single bit within a register as a boolean value. + # A single bit within a register as a boolean value { - # Required type = "boolean". + # Required type = "boolean" type = "boolean" - # Required address of the register. + # Required address of the register address = 0x54 - # Required bit within the register. - # Starting at 0. + # Required bit within the register + # Starting at 0 bit = 0 }, - # An integer value. - # This may span multiple registers. + # An integer value + # This may span multiple registers { - # Required type = "integer". + # Required type = "integer" type = "integer" - # Required address of the lowest register. + # Required address of the lowest register address = 0x52 - # Optional number of registers that should be joined to form the value. - # Defaults to 1. + # Optional number of registers that should be joined to form the value + # Defaults to 1 integer_registers = 1 - # Optional endianess for joining the 16-bit registers into a 32-bit value. - # Defaults to "big". + # Optional endianess for joining the 16-bit registers into a 32-bit value + # Defaults to "big" word_endianess = "big" - # Optional endianess for the 2 bytes within a register. - # Defaults to "big". + # Optional endianess for the 2 bytes within a register + # Defaults to "big" byte_endianess = "big" }, - # An float value created by reading an integer and applying an optional offset and scale. - # This may span multiple registers. + # An float value created by reading an integer and applying an optional offset and scale + # This may span multiple registers { - # Required type = "float". + # Required type = "float" type = "float" - # Required address of the lowest register. + # Required address of the lowest register address = 0x52 - # Required number of registers that should be joined to form the value. - # A "float" value without the "integer_registers" settings is considered an IEEE 754 float, spanning 2 registers. + # Required number of registers that should be joined to form the value + # A "float" value without the "integer_registers" settings is considered an IEEE 754 float, spanning 2 registers integer_registers = 1 - # Optional endianess for joining the 16-bit registers into a 32-bit value. - # Defaults to "big". + # Optional endianess for joining the 16-bit registers into a 32-bit value + # Defaults to "big" word_endianess = "big" - # Optional endianess for the 2 bytes within a register. - # Defaults to "big". + # Optional endianess for the 2 bytes within a register + # Defaults to "big" byte_endianess = "big" - # Optional scale that should be applied to the integer value. - # Defaults to 1. + # Optional scale that should be applied to the integer value + # Defaults to 1 scale = 10 - # Optional offset that should be applied to the integer value after scaling. - # Defaults to 0. + # Optional offset that should be applied to the integer value after scaling + # Defaults to 0 offset = 2 } ) @@ -147,18 +147,18 @@ nodes = { out = { signals = ( - # All register mappings described for "in" except for "boolean" are supported in the "out" signals. + # All register mappings described for "in" except for "boolean" are supported in the "out" signals { type = "float" address = 0x50 - # Scale and offset a applied as attributes of the register that is written to. + # Scale and offset a applied as attributes of the register that is written to # This means the value written to "register" for a "signal" with "offset" and "scale" will be: # # register = (signal - offset) / scale # - # It is fairly common to specify a scale and offset for modbus registers in a device manual. - # You should be able to plug those values into this configuration without conversion. + # It is fairly common to specify a scale and offset for modbus registers in a device manual + # You should be able to plug those values into this configuration without conversion scale = 10 offset = 2 }, diff --git a/etc/examples/nodes/mqtt.conf b/etc/examples/nodes/mqtt.conf index 53728fcb1..9fa35b20b 100644 --- a/etc/examples/nodes/mqtt.conf +++ b/etc/examples/nodes/mqtt.conf @@ -12,7 +12,8 @@ nodes = { host = "localhost", port = 1883, - keepalive = 5, # Send ping every 5 seconds to keep connection alive + # Send ping every 5 seconds to keep connection alive + keepalive = 5, retain = false, qos = 0, diff --git a/etc/examples/nodes/nanomsg.conf b/etc/examples/nodes/nanomsg.conf index 786ec7c73..40e751d6e 100644 --- a/etc/examples/nodes/nanomsg.conf +++ b/etc/examples/nodes/nanomsg.conf @@ -7,9 +7,14 @@ nodes = { out = { endpoints = [ - "tcp://*:12000", # TCP socket - "ipc:///tmp/test.ipc", # Interprocess communication - "inproc://test" # Inprocess communication + # TCP socket + "tcp://*:12000", + + # Interprocess communication + "ipc:///tmp/test.ipc", + + # Inprocess communication + "inproc://test" ], } in = { diff --git a/etc/examples/nodes/netem.conf b/etc/examples/nodes/netem.conf index b02a7849c..41c4b09bf 100644 --- a/etc/examples/nodes/netem.conf +++ b/etc/examples/nodes/netem.conf @@ -2,28 +2,39 @@ # SPDX-License-Identifier: Apache-2.0 nodes = { - udp_node = { # The dictionary is indexed by the name of the node. - type = "socket", # For a list of available node-types run: 'villas-node -h' + udp_node = { + type = "socket", - ### The following settings are specific to the socket node-type!! ### - - format = "gtnet", # For a list of available node-types run: 'villas-node -h' + format = "gtnet", in = { - address = "127.0.0.1:12001" # This node only received messages on this IP:Port pair + address = "127.0.0.1:12001" }, out = { - address = "127.0.0.1:12000", # This node sends outgoing messages to this IP:Port pair + address = "127.0.0.1:12000", - netem = { # Network emulation settings + # Network emulation settings + # Those settings can be specified for each node individually! + netem = { enabled = true, - # Those settings can be specified for each node individually! - 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 + + # Additional latency in microseconds + delay = 100000, + + # Jitter in uS + jitter = 30000, + + # Distribution of delay: uniform, normal, pareto, paretonormal + distribution = "normal", + + # Packet loss in percent + loss = 10 + + # Duplication in percent + duplicate = 10, + + # Corruption in percent + corrupt = 10 } } } diff --git a/etc/examples/nodes/ngsi.conf b/etc/examples/nodes/ngsi.conf index 46b9cf512..8c468e36f 100644 --- a/etc/examples/nodes/ngsi.conf +++ b/etc/examples/nodes/ngsi.conf @@ -5,28 +5,33 @@ nodes = { ngsi_node = { type = "ngsi", - ### The following settings are specific to the ngsi node-type!! ### - # The HTTP REST API endpoint of the FIRWARE context broker endpoint = "http://46.101.131.212:1026", - access_token: "aig1aaQuohsh5pee9uiC2Bae3loSh9wu" # Add an 'Auth-Token' token header to each request + # Add an 'Auth-Token' token header to each request + access_token = "aig1aaQuohsh5pee9uiC2Bae3loSh9wu" entity_id = "S3_ElectricalGrid", entity_type = "ElectricalGridMonitoring", - create = true # Create the NGSI entities during startup + # Create the NGSI entities during startup + create = true - rate = 0.1 # Rate at which we poll the broker for updates - timeout = 1, # Timeout of HTTP request in seconds (default is 1, must be smaller than 1 / rate) - verify_ssl = false, # Verification of SSL server certificates (default is true) + # Rate at which we poll the broker for updates + rate = 0.1 + + # Timeout of HTTP request in seconds (default is 1, must be smaller than 1 / rate) + timeout = 1, + + # Verification of SSL server certificates (default is true) + verify_ssl = false, in = { signals = ( { name = "attr1", - ngsi_attribute_name = "attr1", # defaults to signal 'name' - ngsi_attribute_type = "Volts", # default to signal 'unit' + ngsi_attribute_name = "attr1", # Defaults to signal 'name' + ngsi_attribute_type = "Volts", # Default to signal 'unit' ngsi_attribute_metadatas = ( { name="accuracy", type="percent", value="5" } ) diff --git a/etc/examples/nodes/opal.conf b/etc/examples/nodes/opal.conf index 68eb78604..40ace6a7e 100644 --- a/etc/examples/nodes/opal.conf +++ b/etc/examples/nodes/opal.conf @@ -2,38 +2,17 @@ # SPDX-License-Identifier: Apache-2.0 nodes = { - opal_node = { # The server can be started as an Asynchronous process - type = "opal", # from within an OPAL-RT model. + # The server can be started as an Asynchronous process + # from within an OPAL-RT model + opal_node = { + type = "opal", - ### The following settings are specific to the opal node-type!! ### + # It's possible to have multiple send / recv Icons per model + send_id = 1, + + # Specify the ID here + recv_id = 1, - 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!! ### - - uri = "logs/input.log", # These options specify the path prefix where the the files are stored - - in = { - 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. - - buffer_size = 1000000 - - eof = "rewind" # One of: rewind, exit (default) or wait - }, - out = { - flush = true - buffer_size = 1000000 - } } } diff --git a/etc/examples/nodes/redis.conf b/etc/examples/nodes/redis.conf index c7457c63c..d17862d57 100644 --- a/etc/examples/nodes/redis.conf +++ b/etc/examples/nodes/redis.conf @@ -5,25 +5,36 @@ nodes = { redis_node = { type = "redis", - format = "json", # only valid for mode = 'channel' and 'key' - # With mode = 'hash' we will use a simple human readable format + # Only valid for mode = 'channel' and 'key' + # With mode = 'hash' we will use a simple human readable format + format = "json", - key = "my_key" # The Redis key to be used for mode = 'key' or 'hash' (default is the node name) - channel = "my_channel" # the Redis channel tp be used for mode = 'channel' (default is the node name) + # The Redis key to be used for mode = 'key' or 'hash' (default is the node name) + key = "my_key" - mode = "key", # one of: - # - 'channel' (publish/subscribe) - # - 'key' (set/get) - # - 'hash' (hmset/hgetall) + # The Redis channel tp be used for mode = 'channel' (default is the node name) + channel = "my_channel" - notify = false # Whether or not to use Redis keyspace event notifications to get notified about updates + # One of: + # - 'channel' (publish/subscribe) + # - 'key' (set/get) + # - 'hash' (hmset/hgetall) + mode = "key", - rate = 1.0 # The polling rate when notify = false + # Whether or not to use Redis keyspace event notifications to get notified about updates + notify = false - uri = "tcp://localhost:6379/0", # The Redis connection URI + # The polling rate when notify = false + rate = 1.0 - # host = "localhost" # Alternatively the connection options can be specified independently - # port = 6379 # Note: options here will overwrite the respective part of the URI if both are given. + # The Redis connection URI + uri = "tcp://localhost:6379/0", + + # Alternatively the connection options can be specified independently + # host = "localhost" + + # Note: options here will overwrite the respective part of the URI if both are given + # port = 6379 # db = 0 # path = "/var/run/redis.sock" @@ -32,11 +43,11 @@ nodes = { # password = "guest" # ssl = { - # enabled: true - # cacert: "/etc/ssl/certs/ca-certificates.crt", - # cacertdir: "/etc/ssl/certs" - # cert: "./my_cert.crt", - # key, "./my_key.key" + # enabled = true + # cacert = "/etc/ssl/certs/ca-certificates.crt", + # cacertdir = "/etc/ssl/certs" + # cert = "./my_cert.crt", + # key = "./my_key.key" # } } } diff --git a/etc/examples/nodes/rtp.conf b/etc/examples/nodes/rtp.conf index 8c1fd626c..b7120cbf4 100644 --- a/etc/examples/nodes/rtp.conf +++ b/etc/examples/nodes/rtp.conf @@ -41,11 +41,15 @@ nodes = { out = { address = "127.0.0.1:12000" - netem = { # Network emulation settings + # Network emulation settings + netem = { enabled = false, - delay = 100000, # Additional latency in microseconds - loss = 10 # Packet loss in percent + # Additional latency in microseconds + delay = 100000, + + # Packet loss in percent + loss = 10 } } } diff --git a/etc/examples/nodes/shmem.conf b/etc/examples/nodes/shmem.conf index 773d0a42a..487a5f1af 100644 --- a/etc/examples/nodes/shmem.conf +++ b/etc/examples/nodes/shmem.conf @@ -6,18 +6,23 @@ nodes = { type = "shmem", in = { + # Name of shared memory segment for receiving side name = "sn1_in" - }, # Name of shared memory segment for receiving side + }, out = { - name = "sn1_in" # Name of shared memory segment for sending side + # Name of shared memory segment for sending side + name = "sn1_in" }, - queuelen = 1024, # Length of the queues - mode = "pthread", # We can busy-wait or use pthread condition variables for synchronizations + # Length of the queues + queuelen = 1024, + + # We can busy-wait or use pthread condition variables for synchronizations + mode = "pthread", # Execute an external process when starting the node which # then starts the other side of this shared memory channel - # Usually we also pass the shmem names as parameters. + # Usually we also pass the shmem names as parameters exec = [ "villas-shmem", "sn1_in", "sn1_out" ] } } diff --git a/etc/examples/nodes/signal-v2.conf b/etc/examples/nodes/signal-v2.conf index 00f0c97a7..a80b9fedb 100644 --- a/etc/examples/nodes/signal-v2.conf +++ b/etc/examples/nodes/signal-v2.conf @@ -6,9 +6,15 @@ nodes = { type = "signal.v2", rate = 10.0 - realtime = true, # Wait between emitting each sample - limit = 1000, # Only emit 1000 samples, then stop - monitor_missed = true # Count and warn about missed steps + + # Wait between emitting each sample + realtime = true, + + # Only emit 1000 samples, then stop + limit = 1000, + + # Count and warn about missed steps + monitor_missed = true in = { signals = ( diff --git a/etc/examples/nodes/signal.conf b/etc/examples/nodes/signal.conf index a2a1a477f..8501f7bd8 100644 --- a/etc/examples/nodes/signal.conf +++ b/etc/examples/nodes/signal.conf @@ -8,14 +8,31 @@ nodes = { # One of "sine", "square", "ramp", "triangle", "random", "mixed", "counter" signal = [ "sine", "pulse", "square" ], - values = 3, # Number of values per sample - amplitude = [ 1.2, 0.0, 4.0 ], # Amplitude of generated signals - frequency = 10, # Frequency of generated signals - stddev = 2, # Standard deviation of random signals (normal distributed) - rate = 10.0, # Sample rate - offset = 1.0, # Constant offset - realtime = true, # Wait between emitting each sample - limit = 1000, # Only emit 1000 samples, then stop - monitor_missed = true # Count and warn about missed steps + # Number of values per sample + values = 3, + + # Amplitude of generated signals + amplitude = [ 1.2, 0.0, 4.0 ], + + # Frequency of generated signals in Hz + frequency = 10, + + # Standard deviation of random signals (normal distributed) + stddev = 2, + + # Sample rate in Hz + rate = 10.0, + + # Constant offset + offset = 1.0, + + # Wait between emitting each sample + realtime = true, + + # Only emit 1000 samples, then stop + limit = 1000, + + # Count and warn about missed steps + monitor_missed = true } } diff --git a/etc/examples/nodes/socket.conf b/etc/examples/nodes/socket.conf index cc613b1a5..b83d5e911 100644 --- a/etc/examples/nodes/socket.conf +++ b/etc/examples/nodes/socket.conf @@ -2,78 +2,94 @@ # SPDX-License-Identifier: Apache-2.0 nodes = { - udp_node = { # The dictionary is indexed by the name of the node. - type = "socket", # For a list of available node-types run: 'villas-node -h' - vectorize = 30, # Receive and sent 30 samples per message (combining). - samplelen = 10 # The maximum number of samples this node can receive + udp_node = { + type = "socket", - builtin = false, # By default, all nodes will have a few builtin hooks attached to them. - # When collecting statistics or measurements these are undesired. + # Receive and sent 30 samples per message (combining) + vectorize = 30, - ### The following settings are specific to the socket node-type!! ### + # The maximum number of samples this node can receive + samplelen = 10 - layer = "udp", # Layer can be one of: - # - udp Send / receive L4 UDP packets - # - ip Send / receive L3 IP packets - # - eth Send / receive L2 Ethernet frames (IEEE802.3) + # By default, all nodes will have a few builtin hooks attached to them + # When collecting statistics or measurements these are undesired + builtin = false, - format = "gtnet", # For a list of available node-types run: 'villas-node -h' + # Layer can be one of: + # - udp Send / receive L4 UDP packets + # - ip Send / receive L3 IP packets + # - eth Send / receive L2 Ethernet frames (IEEE802.3) + layer = "udp", + + + format = "gtnet", in = { - address = "127.0.0.1:12001" # This node only received messages on this IP:Port pair + # This node only received messages on this IP:Port pair + address = "127.0.0.1:12001" - verify_source = true # Check if source address of incoming packets matches the remote address. + # Check if source address of incoming packets matches the remote address + verify_source = true }, out = { - address = "127.0.0.1:12000", # This node sends outgoing messages to this IP:Port pair + # This node sends outgoing messages to this IP:Port pair + address = "127.0.0.1:12000", } } + # Raw Ethernet frames ethernet_node = { - type = "socket", # See above. + type = "socket", - ### The following settings are specific to the socket node-type!! ### - - layer = "eth", + layer = "eth", in = { - address = "12:34:56:78:90:AB%lo:12002" + address = "12:34:56:78:90:AB%lo:12002" }, out = { address = "12:34:56:78:90:AB%lo:12002" } }, + # Datagram UNIX domain sockets require two endpoints unix_domain_node = { - type = "socket", - layer = "unix", # Datagram UNIX domain sockets require two endpoints + type = "socket", + layer = "unix", in = { address = "/var/run/villas-node/node.sock" }, out = { - address = "/var/run/villas-node/client.sock" + address = "/var/run/villas-node/client.sock" } } - udp_multicast_node = { # The dictionary is indexed by the name of the node. - type = "socket", # For a list of available node-types run: 'villas-node -h' - - ### The following settings are specific to the socket node-type!! ### + udp_multicast_node = { + type = "socket", in = { - address = "127.0.0.1:12001" # This node only received messages on this IP:Port pair + # This node only received messages on this IP:Port pair + address = "127.0.0.1:12001" - multicast = { # IGMP multicast is only support for layer = (ip|udp) - enabled = true, + # IGMP multicast is only support for layer = (ip|udp) + multicast = { + enabled = true, - group = "224.1.2.3", # The multicast group. Must be within 224.0.0.0/4 - interface = "1.2.3.4", # The IP address of the interface which should receive multicast packets. - ttl = 128, # The time to live for outgoing multicast packets. - loop = false, # Whether or not to loopback outgoing multicast packets to the local host. + # The multicast group. Must be within 224.0.0.0/4 + group = "224.1.2.3", + + # The IP address of the interface which should receive multicast packets + interface = "1.2.3.4", + + # The time to live for outgoing multicast packets + ttl = 128, + + # Whether or not to loopback outgoing multicast packets to the local host + loop = false, } }, out = { - address = "127.0.0.1:12000", # This node sends outgoing messages to this IP:Port pair + # This node sends outgoing messages to this IP:Port pair + address = "127.0.0.1:12000", } } } diff --git a/etc/examples/nodes/test_rtt.conf b/etc/examples/nodes/test_rtt.conf index a9c2aaed0..60c7ce910 100644 --- a/etc/examples/nodes/test_rtt.conf +++ b/etc/examples/nodes/test_rtt.conf @@ -2,44 +2,50 @@ # SPDX-License-Identifier: Apache-2.0 nodes = { - rtt_node = { # The "test_rtt" node-type runs a set of test cases for varying - type = "test_rtt", # sending rates, number of values and generates statistics. - cooldown = 2, # The cooldown time between each test case in seconds - prefix = "test_rtt_%y-%m-%d_%H-%M-%S", # An optional prefix in the filename - output = "./results", # The output directory for all results - # The results of each test case will be written to a separate file. - format = "villas.human", # The output format of the result files. + # The "test_rtt" node-type runs a set of test cases for varying + # sending rates, number of values and generates statistics + # The cooldown time between each test case in seconds + rtt_node = { + type = "test_rtt", + cooldown = 2, - cases = ( # The list of test cases - # Each test case can specify a single or an array of rates and values - # If arrays are used, we will generate multiple test cases with all - # possible combinations + # An optional prefix in the filename + prefix = "test_rtt_%y-%m-%d_%H-%M-%S", + + # The output directory for all results + # The results of each test case will be written to a separate file + output = "./results", + + # The output format of the result files + format = "villas.human", + + # The list of test cases + # Each test case can specify a single or an array of rates and values + # If arrays are used, we will generate multiple test cases with all + # possible combinations + cases = ( { - rates = 55.0, # The sending rate in Hz - values = [ 5, 10, 20], # The number of values which should be send in each sample - limit = 100 # The number of samples which should be send during this test case + # The sending rate in Hz + rates = 55.0, + + # The number of values which should be send in each sample + values = [ 5, 10, 20], + + # The number of samples which should be send during this test case + limit = 100 }, { - rates = [ 5, 10, 30 ], # An array of rates in Hz - values = [ 2, 10, 20 ],# An array of number of values - duration = 5 # The duration of the test case in seconds (depending on the sending rate) + # An array of sending rates in Hz + rates = [ 5, 10, 30 ], + + # An array of number of values + values = [ 2, 10, 20 ], + + # The duration of the test case in seconds (depending on the sending rate) + duration = 5 } ) } } - -paths = ( - { - # Simple loopback path to test the node - in = "rtt_node" - out = "rtt_node" - - # hooks = ( - # { - # type = "print" - # } - # ) - } -) diff --git a/etc/examples/nodes/unix_domain.conf b/etc/examples/nodes/unix_domain.conf index 2ebd1a585..785262f8e 100644 --- a/etc/examples/nodes/unix_domain.conf +++ b/etc/examples/nodes/unix_domain.conf @@ -3,9 +3,9 @@ nodes = { unix_domain_node = { - type = "socket", - layer = "unix", - format = "protobuf", + type = "socket", + layer = "unix", + format = "protobuf", in = { address = "/var/run/villas-node.server.sock" diff --git a/etc/examples/nodes/webrtc.conf b/etc/examples/nodes/webrtc.conf index 64928e058..c3cec5a94 100644 --- a/etc/examples/nodes/webrtc.conf +++ b/etc/examples/nodes/webrtc.conf @@ -13,16 +13,16 @@ nodes = { # Address to the websocket signaling server server = "https://villas.k8s.eonerc.rwth-aachen.de/ws/signaling" - # Limit the number of times a channel will retransmit data if not successfully delivered. - # This value may be clamped if it exceeds the maximum value supported. + # Limit the number of times a channel will retransmit data if not successfully delivered + # This value may be clamped if it exceeds the maximum value supported max_retransmits = 0 # Number of seconds to wait for a WebRTC connection before proceeding the start # of VILLASnode. Mainly used for testing - wait_seconds = 10 # in seconds + wait_seconds = 10 # In seconds - # Indicates if data is allowed to be delivered out of order. - # The default value of false, does not make guarantees that data will be delivered in order. + # Indicates if data is allowed to be delivered out of order + # The default value of false, does not make guarantees that data will be delivered in order ordered = false # Setting for Interactive Connectivity Establishment diff --git a/etc/examples/nodes/zeromq.conf b/etc/examples/nodes/zeromq.conf index 30102e797..84aa6b527 100644 --- a/etc/examples/nodes/zeromq.conf +++ b/etc/examples/nodes/zeromq.conf @@ -5,27 +5,38 @@ nodes = { zeromq_node = { type = "zeromq" - pattern = "pubsub" # The ZeroMQ pattern. One of pubsub, radiodish - ipv6 = false # Enable IPv6 support + # The ZeroMQ pattern. One of pubsub, radiodish + pattern = "pubsub" - curve = { # Z85 encoded Curve25519 keys + # Enable IPv6 support + ipv6 = false + + # Z85 encoded Curve25519 keys + curve = { enabled = false, public_key = "Veg+Q.V-c&1k>yVh663gQ^7fL($y47gybE-nZP1L" secret_key = "HPY.+mFuB[jGs@(zZr6$IZ1H1dZ7Ji*j>oi@O?Pc" } in = { - subscribe = "tcp://*:1234" # The subscribe endpoint. - # See http://api.zeromq.org/2-1:zmq-bind for details. - filter = "ab184" # A filter which is prefix matched for each received msg + # The subscribe endpoint + # See http://api.zeromq.org/2-1:zmq-bind for details + subscribe = "tcp://*:1234" + + # A filter which is prefix matched for each received msg + filter = "ab184" } out = { - publish = [ # The publish endpoints. - "tcp://localhost:1235", # See http://api.zeromq.org/2-1:zmq-connect for details. + # The publish endpoints + # See http://api.zeromq.org/2-1:zmq-connect for details + publish = [ + + "tcp://localhost:1235", "tcp://localhost:12444" ] - filter = "ab184" # A prefix which is pre-pended to each message. + # A prefix which is pre-pended to each message + filter = "ab184" } } } diff --git a/etc/examples/paths.conf b/etc/examples/paths.conf index 94933dd07..b704c6c88 100644 --- a/etc/examples/paths.conf +++ b/etc/examples/paths.conf @@ -3,19 +3,29 @@ paths = ( { - enabled = true, # Enable this path (default: true) - reverse = true, # Setup a path in the reverse direction as well (default: false) + # Enable this path (default: true) + enabled = true, - in = "udp_node", # Name of the node we receive messages from (see node dictionary) - out = "ethernet_node", # Name of the node we send messages to. + # Setup a path in the reverse direction as well (default: false) + reverse = true, - rate = 10.0 # A rate at which this path will be triggered if no input node receives new data + # Name of the node we receive messages from (see node dictionary) + in = "udp_node", + + # Name of the node we send messages to + out = "ethernet_node", + + # A rate at which this path will be triggered if no input node receives new data + rate = 10.0 queuelen = 128, - mode = "all", # When this path should be triggered - # - "all": After all masked input nodes received new data - # - "any": After any of the masked input nodes received new data - mask = [ "udp_node" ], # A list of input nodes which will trigger the path + # When this path should be triggered + # - "all": After all masked input nodes received new data + # - "any": After any of the masked input nodes received new data + mode = "all", + + # A list of input nodes which will trigger the path + mask = [ "udp_node" ], } ) diff --git a/etc/gtnet-skt/emulate_gtnet.conf b/etc/gtnet-skt/emulate_gtnet.conf index 4e15b6eab..131534d7a 100644 --- a/etc/gtnet-skt/emulate_gtnet.conf +++ b/etc/gtnet-skt/emulate_gtnet.conf @@ -1,8 +1,4 @@ -#* GTNET-SKT test configuration. -# -# 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 +#* GTNET-SKT test configuration # # Author: Steffen Vogel # SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University @@ -18,7 +14,7 @@ nodes = { format = "gtnet" in = { - address = "*:12000" # Local ip:port, use '*' for random port + address = "*:12000" } out = { address = "134.130.169.80:12001" diff --git a/etc/gtnet-skt/test1.conf b/etc/gtnet-skt/test1.conf index e416d4410..295f1b612 100644 --- a/etc/gtnet-skt/test1.conf +++ b/etc/gtnet-skt/test1.conf @@ -1,8 +1,4 @@ -# GTNET-SKT test configuration. -# -# 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 +# GTNET-SKT test configuration # # Author: Steffen Vogel # SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University @@ -18,7 +14,7 @@ nodes = { format = "villas.binary" in = { - address = "192.168.88.128:12002" # Local ip:port, use '*' for random port + address = "192.168.88.128:12002" } out = { address = "192.168.88.129:12001" @@ -26,7 +22,7 @@ nodes = { netem = { enabled = false - delay = 1000000 # In micro seconds! + delay = 1000000 jitter = 300000 distribution = "normal" } @@ -37,7 +33,7 @@ nodes = { format = "villas.binary" in = { - address = "*:12004" # Local ip:port, use '*' for random port + address = "*:12004" } out = { address = "192.168.88.129:12005" @@ -47,8 +43,8 @@ nodes = { paths = ( { - in = "node1" # Name of the node we listen to (see above) - out = "node1" # And we loop back to the origin + in = "node1" + out = "node1" hooks = ( { diff --git a/etc/gtnet-skt/test2.conf b/etc/gtnet-skt/test2.conf index 0e16b1820..d1e2456bf 100644 --- a/etc/gtnet-skt/test2.conf +++ b/etc/gtnet-skt/test2.conf @@ -1,8 +1,4 @@ -# GTNET-SKT test configuration. -# -# 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 +# GTNET-SKT test configuration # # Author: Steffen Vogel # SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University @@ -18,7 +14,7 @@ nodes = { format = "villas.binary" in = { - address = "192.168.88.128:12002" # Local ip:port, use '*' for random port + address = "192.168.88.128:12002" } out = { address = "192.168.88.129:12001" @@ -26,7 +22,7 @@ nodes = { netem = { enabled = false - delay = 1000000 # In micro seconds! + delay = 1000000 jitter = 300000 distribution = "normal" } @@ -37,7 +33,7 @@ nodes = { format = "villas.binary" in = { - address = "192.168.88.128:12004" # Local ip:port, use '*' for random port + address = "192.168.88.128:12004" } out = { address = "192.168.88.129:12001" @@ -47,8 +43,8 @@ nodes = { paths = ( { - in = "node1" # Name of the node we listen to (see above) - out = "node2" # And we loop back to the origin + in = "node1" + out = "node2" hooks = ( { diff --git a/etc/gtnet-skt/test3.conf b/etc/gtnet-skt/test3.conf index 4bc34f745..f233f9296 100644 --- a/etc/gtnet-skt/test3.conf +++ b/etc/gtnet-skt/test3.conf @@ -1,8 +1,4 @@ -# GTNET-SKT test configuration. -# -# 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 +# GTNET-SKT test configuration # # Author: Steffen Vogel # SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University @@ -19,7 +15,7 @@ nodes = { format = "gtnet" in = { - address = "192.168.88.128:12002" # Local ip:port, use '*' for random port + address = "192.168.88.128:12002" } out = { address = "192.168.88.129:12001" @@ -27,7 +23,7 @@ nodes = { netem = { enabled = false - delay = 1000000 # In micro seconds! + delay = 1000000 jitter = 300000 distribution = "normal" } @@ -38,7 +34,7 @@ nodes = { format = "gtnet" in = { - address = "192.168.88.128:12004" # Local ip:port, use '*' for random port + address = "192.168.88.128:12004" } out = { address = "192.168.88.129:12001" @@ -48,8 +44,8 @@ nodes = { paths = ( { - in = "node1" # Name of the node we listen to (see above) - out = "node2" # And we loop back to the origin + in = "node1" + out = "node2" hooks = ( { diff --git a/etc/gtnet-skt/test4.conf b/etc/gtnet-skt/test4.conf index 11e1cd1af..27a225f51 100644 --- a/etc/gtnet-skt/test4.conf +++ b/etc/gtnet-skt/test4.conf @@ -1,8 +1,4 @@ -# GTNET-SKT test configuration. -# -# 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 +# GTNET-SKT test configuration # # Author: Steffen Vogel # SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University @@ -19,7 +15,7 @@ nodes = { format = "gtnet" in = { - address = "134.130.169.31:12002" # Local ip:port, use '*' for random port + address = "134.130.169.31:12002" } out = { address = "134.130.169.98:12001" @@ -27,7 +23,7 @@ nodes = { netem = { enabled = false - delay = 1000000 # In micro seconds! + delay = 1000000 jitter = 300000 distribution = "normal" } @@ -38,7 +34,7 @@ nodes = { format = "gtnet" in = { - address = "192.168.88.128:12004" # Local ip:port, use '*' for random port + address = "192.168.88.128:12004" } out = { address = "192.168.88.129:12001" @@ -48,8 +44,8 @@ nodes = { paths = ( { - in = "node1", # Name of the node we listen to (see above) - out = "node1", # And we loop back to the origin + in = "node1", + out = "node1", hooks = ( { diff --git a/etc/gtnet-skt/test5.conf b/etc/gtnet-skt/test5.conf index ca5ec4d26..f7f942bf5 100644 --- a/etc/gtnet-skt/test5.conf +++ b/etc/gtnet-skt/test5.conf @@ -1,8 +1,4 @@ -# GTNET-SKT test configuration. -# -# 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 +# GTNET-SKT test configuration # # Author: Steffen Vogel # SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University @@ -22,7 +18,8 @@ nodes = { } in = { - address = "134.130.169.31:12002" # Local ip:port, use '*' for random port + # Local ip:port, use '*' for random port + address = "134.130.169.31:12002" } out = { address = "134.130.169.98:12001" @@ -30,7 +27,7 @@ nodes = { netem = { enabled = false - delay = 1000000 # In micro seconds! + delay = 1000000 # In micro seconds! jitter = 300000 distribution = "normal" } @@ -41,7 +38,8 @@ nodes = { format = "gtnet" in = { - address = "192.168.88.128:12004" # Local ip:port, use '*' for random port + # Local ip:port, use '*' for random port + address = "192.168.88.128:12004" } out = { address = "192.168.88.129:12001" @@ -51,8 +49,11 @@ nodes = { paths = ( { - in = "node1" # Name of the node we listen to (see above) - out = "node1" # And we loop back to the origin + # Name of the node we listen to (see above) + in = "node1" + + # And we loop back to the origin + out = "node1" hooks = ( { diff --git a/etc/gtnet-skt/test6_gtsync_compare.conf b/etc/gtnet-skt/test6_gtsync_compare.conf index 42bf98974..a0f789cd7 100644 --- a/etc/gtnet-skt/test6_gtsync_compare.conf +++ b/etc/gtnet-skt/test6_gtsync_compare.conf @@ -1,4 +1,4 @@ -# This is an example for a minimal loopback configuration. +# This is an example for a minimal loopback configuration # # All messages will be sent back to the origin using UDP packets. # @@ -38,7 +38,7 @@ nodes = { } in = { - address = "134.130.169.31:12002" # Local ip:port, use '*' for random port + address = "134.130.169.31:12002" } out = { address = "134.130.169.98:12001" @@ -46,7 +46,7 @@ nodes = { netem = { enabled = false - delay = 1000000 # In micro seconds! + delay = 1000000 jitter = 300000 distribution = "normal" } @@ -59,7 +59,7 @@ nodes = { } in = { - address = "134.130.169.31:12004", # Local ip:port, use '*' for random port + address = "134.130.169.31:12004", } out = { address = "134.130.169.99:12003", @@ -69,8 +69,8 @@ nodes = { paths = ( { - in = "node1" # Name of the node we listen to (see above) - out = "node1" # And we loop back to the origin + in = "node1" + out = "node1" hooks = ( { type = "print" diff --git a/etc/labs/lab10_nodes.conf b/etc/labs/lab10_nodes.conf index 43f78abc0..86fbcb93f 100644 --- a/etc/labs/lab10_nodes.conf +++ b/etc/labs/lab10_nodes.conf @@ -8,10 +8,10 @@ nodes = { rpi-1 = { type = "socket" layer = "udp" - format = "gtnet" # pre-built format to communicate in RTDS GTNET-SKT payload + format = "gtnet" # Pre-built format to communicate in RTDS GTNET-SKT payload in = { - address = "*:12005" # villas node machine IP and port number + address = "*:12005" # VILLASnode machine IP and port number signals = { count = 8 @@ -26,16 +26,16 @@ nodes = { ) }, out = { - address = "192.168.0.5:12005" # remote machine IP and port number + address = "192.168.0.5:12005" # Remote machine IP and port number } }, rpi-2 = { type = "socket" layer = "udp" - format = "gtnet" # pre-built format to communicate in RTDS GTNET-SKT payload + format = "gtnet" # Pre-built format to communicate in RTDS GTNET-SKT payload in = { - address = "*:12006" # villas node machine IP and port number + address = "*:12006" # VILLASnode machine IP and port number signals = { count = 8 @@ -50,7 +50,7 @@ nodes = { ) } out = { - address = "192.168.0.6:12006" # remote machine IP and port number + address = "192.168.0.6:12006" # Remote machine IP and port number } }, rtds-1 = { @@ -59,7 +59,7 @@ nodes = { format = "gtnet" in = { - address = "*:12083" # villas node machine IP and port number + address = "*:12083" # VILLASnode machine IP and port number signals = { count = 8 @@ -74,7 +74,7 @@ nodes = { ) } out = { - address = "192.168.0.4:12083" # remote machine IP and port number + address = "192.168.0.4:12083" # Remote machine IP and port number } } } diff --git a/etc/labs/lab10_path_bidir.conf b/etc/labs/lab10_path_bidir.conf index 5c7863f4f..dfe94504c 100644 --- a/etc/labs/lab10_path_bidir.conf +++ b/etc/labs/lab10_path_bidir.conf @@ -18,8 +18,8 @@ paths = ( # and set reverse = true # Example: # { - # in = [ "rpi-1" ], - # out = [ "rtds-1" ], - # reverse = true + # in = [ "rpi-1" ], + # out = [ "rtds-1" ], + # reverse = true # } ) diff --git a/etc/labs/lab11.conf b/etc/labs/lab11.conf index c5ddc1608..2c74eb15e 100644 --- a/etc/labs/lab11.conf +++ b/etc/labs/lab11.conf @@ -71,7 +71,7 @@ paths = ( reverse = false, # The mode of a path determines when the path is triggered - # and forwarding samples to its destination nodes. + # and forwarding samples to its destination nodes mode = "any", # List of nodes which trigger the path diff --git a/etc/labs/lab17.conf b/etc/labs/lab17.conf index bd5cc2d1a..eaed0139a 100644 --- a/etc/labs/lab17.conf +++ b/etc/labs/lab17.conf @@ -14,31 +14,31 @@ nodes = { address = "134.130.169.31:12000" signals = ( - { name="trigger", type="integer" }, - { name="if1_tx_phA_dp0_mag", type="float" }, - { name="if1_tx_phA_dp0_phase", type="float" }, - { name="if1_tx_phA_dp1_mag", type="float" }, - { name="if1_tx_phA_dp1_phase", type="float" }, - { name="if1_tx_phA_dp2_mag", type="float" }, - { name="if1_tx_phA_dp2_phase", type="float" }, - { name="if1_tx_phA_dp3_mag", type="float" }, - { name="if1_tx_phA_dp3_phase", type="float" }, - { name="if1_tx_phB_dp0_mag", type="float" }, - { name="if1_tx_phB_dp0_phase", type="float" }, - { name="if1_tx_phB_dp1_mag", type="float" }, - { name="if1_tx_phB_dp1_phase", type="float" }, - { name="if1_tx_phB_dp2_mag", type="float" }, - { name="if1_tx_phB_dp2_phase", type="float" }, - { name="if1_tx_phB_dp3_mag", type="float" }, - { name="if1_tx_phB_dp3_phase", type="float" }, - { name="if1_tx_phC_dp0_mag", type="float" }, - { name="if1_tx_phC_dp0_phase", type="float" }, - { name="if1_tx_phC_dp1_mag", type="float" }, - { name="if1_tx_phC_dp1_phase", type="float" }, - { name="if1_tx_phC_dp2_mag", type="float" }, - { name="if1_tx_phC_dp2_phase", type="float" }, - { name="if1_tx_phC_dp3_mag", type="float" }, - { name="if1_tx_phC_dp3_phase", type="float" } + { name="trigger", type="integer" }, + { name="if1_tx_phA_dp0_mag", type="float" }, + { name="if1_tx_phA_dp0_phase", type="float" }, + { name="if1_tx_phA_dp1_mag", type="float" }, + { name="if1_tx_phA_dp1_phase", type="float" }, + { name="if1_tx_phA_dp2_mag", type="float" }, + { name="if1_tx_phA_dp2_phase", type="float" }, + { name="if1_tx_phA_dp3_mag", type="float" }, + { name="if1_tx_phA_dp3_phase", type="float" }, + { name="if1_tx_phB_dp0_mag", type="float" }, + { name="if1_tx_phB_dp0_phase", type="float" }, + { name="if1_tx_phB_dp1_mag", type="float" }, + { name="if1_tx_phB_dp1_phase", type="float" }, + { name="if1_tx_phB_dp2_mag", type="float" }, + { name="if1_tx_phB_dp2_phase", type="float" }, + { name="if1_tx_phB_dp3_mag", type="float" }, + { name="if1_tx_phB_dp3_phase", type="float" }, + { name="if1_tx_phC_dp0_mag", type="float" }, + { name="if1_tx_phC_dp0_phase", type="float" }, + { name="if1_tx_phC_dp1_mag", type="float" }, + { name="if1_tx_phC_dp1_phase", type="float" }, + { name="if1_tx_phC_dp2_mag", type="float" }, + { name="if1_tx_phC_dp2_phase", type="float" }, + { name="if1_tx_phC_dp3_mag", type="float" }, + { name="if1_tx_phC_dp3_phase", type="float" } ) } @@ -60,33 +60,32 @@ nodes = { address = "134.130.169.31:12001" signals = ( - { name="trigger", type="integer" }, - { name="if1_tx_phA_dp0_mag", type="float" }, - { name="if1_tx_phA_dp0_phase", type="float" }, - { name="if1_tx_phA_dp1_mag", type="float" }, - { name="if1_tx_phA_dp1_phase", type="float" }, - { name="if1_tx_phA_dp2_mag", type="float" }, - { name="if1_tx_phA_dp2_phase", type="float" }, - { name="if1_tx_phA_dp3_mag", type="float" }, - { name="if1_tx_phA_dp3_phase", type="float" }, - { name="if1_tx_phB_dp0_mag", type="float" }, - { name="if1_tx_phB_dp0_phase", type="float" }, - { name="if1_tx_phB_dp1_mag", type="float" }, - { name="if1_tx_phB_dp1_phase", type="float" }, - { name="if1_tx_phB_dp2_mag", type="float" }, - { name="if1_tx_phB_dp2_phase", type="float" }, - { name="if1_tx_phB_dp3_mag", type="float" }, - { name="if1_tx_phB_dp3_phase", type="float" }, - { name="if1_tx_phC_dp0_mag", type="float" }, - { name="if1_tx_phC_dp0_phase", type="float" }, - { name="if1_tx_phC_dp1_mag", type="float" }, - { name="if1_tx_phC_dp1_phase", type="float" }, - { name="if1_tx_phC_dp2_mag", type="float" }, - { name="if1_tx_phC_dp2_phase", type="float" }, - { name="if1_tx_phC_dp3_mag", type="float" }, - { name="if1_tx_phC_dp3_phase", type="float" } + { name="trigger", type="integer" }, + { name="if1_tx_phA_dp0_mag", type="float" }, + { name="if1_tx_phA_dp0_phase", type="float" }, + { name="if1_tx_phA_dp1_mag", type="float" }, + { name="if1_tx_phA_dp1_phase", type="float" }, + { name="if1_tx_phA_dp2_mag", type="float" }, + { name="if1_tx_phA_dp2_phase", type="float" }, + { name="if1_tx_phA_dp3_mag", type="float" }, + { name="if1_tx_phA_dp3_phase", type="float" }, + { name="if1_tx_phB_dp0_mag", type="float" }, + { name="if1_tx_phB_dp0_phase", type="float" }, + { name="if1_tx_phB_dp1_mag", type="float" }, + { name="if1_tx_phB_dp1_phase", type="float" }, + { name="if1_tx_phB_dp2_mag", type="float" }, + { name="if1_tx_phB_dp2_phase", type="float" }, + { name="if1_tx_phB_dp3_mag", type="float" }, + { name="if1_tx_phB_dp3_phase", type="float" }, + { name="if1_tx_phC_dp0_mag", type="float" }, + { name="if1_tx_phC_dp0_phase", type="float" }, + { name="if1_tx_phC_dp1_mag", type="float" }, + { name="if1_tx_phC_dp1_phase", type="float" }, + { name="if1_tx_phC_dp2_mag", type="float" }, + { name="if1_tx_phC_dp2_phase", type="float" }, + { name="if1_tx_phC_dp3_mag", type="float" }, + { name="if1_tx_phC_dp3_phase", type="float" } ) - } out = { @@ -107,15 +106,15 @@ nodes = { address = "134.130.169.31:12002" signals = ( - { name="orgn_V3phRMSintrf", type="float", unit="V" }, - { name="orgn_Pintrf", type="float", unit="W" }, - { name="orgn_Qintrf", type="float", unit="Var" }, - { name="orgn_Sintrf", type="float", unit="VA" }, - { name="if1_V3phRMS", type="float", unit="V" }, - { name="if1_I3phRMS", type="float", unit="A" }, - { name="if1_P", type="float", unit="W" }, - { name="if1_Q", type="float", unit="Var" }, - { name="if1_S", type="float", unit="VA" } + { name="orgn_V3phRMSintrf", type="float", unit="V" }, + { name="orgn_Pintrf", type="float", unit="W" }, + { name="orgn_Qintrf", type="float", unit="Var" }, + { name="orgn_Sintrf", type="float", unit="VA" }, + { name="if1_V3phRMS", type="float", unit="V" }, + { name="if1_I3phRMS", type="float", unit="A" }, + { name="if1_P", type="float", unit="W" }, + { name="if1_Q", type="float", unit="Var" }, + { name="if1_S", type="float", unit="VA" } ) } diff --git a/etc/labs/lab9_netem.conf b/etc/labs/lab9_netem.conf index 5ac34f107..8810ffe69 100644 --- a/etc/labs/lab9_netem.conf +++ b/etc/labs/lab9_netem.conf @@ -19,11 +19,11 @@ nodes = { netem = { enabled = true, - loss = 0, # in % - corrupt = 0, # in % - duplicate = 0, # in % - delay = 100000, # in uS - jitter = 5000, # in uS + loss = 0, # In % + corrupt = 0, # In % + duplicate = 0, # In % + delay = 100000, # In uS + jitter = 5000, # In uS distribution = "normal" } } diff --git a/etc/loopback.conf b/etc/loopback.conf index 3a3140c9c..10eb4aa73 100644 --- a/etc/loopback.conf +++ b/etc/loopback.conf @@ -1,4 +1,4 @@ -# This is an example for a minimal loopback configuration. +# This is an example for a minimal loopback configuration # # All messages will be sent back to the origin using UDP packets. # @@ -21,10 +21,6 @@ # # $ villas pipe etc/loopback.conf node2 # -# 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 # SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University # SPDX-License-Identifier: Apache-2.0 @@ -35,14 +31,15 @@ nodes = { layer = "udp" in = { - address = "127.0.0.1:12000" # Local ip:port, use '*' for random port + # Local ip:port, use '*' for random port + address = "127.0.0.1:12000" } out = { address = "127.0.0.1:12001" netem = { enabled = false - delay = 1000000 # In micro seconds! + delay = 1000000 # In micro seconds! jitter = 300000 distribution = "normal" } @@ -52,7 +49,8 @@ nodes = { type = "socket" layer = "udp" in = { - address = "127.0.0.1:12001" # Local ip:port, use '*' for random port + # Local ip:port, use '*' for random port + address = "127.0.0.1:12001" } out = { address = "127.0.0.1:12002" @@ -62,7 +60,8 @@ nodes = { type = "socket" layer = "udp" in = { - address = "127.0.0.1:12002" # Local ip:port, use '*' for random port + # Local ip:port, use '*' for random port + address = "127.0.0.1:12002" } out = { address = "127.0.0.1:12000" @@ -72,7 +71,8 @@ nodes = { type = "socket" layer = "udp" in = { - address = "127.0.0.1:12003" # Local ip:port, use '*' for random port + # Local ip:port, use '*' for random port + address = "127.0.0.1:12003" } out = { address = "127.0.0.1:12003" @@ -82,8 +82,11 @@ nodes = { paths = ( { - in = "node1" # Name of the node we listen to (see above) - out = "node2" # And we loop back to the origin + # Name of the node we listen to (see above) + in = "node1" + + # And we loop back to the origin + out = "node2" hooks = ( { diff --git a/etc/shmem_mqtt.conf b/etc/shmem_mqtt.conf index 72e43c4fe..d25682b6b 100644 --- a/etc/shmem_mqtt.conf +++ b/etc/shmem_mqtt.conf @@ -12,7 +12,8 @@ nodes = { enabled = false, type = "shmem", in = { - name = "/dpsim-villas", # Name of shared memory segment for sending side + # Name of shared memory segment for sending side + name = "/dpsim-villas", hooks = ( { type = "stats" } ), @@ -24,15 +25,19 @@ nodes = { } }, out = { - name = "/villas-dpsim" # Name of shared memory segment for receiving side + # Name of shared memory segment for receiving side + name = "/villas-dpsim" signals = { count = 1, type = "complex" } }, - queuelen = 1024, # Length of the queues - polling = true, # We can busy-wait or use pthread condition variables for synchronizations + # Length of the queues + queuelen = 1024, + + # We can busy-wait or use pthread condition variables for synchronizations + polling = true, }, broker = { @@ -64,16 +69,14 @@ paths = ( in = "sig", out = "broker", - # mode: any/all # Condition of which/how many source nodes have to receive # at least one sample for the path to be triggered mode = "any", -# reverse = true + # reverse = true } # ,{ - # in = "nano"; - # out = "dpsim"; - # mode = "any" + # in = "nano"; + # out = "dpsim"; + # mode = "any" # } - ) diff --git a/etc/websocket-client.conf b/etc/websocket-client.conf index 6450308f2..afa13d773 100644 --- a/etc/websocket-client.conf +++ b/etc/websocket-client.conf @@ -1,8 +1,4 @@ -# Example configuration file for VILLASnode. -# -# 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 +# Example configuration file for VILLASnode websocket node-type # # Author: Steffen Vogel # SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University diff --git a/etc/websocket-demo.conf b/etc/websocket-demo.conf index 151c6acd3..de879967f 100644 --- a/etc/websocket-demo.conf +++ b/etc/websocket-demo.conf @@ -1,8 +1,4 @@ -# Example configuration file for VILLASnode. -# -# 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 +# Example configuration file for VILLASnode websocket node-type # # Author: Steffen Vogel # SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University