Я пытаюсь сгенерировать новое устройство и опубликовать на нем некоторые случайные данные через MQTT. Я следую этому официальному примеру: https://cumulocity.com/guides/device-sdk/mqtt-examples/#hello-mqtt-cs
Все операции выполняются без ошибок. Даже установление связи. Но когда я пытаюсь опубликовать сообщение на устройстве, я получаю следующую ошибку
«Не удалось установить соединение с сервером MQTT (ConnectionRefusedNotAuthorized)»
Вот моя информация для подключенияк серверу
const string serverUrl = "mytenant.eu-latest.cumulocity.com";
const string clientId = "d:testdevice4";
const string device_name = "testdevice4";
const string user = "<mytenant>.eu-latest/<myusername>";
const string password = "XXXXXXXX";
А вот операции, которые выполняются без выброса какого-либо исключения или события ConnectionFailed:
Установить соединение
await client.EstablishConnectionAsync();
Создать устройство
string topic = "s/us";
string payload = $"100,{device_name}, c8y_MQTTDevice";
var message = new MqttMessageRequestBuilder()
.WithTopicName(topic)
.WithQoS(QoS.EXACTLY_ONCE)
.WithMessageContent(payload)
.Build();
Другие операции в Cumulocity Пример
// set device's hardware information
var deviceMessage = new MqttMessageRequestBuilder()
.WithTopicName("s/us")
.WithQoS(QoS.EXACTLY_ONCE)
.WithMessageContent($"110, {device_name}, MQTT test model, Rev0.1")
.Build();
await client.PublishAsync(deviceMessage);
// add restart operation
await client.SubscribeAsync(new MqttMessageRequest() { TopicName = "s/ds" });
await client.SubscribeAsync(new MqttMessageRequest() { TopicName = "s/e" });
await client.PublishAsync(new MqttMessageRequestBuilder()
.WithTopicName("s/us")
.WithQoS(QoS.EXACTLY_ONCE)
.WithMessageContent("114,c8y_Restart")
.Build());
Но когда я пытаюсь опубликовать сообщение на устройстве следующим образом, событие ConnectionFailed вызывается с ошибкой:
«Не удалось установить соединение с сервером MQTT (ConnectionRefusedNotAuthorized)»
Random rnd = new Random();
while (!cToken.IsCancellationRequested)
{
int temp = rnd.Next(10, 20);
Console.WriteLine("Sending temperature measurement (" + temp + "º) ...");
var xx = client.ConnectionDetails;
await client.PublishAsync(new MqttMessageRequestBuilder()
.WithTopicName("s/us")
.WithQoS(QoS.EXACTLY_ONCE)
.WithMessageContent("211," + temp)
.Build());
Thread.Sleep(1000);
}