1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-16 00:00:02 +01:00
VILLASnode/python/examples/Shmem_CIGRE_MV.py
2021-02-17 13:01:30 +01:00

106 lines
2.6 KiB
Python

import time
from villas.node.node import Node as VILLASnode
# This could be moved to the DPsim Python code later
def get_dpsim_shmem_interface_signals():
""" It would be nice if the DPsim Shmem interface could
build-up a list of actual signal descriptions
(names, units, etc..) which attributes are exported.
This would eliviate the user from manually configuring
signal mappings """
signals = []
for i in range(0, 30):
signals.append({
'name': f'signal_{i}',
'type': 'float',
'unit': 'volts'
})
return signals
def get_dpsim_shmem_interface_config():
return {
'type': 'shmem',
'in': {
'name': '/dpsim1-villas',
'hooks': [
{
'type': 'stats'
}
],
'signals': get_dpsim_shmem_interface_signals()
},
'out': {
'name': '/villas-dpsim1'
}
}
def get_villas_config():
return {
'nodes': {
'broker1': {
'type': 'mqtt',
'format': 'json',
'host': '172.17.0.1',
'in': {
'subscribe': '/powerflow-dpsim'},
'out': {
'publish': '/dpsim-powerflow'
}
},
'dpsim1': get_dpsim_shmem_interface_config(),
},
'paths': [
{
'in': 'dpsim1',
'out': 'broker1',
'hooks': [
{
'type': 'limit_rate',
'rate': 50
}
]
}
]
}
def main():
node = VILLASnode(
config=get_villas_config()
)
node.start() # VILLASnode starts running in the background from here..
# Some infos from the running VILLASnode instance queried via its REST API
print('VILLASnode running?: ', node.is_running())
print('VILLASnode status: ', node.status)
print('VILLASnode nodes: ', node.nodes)
print('VILLASnode paths: ', node.paths)
print('VILLASnode config: ', node.active_config)
print('VILLASnode version: ', node.get_version())
# Load a new config into the running
# VILLASnode instance (old config will be replaced)
new_config = node.active_config
new_config['paths'].append({
'out': 'dpsim1',
'in': 'broker1'
})
node.load_config(new_config)
time.sleep(100)
node.stop()
if __name__ == 'main':
main()