[Документация Yandex Cloud](../../index.md) > [Yandex IoT Core](../index.md) > [Пошаговые инструкции](index.md) > Подписка устройства или реестра на получение сообщений

# Подписка на получение сообщений

{% 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`.
- Реестр или устройство на данные мониторинга устройства, используя топик `$monitoring/<идентификатор_устройства>/json`.

О том, как обмениваться сообщениями, читайте в разделе [Отправка сообщения](publish.md).

{% note warning %}

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

{% endnote %}

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

Подготовьте ресурсы:
1. (Опционально) [Создайте сертификаты для реестра и устройства](certificates/create-certificates.md).
1. [Создайте реестр](registry/registry-create.md).
1. [Добавьте сертификат реестру](certificates/registry-certificates.md#add-cert).
1. [Создайте устройство](device/device-create.md).
1. [Добавьте сертификат устройству](certificates/device-certificates.md#add-cert).

### Аутентификация {#auth}

Чтобы отправлять сообщения, необходимо пройти [аутентификацию](../concepts/authorization.md). Для этого используйте X.509-сертификат или логин и пароль. В данном разделе приведены примеры для обоих способов аутентификации.

## Подписать реестр на топики устройств {#sub-events}

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

{% note info %}

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

{% endnote %}

### Подпишите реестр на топик одного устройства {#one-device}

{% list tabs group=instructions %}

- CLI {#cli}
    
    Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).
    
    По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

    - Подпишите реестр на топик устройства, используя авторизацию по сертификату:
        
        ```
        yc iot mqtt subscribe \
          --cert registry-cert.pem \
          --key registry-key.pem \
          --topic '$devices/<идентификатор_устройства>/events' \
          --qos 1
        ```
    - Подпишите реестр на перманентный топик устройства, используя авторизацию по сертификату:
        
        ```
        yc iot mqtt subscribe \
          --cert registry-cert.pem \
          --key registry-key.pem \
          --topic '$devices/<идентификатор_устройства>/state' \
          --qos 1
        ```
	  
        Где:

        - `--cert` и `--key` — параметры для аутентификации с помощью сертификата.
        - `--topic` — топик устройства для отправки данных.
        - `--message` — текст сообщения.
        - `--qos` — [уровень качества обслуживания (QoS)](../concepts/index.md#qos).      

	- Подпишите реестр на топик устройства, используя авторизацию по логину и паролю:
     
        ```
        yc iot mqtt subscribe \
          --username <идентификатор_реестра> \
          --password <пароль_для_реестра> \
          --topic '$devices/<идентификатор_устройства>/events' \
          --qos 1
        ```
    - Подпишите реестр на перманентный топик устройства, используя авторизацию по логину и паролю:
     
        ```
        yc iot mqtt subscribe \
          --username <идентификатор_реестра> \
          --password <пароль_для_реестра> \
          --topic '$devices/<идентификатор_устройства>/state' \
          --qos 1
        ```
		
        Где:

        - `--username` и `--password` — параметры для аутентификации с помощью логина и пароля.
        - `--topic` — топик устройства для отправки данных.
        - `--message` — текст сообщения.
        - `--qos` — [уровень качества обслуживания (QoS)](../concepts/index.md#qos).      
      
{% endlist %} 

### Подпишите реестр на топики всех устройств, добавленных в него {#all-device}

Реестр будет получать данные только от тех устройств, которые отправляют сообщения в топик `$registries/<идентификатор_реестра>/events` или `$registries/<идентификатор_реестра>/state`.

{% list tabs group=instructions %}

- CLI {#cli}

    - Подпишите реестр на топики всех устройств, используя авторизацию по сертификату:
                
        ```
        yc iot mqtt subscribe \
          --cert registry-cert.pem \
          --key registry-key.pem \
          --topic '$registries/<идентификатор_реестра>/events' \
          --qos 1
        ```
		
    - Подпишите реестр на перманентные топики всех устройств, используя авторизацию по сертификату:
                
        ```
        yc iot mqtt subscribe \
          --cert registry-cert.pem \
          --key registry-key.pem \
          --topic '$registries/<идентификатор_реестра>/state' \
          --qos 1
        ```
      
        Где:

        - `--cert` и `--key` — параметры для аутентификации с помощью сертификата.
        - `--topic` — топик реестра для получения данных.
        - `--message` — текст сообщения.
        - `--qos` — [уровень качества обслуживания (QoS)](../concepts/index.md#qos).      

	- Подпишите реестр на топики всех устройств, используя авторизацию по логину и паролю: 
    
        ```
        yc iot mqtt subscribe \
          --username <идентификатор_реестра> \
          --password <пароль_для_реестра> \
          --topic '$registries/<идентификатор_реестра>/events' \
          --qos 1
        ```
    - Подпишите реестр на перманентные топики всех устройств, используя авторизацию по логину и паролю: 
    
        ```
        yc iot mqtt subscribe \
          --username <идентификатор_реестра> \
          --password <пароль_для_реестра> \
          --topic '$registries/<идентификатор_реестра>/state' \
          --qos 1
        ```
		
        Где:

        - `--username` и `--password` — параметры для аутентификации с помощью логина и пароля.
        - `--topic` — топик реестра для получения данных.
        - `--message` — текст сообщения.
        - `--qos` — [уровень качества обслуживания (QoS)](../concepts/index.md#qos).    

{% endlist %}

## Подписать устройство на топики реестра {#sub-commands}

Команды от реестра могут предназначаться конкретному устройству или всем устройствам в реестре. Для этого используются разные топики.

{% note info %}

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

{% endnote %}

### Подпишите устройство на топики — команды для конкретного устройства {#for-one}

{% list tabs group=instructions %}

- CLI {#cli}

    - Подпишите устройство на топики — команды для конкретного устройства, используя авторизацию по сертификату: 
            
        ```
        yc iot mqtt subscribe \
          --cert device-cert.pem \
          --key device-key.pem \
          --topic '$devices/<идентификатор_устройства>/commands' \
          --qos 1
        ```
			
    - Подпишите устройство на перманентные топики — команды для конкретного устройства, используя авторизацию по сертификату: 
            
        ```
        yc iot mqtt subscribe \
          --cert device-cert.pem \
          --key device-key.pem \
          --topic '$devices/<идентификатор_устройства>/config' \
          --qos 1
        ```

        Где:

        - `--cert` и `--key` — параметры для аутентификации с помощью сертификата.
        - `--topic` — топик устройства для получения команд.
        - `--message` — текст сообщения.
        - `--qos` — [уровень качества обслуживания (QoS)](../concepts/index.md#qos).              

	- Подпишите устройство на топики — команды для конкретного устройства, используя авторизацию по логину и паролю: 
            
        ```
        yc iot mqtt subscribe \
          --username <идентификатор_устройства> \
          --password <пароль_для_устройства> \
          --topic '$devices/<идентификатор_устройства>/commands' \
          --qos 1
        ```
			
    - Подпишите устройство на перманентные топики — команды для конкретного устройства, используя авторизацию по логину и паролю: 
            
        ```
        yc iot mqtt subscribe \
          --username <идентификатор_устройства> \
          --password <пароль_для_устройства> \
          --topic '$devices/<идентификатор_устройства>/config' \
          --qos 1
        ```
          
        Где:

        - `--username` и `--password` — параметры для аутентификации с помощью логина и пароля.
        - `--topic` — топик устройства для получения команд.
        - `--message` — текст сообщения.
        - `--qos` — [уровень качества обслуживания (QoS)](../concepts/index.md#qos).            
          
{% endlist %}
          
### Подпишите устройство на топики — команды для всех устройств {#for-all}

Команды будут получать только устройства, подписанные на топик `$registries/<идентификатор_реестра>/commands` или `$registries/<идентификатор_реестра>/config`.

{% list tabs group=instructions %}

- CLI {#cli}

    - Подпишите устройство на топики — команды, используя авторизацию по сертификату:
            
        ```
        yc iot mqtt subscribe \
          --cert device-cert.pem \
          --key device-key.pem \
          --topic '$registries/<идентификатор_реестра>/commands' \
          --qos 1
        ```
    - Подпишите устройство на перманентные топики — команды, используя авторизацию по сертификату:     
            
        ```
        yc iot mqtt subscribe \
          --cert device-cert.pem \
          --key device-key.pem \
          --topic '$registries/<идентификатор_реестра>/config' \
          --qos 2
        ```

        Где:

        - `--cert` и `--key` — параметры для аутентификации с помощью сертификата.
        - `--topic` — топик реестра для отправки команд.
        - `--message` — текст сообщения.
        - `--qos` — [уровень качества обслуживания (QoS)](../concepts/index.md#qos).      

    - Подпишите устройство на топики — команды, используя авторизацию по логину и паролю:     
        
        ```
        yc iot mqtt subscribe \
          --username <идентификатор_устройства> \
          --password <пароль_для_устройства> \
          --topic '$registries/<идентификатор_реестра>/commands' \
          --qos 1
        ```          
    - Подпишите устройство на перманентные топики — команды, используя авторизацию по логину и паролю:
        
        ```
        yc iot mqtt subscribe \
          --username <идентификатор_устройства> \
          --password <пароль_для_устройства> \
          --topic '$registries/<идентификатор_реестра>/config' \
          --qos 1
        ```          

        Где:

        - `--username` и `--password` — параметры для аутентификации с помощью логина и пароля.
        - `--topic` — топик реестра для отправки команд.
        - `--message` — текст сообщения.
        - `--qos` — [уровень качества обслуживания (QoS)](../concepts/index.md#qos).  

{% endlist %}

## Подпишитесь на топики брокера {#broker}

При использовании брокера вы можете подписаться на произвольный топик, используя для аутентификации логин и пароль или любой сертификат, назначенный брокеру.

{% list tabs group=instructions %}

- CLI {#cli}

    - Подпишитесь на топик, используя авторизацию по логину и паролю:

        ```
        yc iot mqtt subscribe \
          --username <идентификатор_брокера> \
          --password <пароль_для_брокера> \
          --topic /my/custom/topic \
          --qos 1
        ```

      Где:

        - `--username` и `--password` — параметры для аутентификации с помощью логина и пароля.
        - `--topic` — произвольное имя топика, соответствующее спецификации [MQTT](../../glossary/mqtt-server.md) и не начинающееся с символа `$`
        - `--qos` — [уровень качества обслуживания (QoS)](../concepts/index.md#qos).

    - Подпишитесь на топик, используя авторизацию по сертификату:

        ```
        yc iot mqtt subscribe \
          --cert broker-cert.pem \
          --key broker-key.pem \
          --topic /my/custom/topic \
          --qos 1
        ```

      Где:

        - `--cert` и `--key` — параметры для аутентификации с помощью сертификата.
        - `--topic` — произвольное имя топика, соответствующее спецификации MQTT и не начинающееся с символа `$`
        - `--qos` — [уровень качества обслуживания (QoS)](../concepts/index.md#qos).

{% endlist %}