diff --git a/setup.py b/setup.py index 9b3a240..f6a133a 100644 --- a/setup.py +++ b/setup.py @@ -63,7 +63,8 @@ def read(fname): ], install_requires = [ 'kombu', - 'termcolor' + 'termcolor', + 'pyrtds' ], data_files = [ ('/etc/villas/controller', glob('etc/*.json')), diff --git a/villas/controller/simulator.py b/villas/controller/simulator.py index 76ad92b..9c47484 100644 --- a/villas/controller/simulator.py +++ b/villas/controller/simulator.py @@ -44,7 +44,7 @@ def set_connection(self, connection): @staticmethod def from_json(json): - from .simulators import dummy, generic, rtlab, rscad + from .simulators import dummy, generic, rtlab, rtds if json['type'] == "dummy": return dummy.DummySimulator(**json) @@ -55,8 +55,8 @@ def from_json(json): return dpsim.DPsimSimulator(**json) elif json['type'] == "rtlab": return dpsim.RTLabSimulator(**json) - elif json['type'] == "rscad": - return dpsim.RSCADSimulator(**json) + elif json['type'] == "rtds": + return dpsim.RTDSSimulator(**json) else: return None diff --git a/villas/controller/simulators/rscad.py b/villas/controller/simulators/rscad.py deleted file mode 100644 index 9968f40..0000000 --- a/villas/controller/simulators/rscad.py +++ /dev/null @@ -1,49 +0,0 @@ -import socket -import time - -from .. import simulator - -#from rtds.rack.rack import Rack - -class RscadSimulator(simulator.Simulator): - - def __init__(self, host, number): - Rack.__init__(self, host, number) - - self.name = '%s(%d)' % (host, number) - - def start(self, body): - Simulator.start(self, body) - - def stop(self, body): - Simulator.stop(self, body) - - def pause(self, body): - Simulator.pause(self, body) - - def resume(self, body): - Simulator.resume(self, body) - - @property - def state(self): - try: - user, case = self.ping() - - if len(user) > 0: - state = { - 'status' : 'running', - 'user' : user, - 'case' : case - } - else: - state = { - 'status' : 'free' - } - except socket.timeout: - state = { - 'status' : 'offline' - } - - state['time'] = int(round(time.time() * 1000)) - - return state diff --git a/villas/controller/simulators/rtds.py b/villas/controller/simulators/rtds.py new file mode 100644 index 0000000..a244a61 --- /dev/null +++ b/villas/controller/simulators/rtds.py @@ -0,0 +1,38 @@ +import socket +import rtds +import threading +import time + +from ..simulator import Simulator + +class RTDSSimulator(Simulator): + + def __init__(self, **args): + super().__init__(self, **args) + + self.host = args['host'] + self.number = args['number'] + self.interval = args['interval'] if 'interval' in args else 1 + + self.rack = rtds.Rack(self.host, self.number) + + t = threading.Thread() + t.start() + + def run(self): + while True: + user, case = self.rack.ping() + + time.sleep(self.interval) + + def __str__(self): + return "%sSimulator #%d <%s: %s, host=%s>" % (self.type, self.number, self.name, self.uuid, self.host) + + @property + def state(self): + state = super().state + + state['user'] = self.current_user + state['case'] = self.current_case + + return state