Files
weighing-controller/PROTOCOL.md
T
admin 35e5ffea1e Initial: backup from Claude Project 'Весовое оборудование'
- PROTOCOL.md: topology, JSON schema, MQTT topic, auth, retry logic
- HARDWARE.md: components, GPIO map, ASCII wiring, power, calibration
- FIRMWARE_NOTES.md: stack (ESP32 core 3.x), libraries, main loop, known issues, TODO
- INDEX.md: manifest + current status + blockers

Current blocker: TITAN 9 P5 default = no RS232 output.
Fix: call Zemic +7(472)277-71-19, set P5=3, then test on-site.
Related server repo: admin/scales
2026-04-30 12:26:31 +03:00

4.8 KiB
Raw Blame History

Протокол передачи данных с весов на сервер

Топология

Zemic TITAN 9 (RS232/DB25)
        ↓  TXD + GND (3-4 провода)
    MAX3232  (RS232 ↔ 3.3V TTL)
        ↓  UART TTL
    ESP32 (GPIO16/RX2)
        ↓  SPI
    W5500 Ethernet модуль
        ↓  TCP/IP (LAN)
  Mosquitto MQTT Broker (порт 1884 plain / 8883 MQTTS — в планах)
        ↓  подписчик
    Node.js / server.js (порт 3016, PM2)
        ↓  WebSocket
    Web UI (https://scales.zeroday.su)

Формат сообщения (JSON-схема)

Топик: scales/weighing/event

{
  "device_id": "scales_01",
  "timestamp": "2026-03-01T10:23:45Z",
  "weight_kg": 18450.5,
  "weight_raw": "ww018450.500kg",
  "stable": true,
  "plate": null
}
Поле Тип Описание
device_id string Идентификатор контроллера (если весов несколько)
timestamp string ISO 8601, UTC. Берётся с DS3231 RTC (синхронизируется NTP)
weight_kg float Распарсенный вес в кг (удобно для БД)
weight_raw string Сырая строка с весов (ww000.000kg)
stable bool true = вес стабилизировался перед отправкой
plate null Зарезервировано — номер авто добавляет внешняя АСУ

Формат строки с весов (Zemic A12E / TITAN 9)

ww000.000kg  — вес брутто
wn000.000kg  — вес нетто
wt000.000kg  — вес тары

ASCII, 1 стартовый бит, 8 бит данных, 1 стоповый бит. Скорость — P3 (9600 по умолчанию).

MQTT-топик и QoS

Параметр Значение
Топик scales/weighing/event
QoS 1 (at least once)
Retain false
Брокер Mosquitto на scales.zeroday.su
Порт (plain) 1884 (для тестовой фазы)
Порт (TLS) 8883 (планируется)

Аутентификация / TLS / credentials

Анонимный доступ к брокеру запрещён (allow_anonymous false).

Пользователь Пароль Роль
esp32 Esp32Scales#2026 ESP32 контроллер (publisher)
scales-server ScalesServer#2026 Node.js backend (subscriber)

Конфиг Mosquitto: /etc/mosquitto/conf.d/acs.conf
Файл паролей: /etc/mosquitto/passwd

TLS (MQTTS port 8883) — запланировано после подтверждения RS232-потока.

Логика стабилизации и retry

На стороне ESP32 (firmware)

Весы настроены на P5=3 (передача только при стабильном весе) — т.е. строка приходит уже стабильная.
Дополнительная логика на ESP32:

  1. Читаем строку каждые ~500 мс с Serial2
  2. Если последние 5–10 показаний отличаются не более чем на ±20–50 кг — считаем вес стабильным
  3. Отправляем MQTT-событие один раз
  4. Ждём пока вес упадёт ниже порога (машина уехала) → сбрасываем флаг
  5. Готовы к следующему взвешиванию

Retry при обрыве MQTT

  • При rc=-2 (не удалось подключиться) — ESP32 делает повторную попытку каждые N секунд
  • Данные не буферизуются локально (TODO: добавить очередь на случай длительного обрыва)

Текущие ограничения / TODO по протоколу

  • MQTTS (порт 8883) — включить после подтверждения RS232
  • Локальная очередь на ESP32 при обрыве связи
  • Поле plate — заполняется внешней АСУ распознавания номеров
  • Подтвердить навигацию в меню TITAN 9 для выставления P5=3 (контакт: Zemic +7 (472) 277-71-19)