docs: убраны данные VPS из шпаргалки

This commit is contained in:
2026-05-29 17:41:46 +00:00
parent b94b69d98b
commit 004bdbaaa4
+187
View File
@@ -0,0 +1,187 @@
# Интеграция с весовым контроллером — шпаргалка для разработчиков
## Архитектура
```
Весы → 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 из события.