Kilo MQTT — петля весов 1.0.0

Доменная петля обмена между весами и backend-ингестом: up/event (устройство → бэкенд) → down/ack + item/state + item/info (бэкенд → устройство, retained).

Документ написан с перспективы весов (send = весы публикуют, receive = весы получают). Покрыта только живая петля; полный контракт устройства (машина состояний, дисплей, boot, калибровка) — docs/firmware/mqtt-contract.md, отличия живого бэкенда — docs/firmware/backend-integration.md.

Servers

  • mqtts://mqtt.kilo.example:8883/mqttsemqx

    EMQX брокер (GCP Compute Engine).

Operations

  • SEND kilo/scale/{scale}/up/event

    Доменное событие весов (weight / register). QoS 1, не retained.

    Весы публикуют доменное событие после стабилизации/регистрации.

    Operation IDsendUpEvent

    Available only on servers:

    object
    scalestring
    required

    scale_id — slug весов.

    Accepts the following message:

    up/event

    Событие весов — weight или register.

    Message IDupEvent
    object [UpEvent]uid: https://kilo.example/schemas/mqtt/UpEvent.json

    Доменное событие весов. Топик kilo/scale/{S}/up/event, QoS 1, не retained. Незнакомые поля игнорируются (forward-compat).

    Examples

  • RECEIVE kilo/scale/{scale}/down/ack

    Прикладной high-water mark подтверждённых seq. QoS 1, retained.

    Весы получают HWM и чистят буфер неподтверждённых (seq ≤ last_seq).

    Operation IDreceiveDownAck

    Available only on servers:

    object
    scalestring
    required

    scale_id — slug весов.

    Accepts the following message:

    down/ack
    Message IDdownAck
    object [DownAck]uid: https://kilo.example/schemas/mqtt/DownAck.json

    Прикладное подтверждение high-water mark. Топик kilo/scale/{S}/down/ack, QoS 1, retained. Устройство чистит буфер неподтверждённых: удалить всё с seq <= last_seq.

    Examples

  • RECEIVE kilo/venue/{venue}/item/{nfc}/info

    Карточка контейнера для дисплея. QoS 1, retained. Пустой payload — удаление из кеша.

    Весы получают имя/тару для дисплея.

    Operation IDreceiveItemInfo

    Available only on servers:

    object
    venuestring
    required

    venue_id — slug заведения.

    nfcstring
    required

    nfc_id — UID метки, hex lowercase.

    Accepts the following message:

    item/info
    Message IDitemInfo
    object [ItemInfo]uid: https://kilo.example/schemas/mqtt/ItemInfo.json

    Карточка контейнера для дисплея. Топик kilo/venue/{V}/item/{N}/info, QoS 1, retained. Пустой payload => удалить запись из items_info[nfc_id].

    Examples

  • RECEIVE kilo/venue/{venue}/item/{nfc}/state

    Последний известный вес контейнера. QoS 1, retained. Пустой payload — удаление из кеша.

    Весы получают последний известный вес контейнера.

    Operation IDreceiveItemState

    Available only on servers:

    object
    venuestring
    required

    venue_id — slug заведения.

    nfcstring
    required

    nfc_id — UID метки, hex lowercase.

    Accepts the following message:

    item/state
    Message IDitemState
    object [ItemState]uid: https://kilo.example/schemas/mqtt/ItemState.json

    Последний известный вес контейнера. Топик kilo/venue/{V}/item/{N}/state, QoS 1, retained. Пустой payload => удалить запись из items_state[nfc_id].

    Examples

Messages

  • #1up/event

    Событие весов — weight или register.

    Message IDUpEvent
    object [UpEvent]uid: https://kilo.example/schemas/mqtt/UpEvent.json

    Доменное событие весов. Топик kilo/scale/{S}/up/event, QoS 1, не retained. Незнакомые поля игнорируются (forward-compat).

  • #2down/ack
    Message IDDownAck
    object [DownAck]uid: https://kilo.example/schemas/mqtt/DownAck.json

    Прикладное подтверждение high-water mark. Топик kilo/scale/{S}/down/ack, QoS 1, retained. Устройство чистит буфер неподтверждённых: удалить всё с seq <= last_seq.

  • #3item/info
    Message IDItemInfo
    object [ItemInfo]uid: https://kilo.example/schemas/mqtt/ItemInfo.json

    Карточка контейнера для дисплея. Топик kilo/venue/{V}/item/{N}/info, QoS 1, retained. Пустой payload => удалить запись из items_info[nfc_id].

  • #4item/state
    Message IDItemState
    object [ItemState]uid: https://kilo.example/schemas/mqtt/ItemState.json

    Последний известный вес контейнера. Топик kilo/venue/{V}/item/{N}/state, QoS 1, retained. Пустой payload => удалить запись из items_state[nfc_id].