docs: убраны данные VPS из шпаргалки
This commit is contained in:
@@ -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 из события.
|
||||
|
||||
Reference in New Issue
Block a user