Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
      • Работа с Yandex IoT Core с устройства с Android на языке Java
      • Работа с Yandex IoT Core на языке C#
      • Работа с Yandex IoT Core на языке Java
      • Мониторинг состояния географически распределенных устройств
      • Мониторинг показаний датчиков и уведомления о событиях
      • Тестирование доставки сообщения
      • Эмуляция множества IoT-устройств
      • Запись данных с устройства в базу данных

В этой статье:

  • Перед началом работы
  • Создайте необходимые ресурсы Yandex IoT Core
  • Создайте реестр и добавьте ему сертификат
  • Создайте устройство и добавьте ему сертификат
  • Подключитесь к Yandex IoT Core
  • Аутентифицируйтесь в Yandex IoT Core
  • Аутентификация с помощью сертификатов
  • Аутентификация по логину и паролю
  • Установите соединение
  • Подпишитесь на топик и получайте сообщения
  • Отправьте сообщение
  • Завершите соединение
  1. Прикладные решения
  2. Интернет вещей (IoT)
  3. Работа с Yandex IoT Core на языке C#

Работа с Yandex IoT Core на языке C#

Статья создана
Yandex Cloud
Обновлена 21 марта 2025 г.
  • Перед началом работы
  • Создайте необходимые ресурсы Yandex IoT Core
    • Создайте реестр и добавьте ему сертификат
    • Создайте устройство и добавьте ему сертификат
  • Подключитесь к Yandex IoT Core
  • Аутентифицируйтесь в Yandex IoT Core
    • Аутентификация с помощью сертификатов
    • Аутентификация по логину и паролю
  • Установите соединение
  • Подпишитесь на топик и получайте сообщения
  • Отправьте сообщение
  • Завершите соединение

В этом руководстве вы узнаете, как подключиться к Yandex IoT Core с помощью библиотеки Paho на языке программирования С#. Данное руководство предполагает, что вы имеете навыки разработки с использованием платформы .NET на языке C#.

Примечание

Исходный код руководства доступен на GitHub. Взаимодействие с Yandex IoT Core инкапсулировано в классе YaClient, который вы можете использовать в своих проектах.

После подключения вы сможете:

  • Отправлять сообщения.
  • Подписывать устройство или реестр на получение сообщений.

Чтобы подключиться к Yandex IoT Core и начать обмен сообщениями:

  • Создайте необходимые ресурсы Yandex IoT Core:
    • Создайте реестр и добавьте ему сертификат.
    • Создайте устройство и добавьте ему сертификат.
  • Подключитесь к Yandex IoT Core.
  • Аутентифицируйтесь в Yandex IoT Core:
    • Аутентификация с помощью сертификатов.
    • Аутентификация по логину и паролю.
  • Установите соединение.
  • Подпишитесь на топик и получайте сообщения.
  • Отправьте сообщение.
  • Завершите соединение.

Перед началом работы

  1. Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
  2. Скачайте и установите среду разработки для платформы .Net. Например, Microsoft Visual Studio.

Создайте необходимые ресурсы Yandex IoT Core

Создайте реестр и добавьте ему сертификат

Если у вас уже есть сертификат, начните со второго шага.

  1. Создайте сертификат для реестра (пропустите этот шаг, если у вас уже есть сертификат реестра):

    openssl req -x509 \
      -newkey rsa:4096 \
      -keyout registry-key.pem \
      -out registry-cert.pem \
      -nodes \
      -days 365 \
      -subj '/CN=localhost'
    
  2. Создайте реестр:

    yc iot registry create --name my-registry
    
  3. Добавьте сертификат реестру:

    yc iot registry certificate add \
      --registry-name my-registry \ # Имя реестра.
      --certificate-file registry-cert.pem # Путь к публичной части сертификата.
    

Создайте устройство и добавьте ему сертификат

Если у вас уже есть сертификат, начните со второго шага.

  1. (опционально) Создайте сертификат для устройства:

    openssl req -x509 \
      -newkey rsa:4096 \
      -keyout device-key.pem \
      -out device-cert.pem \
      -nodes \
      -days 365 \
      -subj '/CN=localhost'
    
  2. Посмотрите список реестров, в которых можно создать устройство, или создайте новый реестр.

  3. Создайте устройство:

    yc iot device create --registry-name my-registry --name my-device
    
  4. Добавьте сертификат устройству:

    yc iot device certificate add \
      --device-name my-device \ # Имя устройства.
      --certificate-file device-cert.pem # Путь к публичной части сертификата.
    

Подключитесь к Yandex IoT Core

Перед подключением настройте параметры соединения с помощью следующего кода:

// Настройка TLS-соединения
MqttClientOptionsBuilderTlsParameters tlsOptions = new MqttClientOptionsBuilderTlsParameters
{
  SslProtocol = SslProtocols.Tls12,
  UseTls = true
};

// Подключение обработчика для валидации сервера
tlsOptions.CertificateValidationCallback += CertificateValidationCallback;

// Настройка параметров соединения
var options = new MqttClientOptionsBuilder()
    .WithClientId($"Test_C#_Client_{Guid.NewGuid()}")
    .WithTcpServer(MqttServer, MqttPort)
    .WithTls(tlsOptions)
    .WithCleanSession()
    .WithCredentials(id, password)
    .WithKeepAlivePeriod(TimeSpan.FromSeconds(90))
    .WithKeepAliveSendInterval(TimeSpan.FromSeconds(60))
    .Build();

var factory = new MqttFactory();
IMqttClient mqttClient = factory.CreateMqttClient();

// Подключение обработчика события о получении данных
mqttClient.UseApplicationMessageReceivedHandler(DataHandler);

// Подключение обработчика события о соединении с Yandex IoT Core
mqttClient.UseConnectedHandler(ConnectedHandler);

// Подключение обработчика события о потери связи с Yandex IoT Core
mqttClient.UseDisconnectedHandler(DisconnectedHandler);

Где:

  • MqttClientOptionsBuilderTlsParameters — класс, в котором указываются параметры использования TLS при подключении к Yandex IoT Core.
  • MqttClientOptionsBuilder — класс-конструктор для установки параметров соединения. Вы можете оставить настройки по умолчанию, но рекомендуется задать параметры WithKeepAlivePeriod и WithKeepAliveSendInterval. От значения этих параметров зависит:
    • Частота отправки команд PINGREQ.

    • Время реакции клиента на обрыв соединения.

      Чем меньше значения указанных параметров, тем быстрее клиент понимает, что соединение было разорвано нештатным путем. Но для этого чаще отправляются тарифицируемые команды PINGREQ.

Аутентифицируйтесь в Yandex IoT Core

Есть два способа аутентификации:

  • С помощью X.509-сертификатов.
  • По логину и паролю.

Аутентификация с помощью сертификатов

При аутентификации с помощью X.509-сертификатов удобнее всего использовать сертификаты PKCS#12 в PFX-формате. Чтобы сгенерировать сертификат в PKCS#12-формате из PEM-сертификатов, выполните команду:

openssl pkcs12 -export -out cert.pfx -inkey key.pem -in cert.pem

Для загрузки сертификатов в проекте используйте следующий код:

X509Certificate2 certificate = new X509Certificate2(certPath);

Сертификат клиента, применяемый для аутентификации на сервере, указывается при настройке TLS-соединения:

X509Certificate2 certificate = new X509Certificate2(certPath);
List<byte[]> certificates = new List<byte[]>();
certificates.Add(certificate.Export(X509ContentType.SerializedCert));

// Настройка TLS-соединения
MqttClientOptionsBuilderTlsParameters tlsOptions = new MqttClientOptionsBuilderTlsParameters
{
  Certificates = certificates,
  SslProtocol = SslProtocols.Tls12,
  UseTls = true
};

Сертификат, применяемый для аутентификации сервера, используется в обработчике для валидации сервера:

private static X509Certificate2 rootCrt = new X509Certificate2("rootCA.crt");

private static bool CertificateValidationCallback(X509Certificate cert, X509Chain chain, SslPolicyErrors errors, IMqttClientOptions opts)
{
  try
  {
    if (errors == SslPolicyErrors.None)
    {
      return true;
    }

    if (errors == SslPolicyErrors.RemoteCertificateChainErrors)
    {
      chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
      chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
      chain.ChainPolicy.ExtraStore.Add(rootCrt);

      chain.Build((X509Certificate2)rootCrt);
      // Сравнение отпечатков сертификатов
      var res = chain.ChainElements.Cast<X509ChainElement>().Any(a => a.Certificate.Thumbprint == rootCrt.Thumbprint);
      return res;
    }
  }
  catch { }

  return false;
}

Аутентификация по логину и паролю

При аутентификации по логину и паролю в Yandex IoT Core требуется TLS-протокол. Для этого используйте класс MqttClientOptionsBuilderTlsParameters:

// Настройка TLS-соединения
MqttClientOptionsBuilderTlsParameters tlsOptions = new MqttClientOptionsBuilderTlsParameters
{
  SslProtocol = SslProtocols.Tls12,
  UseTls = true
};

// Подключение обработчика для валидации сервера
tlsOptions.CertificateValidationCallback += CertificateValidationCallback;

В настройках соединения с помощью метода WithCredentials укажите логин id (идентификатор реестра или устройства) и пароль password:

// Настройка параметров соединения
var options = new MqttClientOptionsBuilder()
    .WithClientId($"Test_C#_Client_{Guid.NewGuid()}")
    .WithTcpServer(MqttServer, MqttPort)
    .WithTls(tlsOptions)
    .WithCleanSession()
    .WithCredentials(id, password)
    .WithKeepAlivePeriod(TimeSpan.FromSeconds(90))
    .WithKeepAliveSendInterval(TimeSpan.FromSeconds(60))
    .Build();

Установите соединение

Установите соединение с Yandex IoT Core с помощью следующего кода:

mqttClient.ConnectAsync(options, CancellationToken.None);

Подпишитесь на топик и получайте сообщения

Для получения сообщений используйте функцию обратного вызова:

...
  mqttClient.UseApplicationMessageReceivedHandler(DataHandler);
...

private Task DataHandler(MqttApplicationMessageReceivedEventArgs arg)
{
  return Task.CompletedTask;
}

Подпишитесь на топик с помощью следующего кода. В методе SubscribeAsync нужно указать топик topic, на который вы хотите подписаться, и уровень качества обслуживания qos.

mqttClient.SubscribeAsync(topic, qos);

Отправьте сообщение

Отправьте сообщение с помощью следующего кода. В методе PublishAsync нужно указать топик topic, в который вы хотите отправить сообщение, текст сообщения и желаемый уровень качества обслуживания qos.

mqttClient.PublishAsync(topic, "Ваш текст сообщения.", qos);

Обрабатывайте события о потере связи и отслеживайте доставку сообщений с помощью функций обратного вызова:

...
  mqttClient.UseConnectedHandler(ConnectedHandler);
  mqttClient.UseDisconnectedHandler(DisconnectedHandler);
...

private Task ConnectedHandler(MqttClientConnectedEventArgs arg)
{
  return Task.CompletedTask;
}

private static Task DisconnectedHandler(MqttClientDisconnectedEventArgs arg)
{
  return Task.CompletedTask;
}

Завершите соединение

Завершите соединение с Yandex IoT Core с помощью следующего кода:

mqttClient.DisconnectAsync();

Была ли статья полезна?

Предыдущая
Работа с Yandex IoT Core с устройства с Android на языке Java
Следующая
Работа с Yandex IoT Core на языке Java
Проект Яндекса
© 2025 ООО «Яндекс.Облако»