mirror of
https://git.rwth-aachen.de/acs/public/villas/node/
synced 2025-03-16 00:00:02 +01:00
106 lines
2.6 KiB
Python
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()
|