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
|
backward: str
|
||||||
left: str
|
left: str
|
||||||
right: str
|
right: str
|
||||||
|
stop: str
|
||||||
|
|
||||||
def get_list_commands(self):
|
def get_list_commands(self):
|
||||||
"""Метод вернёт список всех команд"""
|
"""Метод вернёт список всех команд"""
|
||||||
|
|||||||
@@ -70,26 +70,23 @@ async def websocket_endpoint(websocket: WebSocket) -> None:
|
|||||||
|
|
||||||
while True:
|
while True:
|
||||||
# Получение команды от клиента (с веб-сокета)
|
# Получение команды от клиента (с веб-сокета)
|
||||||
command = await websocket.receive_text()
|
response = await websocket.receive_text()
|
||||||
|
data = loads(response)
|
||||||
|
command = data.get('command')
|
||||||
|
|
||||||
if previous_command != command:
|
if previous_command != command:
|
||||||
previous_command = command
|
previous_command = command
|
||||||
valid_commands = settings.commands_robot.get_list_commands()
|
valid_commands = settings.commands_robot.get_list_commands()
|
||||||
data = loads(command)
|
|
||||||
name_command = next(iter(data), None)
|
|
||||||
|
|
||||||
if name_command in valid_commands:
|
if command in valid_commands:
|
||||||
print(command)
|
|
||||||
# оптравка команды роботу
|
# оптравка команды роботу
|
||||||
robot_answer = await command_to_robot(command=command)
|
robot_answer = await command_to_robot(command=response)
|
||||||
|
|
||||||
if robot_answer:
|
if robot_answer:
|
||||||
# отправка ответа робота на вебсокет фронтенда
|
# отправка ответа робота на вебсокет фронтенда
|
||||||
await websocket.send_text(f'Получена команда: {command}, ответ робота: {robot_answer}')
|
await websocket.send_text(f'Получена команда: {command}, ответ робота: {robot_answer}')
|
||||||
print(f'Ответ робота: {robot_answer}')
|
|
||||||
except WebSocketDisconnect:
|
except WebSocketDisconnect:
|
||||||
print('WebSocket отключен') # Todo: для вывода ошибок будет настроен logger
|
print('WebSocket отключен')
|
||||||
# Todo: для каждой ошибки написать своё сообщение
|
|
||||||
except (WebSocketException, exceptions.InvalidMessage) as err:
|
except (WebSocketException, exceptions.InvalidMessage) as err:
|
||||||
print(f'{err.__class__.__name__}: {err}')
|
print(f'{err.__class__.__name__}: {err}')
|
||||||
except JSONDecodeError:
|
except JSONDecodeError:
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
|||||||
|
|
||||||
// Обработчик события открытия WebSocket-соединения
|
// Обработчик события открытия WebSocket-соединения
|
||||||
ws.onopen = function() {
|
ws.onopen = function() {
|
||||||
console.log("WebSocket подключен");
|
console.log("WebSocket клиента подключен");
|
||||||
};
|
};
|
||||||
|
|
||||||
// Обработчик события получения сообщения по WebSocket
|
// Обработчик события получения сообщения по WebSocket
|
||||||
@@ -26,7 +26,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
|||||||
|
|
||||||
// Обработчик события закрытия WebSocket-соединения
|
// Обработчик события закрытия WebSocket-соединения
|
||||||
ws.onclose = function() {
|
ws.onclose = function() {
|
||||||
console.log("WebSocket закрыт");
|
console.log("WebSocket клиента закрыт");
|
||||||
};
|
};
|
||||||
|
|
||||||
// Обработчик ошибок WebSocket
|
// Обработчик ошибок WebSocket
|
||||||
@@ -59,36 +59,45 @@ document.addEventListener("DOMContentLoaded", () => {
|
|||||||
ws.send(command); // Отправляем команду через WebSocket
|
ws.send(command); // Отправляем команду через WebSocket
|
||||||
console.log("Команда:", command); // Логируем отправленную команду
|
console.log("Команда:", command); // Логируем отправленную команду
|
||||||
} else {
|
} else {
|
||||||
console.log("WebSocket не подключён"); // Если WebSocket не открыт
|
console.log("WebSocket клиента не подключён"); // Если WebSocket не открыт
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const commandStop = {"command": "stop"};
|
||||||
|
|
||||||
// Назначение обработчиков событий для кнопки "Вперёд"
|
// Назначение обработчиков событий для кнопки "Вперёд"
|
||||||
const forwardButton = document.getElementById("forward-button");
|
const forwardButton = document.getElementById("forward-button");
|
||||||
const forwardOn = {"forward": true}
|
forwardButton.addEventListener("mousedown", () => startSendingCommand({"command": "forward"})); // Начало отправки команды
|
||||||
forwardButton.addEventListener("mousedown", () => startSendingCommand(forwardOn)); // Начало отправки команды
|
|
||||||
const forwardOff = {"forward": false}
|
|
||||||
forwardButton.addEventListener("mouseup", () => {
|
forwardButton.addEventListener("mouseup", () => {
|
||||||
sendCommand(JSON.stringify(forwardOff));
|
sendCommand(JSON.stringify(commandStop));
|
||||||
stopSendingCommand();
|
stopSendingCommand();
|
||||||
}); // отправка команды forwardOff и остановка отправки при отпускании кнопки
|
}); // отправка команды forwardOff и остановка отправки при отпускании кнопки
|
||||||
forwardButton.addEventListener("mouseleave", stopSendingCommand); // Остановка отправки, если курсор уходит с кнопки
|
forwardButton.addEventListener("mouseleave", stopSendingCommand); // Остановка отправки, если курсор уходит с кнопки
|
||||||
|
|
||||||
// Назначение обработчиков событий для кнопки "Влево"
|
// Назначение обработчиков событий для кнопки "Влево"
|
||||||
const leftButton = document.getElementById("left-button");
|
const leftButton = document.getElementById("left-button");
|
||||||
leftButton.addEventListener("mousedown", () => startSendingCommand("left"));
|
leftButton.addEventListener("mousedown", () => startSendingCommand({"command": "left"}));
|
||||||
leftButton.addEventListener("mouseup", stopSendingCommand);
|
leftButton.addEventListener("mouseup", () => {
|
||||||
|
sendCommand(JSON.stringify(commandStop));
|
||||||
|
stopSendingCommand();
|
||||||
|
});
|
||||||
leftButton.addEventListener("mouseleave", stopSendingCommand);
|
leftButton.addEventListener("mouseleave", stopSendingCommand);
|
||||||
|
|
||||||
// Назначение обработчиков событий для кнопки "Вправо"
|
// Назначение обработчиков событий для кнопки "Вправо"
|
||||||
const rightButton = document.getElementById("right-button");
|
const rightButton = document.getElementById("right-button");
|
||||||
rightButton.addEventListener("mousedown", () => startSendingCommand("right"));
|
rightButton.addEventListener("mousedown", () => startSendingCommand({"command": "right"}));
|
||||||
rightButton.addEventListener("mouseup", stopSendingCommand);
|
rightButton.addEventListener("mouseup", () => {
|
||||||
|
sendCommand(JSON.stringify(commandStop));
|
||||||
|
stopSendingCommand();
|
||||||
|
});
|
||||||
rightButton.addEventListener("mouseleave", stopSendingCommand);
|
rightButton.addEventListener("mouseleave", stopSendingCommand);
|
||||||
|
|
||||||
// Назначение обработчиков событий для кнопки "Назад"
|
// Назначение обработчиков событий для кнопки "Назад"
|
||||||
const backwardButton = document.getElementById("backward-button");
|
const backwardButton = document.getElementById("backward-button");
|
||||||
backwardButton.addEventListener("mousedown", () => startSendingCommand("backward"));
|
backwardButton.addEventListener("mousedown", () => startSendingCommand({"command": "backward"}));
|
||||||
backwardButton.addEventListener("mouseup", stopSendingCommand);
|
backwardButton.addEventListener("mouseup", () => {
|
||||||
|
sendCommand(JSON.stringify(commandStop));
|
||||||
|
stopSendingCommand();
|
||||||
|
});
|
||||||
backwardButton.addEventListener("mouseleave", stopSendingCommand);
|
backwardButton.addEventListener("mouseleave", stopSendingCommand);
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user