Серверная часть умной метеостанции — REST API на FastAPI с PostgreSQL, интеграцией с Telegram и визуализацией данных с устройств
- meteostation-firmware — код Arduino + ESP (отправка данных)
- meteostation-backend — backend-сервер (этот репозиторий)
- meteostation-ml — ML-модель прогнозирования температуры и осадков
- FastAPI — веб-сервер и REST API
- PostgreSQL — база данных настроек и показаний
- Alembic — миграции схемы
- Telegram Bot (aiogram) — командами /start, /weather, /predict, /plot и т.д.
- Docker Compose — контейнеризация и развёртывание
- Nginx (reverse proxy) — SSL, домен и проксирование
docker-compose up -d
Приложение будет доступно на http://localhost:8000
, Swagger — /swagger
- Создать
.env
и установить переменные:
cp .env.example .env
- Включить локальную БД (толко для создания миграций):
USE_LOCAL_DB=1
- Установить зависимости:
poetry install
poetry shell
- Применить миграции:
make migrate
- Для создания новых миграций:
make revision
make help # Показать справку по командам
make env # Создать .env на основе .env.example
make db # Запустить сервер и базу через docker-compose
make run # Запустить FastAPI-приложение локально
make open_db # Зайти в контейнер с базой данных (psql)
make migrate # Применить все миграции (alembic upgrade)
make revision # Создать новую миграцию (autogenerate)
make upgrade # Обновить БД до последней версии
make lint # Проверить код через ruff
make format # Отформатировать код (black + isort)
make clean # Удалить временные и мусорные файлы
✅ Для продакшн-развёртывания
- Установить SSL-сертификат (например, через Certbot: cert.pem и privkey.pem)
- Прописать
telegram_webhook_url
в таблицеsettings
или в админке - Добавить домен
yourdomain.com
в конфигnginx
и проксировать порт 8000:
location / {
proxy_pass http://localhost:8000;
include proxy_params;
}
curl http://localhost:8000/api/v1/webhook/set
Команды:
/start
— приветствие/weather
— текущая погода/predict
— прогноз температуры и осадков/plot [часы]
— график показаний (по умолчанию 6ч)/settings [...]
— обновление настроек через JSON/backup
— резервная копия базы данных
- Swagger UI:
http://localhost:8000/swagger
- OpenAPI JSON:
http://localhost:8000/openapi
Проект распространяется под лицензией Apache License 2.0.
Разрешено свободное использование и модификация в образовательных и исследовательских целях