Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
bd1a3d4
feat(node-fmu): Add new FMU node-type
riteshk001 Aug 17, 2026
036c4ee
fix(reuse): Include reuse license for test FMU
riteshk001 Aug 17, 2026
2a438bd
fix(node-fmu): Fix json format in integration test for FMU node-type
riteshk001 Aug 17, 2026
56f3e0d
fix(node-fmu): Naming, clang, reuse
al3xa23 Aug 19, 2026
8ae36f3
fix(node-fmu): Update Dahlquist.fmu.license
al3xa23 Aug 19, 2026
eecd769
chore(node-fmu): Merge master in node-fmu
al3xa23 Sep 8, 2026
18b6f1c
chore(node-fmu): Move schema to node-fmu.yaml
al3xa23 Sep 9, 2026
1fc8339
fix(ci): Add version to Nix builds
stv0g Sep 9, 2026
ec48766
chore(master): Release 1.3.1
github-actions[bot] Sep 9, 2026
7dddcfe
fix(node-fmu): Fix json format in integration test for FMU node-type
riteshk001 Aug 17, 2026
02e3dc4
fix(node-fmu): Fix fmu json schema
al3xa23 Sep 9, 2026
85ecab6
fix(node-fmu): Fix typo in config and schema
al3xa23 Sep 10, 2026
02bacf5
fix(node-fmu): Fix writing_turn in exp config
al3xa23 Sep 12, 2026
e00e134
fix(node-fmu): Remove redundant key 'writing_turn' for FMU node-type
riteshk001 Sep 15, 2026
77623d8
fix(api): Restart temp config file needs a .json at the end for corre…
Sep 13, 2026
337ad5d
chore(master): Release 1.3.2
github-actions[bot] Sep 14, 2026
82d2f4b
test(pps_ts): Added test for hook pps_ts and fix time source for hook
Sep 4, 2026
98bd372
fix(pps_ts): Cleanup code and make sure variables are initialized
Sep 4, 2026
2fdc149
docs(schema): Update pps_ts schema to fit the hook
Sep 13, 2026
56a41bb
fix(node-fmu): Include writing_turn and ruby-dev
al3xa23 Oct 29, 2026
9fde8a7
fix(node-fmu): Fix schema spacing
al3xa23 Oct 29, 2026
dc89397
fix(ci): Make ruby-dev install non-interactive in pre-commit job
Copilot Oct 30, 2026
513f60b
fix(ci): Add make and align FMU schema example
Copilot Oct 30, 2026
2f27ea7
fix(ci): Install gcc in pre-commit container
Copilot Oct 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
options: --user root
steps:
- name: Install Git and Ruby
run: apt-get update && apt-get -y install git ruby
run: apt-get update && apt-get -y install git ruby ruby-dev make gcc

- name: Checkout
uses: actions/checkout@v7
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "1.3.0"
".": "1.3.2"
}
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
# Changelog

## [1.3.2](https://github.com/VILLASframework/node/compare/v1.3.1...v1.3.2) (2026-09-14)


### Bug Fixes

* **api:** Restart temp config file needs a .json at the end for corret config selection ([a169249](https://github.com/VILLASframework/node/commit/a16924952e4e42fcb66dd175114a1856b5652b52))

## [1.3.1](https://github.com/VILLASframework/node/compare/v1.3.0...v1.3.1) (2026-09-09)


### Bug Fixes

* **ci:** Add version to Nix builds ([6357645](https://github.com/VILLASframework/node/commit/6357645d63aa70926f22b837a912541ef39f73e8))

## [1.3.0](https://github.com/VILLASframework/node/compare/v1.2.2...v1.3.0) (2026-09-07)


Expand Down
5 changes: 4 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
cmake_minimum_required(VERSION 3.14)

project(villas-node
VERSION 1.3.0 # x-release-please-version
VERSION 1.3.2 # x-release-please-version
DESCRIPTION "Open-Source Real-time Multi-protocol Gateway"
HOMEPAGE_URL "https://www.fein-aachen.org/projects/villas-node/"
LANGUAGES C CXX
Expand Down Expand Up @@ -95,6 +95,7 @@ find_package(Criterion)
find_package(OpalOrchestra)
find_package(LibXml2)
find_package(OpalAsyncApi)
find_package(FMI)

# Check for tools
find_program(PROTOBUFC_COMPILER NAMES protoc-c)
Expand Down Expand Up @@ -204,6 +205,7 @@ cmake_dependent_option(WITH_NODE_ETHERCAT "Build with ethercat node-type"
cmake_dependent_option(WITH_NODE_EXAMPLE "Build with example node-type" "${WITH_DEFAULTS}" "" OFF)
cmake_dependent_option(WITH_NODE_EXEC "Build with exec node-type" "${WITH_DEFAULTS}" "" OFF)
cmake_dependent_option(WITH_NODE_FILE "Build with file node-type" "${WITH_DEFAULTS}" "" OFF)
cmake_dependent_option(WITH_NODE_FMU "Build with fmu node-type" "${WITH_DEFAULTS}" "FMI_FOUND" OFF)
cmake_dependent_option(WITH_NODE_FPGA "Build with fpga node-type" "${WITH_DEFAULTS}" "WITH_FPGA" OFF)
cmake_dependent_option(WITH_NODE_IEC60870 "Build with iec60870 node-types" "${WITH_DEFAULTS}" "LIB60870_FOUND; NOT WITHOUT_GPL" OFF)
cmake_dependent_option(WITH_NODE_IEC61850 "Build with iec61850 node-types" "${WITH_DEFAULTS}" "LIBIEC61850_FOUND; NOT WITHOUT_GPL" OFF)
Expand Down Expand Up @@ -314,6 +316,7 @@ add_feature_info(NODE_ETHERCAT WITH_NODE_ETHERCAT "Build with
add_feature_info(NODE_EXAMPLE WITH_NODE_EXAMPLE "Build with example node-type")
add_feature_info(NODE_EXEC WITH_NODE_EXEC "Build with exec node-type")
add_feature_info(NODE_FILE WITH_NODE_FILE "Build with file node-type")
add_feature_info(NODE_FMU WITH_NODE_FMU "Build with fmu node-type")
add_feature_info(NODE_FPGA WITH_NODE_FPGA "Build with fpga node-type")
add_feature_info(NODE_IEC60870 WITH_NODE_IEC60870 "Build with iec60870 node-types")
add_feature_info(NODE_IEC61850 WITH_NODE_IEC61850 "Build with iec61850 node-types")
Expand Down
26 changes: 26 additions & 0 deletions cmake/FindFMI.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# CMakeLists.txt.
#
# Author: Ritesh Karki <ritesh.karki@rwth-aachen.de>
# SPDX-FileCopyrightText: 2014-2026 Institute for Automation of Complex Power Systems, RWTH Aachen University
# SPDX-License-Identifier: Apache-2.0

find_path(FMI_INCLUDE_DIR
NAMES fmilib.h
)

find_library(FMI_LIBRARY fmilib
PATHS /usr/local/lib /usr/local/lib64
)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(FMI DEFAULT_MSG FMI_LIBRARY FMI_INCLUDE_DIR)

mark_as_advanced(FMI_INCLUDE_DIR FMI_LIBRARY)

if(FMI_FOUND)
add_library(FMI SHARED IMPORTED)
set_target_properties(FMI PROPERTIES
IMPORTED_LOCATION "${FMI_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${FMI_INCLUDE_DIR}"
)
endif()
27 changes: 7 additions & 20 deletions doc/openapi/components/schemas/hook-pps_ts.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,18 @@ properties:
type: string
const: pps_ts

mode:
type: string
enum:
- simple
- horizon
default: simple
description: "The synchronization mode. The `horizon` mode is currently no recommended to use as it is not fully tested."

threshold:
type: number
default: 1.5
description: "The signal level threshold of the PPS signal which is used to detect an edge."

expected_smp_rate:
type: number
default: 1.0
description: "The expected sampling rate of the input signal. Only important for a faster initialization."

horizon_estimation:
type: integer
default: 10

horizon_compensation:
type: integer
default: 10
time_source:
type: string
enum:
- sample
- os
default: os
description: Defines from where the second value is derived.

priority:
default: 99
Expand Down
92 changes: 92 additions & 0 deletions doc/openapi/components/schemas/node-fmu.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# yaml-language-server: $schema=http://json-schema.org/draft-07/schema
# SPDX-FileCopyrightText: 2014-2026 Institute for Automation of Complex Power Systems, RWTH Aachen University
# SPDX-License-Identifier: Apache-2.0
---
title: FMU node-type
type: object
required: [type, fmu_path, fmu_unpack_path, start_time, stop_time, step_size]
properties:
type:
type: string
const: fmu

fmu_path:
type: string
description: |
Specifies the URI to a FMU model

fmu_unpack_path:
type: string
description: |
Specifies the URI to a directory which has the unpacked files of the FMU model (mainly the shared library and the modelDescription.xml for the model).

start_time:
type: number
description: |
Specifies the start time for the simulation. Value has to be at least one `step_size` lesser than `stop_time`.

stop_time:
type: number
description: |
Specifies the stop time for the simulation. The number of steps is calculated then by the difference between `start_time` and `stop_time` divided by the `step_size`.

step_size:
type: number
description: |
Specifies the step size for the simulation. Special care has to be taken to ensure that the value is equal to the value mantioned in modelDescription.xml.

in:
type: object
properties:
enabled:
default: true
$ref: ./shared-node-enabled.yaml

builtin:
default: true
$ref: ./shared-node-builtin.yaml

vectorize:
default: 1
$ref: ./shared-node-vectorize.yaml

hooks:
default: []
$ref: ./shared-hook-list.yaml

signals:
$ref: ./shared-signal-list.yaml

additionalProperties: false

out:
type: object
properties:
enabled:
default: true
$ref: ./shared-node-enabled.yaml

netem:
$ref: ./shared-node-netem.yaml

fwmark:
$ref: ./shared-node-fwmark.yaml

builtin:
default: true
$ref: ./shared-node-builtin.yaml

vectorize:
default: 1
$ref: ./shared-node-vectorize.yaml

hooks:
default: []
$ref: ./shared-hook-list.yaml

signals:
$ref: ./shared-signal-list.yaml

additionalProperties: false

additionalProperties: false
1 change: 1 addition & 0 deletions doc/openapi/components/schemas/node.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ discriminator:
ethercat: ./node-ethercat.yaml
example: ./node-example.yaml
exec: ./node-exec.yaml
fmu: ./node-fmu.yaml
file: ./node-file.yaml
fpga: ./node-fpga.yaml
iec60870-5-104: ./node-iec60870-5-104.yaml
Expand Down
2 changes: 1 addition & 1 deletion doc/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "villasnode-api",
"version": "1.3.0",
"version": "1.3.2",
"type": "module",
"dependencies": {
"@redocly/cli": "1.16.0"
Expand Down
9 changes: 2 additions & 7 deletions etc/examples/hooks/pps_ts.conf
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University
# SPDX-FileCopyrightText: 2026 Institute for Automation of Complex Power Systems, RWTH Aachen University
# SPDX-License-Identifier: Apache-2.0

@include "hook-nodes.conf"
Expand All @@ -11,14 +11,9 @@ paths = (
hooks = (
{
type = "pps_ts"

signal = "pps"

mode = "simple" # Oneof: simple, horizon
time_source = "sample"
threshold = 0.5
expected_smp_rate = 5e3
horizon_estimation = 10
horizon_compensation = 10
}
)
}
Expand Down
26 changes: 26 additions & 0 deletions etc/examples/nodes/fmu.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# SPDX-FileCopyrightText: 2014-2026 Institute for Automation of Complex Power Systems, RWTH Aachen University
# SPDX-License-Identifier: Apache-2.0

nodes = {
fmu_node = {
type = "fmu"
# Path to FMU file (.fmu)
fmu_path = "/workspaces/node/tests/integration/Dahlquist.fmu"
fmu_unpack_path = "/workspaces/node/tests/integration/fmu_dahl"
stop_time = 10.0
start_time = 0.0
step_size = 0.2

in = {
signals = (
{ name = "in1", type = "float" }
)
}

out = {
signals = (
{ name = "out1", type = "float" },
)
}
}
}
11 changes: 8 additions & 3 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
let
inherit (nixpkgs) lib;

version = "1.2.0"; # x-release-please-version

nixDir = ./packaging/nix;

# Add separateDebugInfo to a derivation
Expand Down Expand Up @@ -66,15 +68,18 @@
packagesWith = pkgs: rec {
default = villas-node;

villas-node-python = pkgs.callPackage (nixDir + "/python.nix") { src = ./.; };
villas-node-python = pkgs.callPackage (nixDir + "/python.nix") {
src = ./.;
inherit version;
};

villas-node-minimal = pkgs.callPackage (nixDir + "/villas.nix") {
src = ./.;
version = "minimal";
version = "${version}-minimal";
};

villas-node = villas-node-minimal.override {
version = "full";
version = "${version}-full";
withAllExtras = true;
withAllFormats = true;
withAllHooks = true;
Expand Down
Loading
Loading