Skip to content

bragind/sokolmeteo

Repository files navigation

Sokol Meteo Parser

Скрипт для опроса метеостанции Сокол-Метео по протоколу 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)

🚀 Запуск

  1. Скопируйте проект на сервер:

    git clone <ваш-репозиторий>
    cd sokolmeteo
    cp config.ini.example config.ini
  2. Соберите Docker-образ:

    docker build -t sokolmeteo .
  3. Запустите контейнер:

    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
  4. Проверьте данные:

    ls ~/sokolmeteo_parcer_data/data/  # CSV-файлы
    ls ~/sokolmeteo_parcer_data/logs/  # Логи
    

🖥️ GUI Приложение (Windows/Linux/Mac)

Проект включает графический интерфейс на PyQt6 для мониторинга метеостанции в реальном времени.

Запуск GUI из исходников

  1. Установите зависимости:

    python -m pip install -r requirements.txt
  2. Убедитесь, что файл config.ini существует и настроен:

    cp config.ini.example config.ini
    # Отредактируйте config.ini, указав параметры подключения
  3. Запустите GUI:

    python sokolmeteo_gui.py

    Примечание: Опрос метеостанции запускается автоматически при старте приложения. Кнопки управления не требуются — данные отображаются сразу.

Сборка исполняемого файла через CMake

Проект использует CMake для сборки исполняемого файла.

Требования

  • CMake 3.20 или выше
  • Python 3.12+ с установленным pip
  • PyQt6 и PyInstaller (установятся автоматически)

Сборка (Windows/Linux/Mac)

  1. Создайте директорию для сборки:

    mkdir build
    cd build
  2. Запустите CMake:

    cmake ..
  3. Соберите проект:

    cmake --build .

    Или просто запустите CMake снова (он автоматически выполнит сборку):

    cmake ..
  4. Исполняемый файл будет создан в папке build/dist/:

    • Windows: sokolmeteo_gui.exe
    • Linux/Mac: sokolmeteo_gui
  5. ВАЖНО: Скопируйте config.ini.example в config.ini рядом с исполняемым файлом и настройте параметры подключения.

Очистка файлов сборки

cmake --build . --target clean_build

📁 Структура проекта

sokolmeteo/
├── 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

🔮 Планы на будущее

📊 Визуализация в Grafana

  • Отправка данных в InfluxDB (вместо CSV)
  • Создание дашборда с графиками:
    • Температура, влажность, давление
    • Скорость и направление ветра
    • Осадки и освещённость

🔄 Ротация логов

Использование logrotate или Python-библиотек (RotatingFileHandler) для ограничения размера логов.

📬 Уведомления

Отправка оповещений в Telegram или по email при:

  • Превышении таймаута
  • Потере связи с метеостанцией

🐳 Docker Compose

Миграция на docker-compose.yml для удобного управления сервисами (включая InfluxDB + Grafana в будущем).


📝 Примечания

  • Скрипт отправляет Modbus-запросы в соответствии с протоколом обмена, полученным от производителя.
  • Запрос передаётся в виде байтов: 01 03 00 00 00 0C 45 CF, в ответ приходит содержание регистров.
  • После обработки данные переводятся в десятичный формат.
  • Все пути в Docker используют абсолютные ссылки (/app/logs, /app/data).

После сбора данных (≈1 месяц) планируется провести исследования на предмет возможности использования полученной метеоинформации для предсказания возникновения неблагоприятных погодных условий в краткосрочной перспективе (около 1 часа).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors