Merge pull request #3 from Arduinum/arduinum/mvp_1
feat: added stop command, updated command processing, created .env.ex…
This commit was merged in pull request #3.
This commit is contained in:
12
.env.example
12
.env.example
@@ -1 +1,11 @@
|
||||
STREAM_URL="url адрес видеопотока"
|
||||
# Урлы
|
||||
STREAM_URL=адрес видеопотока
|
||||
WEBSOCKET_URL=адрес вебсокета клиента
|
||||
WEBSOCKET_URL_ROBOT=адрес вебсокета робота
|
||||
|
||||
# Команды для робота
|
||||
FORWARD=вперёд
|
||||
BACKWARD=назад
|
||||
LEFT=влево
|
||||
RIGHT=вправо
|
||||
STOP=стоп
|
||||
@@ -18,6 +18,7 @@ class CommandsRobot(ModelConfig):
|
||||
backward: str
|
||||
left: str
|
||||
right: str
|
||||
stop: str
|
||||
|
||||
def get_list_commands(self):
|
||||
"""Метод вернёт список всех команд"""
|
||||
|
||||
@@ -70,26 +70,23 @@ async def websocket_endpoint(websocket: WebSocket) -> None:
|
||||
|
||||
while True:
|
||||
# Получение команды от клиента (с веб-сокета)
|
||||
command = await websocket.receive_text()
|
||||
response = await websocket.receive_text()
|
||||
data = loads(response)
|
||||
command = data.get('command')
|
||||
|
||||
if previous_command != command:
|
||||
previous_command = command
|
||||
valid_commands = settings.commands_robot.get_list_commands()
|
||||
data = loads(command)
|
||||
name_command = next(iter(data), None)
|
||||
|
||||
if name_command in valid_commands:
|
||||
print(command)
|
||||
if command in valid_commands:
|
||||
# оптравка команды роботу
|
||||
robot_answer = await command_to_robot(command=command)
|
||||
robot_answer = await command_to_robot(command=response)
|
||||
|
||||
if robot_answer:
|
||||
# отправка ответа робота на вебсокет фронтенда
|
||||
await websocket.send_text(f'Получена команда: {command}, ответ робота: {robot_answer}')
|
||||
print(f'Ответ робота: {robot_answer}')
|
||||
except WebSocketDisconnect:
|
||||
print('WebSocket отключен') # Todo: для вывода ошибок будет настроен logger
|
||||
# Todo: для каждой ошибки написать своё сообщение
|
||||
print('WebSocket отключен')
|
||||
except (WebSocketException, exceptions.InvalidMessage) as err:
|
||||
print(f'{err.__class__.__name__}: {err}')
|
||||
except JSONDecodeError:
|
||||
|
||||
@@ -16,7 +16,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
|
||||
// Обработчик события открытия WebSocket-соединения
|
||||
ws.onopen = function() {
|
||||
console.log("WebSocket подключен");
|
||||
console.log("WebSocket клиента подключен");
|
||||
};
|
||||
|
||||
// Обработчик события получения сообщения по WebSocket
|
||||
@@ -26,7 +26,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
|
||||
// Обработчик события закрытия WebSocket-соединения
|
||||
ws.onclose = function() {
|
||||
console.log("WebSocket закрыт");
|
||||
console.log("WebSocket клиента закрыт");
|
||||
};
|
||||
|
||||
// Обработчик ошибок WebSocket
|
||||
@@ -59,36 +59,45 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
ws.send(command); // Отправляем команду через WebSocket
|
||||
console.log("Команда:", command); // Логируем отправленную команду
|
||||
} else {
|
||||
console.log("WebSocket не подключён"); // Если WebSocket не открыт
|
||||
console.log("WebSocket клиента не подключён"); // Если WebSocket не открыт
|
||||
}
|
||||
}
|
||||
|
||||
const commandStop = {"command": "stop"};
|
||||
|
||||
// Назначение обработчиков событий для кнопки "Вперёд"
|
||||
const forwardButton = document.getElementById("forward-button");
|
||||
const forwardOn = {"forward": true}
|
||||
forwardButton.addEventListener("mousedown", () => startSendingCommand(forwardOn)); // Начало отправки команды
|
||||
const forwardOff = {"forward": false}
|
||||
forwardButton.addEventListener("mousedown", () => startSendingCommand({"command": "forward"})); // Начало отправки команды
|
||||
forwardButton.addEventListener("mouseup", () => {
|
||||
sendCommand(JSON.stringify(forwardOff));
|
||||
sendCommand(JSON.stringify(commandStop));
|
||||
stopSendingCommand();
|
||||
}); // отправка команды forwardOff и остановка отправки при отпускании кнопки
|
||||
forwardButton.addEventListener("mouseleave", stopSendingCommand); // Остановка отправки, если курсор уходит с кнопки
|
||||
|
||||
// Назначение обработчиков событий для кнопки "Влево"
|
||||
const leftButton = document.getElementById("left-button");
|
||||
leftButton.addEventListener("mousedown", () => startSendingCommand("left"));
|
||||
leftButton.addEventListener("mouseup", stopSendingCommand);
|
||||
leftButton.addEventListener("mousedown", () => startSendingCommand({"command": "left"}));
|
||||
leftButton.addEventListener("mouseup", () => {
|
||||
sendCommand(JSON.stringify(commandStop));
|
||||
stopSendingCommand();
|
||||
});
|
||||
leftButton.addEventListener("mouseleave", stopSendingCommand);
|
||||
|
||||
// Назначение обработчиков событий для кнопки "Вправо"
|
||||
const rightButton = document.getElementById("right-button");
|
||||
rightButton.addEventListener("mousedown", () => startSendingCommand("right"));
|
||||
rightButton.addEventListener("mouseup", stopSendingCommand);
|
||||
rightButton.addEventListener("mousedown", () => startSendingCommand({"command": "right"}));
|
||||
rightButton.addEventListener("mouseup", () => {
|
||||
sendCommand(JSON.stringify(commandStop));
|
||||
stopSendingCommand();
|
||||
});
|
||||
rightButton.addEventListener("mouseleave", stopSendingCommand);
|
||||
|
||||
// Назначение обработчиков событий для кнопки "Назад"
|
||||
const backwardButton = document.getElementById("backward-button");
|
||||
backwardButton.addEventListener("mousedown", () => startSendingCommand("backward"));
|
||||
backwardButton.addEventListener("mouseup", stopSendingCommand);
|
||||
backwardButton.addEventListener("mousedown", () => startSendingCommand({"command": "backward"}));
|
||||
backwardButton.addEventListener("mouseup", () => {
|
||||
sendCommand(JSON.stringify(commandStop));
|
||||
stopSendingCommand();
|
||||
});
|
||||
backwardButton.addEventListener("mouseleave", stopSendingCommand);
|
||||
});
|
||||
Reference in New Issue
Block a user