1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00
VILLASnode/lua/hooks/test.lua
Philipp Jungkamp 79077c9bb9 Add NEW_FRAME to SampleFlags
Signed-off-by: Philipp Jungkamp <Philipp.Jungkamp@opal-rt.com>
2023-09-19 19:07:22 +02:00

129 lines
3.2 KiB
Lua

-- Install with: luarocks install lunajson luasockets
-- SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University
-- SPDX-License-Identifier: Apache-2.0
json = require 'lunajson'
http = require 'socket.http'
------------------------ Constants -------------------------
Reason = {
OK = 0,
ERROR = 1,
SKIP_SAMPLE = 2,
STOP_PROCESSING = 3
}
SampleFlags = {
HAS_TS_ORIGIN = 1, -- "(1 << 1)" Include origin timestamp in output.
HAS_TS_RECEIVED = 2, -- "(1 << 2)" Include receive timestamp in output.
HAS_OFFSET = 4, -- "(1 << 3)" Include offset (received - origin timestamp) in output.
HAS_SEQUENCE = 8, -- "(1 << 4)" Include sequence number in output.
HAS_DATA = 16, -- "(1 << 5)" Include values in output.
NEW_FRAME = 65536, -- "(1 << 16)" This sample is the first of a new simulation case
NEW_SIMULATION = 131072, -- "(1 << 16)" This sample is the first of a new simulation case
ALL = 2147483647, -- "INT_MAX" Enable all output options.
}
-------------------------- Config --------------------------
city = 'Aachen'
--------------------- Global Variables ---------------------
f = 1 -- in Hz
t = nil -- in seconds
t_start = nil -- in seconds
temp_aachen = 0 -- in deg Celsius
function prepare(cfg)
info("Preparing test_hook")
info("Some setting: ", cfg.some_setting)
info("Some other setting: ", cfg.this.is.nested)
my_global_var = 1337
end
function start()
info("Starting test_hook")
info("Global var: ", my_global_var)
info("This is a message with severity info")
warn("This is a message with severity warn")
error("This is a message with severity error")
debug("This is a message with severity debug")
t_start = socket.gettime()
end
function stop()
info("Stopping test_hook")
end
function restart()
info("Restarted test_hook")
end
function process(smp)
info("Process test_hook")
if smp.sequence == 1 then
dump_sample(smp)
end
-- We can adjust signal values inline
smp.data.square = smp.data.square * 10
-- Example for value limiter
if smp.data.random > 10 then
smp.data.random = 10
elseif smp.data.random < -10 then
smp.data.random = -10
end
global_var = smp.sequence
-- Updating time (references in signal expression list of VILLASnode config)
t = socket.gettime() - t_start
if smp.sequence % 2 == 0 then
return Reason.SKIP_SAMPLE
elseif smp.sequence >= 200 then
return Reason.ERROR
end
return Reason.OK
end
function periodic()
info("Periodic test_hook")
local body, statusCode, headers, statusText = http.request('https://wttr.in/' .. city .. '?format=j1')
weather = json.decode(body)
temp_aachen = tonumber(weather.current_condition[1].temp_C)
info(string.format('Temperature in %s is %d °C', city, temp_aachen))
end
function dump_sample(smp)
info(" Sequence: ", smp.sequence)
info(" Flags: ", smp.flags)
info(" TS origin: ", string.format("%d.%09d", smp.ts_origin[0], smp.ts_origin[1]))
info(" TS received: ", string.format("%d.%09d", smp.ts_received[0], smp.ts_received[1]))
info(" Data:")
for key, value in pairs(smp.data) do
info(" " .. key .. ": " .. value)
end
end