# Rostpoliplast — Линия переработки лома во вторичный гранулят Система автоматизации линии переработки полимерного лома с контролем этапов, телеметрией и QR-сканированием. ## Архитектура ``` ┌─────────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ Датчики │──▶│ Edge GW │──▶│ MQTT │──▶│ Backend │ │ (IO-Link) │ │ (ESP32) │ │ Broker │ │ (Go) │ └─────────────┘ └──────────┘ └──────────┘ └──────────┘ │ ┌─────┴─────┐ │ InfluxDB │ │ Grafana │ └───────────┘ ``` ## Backend API ### Запуск ```bash cd backend docker-compose up -d ``` Swagger: `http://localhost:8080/swagger/index.html` ### Эндпоинты #### Тюки (Bales) | Метод | Путь | Описание | |---|---|---| | `GET` | `/api/v1/bales` | Список всех тюков | | `GET` | `/api/v1/bales/:id` | Тюк по ID | | `POST` | `/api/v1/bales` | Создать тюк (+ RabbitMQ task) | | `PUT` | `/api/v1/bales/:id` | Обновить тюк | | `DELETE` | `/api/v1/bales/:id` | Удалить тюк | | `POST` | `/api/v1/bales?type=standard` | Создать по типу (QR flow) | #### Типы тюков (Bale Types) | Метод | Путь | Описание | |---|---|---| | `GET` | `/api/v1/bale-types` | Список типов | | `GET` | `/api/v1/bale-types/:id` | Тип по ID | | `GET` | `/api/v1/bale-types/qr/:id` | QR-код для маркировки | | `POST` | `/api/v1/bale-types` | Создать тип | | `PUT` | `/api/v1/bale-types/:id` | Обновить тип | | `DELETE` | `/api/v1/bale-types/:id` | Удалить тип | #### Линия (Line) — **НОВОЕ** | Метод | Путь | Описание | |---|---|---| | `GET` | `/api/v1/line/stages` | Все этапы линии | | `GET` | `/api/v1/line/stages/:id` | Этап по ID | | `POST` | `/api/v1/line/stages` | Добавить этап | | `PUT` | `/api/v1/line/stages/:id` | Обновить этап | | `DELETE` | `/api/v1/line/stages/:id` | Удалить этап | | `GET` | `/api/v1/line/stats` | Статистика линии | #### Датчики (Sensors) — **НОВОЕ** | Метод | Путь | Описание | |---|---|---| | `POST` | `/api/v1/sensors/readings` | Показание датчика | | `GET` | `/api/v1/sensors/readings/stage/:id` | История по этапу | #### События (Events) — **НОВОЕ** | Метод | Путь | Описание | |---|---|---| | `POST` | `/api/v1/events` | Событие на линии | | `GET` | `/api/v1/events/stage/:id` | События по этапу | #### Очередь (Queue) | Метод | Путь | Описание | |---|---|---| | `GET` | `/api/v1/queue/next` | Следующая задача | ### Примеры запросов ```bash # Получить этапы линии curl http://localhost:8080/api/v1/line/stages # Отправить показание датчика curl -X POST http://localhost:8080/api/v1/sensors/readings \ -H "Content-Type: application/json" \ -d '{"stage_id": 1, "sensor": "vibration", "value": 42.5, "unit": "mm/s"}' # Создать событие curl -X POST http://localhost:8080/api/v1/events \ -H "Content-Type: application/json" \ -d '{"stage_id": 3, "event_type": "item_processed", "data": "success"}' # Статистика линии curl http://localhost:8080/api/v1/line/stats ``` ## Компоненты линии (`Line/`) | Компонент | Описание | |---|---| | `controller_*` | Контроллеры (WAGO, Siemens, Beckhoff, RPi) | | `drive_*` | ЧРП (Danfoss, ABB, Schneider, SEW, Lenze) | | `sensor_*` | Датчики (вибрация, температура, позиция, ток, уровень) | | `safety_*` | Безопасность (Pilz, Siemens, Schneider) | | `middleware_*` | Node-RED, Mosquitto, Grafana+InfluxDB | | `comm_*` | Коммуникация (Hilscher, Moxa, Turck) | | `infrastructure_*` | Шкафы, питание, коммутаторы | ## QR Сканер ```bash python QR/scanner.py ``` - Камера: Raspberry Pi Camera Module v3 - Библиотеки: `pyzbar` + `OpenCV` - Клавиши: `q` — выход, `r` — сброс ## Счетчик товаров (mmWave) ```yaml # ESPHome + LD2410B esphome run ld2410b_counter.yaml ``` - Радар 24 ГГц, отслеживание дистанции и энергии - Подсчет через конечный автомат (debounce 300ms) - MQTT интеграция, настраиваемые пороги ## Тесты ```bash cd backend go test ./... -v ``` 20 тестов покрывают все эндпоинты API.