# Интеграция с весовым контроллером — шпаргалка для разработчиков ## Архитектура ``` Весы → ESP32 контроллер → MQTT брокер → Ваш сервер ← MQTT брокер ← Ваш сервер (команда GO) ``` --- ## Настройка локального MQTT брокера Установить Mosquitto (или любой другой MQTT брокер): ```bash # Ubuntu/Debian sudo apt install mosquitto mosquitto-clients # Конфиг /etc/mosquitto/mosquitto.conf listener 1883 0.0.0.0 allow_anonymous true # или настроить авторизацию sudo systemctl restart mosquitto ``` IP вашего брокера, порт, логин и пароль сообщит администратор — он настроит их в устройстве со своей стороны. --- ## Топики MQTT ### Получение данных с весов **Топик:** `scales/weighing/event` Контроллер публикует JSON когда вес стабилизировался: ```json { "weight_kg": 12500.0, "timestamp": "2026-05-29T11:05:06", "device_id": "scales_01" } ``` Подписаться через консоль: ```bash mosquitto_sub -h localhost -t "scales/weighing/event" ``` Python пример: ```python import paho.mqtt.client as mqtt import json def on_message(client, userdata, msg): data = json.loads(msg.payload) weight = data['weight_kg'] timestamp = data['timestamp'] device = data['device_id'] print(f"Взвешивание: {weight} кг в {timestamp}") # Здесь ваша логика: # - Сделать снимок с камеры # - Распознать номер авто # - Сохранить в БД # - Отправить команду GO client = mqtt.Client() client.on_message = on_message client.connect("localhost", 1883) client.subscribe("scales/weighing/event") client.loop_forever() ``` --- ## Отправка команды GO После того как ваша система обработала взвешивание (сделала фото, распознала номер, сохранила в БД) — нужно отправить команду GO. Контроллер получит команду и переключит светофор на **зелёный**. **Топик:** `scales/weighing/go` ### Формат команды GO ```json { "device_id": "scales_01", "timestamp": "2026-05-29T11:05:11" } ``` ### Отправка через консоль: ```bash mosquitto_pub -h localhost -t "scales/weighing/go" \ -m '{"device_id":"scales_01","timestamp":"2026-05-29T11:05:11"}' ``` ### Отправка через Python: ```python import paho.mqtt.client as mqtt import json from datetime import datetime def send_go(client, device_id="scales_01"): payload = json.dumps({ "device_id": device_id, "timestamp": datetime.now().isoformat() }) client.publish("scales/weighing/go", payload) print(f"GO отправлен для {device_id}") # Полный пример — принять вес и отправить GO def on_message(client, userdata, msg): data = json.loads(msg.payload) weight = data['weight_kg'] print(f"Получен вес: {weight} кг") # Ваша логика здесь... # make_photo() # recognize_plate() # save_to_db(weight) # Отправляем GO send_go(client, data['device_id']) client = mqtt.Client() client.on_message = on_message client.connect("localhost", 1883) client.subscribe("scales/weighing/event") client.loop_forever() ``` --- ## Полная схема взаимодействия ``` 1. Машина заезжает на платформу 2. Контроллер видит вес → включает КРАСНЫЙ светофор 3. Вес стабилизируется 4. Контроллер публикует в scales/weighing/event: {"weight_kg": 12500.0, "timestamp": "...", "device_id": "scales_01"} 5. Ваш сервер получает сообщение 6. Ваш сервер делает снимки с камер, распознаёт номер, сохраняет в БД 7. Ваш сервер публикует в scales/weighing/go: {"device_id": "scales_01", "timestamp": "..."} 8. Контроллер получает GO → включает ЗЕЛЁНЫЙ светофор 9. Машина съезжает ``` --- ## Параметры устройства | Параметр | Значение | |----------|----------| | Device ID | scales_01 | | Топик данных | scales/weighing/event | | Топик GO | scales/weighing/go | IP брокера, порт и авторизацию сообщит администратор. --- ## Установка paho-mqtt ```bash pip install paho-mqtt ``` --- ## Важные моменты 1. **GO нужно отправлять на тот же брокер** где вы получили событие. 2. **Таймаут ожидания GO не ограничен** — контроллер будет ждать команду сколько угодно. Если машина уедет сама — контроллер автоматически сбросит состояние и включит зелёный. 3. **device_id в команде GO** должен совпадать с device_id из события.