Скрипт для опроса метеостанции Сокол-Метео по протоколу Modbus RTU, передаваемому через UDP/IP (с использованием RS-485 → Ethernet преобразователя).
Данные сохраняются в структурированные логи и CSV-файлы, контейнеризованы с помощью Docker и автоматически перезапускаются после перезагрузки сервера.
- ✅ Опрос метеостанции по Modbus RTU (регистры 0–89)
- ✅ Парсинг ключевых параметров:
- Температура (°C)
- Атмосферное давление (мм рт. ст.)
- Относительная влажность (%)
- Скорость ветра и порывы (м/с)
- Направление ветра (°)
- Уровень осадков (мм)
- Освещённость (lux)
- ✅ Логирование всех событий (включая ошибки таймаута)
- ✅ Экспорт числовых данных в CSV с временной меткой
- ✅ Работа в Docker-контейнере с автоматическим перезапуском
- ✅ Сохранение данных на хост-машине (не теряются при пересоздании контейнера)
- Python 3.13 (стандартная библиотека:
socket,csv,logging,struct) - Docker (образ на базе
python:3.13-slim) - Linux (сервер с поддержкой Docker)
- RS-485 → Ethernet преобразователь (режим UDP Client)
-
Скопируйте проект на сервер:
git clone <ваш-репозиторий> cd sokolmeteo cp config.ini.example config.ini
-
Соберите Docker-образ:
docker build -t sokolmeteo . -
Запустите контейнер:
mkdir -p ~/sokolmeteo_parcer_data/{logs,data} docker run -d \ --name meteo \ --restart unless-stopped \ --network host \ -v /home/$(whoami)/sokolmeteo_parcer_data/logs:/app/logs \ -v /home/$(whoami)/sokolmeteo_parcer_data/data:/app/data \ sokolmeteo
-
Проверьте данные:
ls ~/sokolmeteo_parcer_data/data/ # CSV-файлы ls ~/sokolmeteo_parcer_data/logs/ # Логи
Проект включает графический интерфейс на PyQt6 для мониторинга метеостанции в реальном времени.
-
Установите зависимости:
python -m pip install -r requirements.txt
-
Убедитесь, что файл
config.iniсуществует и настроен:cp config.ini.example config.ini # Отредактируйте config.ini, указав параметры подключения -
Запустите GUI:
python sokolmeteo_gui.py
Примечание: Опрос метеостанции запускается автоматически при старте приложения. Кнопки управления не требуются — данные отображаются сразу.
Проект использует CMake для сборки исполняемого файла.
- CMake 3.20 или выше
- Python 3.12+ с установленным pip
- PyQt6 и PyInstaller (установятся автоматически)
-
Создайте директорию для сборки:
mkdir build cd build -
Запустите CMake:
cmake ..
-
Соберите проект:
cmake --build .Или просто запустите CMake снова (он автоматически выполнит сборку):
cmake ..
-
Исполняемый файл будет создан в папке
build/dist/:- Windows:
sokolmeteo_gui.exe - Linux/Mac:
sokolmeteo_gui
- Windows:
-
ВАЖНО: Скопируйте
config.ini.exampleвconfig.iniрядом с исполняемым файлом и настройте параметры подключения.
cmake --build . --target clean_buildsokolmeteo/
├── sokolmeteo.py # Основной скрипт (консольный)
├── sokolmeteo_gui.py # GUI приложение (PyQt6)
├── CMakeLists.txt # CMake конфигурация для сборки
├── config.ini.example # Пример конфигурации (скопировать в config.ini)
├── requirements.txt # Зависимости (PyQt6, PyInstaller)
├── requirements-dev.txt # dev-зависимости (pytest)
├── README.md # Этот файл
└── tests/ # Тесты
~/sokolmeteo_parcer_data/
├── logs/ # *.log
└── data/ # *.csv
- Отправка данных в InfluxDB (вместо CSV)
- Создание дашборда с графиками:
- Температура, влажность, давление
- Скорость и направление ветра
- Осадки и освещённость
Использование logrotate или Python-библиотек (RotatingFileHandler) для ограничения размера логов.
Отправка оповещений в Telegram или по email при:
- Превышении таймаута
- Потере связи с метеостанцией
Миграция на docker-compose.yml для удобного управления сервисами (включая InfluxDB + Grafana в будущем).
- Скрипт отправляет Modbus-запросы в соответствии с протоколом обмена, полученным от производителя.
- Запрос передаётся в виде байтов:
01 03 00 00 00 0C 45 CF, в ответ приходит содержание регистров. - После обработки данные переводятся в десятичный формат.
- Все пути в Docker используют абсолютные ссылки (
/app/logs,/app/data).
После сбора данных (≈1 месяц) планируется провести исследования на предмет возможности использования полученной метеоинформации для предсказания возникновения неблагоприятных погодных условий в краткосрочной перспективе (около 1 часа).