Вебсокет-клиент для обмена данными с сервером. Работает на raspberry pi. Он использует данные, полученные от различных датчиков, и передает их через вебсокет. Код написан на языке Python и использует асинхронные функции для обработки данных.
homepp/__main__.pyhomepp/custom_logger.pyhomepp/sensors.pyhomepp/websocket_client.py
В идеале все должно работать в venv'e
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtСоздайте файл .env в директории с venv и добавьте следующие переменные:
WEBSOCKET_URL=ваш_url_вебсокета
# deprecated
HARDWARE_KEY=ваш_ключ_оборудованияДля запуска можно выполнить команду:
python3 homeppОсновной файл проекта, содержащий точку входа и главную асинхронную функцию для работы с вебсокетом.
main(): Основная функция, которая подключается к вебсокету и запускает отправку и получение данных.send_data(websocket): Функция для отправки данных с датчиков на сервер.receive_data(websocket): Функция для получения данных от сервера и их логирования.
Модуль для настройки логирования. Создает логгер, который пишет логи в файл и выводит их в консоль.
setup_logger(): Настраивает логгер с выводом в файл и консоль.
Модуль для работы с датчиками. Читает данные с датчиков и преобразует их в удобный для передачи формат.
convert_hex_to_float(hex_string): Конвертирует шестнадцатеричное значение в число с плавающей точкой.read_sensor_data(): Асинхронная функция для чтения данных с датчиков и их парсинга.parse_received_data(received_frame): Парсит полученные данные в структуру словаря.
Модуль для работы с вебсокетом. Содержит функции для подключения, отправки и получения данных через вебсокет.
connect_websocket(url, key): Подключается к вебсокету с указанным URL и ключом оборудования.send_data(websocket, data): Отправляет данные на сервер через вебсокет.receive_data(websocket): Получает данные с сервера через вебсокет.
Пример полученных (декодированных) данных с датчика:
Все опечатки по типу leack - продиктованы разработчиком бекенда
{
"ContollersLeackMessangesData": {
"type": 16,
"number": 1,
"status": 0,
"charge": 255,
"temperature_MK": 0,
"controlerleack": {
"leack": 31
}
}
}Пример логов при запуске и работе клиента:
2024-05-19 12:00:00,000 - __main__ - INFO - Starting websocket client
2024-05-19 12:00:00,123 - custom_logger - INFO - Connected to websocket
2024-05-19 12:00:01,456 - __main__ - INFO - Sending data via websocket: {"sensor_data": ...}
2024-05-19 12:00:02,789 - __main__ - INFO - Received data from server: {"server_response": ...}