diff --git a/api.py b/api.py new file mode 100644 index 0000000000000000000000000000000000000000..237f9f8e47193cac3918a76749c87ba3edcb356e --- /dev/null +++ b/api.py @@ -0,0 +1,30 @@ +from flask import Flask, request, jsonify +from rover import Rover +from plateau import Plateau + +app = Flask(__name__) + +# Initialisierung des Rovers und des Plateaus +plateau = Plateau(10, 10) # Standardgröße, kann angepasst werden +rover = Rover() +rover.set_plateau_size(plateau.size_x, plateau.size_y) + +@app.route('/drive', methods=['POST']) +def drive_rover(): + """ + Endpunkt zum Steuern des Rovers. + Erwartet ein JSON mit dem Schlüssel "Input", der die Befehlssequenz enthält. + Gibt die erfolgreich ausgeführten Befehle zurück. + """ + data = request.get_json() + + if not data or 'Input' not in data: + return jsonify({'error': 'Ungültige Anfrage. "Input" fehlt.'}), 400 + + commands = data['Input'] + result = rover.drive(commands) + + return jsonify({'executed_commands': result}) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/mission_control.py b/mission_control.py index eae55a1410ec382e9cb3ff3cb8c9e6346d289782..891e6dc9159a73d1a662cd8b90d75d43c883e35e 100644 --- a/mission_control.py +++ b/mission_control.py @@ -28,7 +28,7 @@ class MissionControl: def send_commands(self, cmd: str) -> str: """ - Sendet einen Befehl an den Rover. + Sendet einen Befehl an den Rover über die REST-API. Args: cmd: Der zu sendende Befehl @@ -36,15 +36,27 @@ class MissionControl: Returns: Die erfolgreich ausgeführten Befehle """ - # Synchronisiere die Hindernisse zwischen Mars und Rover - # Der Rover sollte die Hindernisse nicht direkt kennen - # Stattdessen sollte er selbst stoppen, wenn ein Hindernis vorliegt - # Da wir aber keine direkte Verbindung zwischen Rover und Mars haben, - # müssen wir die Hindernisse hier synchronisieren - if hasattr(self.mars, 'plateau') and hasattr(self.mars.plateau, 'obstacles'): - self.rover.obstacles = self.mars.plateau.obstacles + import requests + import json - return self.rover.drive(cmd) + try: + # Synchronisiere die Hindernisse zwischen Mars und Rover + if hasattr(self.mars, 'plateau') and hasattr(self.mars.plateau, 'obstacles'): + self.rover.obstacles = self.mars.plateau.obstacles + + # Sende Befehl über REST-API + response = requests.post('http://localhost:5000/drive', + json={'Input': cmd}, + headers={'Content-Type': 'application/json'}) + + if response.status_code == 200: + result = response.json() + return result['executed_commands'] + else: + return f"Fehler: {response.status_code}, {response.text}" + except Exception as e: + # Fallback: Direkter Aufruf, wenn API nicht erreichbar + return self.rover.drive(cmd) def observe_plateau(self) -> list: """