# SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University
# SPDX-License-Identifier: Apache-2.0

@include "hook-nodes.conf"

stats = 1

paths = (
    {
        in = "signal_node"
        out = "file_node"

        hooks = (
            {
                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
                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
                some_setting = "Hello World"
                this = {
                    is = {
                        nested = 1234
                        bool_val = true
                    }
                }

                # Script mode: we provide a Lua script containing functions
                #              for the individual hook points
                # Define some or all of the following functions in your Lua script:
                #
                #   prepare(cfg)    Called during initialization with a Lua table which contains
                #                   the full hook configuration
                #   start()         Called when the node/path is started
                #
                #   stop()          Called when the node/path is stopped
                #
                #   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
                #                   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
                #                      - ts_origin    The origin timestamp as a Lua table containing
                #                                     the following keys:
                #                                         0: seconds
                #                                         1: nanoseconds
                #                      - ts_received  The receive timestamp a Lua table containing
                #                                     the following keys:
                #                                         0: seconds
                #                                         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
                #
                #   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" },

                    # You can access any global variable set by the script
                    { name = "sequence", type="float", unit = "V", expression = "global_var" },

                    # Here we set a global variable from the periodic handler
                    { name = "temp_aachen", type="float", unit = "°C", expression = "temp_aachen" },

                    # We can refer to the current time the global Lua variable 't'
                    { name = "sum", type="float", unit = "V", expression = "math.sin(2 * math.pi * f * t)" },

                    { name = "random", expression = "smp.data.random" }
                )
            },
            {
                type = "print"
            }
        )
    }
)