From de167c14fae2d28d532a8b3a0f75fc4ddffb5f59 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Tue, 11 Jan 2022 07:27:16 -0500 Subject: [PATCH] add little example for configuration generation using a Python script --- etc/python/example.py | 92 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 etc/python/example.py diff --git a/etc/python/example.py b/etc/python/example.py new file mode 100644 index 000000000..54606961c --- /dev/null +++ b/etc/python/example.py @@ -0,0 +1,92 @@ +#!/bin/env python3 +''' Example Python config + + This example demonstrates how you can use Python to generate complex + configuration files. + + To use this configuration, run the following commands: + + villas node <(python3 etc/python/example.py) + + @author Steffen Vogel + @copyright 2014-2021, Institute for Automation of Complex Power Systems, EONERC + @license GNU General Public License (version 3) + + VILLASnode + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +''' + +import json +import sys + +N = 10 + +nodes = { + 'raspberry': { + 'type': 'socket', + 'layer': 'udp', + 'format': 'protobuf', + + 'in': { + 'address': '*:12000', + }, + 'out': { + 'address': '1.2.3.4:12000' + } + } +} + +for i in range(N): + name = f'agent{i}' + port = 12000 + i + + nodes[name] = { + 'type': 'socket', + 'layer': 'udp', + 'format': 'protobuf', + + 'in': { + 'address': '*:12000', + 'signals': [ + { + 'name': 'in', + 'type': 'float' + } + ] + }, + 'out': { + 'address': f'5.6.7.8:{port}' + } + } + +paths = [ + { + 'in': [f'agent{i}' for i in range(N)], + 'out': 'raspberry', + 'mode': 'any', + 'hooks': [ + { + 'type': 'print' + } + ] + }, +] + +config = { + 'nodes': nodes, + 'paths': paths +} + +json.dump(config, sys.stdout, indent=2)