C # Cumulocity SDK выдает «Соединение с сервером MQTT не удалось (ConnectionRefusedNotAuthorized)» - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь сгенерировать новое устройство и опубликовать на нем некоторые случайные данные через 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);
        }

1 Ответ

0 голосов
/ 14 ноября 2019

Вы получаете ошибку ConnectionRefusedNotAuthorized, потому что ваши учетные данные не верны. Если быть точным, пользователь:

const string user = "<mytenant>.eu-latest/<myusername>";

Пользователь сформирован как tenantID / username

Ваш домен арендатора (. ЕС-последний) не является идентификатором арендатора. Идентификаторы арендатора - в большинстве случаев - это числа, которым предшествует буква t, например, t123123.

, поэтому ваша строка должна выглядеть следующим образом:

const string user = "t123123/mytenant";

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

...