public async Task <IMqttClient> RegisterDevice(ICumulocityDevice device)
        {
            IConnectionDetails cDetails = new ConnectionDetailsBuilder()
                                          .WithClientId(device.ClientId)
                                          .WithHost(_baseUrlPath)
                                          .WithCredentials(BootstrapUser, Password)
                                          .WithCleanSession()
                                          .WithProtocol(TransportType.Tcp)
                                          .WithCleanSession()
                                          .Build();
            var client = new MqttClient(cDetails);
            await client.EstablishConnectionAsync();

            await client.SubscribeAsync(new MqttMessageRequest()
            {
                TopicName = "s/dcr"
            });

            client.MessageReceived += (sender, response) =>
            {
                Console.WriteLine(response.MessageContent);
            };
            // var res =  await _httpClient.PostAsync("/s/ucr", new StringContent(""));
            await client.PublishAsync(new MqttMessageRequestBuilder()
                                      .WithTopicName("s/ucr")
                                      .WithQoS(QoS.EXACTLY_ONCE)
                                      .WithMessageContent(string.Empty)
                                      .Build());

            return(null);
        }
        private IConnectionDetails CreateConnectionDetails(ICumulocityDevice device)
        {
            IConnectionDetails connectionDetails = new ConnectionDetailsBuilder()
                                                   .WithClientId(device.ClientId)
                                                   .WithHost(_cumulocityInfo.ServerUrl)
                                                   .WithCredentials(device.User, device.Password)
                                                   .WithCleanSession()
                                                   .WithProtocol(TransportType.Tcp)
                                                   .Build();

            return(connectionDetails);
        }
예제 #3
0
        private static async Task RunJsonViaMqttClientAsync(CancellationToken cToken)
        {
            const string serverUrl   = "mqtt.cumulocity.com";
            const string clientId    = "my_mqtt_cs_client";
            const string device_name = "My C# MQTT device";
            const string user        = "******";
            const string password    = "******";

            // connections details
            var cDetails = new ConnectionDetailsBuilder()
                           .WithClientId(clientId)
                           .WithHost(serverUrl)
                           .WithCredentials(user, password)
                           .WithCleanSession(true)
                           .WithProtocol(TransportType.Tcp)
                           .Build();

            MqttClient client = new MqttClient(cDetails);

            client.MessageReceived  += Client_MessageReceived;
            client.Connected        += Client_Connected;
            client.ConnectionFailed += Client_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();

            await client.PublishAsync(message);

            // set device's hardware information
            var deviceMessage = new MqttMessageRequestBuilder()
                                .WithTopicName("s/us")
                                .WithQoS(QoS.EXACTLY_ONCE)
                                .WithMessageContent("110, S123456789, 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());

            // generate a random temperature (10º-20º) measurement and send it every second
            Random rnd = new Random();

            while (!cToken.IsCancellationRequested)
            {
                int temp = rnd.Next(10, 20);
                Console.WriteLine("Sending temperature measurement (" + temp + "º) ...");
                await client.PublishAsync(new MqttMessageRequestBuilder()
                                          .WithTopicName("s/us")
                                          .WithQoS(QoS.EXACTLY_ONCE)
                                          .WithMessageContent("211," + temp)
                                          .Build());

                Thread.Sleep(1000);
            }
        }