# Отправить сообщение с использованием Mosquitto

{% note warning %}

Сервис Yandex IoT Core больше не доступен для новых пользователей. 

Текущие пользователи могут создавать ресурсы до 1 ноября 2026 года. После сервис перейдет в режим read-only, а 1 декабря 2026 года — прекратит работу. Подробнее о сроках и порядке закрытия читайте на странице [Закрытие сервиса](../../sunset.md).

{% endnote %}

Вы можете отправлять сообщения следующих типов:

- Отправлять данные с устройства в реестр, используя топики `$devices/<идентификатор_устройства>/events` или `$registries/<идентификатор_реестра>/events`.
- Отправлять данные с устройства в реестр, используя перманентные топики `$devices/<идентификатор_устройства>/state` или `$registries/<идентификатор_реестра>/state`.
- Отправлять команды из реестра на устройство, используя топики `$devices/<идентификатор_устройства>/commands` или `$registries/<идентификатор_реестра>/commands`.
- Отправлять команды из реестра на устройство, используя перманентные топики `$devices/<идентификатор_устройства>/config` или `$registries/<идентификатор_реестра>/config`.

Для получения сообщения необходимо быть подписанным на отправителя. Как это сделать, читайте в разделе [Подписать устройство или реестр на получение сообщений с использованием Mosquitto](mosquitto-subscribe.md).

О том, как убедиться, что сообщение было успешно отправлено и доставлено, читайте в разделе [Тестирование доставки сообщения](../message-delivery-check.md).

{% note warning %}

Топик реестра и топик устройства не связаны между собой. Если устройство отправляет данные в топик устройства для телеметрических данных, получить их можно только подписавшись на этот топик. Аналогично для топика реестра.

{% endnote %}

## Перед началом работы {#before-you-begin}

Подготовьте:

1. [Реестр](../../operations/registry/registry-create.md).
1. [Сертификат для реестра](../../operations/certificates/registry-certificates.md).
1. [Устройство](../../operations/device/device-create.md).
1. [Сертификат для устройства](../../operations/certificates/device-certificates.md).
1. [Mosquitto](https://mosquitto.org), MQTT-брокер сообщений с открытым исходным кодом. Используется в инструкции для отправки сообщений и подписки на устройства. Необходимо [скачать и установить его](https://mosquitto.org/download/), чтобы работать с командами, представленными в инструкции.

## Подключиться к MQTT-серверу {#connect-mqtt-server}

Для подключения к [MQTT-серверу](../../../glossary/mqtt-server.md) используйте следующие параметры:
- [Сертификат удостоверяющего центра](https://storage.yandexcloud.net/mqtt/rootCA.crt).
- **Адрес сервера:** `mqtt.cloud.yandex.net`.
- **Порт сервера:** `8883`.
- **Протокол:** `TLSv1.2`.

## Отправить сообщение с данными {#pub-events}

Отправьте сообщение с данными, используя следующие параметры:
- `-h` — адрес [MQTT-сервера](../../../glossary/mqtt-server.md).
- `-p` — порт MQTT-сервера.
- `--cafile` — путь к сертификату удостоверяющего центра.
- `--cert` — путь к публичной части сертификата устройства.
- `--key` — путь к приватной части сертификата устройства.
- `-t` — топик устройства.
- `-m` — текст сообщения.
- `-q` — [уровень качества обслуживания (QoS)](../../concepts/index.md#qos).

{% note info %}

Если в процессе выполнения команды у вас возникла ошибка, добавьте к команде флаг `--debug` и попробуйте еще раз. Данный флаг выводит журнал отладки при выполнении команды, что помогает при диагностике проблемы.

{% endnote %}

{% list tabs group=instructions %}

- Mosquitto {#mosquitto}

    - Отправьте данные в топик устройства:

        ```
        mosquitto_pub -h mqtt.cloud.yandex.net \
          -p 8883 \
          --cafile rootCA.crt \
          --cert device-cert.pem \
          --key device-key.pem \
          -t '$devices/<идентификатор_устройства>/events' \
          -m 'Test data' \
          -q 1
        ```

    - Отправьте данные в перманентный топик устройства:

        ```
        mosquitto_pub -h mqtt.cloud.yandex.net \
          -p 8883 \
          --cafile rootCA.crt \
          --cert device-cert.pem \
          --key device-key.pem \
          -t '$devices/<идентификатор_устройства>/state' \
          -m 'Test data' \
          -q 1
        ```

        Реестр, подписанный на данный топик, будет знать, какое именно устройство отправило данные, так как в топике присутствует уникальный идентификатор устройства.

  - Отправьте данные в топик реестра:

        ```
        mosquitto_pub -h mqtt.cloud.yandex.net \
          -p 8883 \
          --cafile rootCA.crt \
          --cert device-cert.pem \
          --key device-key.pem \
          -t '$registries/<идентификатор_реестра>/events' \
          -m 'Test data' \
          -q 1
        ```

    - Отправьте данные в перманентный топик реестра:

        ```
        mosquitto_pub -h mqtt.cloud.yandex.net \
          -p 8883 \
          --cafile rootCA.crt \
          --cert device-cert.pem \
          --key device-key.pem \
          -t '$registries/<идентификатор_реестра>/state' \
          -m 'Test data' \
          -q 1
        ```

        Реестр, подписанный на данный топик, не будет знать, какое именно устройство отправило данные, так как в топике отсутствует уникальный идентификатор устройства.

{% endlist %}

## Отправить сообщение с командой {#pub-commands}

Реестр может отправить сообщение с командой одному, нескольким или всем устройствам, добавленным в него. Рассмотрим все варианты.

Отправьте сообщение с командой, используя следующие параметры:
- `-h` — адрес MQTT-сервера.
- `-p` — порт MQTT-сервера.
- `--cafile` — путь к сертификату удостоверяющего центра.
- `--cert` — путь к публичной части сертификата реестра.
- `--key` — путь к приватной части сертификата реестра.
- `-t` — топик устройства.
- `-m` — текст сообщения.
- `-q` — [уровень качества обслуживания (QoS)](../../concepts/index.md#qos).

{% note info %}

Если в процессе выполнения команды у вас возникла ошибка, добавьте к команде флаг `--debug` и попробуйте еще раз. Данный флаг выводит журнал отладки при выполнении команды, что помогает при диагностике проблемы.

{% endnote %}

{% list tabs group=instructions %}

- Mosquitto {#mosquitto}

    - Отправьте команду одному устройству:

        ```
        mosquitto_pub -h mqtt.cloud.yandex.net \
          -p 8883 \
          --cafile rootCA.crt \
          --cert registry-cert.pem \
          --key registry-key.pem \
          -t '$devices/<идентификатор_устройства>/commands' \
          -m 'Test command for first device' \
          -q 1
        ```

    - Отправьте команду одному устройству, используя перманентный топик:

        ```
        mosquitto_pub -h mqtt.cloud.yandex.net \
          -p 8883 \
          --cafile rootCA.crt \
          --cert registry-cert.pem \
          --key registry-key.pem \
          -t '$devices/<идентификатор_устройства>/config' \
          -m 'Test command for first device via permanent topic' \
          -q 1
        ```

    - Отправьте команду двум устройствам:

        ```
        mosquitto_pub -h mqtt.cloud.yandex.net \
          -p 8883 \
          --cafile cert.pem \
          --cert registry-cert.pem \
          --key registry-key.pem \
          -t '$devices/<идентификатор_первого_устройства>/commands' \
          -t '$devices/<идентификатор_второго_устройства>/commands' \
          -m 'Test command for first and second device' \
         -q 1 # Уровень качества обслуживания QoS 1.
        ```

    - Отправьте команду двум устройствам, используя перманентный топик:

        ```
        mosquitto_pub -h mqtt.cloud.yandex.net \
          -p 8883 \
          --cafile cert.pem \
          --cert registry-cert.pem \
          --key registry-key.pem \
          -t '$devices/<идентификатор_первого_устройства>/config' \
          -t '$devices/<идентификатор_второго_устройства>/config' \
          -m 'Test command for first and second devices via permanent topic' \
          -q 1 # Уровень качества обслуживания QoS 1.
        ```

    - Отправьте команду всем устройствам, добавленным в реестр:

        ```
        mosquitto_pub -h mqtt.cloud.yandex.net \
          -p 8883 \
          --cafile cert.pem \
          --cert registry-cert.pem \
          --key registry-key.pem \
          -t '$registries/<идентификатор_реестра>/commands' \
          -m 'Test command for all devices' \
          -q 1
        ```

    - Отправьте команду всем устройствам, добавленным в реестр, используя перманентный топик:

        ```
        mosquitto_pub -h mqtt.cloud.yandex.net \
          -p 8883 \
          --cafile cert.pem \
          --cert registry-cert.pem \
          --key registry-key.pem \
          -t '$registries/<идентификатор_реестра>/config' \
          -m 'Test command for all devices via permanent topic' \
          -q 1
        ```

{% endlist %}