private DeviceClient InitializeDeviceClient()
        {
            TpmDevice device   = new TpmDevice(0);
            string    hubUri   = device.GetHostName();
            string    deviceId = device.GetDeviceId();
            string    sasToken = device.GetSASToken();

            _deviceId = deviceId;

            DeviceClient deviceClient = null;

            try
            {
                deviceClient = DeviceClient.Create(
                    hubUri,
                    AuthenticationMethodFactory.CreateAuthenticationWithToken(deviceId, sasToken));

                return(deviceClient);
            }
            catch
            {
                Debug.WriteLine("ERROR!  Unable to create device client!");
            }

            return(deviceClient);
        }
Example #2
0
        public static async Task SendDeviceToCloudMessageAsync(string txtSend)
        {
            try
            {
                Microsoft.Devices.Tpm.TpmDevice myDevice = new Microsoft.Devices.Tpm.TpmDevice(0); // Use logical device 0 on the TPM by default
                string hubUri   = myDevice.GetHostName();
                string deviceId = myDevice.GetDeviceId();
                string sasToken = myDevice.GetSASToken();

                var deviceClient = DeviceClient.Create(
                    hubUri,
                    AuthenticationMethodFactory.
                    CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Amqp);

                var str = txtSend + " from " + deviceId + " " + DateTime.Now.ToString();

                var message = new Message(Encoding.ASCII.GetBytes(str));

                await deviceClient.SendEventAsync(message);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Example #3
0
    public static async Task <string> ReceiveCloudToDeviceMessageAsync()
    {
        TpmDevice myDevice = new TpmDevice(0); // Use logical device 0 on the TPM by default
        string    hubUri   = myDevice.GetHostName();
        string    deviceId = myDevice.GetDeviceId();
        string    sasToken = myDevice.GetSASToken();

        var deviceClient = DeviceClient.Create(
            hubUri,
            AuthenticationMethodFactory.
            CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Amqp);

        while (true)
        {
            var receivedMessage = await deviceClient.ReceiveAsync();

            if (receivedMessage != null)
            {
                var messageData = Encoding.ASCII.GetString(receivedMessage.GetBytes());
                await deviceClient.CompleteAsync(receivedMessage);

                return(messageData);
            }

            await Task.Delay(TimeSpan.FromSeconds(1));
        }
    }
Example #4
0
    public static async Task <bool> SendDeviceToCloudMessageAsync(string str)
    {
        try
        {
            TpmDevice myDevice = new TpmDevice(0); // Use logical device 0 on the TPM
            string    hubUri   = myDevice.GetHostName();
            string    deviceId = myDevice.GetDeviceId();
            string    hwID     = myDevice.GetHardwareDeviceId();
            string    sasToken = myDevice.GetSASToken();

            DeviceClient deviceClient = DeviceClient.Create(
                hubUri,
                AuthenticationMethodFactory.
                CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Mqtt_WebSocket_Only);


            //string m = "{\"pkey\":\"" + deviceId + "\", \"msg\":"+ str +"}";

            var message = new Message(Encoding.ASCII.GetBytes(str));

            await deviceClient.SendEventAsync(message);

            return(true);
        }
        catch (Exception ex)
        {
            return(false);
        }
    }
Example #5
0
        public MainPage()
        {
            this.InitializeComponent();
            var    iotDevice = new TpmDevice(0);
            string hubUri    = iotDevice.GetHostName();
            string deviceId  = iotDevice.GetDeviceId();
            string sasToken  = iotDevice.GetSASToken();

            deviceName = deviceId;

            deviceClient = DeviceClient.Create(hubUri,
                                               AuthenticationMethodFactory.CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Mqtt);


            _timer.Interval = TimeSpan.FromSeconds(1);
            _timer.Tick    += _timer_Tick;

            GpioController controller = GpioController.GetDefault();

            if (controller != null)
            {
                _pin = GpioController.GetDefault().OpenPin(17, GpioSharingMode.Exclusive);
                _dht = new Dht11(_pin, GpioPinDriveMode.Input);
                _timer.Start();
                _startedAt = DateTimeOffset.Now;
            }
        }
        public Task Initialize()
        {
            this.CancellationTokenSource = new CancellationTokenSource();

            // ***
            // *** Create a TpmDevice to access the credential information. Specify
            // *** a logical device ID of 0 (this is the slot we used to store the
            // *** credentials).
            // ***
            uint      logicalDeviceId = 0;
            TpmDevice tpm             = new TpmDevice(logicalDeviceId);

            // ***
            // *** Get the connection properties from the TPM.
            // ***
            string uri      = tpm.GetHostName();
            string deviceId = tpm.GetDeviceId();
            string sasToken = tpm.GetSASToken();

            // ***
            // *** Create the device connection.
            // ***
            this.DeviceClient = DeviceClient.Create(uri, AuthenticationMethodFactory.CreateAuthenticationWithToken(deviceId, sasToken));

            this.ReceiveMessages(this.DeviceClient, this.CancellationTokenSource.Token);
            return(Task.FromResult(0));
        }
        private void initDevice()
        {
            TpmDevice device   = new TpmDevice(0);
            string    hubUri   = device.GetHostName();
            string    deviceId = device.GetDeviceId();
            string    sasToken = device.GetSASToken();

            _sendDeviceClient = DeviceClient.Create(hubUri, AuthenticationMethodFactory.CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Amqp);
        }
        /// <summary>
        /// attempt to create a device client with the user credentials stored in the tpm
        /// </summary>
        public void initializeWithProvisionedDevice()
        {
            TpmDevice myDevice = new TpmDevice(0);
            string hubUri = myDevice.GetHostName();
            devID = myDevice.GetDeviceId();
            string sasToken = myDevice.GetSASToken();
            deviceClient = DeviceClient.Create(hubUri,
                AuthenticationMethodFactory.CreateAuthenticationWithToken(devID, sasToken),
                TransportType.Amqp);

        }
        public void IotHubConnectionStringBuilder_ParamHostNameAuthMethod_SharedAccessSignature()
        {
            IAuthenticationMethod authMethod = AuthenticationMethodFactory.CreateAuthenticationWithToken(DeviceId, SharedAccessSignature);
            var csBuilder = IotHubConnectionStringBuilder.Create(HostName, authMethod);

            csBuilder.HostName.Should().Be(HostName);
            csBuilder.DeviceId.Should().Be(DeviceId);
            csBuilder.SharedAccessSignature.Should().Be(SharedAccessSignature);
            csBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithToken>();

            csBuilder.SharedAccessKey.Should().BeNull();
        }
        private DeviceClient InitializeDeviceClient()
        {
            TpmDevice device   = new TpmDevice(0);
            string    hubUri   = device.GetHostName();
            string    deviceId = device.GetDeviceId();
            string    sasToken = device.GetSASToken();

            _deviceId = deviceId;

            return(DeviceClient.Create(
                       hubUri,
                       AuthenticationMethodFactory.CreateAuthenticationWithToken(deviceId, sasToken)));
        }
        private static void RefreshDeviceClient()
        {
            var    myDevice = new TpmDevice(0); // Use logical device 0 on the TPM
            string hubUri   = myDevice.GetHostName();
            string deviceId = myDevice.GetDeviceId();
            string sasToken = myDevice.GetSASToken((uint)SasTokenValidity.TotalSeconds);

            _validityExpiryTime = DateTime.Now + SasTokenValidity;
            _deviceClient       = DeviceClient.Create(
                hubUri,
                AuthenticationMethodFactory.
                CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Amqp);
        }
Example #12
0
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            TpmDevice    device            = new TpmDevice(0);
            string       hubUri            = device.GetHostName();
            string       deviceId          = device.GetDeviceId();
            string       sasToken          = device.GetSASToken();
            DeviceClient _sendDeviceClient = DeviceClient.Create(hubUri, AuthenticationMethodFactory.CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Amqp);

            while (true)
            {
                string messageString = "Hello World";
                var    message       = new Message(Encoding.ASCII.GetBytes(messageString));
                _sendDeviceClient.SendEventAsync(message);
                Task.Delay(1000).Wait();
            }
        }
Example #13
0
        DeviceClient Connect()
        {
            // Get credentials from TPM store/chip
            TpmDevice device = new TpmDevice(0); // Use logical device 0 on the TPM by default

            string iotHubUri = device.GetHostName();
            string deviceId  = device.GetDeviceId();
            string sasToken  = device.GetSASToken(validity: 3600);

            // Connect
            var deviceClient = DeviceClient.Create(
                iotHubUri,
                AuthenticationMethodFactory.CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Http1);

            return(deviceClient);
        }
Example #14
0
        public static async Task <string> ReceiveCloudToDeviceMessageAsync()
        {
            string retval = string.Empty;

            try
            {
                Microsoft.Devices.Tpm.TpmDevice myDevice = new Microsoft.Devices.Tpm.TpmDevice(0); // Use logical device 0 on the TPM by default
                string hubUri   = myDevice.GetHostName();
                string deviceId = myDevice.GetDeviceId();
                string sasToken = myDevice.GetSASToken();

                var deviceClient = DeviceClient.Create(
                    hubUri,
                    AuthenticationMethodFactory.
                    CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Amqp);

                while (true)
                {
                    try
                    {
                        Message receivedMessage = await deviceClient.ReceiveAsync();

                        if (receivedMessage == null)
                        {
                            continue;
                        }
                        var messageData = Encoding.ASCII.GetString(receivedMessage.GetBytes());
                        await deviceClient.CompleteAsync(receivedMessage);

                        //return messageData;
                        retval = messageData.ToString();
                        //MainPage.ReceiveMessage.Text = retval;
                        return(retval);
                    }
                    catch (Exception ex)
                    {
                        throw;
                    }
                }
            }
            catch (Exception ex)
            {
                retval = ex.Message.ToString();
                Debug.WriteLine("Error in sample: {0}", ex.Message);
            }
            return(retval);
        }
Example #15
0
    public static async Task <string> ReceiveCloudToDeviceMessageAsync()
    {
        try
        {
            while (true)
            {
                TpmDevice myDevice = new TpmDevice(0); // Use logical device 0 on the TPM by default
                string    hubUri   = myDevice.GetHostName();
                string    deviceId = myDevice.GetDeviceId();
                string    sasToken = myDevice.GetSASToken();

                var deviceClient = DeviceClient.Create(
                    hubUri,
                    AuthenticationMethodFactory.
                    CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Mqtt_WebSocket_Only);

                //            while (true)
                //            {
                Message receivedMessage = null;
                Debug.Write(".");
                try
                {
                    receivedMessage = await deviceClient.ReceiveAsync();
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("----- ERROR awaiting ReceiveAsync");
                }

                if (receivedMessage != null)
                {
                    var messageData = Encoding.ASCII.GetString(receivedMessage.GetBytes());
                    await deviceClient.CompleteAsync(receivedMessage);

                    deviceClient.Dispose();
                    return(messageData);
                }

                await Task.Delay(TimeSpan.FromSeconds(1));
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine("----ERROR Receive:" + ex.Message + " " + ex.InnerException.Message);
            return(null);
        }
    }
        public async Task Start()
        {
#if SIMULATE
            this.deviceClient = DeviceClient.CreateFromConnectionString(ConnectionStringProvider.Value, TransportType.Mqtt);
#else
            this.deviceClient = DeviceClient.Create(hubUri,
                                                    AuthenticationMethodFactory.CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Mqtt);
#endif
            await this.deviceClient.OpenAsync();

            await deviceClient.SetMethodHandlerAsync("DisplayOLED", DisplayOLED, null);

            await deviceClient.SetMethodHandlerAsync("ControlMotor", ControlMotoDriver, null);

            await deviceClient.SetMethodHandlerAsync("ControlRelay", ControlRelay, null);

            Debug.WriteLine("Exited!\n");
        }
Example #17
0
    public static async Task SendDeviceToCloudMessageAsync()
    {
        TpmDevice myDevice = new TpmDevice(0); // Use logical device 0 on the TPM by default
        string    hubUri   = myDevice.GetHostName();
        string    deviceId = myDevice.GetDeviceId();
        string    sasToken = myDevice.GetSASToken();

        var deviceClient = DeviceClient.Create(
            hubUri,
            AuthenticationMethodFactory.
            CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Amqp);

        var str = "Hello, Cloud from a secure C# UWP app!";

        var message = new Message(Encoding.ASCII.GetBytes(str));

        await deviceClient.SendEventAsync(message);
    }
Example #18
0
        public static async Task SendDeviceToCloudMessageAsyncUseTPM(string msg)
        {
            TpmDevice myDevice = new TpmDevice(0); // Use logical device 0 on the TPM
            string    hubUri   = myDevice.GetHostName();
            string    deviceId = myDevice.GetDeviceId();
            string    sasToken = myDevice.GetSASToken();

            var deviceClient = DeviceClient.Create(
                hubUri,
                AuthenticationMethodFactory.
                CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Amqp);

            //Not using TPM
            //var deviceClient = DeviceClient.CreateFromConnectionString(deviceConnectionString, TransportType.Amqp);

            var message = new Message(Encoding.ASCII.GetBytes(msg));

            await deviceClient.SendEventAsync(message);
        }
Example #19
0
        private async Task <bool> TryRefreshTokenAsync()
        {
            IAuthenticationMethod method;

            try
            {
                var token = _tpm.GetSASToken();
                if (String.IsNullOrEmpty(token))
                {
                    throw new Exception("TPM generated empty token");
                }
                method = AuthenticationMethodFactory.CreateAuthenticationWithToken(_id, token);
            }
            catch (Exception e)
            {
                Debug.WriteLine("Exception authenticating with TPM token: " + e.Message);
                return(false);
            }

            try
            {
                var task = _deviceClient?.CloseAsync();
                if (task != null)
                {
                    await task;
                }
                _deviceClient = DeviceClient.Create(_tpm.GetHostName(), method, TransportType.Mqtt_WebSocket_Only);
                await _deviceClient.OpenAsync();

                await _deviceClient.SetDesiredPropertyUpdateCallback(SendPropertyChange, null);

                var twin = await _deviceClient.GetTwinAsync();
                await SendPropertyChange(twin.Properties.Reported, null);
                await SendPropertyChange(twin.Properties.Desired, null);
            }
            catch (Exception e)
            {
                Debug.WriteLine("Exception connecting to Azure: " + e.Message);
                _deviceClient = null;
                return(false);
            }
            return(true);
        }
Example #20
0
 public IoTHub()
 {
     this.InitializeComponent();
     try
     {
         TpmDevice device = new TpmDevice(0);
         hubUri   = device.GetHostName();
         deviceId = device.GetDeviceId();
         sasToken = device.GetSASToken();
         //Todo
         deviceClient = DeviceClient.Create(hubUri, AuthenticationMethodFactory.CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Amqp);
         runtwin();
         deviceClient.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertyChanged, null);
     }
     catch (Exception ex)
     {
         rootPage.NotifyUser("Connection String error", NotifyType.ErrorMessage);
         return;
     }
     ReceiveDataFromAzure();
 }
Example #21
0
        public static async Task <string> ReceiveCloudToDeviceMessageAsyncButton()
        {
            string retval = string.Empty;

            Microsoft.Devices.Tpm.TpmDevice myDevice = new Microsoft.Devices.Tpm.TpmDevice(0); // Use logical device 0 on the TPM by default
            string hubUri   = myDevice.GetHostName();
            string deviceId = myDevice.GetDeviceId();
            string sasToken = myDevice.GetSASToken();

            var deviceClient = DeviceClient.Create(
                hubUri,
                AuthenticationMethodFactory.
                CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Amqp);

            var receivedMessage = await deviceClient.ReceiveAsync();

            if (receivedMessage != null)
            {
                var messageData = Encoding.ASCII.GetString(receivedMessage.GetBytes());
                await deviceClient.CompleteAsync(receivedMessage);

                //return messageData;
                retval += messageData.ToString();
            }

            //while (true)
            //{
            //    var receivedMessage = await deviceClient.ReceiveAsync();

            //    if (receivedMessage != null)
            //    {
            //        var messageData = Encoding.ASCII.GetString(receivedMessage.GetBytes());
            //        await deviceClient.CompleteAsync(receivedMessage);
            //        return messageData;
            //    }

            //    await Task.Delay(TimeSpan.FromSeconds(1));
            //}
            return(retval);
        }
        public void DeviceClientIotHubConnectionStringBuilderTest()
        {
            string connectionString = "HostName=acme.azure-devices.net;SharedAccessKeyName=AllAccessKey;DeviceId=device1;SharedAccessKey=CQN2K33r45/0WeIjpqmErV5EIvX8JZrozt3NEHCEkG8=";
            var    iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);

            Assert.IsNotNull(iotHubConnectionStringBuilder.HostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.DeviceId);
            Assert.IsNull(iotHubConnectionStringBuilder.GatewayHostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.AuthenticationMethod);
            Assert.IsNotNull(iotHubConnectionStringBuilder.SharedAccessKey);
            Assert.IsNotNull(iotHubConnectionStringBuilder.SharedAccessKeyName);
            Assert.IsNull(iotHubConnectionStringBuilder.SharedAccessSignature);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithSharedAccessPolicyKey);

            connectionString = "HostName=acme.azure-devices.net;GatewayHostName=test;SharedAccessKeyName=AllAccessKey;DeviceId=device1;SharedAccessKey=CQN2K33r45/0WeIjpqmErV5EIvX8JZrozt3NEHCEkG8=";
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);
            Assert.IsNotNull(iotHubConnectionStringBuilder.HostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.DeviceId);
            Assert.IsNotNull(iotHubConnectionStringBuilder.GatewayHostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.AuthenticationMethod);
            Assert.IsNotNull(iotHubConnectionStringBuilder.SharedAccessKey);
            Assert.IsNotNull(iotHubConnectionStringBuilder.SharedAccessKeyName);
            Assert.IsNull(iotHubConnectionStringBuilder.SharedAccessSignature);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithSharedAccessPolicyKey);

            connectionString = "HostName=acme.azure-devices.net;CredentialType=SharedAccessSignature;DeviceId=device1;SharedAccessSignature=SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=poifbMLdBGtCJknubF2FW6FLn5vND5k1IKoeQ%2bONgkE%3d&se=87824124985&skn=AllAccessKey";
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);
            Assert.IsNotNull(iotHubConnectionStringBuilder.HostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.DeviceId);
            Assert.IsNull(iotHubConnectionStringBuilder.GatewayHostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.AuthenticationMethod);
            Assert.IsNull(iotHubConnectionStringBuilder.SharedAccessKey);
            Assert.IsNotNull(iotHubConnectionStringBuilder.SharedAccessSignature);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithToken);

            connectionString = "HostName=acme.azure-devices.net;CredentialScope=Device;DeviceId=device1;SharedAccessKey=CQN2K33r45/0WeIjpqmErV5EIvX8JZrozt3NEHCEkG8=";
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);
            Assert.IsNotNull(iotHubConnectionStringBuilder.HostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.DeviceId);
            Assert.IsNull(iotHubConnectionStringBuilder.GatewayHostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.AuthenticationMethod);
            Assert.IsNotNull(iotHubConnectionStringBuilder.SharedAccessKey);
            Assert.IsNull(iotHubConnectionStringBuilder.SharedAccessKeyName);
            Assert.IsNull(iotHubConnectionStringBuilder.SharedAccessSignature);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithRegistrySymmetricKey);

            connectionString = "HostName=acme.azure-devices.net;CredentialScope=Device;DeviceId=device1;SharedAccessSignature=SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=poifbMLdBGtCJknubF2FW6FLn5vND5k1IKoeQ%2bONgkE%3d&se=87824124985&skn=AllAccessKey";
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);
            Assert.IsNotNull(iotHubConnectionStringBuilder.HostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.DeviceId);
            Assert.IsNull(iotHubConnectionStringBuilder.GatewayHostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.AuthenticationMethod);
            Assert.IsNull(iotHubConnectionStringBuilder.SharedAccessKey);
            Assert.IsNull(iotHubConnectionStringBuilder.SharedAccessKeyName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.SharedAccessSignature);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithToken);

            try
            {
                iotHubConnectionStringBuilder.HostName = "adshgfvyregferuehfiuehr";
                Assert.Fail("Expected FormatException");
            }
            catch (FormatException)
            {
            }

            iotHubConnectionStringBuilder.HostName             = "acme.azure-devices.net";
            iotHubConnectionStringBuilder.AuthenticationMethod = new DeviceAuthenticationWithRegistrySymmetricKey("Device1", "CQN2K33r45/0WeIjpqmErV5EIvX8JZrozt3NEHCEkG8=");
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithRegistrySymmetricKey);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == "CQN2K33r45/0WeIjpqmErV5EIvX8JZrozt3NEHCEkG8=");
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device1");

            iotHubConnectionStringBuilder.AuthenticationMethod = new DeviceAuthenticationWithToken("Device2", "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=poifbMLdBGtCJknubF2FW6FLn5vND5k1IKoeQ%2bONgkE%3d&se=87824124985&skn=AllAccessKey");
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithToken);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=poifbMLdBGtCJknubF2FW6FLn5vND5k1IKoeQ%2bONgkE%3d&se=87824124985&skn=AllAccessKey");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device2");

            iotHubConnectionStringBuilder.AuthenticationMethod = new DeviceAuthenticationWithSharedAccessPolicyKey("Device3", "AllAccess", "KQN2K33r45/0WeIjpqmErV5EIvX8JZrozt3NEHCEkG8=");
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithSharedAccessPolicyKey);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == "KQN2K33r45/0WeIjpqmErV5EIvX8JZrozt3NEHCEkG8=");
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device3");

            iotHubConnectionStringBuilder.AuthenticationMethod = new DeviceAuthenticationWithToken("Device4", "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=poifbMLdBGtCJknubF2FW6FLn5vND5k1IKoeQ%2bONgkE%3d&se=87824124985&skn=AllAccessKey");
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithToken);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=poifbMLdBGtCJknubF2FW6FLn5vND5k1IKoeQ%2bONgkE%3d&se=87824124985&skn=AllAccessKey");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device4");

            IAuthenticationMethod authMethod = AuthenticationMethodFactory.CreateAuthenticationWithToken("Device5", "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=poifbMLdBGtCJknubF2FW6FLn5vND5k1IKoeQ%2bONgkE%3d&se=87824124985&skn=AllAccessKey");

            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create("acme1.azure-devices.net", authMethod);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithToken);
            Assert.IsTrue(iotHubConnectionStringBuilder.HostName == "acme1.azure-devices.net");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=poifbMLdBGtCJknubF2FW6FLn5vND5k1IKoeQ%2bONgkE%3d&se=87824124985&skn=AllAccessKey");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device5");

            authMethod = new DeviceAuthenticationWithSharedAccessPolicyKey("Device3", "AllAccess", "KQN2K33r45/0WeIjpqmErV5EIvX8JZrozt3NEHCEkG8=");
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create("acme2.azure-devices.net", authMethod);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithSharedAccessPolicyKey);
            Assert.IsTrue(iotHubConnectionStringBuilder.HostName == "acme2.azure-devices.net");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == "KQN2K33r45/0WeIjpqmErV5EIvX8JZrozt3NEHCEkG8=");
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device3");

            authMethod = new DeviceAuthenticationWithToken("Device2", "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=poifbMLdBGtCJknubF2FW6FLn5vND5k1IKoeQ%2bONgkE%3d&se=87824124985&skn=AllAccessKey");
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create("acme3.azure-devices.net", authMethod);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithToken);
            Assert.IsTrue(iotHubConnectionStringBuilder.HostName == "acme3.azure-devices.net");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=poifbMLdBGtCJknubF2FW6FLn5vND5k1IKoeQ%2bONgkE%3d&se=87824124985&skn=AllAccessKey");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device2");

            authMethod = new DeviceAuthenticationWithRegistrySymmetricKey("Device1", "CQN2K33r45/0WeIjpqmErV5EIvX8JZrozt3NEHCEkG8=");
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create("acme4.azure-devices.net", authMethod);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithRegistrySymmetricKey);
            Assert.IsTrue(iotHubConnectionStringBuilder.HostName == "acme4.azure-devices.net");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == "CQN2K33r45/0WeIjpqmErV5EIvX8JZrozt3NEHCEkG8=");
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device1");
        }
Example #23
0
        private async void SensorUpdateTimerCallback(object state)
        {
            try
            {
                // Checking that SaS token isn't about to expire
                if ((DateTime.UtcNow - sasTokenIssuedAtUtc) >= sasTokenValidityPeriod)
                {
                    Debug.WriteLine($"{DateTime.UtcNow.ToString("hh:mm:ss")} SAS token needs renewing");

                    try
                    {
                        TpmDevice myDevice = new TpmDevice(0);                         // Use logical device 0 on the TPM

                        azureIoTHubUri      = myDevice.GetHostName();
                        deviceId            = myDevice.GetDeviceId();
                        sasToken            = myDevice.GetSASToken((uint)sasTokenValidityPeriod.TotalSeconds);
                        sasTokenIssuedAtUtc = DateTime.UtcNow;
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine($"TpmDevice.GetSASToken refresh failed:{ex.Message}");
                        return;
                    }

                    try
                    {
                        azureIoTHubClient = DeviceClient.Create(azureIoTHubUri, AuthenticationMethodFactory.CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Mqtt);
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine($"DeviceClient.Create with TPM info failed:{ex.Message}");
                        return;
                    }

                    Debug.WriteLine($"{DateTime.UtcNow.ToString("hh:mm:ss")} SAS token renewed ");
                }

                UnitsNet.Temperature temperature = bme280Sensor.Temperature;
                double            humidity       = bme280Sensor.Humidity;
                UnitsNet.Pressure airPressure    = bme280Sensor.Pressure;

                Debug.WriteLine($"{DateTime.UtcNow.ToLongTimeString()} Timer triggered " +
                                $"Temperature: {temperature.DegreesCelsius:0.0}°C {temperature.DegreesFahrenheit:0.0}°F " +
                                $"Humidity: {humidity:0.0}% " +
                                $"AirPressure: {airPressure.Kilopascals:0.000}KPa ");

                SensorPayloadDto sensorPayload = new SensorPayloadDto()
                {
                    Temperature = temperature.DegreesCelsius,
                    Humidity    = humidity,
                    AirPressure = airPressure.Kilopascals,
                };

                string payloadText = JsonConvert.SerializeObject(sensorPayload);

                using (var message = new Message(Encoding.ASCII.GetBytes(payloadText)))
                {
                    Debug.WriteLine($" {DateTime.UtcNow.ToString("hh:mm:ss.fff")} AzureIoTHubClient SendEventAsync starting");
                    await azureIoTHubClient.SendEventAsync(message);

                    Debug.WriteLine($" {DateTime.UtcNow.ToString("hh:mm:ss.fff")} AzureIoTHubClient SendEventAsync finished");
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"Retrieving or sending sensor values failed:{ex.Message}");
            }
        }
Example #24
0
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            try
            {
                bme280Sensor = new BME280(0x76);
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"BME280 Initialisation failed:{ex.Message}");

                return;
            }

            try
            {
                TpmDevice myDevice = new TpmDevice(0);                 // Use logical device 0 on the TPM

                azureIoTHubUri      = myDevice.GetHostName();
                deviceId            = myDevice.GetDeviceId();
                sasToken            = myDevice.GetSASToken((uint)sasTokenValidityPeriod.TotalSeconds);
                sasTokenIssuedAtUtc = DateTime.UtcNow;
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"TpmDevice.GetSASToken failed:{ex.Message}");
                return;
            }

            try
            {
                azureIoTHubClient = DeviceClient.Create(azureIoTHubUri, AuthenticationMethodFactory.CreateAuthenticationWithToken(deviceId, sasToken), TransportType.Mqtt);
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"DeviceClient.Create with TPM info failed:{ex.Message}");
                return;
            }

            try
            {
                azureIoTHubClient.SetMethodHandlerAsync("Restart", RestartAsync, null);
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"Azure IoT Hub device method handler configuration failed:{ex.Message}");
                return;
            }

            try
            {
                TwinCollection reportedProperties;
                reportedProperties = new TwinCollection();

                // This is from the OS
                reportedProperties["Timezone"]    = TimeZoneSettings.CurrentTimeZoneDisplayName;
                reportedProperties["OSVersion"]   = Environment.OSVersion.VersionString;
                reportedProperties["MachineName"] = Environment.MachineName;

                // This is from the application manifest
                Package        package   = Package.Current;
                PackageId      packageId = package.Id;
                PackageVersion version   = packageId.Version;
                reportedProperties["ApplicationDisplayName"] = package.DisplayName;
                reportedProperties["ApplicationName"]        = packageId.Name;
                reportedProperties["ApplicationVersion"]     = string.Format($"{version.Major}.{version.Minor}.{version.Build}.{version.Revision}");

                // Unique identifier from the hardware
                SystemIdentificationInfo systemIdentificationInfo = SystemIdentification.GetSystemIdForPublisher();
                using (DataReader reader = DataReader.FromBuffer(systemIdentificationInfo.Id))
                {
                    byte[] bytes = new byte[systemIdentificationInfo.Id.Length];
                    reader.ReadBytes(bytes);
                    reportedProperties["SystemId"] = BitConverter.ToString(bytes);
                }

                azureIoTHubClient.UpdateReportedPropertiesAsync(reportedProperties).Wait();
            }
            catch (Exception ex)
            {
                Debug.Print($"Azure IoT Hub device twin configuration retrieval failed:{ex.Message}");
                return;
            }

            try
            {
                deviceTwin = azureIoTHubClient.GetTwinAsync().Result;
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"Azure IoT Hub device twin configuration retrieval failed:{ex.Message}");
                return;
            }

            try
            {
                if (deviceTwin.Properties.Desired.Contains("TimerDue"))
                {
                    timerDue = TimeSpan.Parse(deviceTwin.Properties.Desired["TimerDue"].ToString());
                }

                if (deviceTwin.Properties.Desired.Contains("TimerPeriod"))
                {
                    timerPeriod = TimeSpan.Parse(deviceTwin.Properties.Desired["TimerPeriod"].ToString());
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"Sensor due or period configuration retrieval failed using default:{ex.Message}");
                return;
            }

            bme280InputPollingTimer = new Timer(SensorUpdateTimerCallback, null, timerDue, timerPeriod);

            // enable task to continue running in background
            backgroundTaskDeferral = taskInstance.GetDeferral();
        }
Example #25
0
        public void DeviceClientIotHubConnectionStringBuilderTest()
        {
            const string hostName                   = "acme.azure-devices.net";
            const string gatewayHostName            = "gateway.acme.azure-devices.net";
            const string transparentGatewayHostName = "test";
            const string deviceId                   = "device1";
            const string deviceIdSplChar            = "device1-.+%_#*?!(),=@;$'";
            const string sharedAccessKey            = "dGVzdFN0cmluZzE=";
            const string sharedAccessKeyName        = "AllAccessKey";
            const string credentialScope            = "Device";
            const string credentialType             = "SharedAccessSignature";
            const string sharedAccessSignature      = "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=dGVzdFN0cmluZzU=&se=87824124985&skn=AllAccessKey";

            string connectionString = $"HostName={hostName};SharedAccessKeyName={sharedAccessKeyName};DeviceId={deviceIdSplChar};SharedAccessKey={sharedAccessKey}";
            var    iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);

            iotHubConnectionStringBuilder.HostName.Should().Be(hostName);
            iotHubConnectionStringBuilder.DeviceId.Should().Be(deviceIdSplChar);
            iotHubConnectionStringBuilder.GatewayHostName.Should().BeNull();
            iotHubConnectionStringBuilder.SharedAccessKey.Should().Be(sharedAccessKey);
            iotHubConnectionStringBuilder.SharedAccessKeyName.Should().Be(sharedAccessKeyName);
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().BeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithSharedAccessPolicyKey>();

            connectionString = $"HostName={hostName};GatewayHostName={transparentGatewayHostName};SharedAccessKeyName={sharedAccessKeyName};DeviceId={deviceId};SharedAccessKey={sharedAccessKey}";
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);
            iotHubConnectionStringBuilder.HostName.Should().Be(hostName);
            iotHubConnectionStringBuilder.DeviceId.Should().Be(deviceId);
            iotHubConnectionStringBuilder.GatewayHostName.Should().Be(transparentGatewayHostName);
            iotHubConnectionStringBuilder.SharedAccessKey.Should().Be(sharedAccessKey);
            iotHubConnectionStringBuilder.SharedAccessKeyName.Should().Be(sharedAccessKeyName);
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().BeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithSharedAccessPolicyKey>();

            connectionString = $"HostName={hostName};CredentialType={credentialType};DeviceId={deviceId};SharedAccessSignature={sharedAccessSignature}";
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);
            iotHubConnectionStringBuilder.HostName.Should().Be(hostName);
            iotHubConnectionStringBuilder.DeviceId.Should().Be(deviceId);
            iotHubConnectionStringBuilder.GatewayHostName.Should().BeNull();
            iotHubConnectionStringBuilder.SharedAccessKey.Should().BeNull();
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().Be(sharedAccessSignature);
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithToken>();

            connectionString = $"HostName={hostName};CredentialScope={credentialScope};DeviceId={deviceId};SharedAccessKey={sharedAccessKey}";
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);
            iotHubConnectionStringBuilder.HostName.Should().Be(hostName);
            iotHubConnectionStringBuilder.DeviceId.Should().Be(deviceId);
            iotHubConnectionStringBuilder.GatewayHostName.Should().BeNull();
            iotHubConnectionStringBuilder.SharedAccessKey.Should().Be(sharedAccessKey);
            iotHubConnectionStringBuilder.SharedAccessKeyName.Should().BeNull();
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().BeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithRegistrySymmetricKey>();

            connectionString = $"HostName={hostName};CredentialScope={credentialScope};DeviceId={deviceId};SharedAccessSignature={sharedAccessSignature}";
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);
            iotHubConnectionStringBuilder.HostName.Should().Be(hostName);
            iotHubConnectionStringBuilder.DeviceId.Should().Be(deviceId);
            iotHubConnectionStringBuilder.GatewayHostName.Should().BeNull();
            iotHubConnectionStringBuilder.SharedAccessKey.Should().BeNull();
            iotHubConnectionStringBuilder.SharedAccessKeyName.Should().BeNull();
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().Be(sharedAccessSignature);
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithToken>();

            iotHubConnectionStringBuilder.HostName             = transparentGatewayHostName;
            iotHubConnectionStringBuilder.AuthenticationMethod = new DeviceAuthenticationWithRegistrySymmetricKey(deviceIdSplChar, sharedAccessKey);
            iotHubConnectionStringBuilder.HostName.Should().Be(transparentGatewayHostName);
            iotHubConnectionStringBuilder.DeviceId.Should().Be(deviceIdSplChar);
            iotHubConnectionStringBuilder.SharedAccessKey.Should().Be(sharedAccessKey);
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().BeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithRegistrySymmetricKey>();

            iotHubConnectionStringBuilder.HostName             = hostName;
            iotHubConnectionStringBuilder.AuthenticationMethod = new DeviceAuthenticationWithRegistrySymmetricKey(deviceIdSplChar, sharedAccessKey);
            iotHubConnectionStringBuilder.DeviceId.Should().Be(deviceIdSplChar);
            iotHubConnectionStringBuilder.SharedAccessKey.Should().Be(sharedAccessKey);
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().BeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithRegistrySymmetricKey>();

            iotHubConnectionStringBuilder.AuthenticationMethod = new DeviceAuthenticationWithToken(deviceId, sharedAccessSignature);
            iotHubConnectionStringBuilder.DeviceId.Should().Be(deviceId);
            iotHubConnectionStringBuilder.SharedAccessKey.Should().BeNull();
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().Be(sharedAccessSignature);
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithToken>();

            iotHubConnectionStringBuilder.AuthenticationMethod = new DeviceAuthenticationWithSharedAccessPolicyKey(deviceId, sharedAccessKeyName, sharedAccessKey);
            iotHubConnectionStringBuilder.DeviceId.Should().Be(deviceId);
            iotHubConnectionStringBuilder.SharedAccessKey.Should().Be(sharedAccessKey);
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().BeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithSharedAccessPolicyKey>();

            iotHubConnectionStringBuilder.AuthenticationMethod = new DeviceAuthenticationWithToken(deviceId, sharedAccessSignature);
            iotHubConnectionStringBuilder.DeviceId.Should().Be(deviceId);
            iotHubConnectionStringBuilder.SharedAccessKey.Should().BeNull();
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().Be(sharedAccessSignature);
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithToken>();

            IAuthenticationMethod authMethod = AuthenticationMethodFactory.CreateAuthenticationWithToken(deviceId, sharedAccessSignature);

            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(hostName, authMethod);
            iotHubConnectionStringBuilder.HostName.Should().Be(hostName);
            iotHubConnectionStringBuilder.DeviceId.Should().Be(deviceId);
            iotHubConnectionStringBuilder.SharedAccessKey.Should().BeNull();
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().Be(sharedAccessSignature);
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithToken>();

            authMethod = new DeviceAuthenticationWithSharedAccessPolicyKey(deviceId, sharedAccessKeyName, sharedAccessKey);
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(hostName, authMethod);
            iotHubConnectionStringBuilder.HostName.Should().Be(hostName);
            iotHubConnectionStringBuilder.DeviceId.Should().Be(deviceId);
            iotHubConnectionStringBuilder.SharedAccessKey.Should().Be(sharedAccessKey);
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().BeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithSharedAccessPolicyKey>();

            authMethod = new DeviceAuthenticationWithToken(deviceId, sharedAccessSignature);
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(hostName, authMethod);
            iotHubConnectionStringBuilder.HostName.Should().Be(hostName);
            iotHubConnectionStringBuilder.DeviceId.Should().Be(deviceId);
            iotHubConnectionStringBuilder.SharedAccessKey.Should().BeNull();
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().Be(sharedAccessSignature);
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithToken>();

            authMethod = new DeviceAuthenticationWithRegistrySymmetricKey(deviceIdSplChar, sharedAccessKey);
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(hostName, authMethod);
            iotHubConnectionStringBuilder.HostName.Should().Be(hostName);
            iotHubConnectionStringBuilder.DeviceId.Should().Be(deviceIdSplChar);
            iotHubConnectionStringBuilder.SharedAccessKey.Should().Be(sharedAccessKey);
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().BeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithRegistrySymmetricKey>();

            IAuthenticationMethod authenticationMethod = new DeviceAuthenticationWithRegistrySymmetricKey(deviceIdSplChar, sharedAccessKey);

            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(hostName, gatewayHostName, authenticationMethod);
            iotHubConnectionStringBuilder.HostName.Should().Be(hostName);
            iotHubConnectionStringBuilder.GatewayHostName.Should().Be(gatewayHostName);
            iotHubConnectionStringBuilder.SharedAccessKey.Should().Be(sharedAccessKey);
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().BeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithRegistrySymmetricKey>();

            authenticationMethod          = new DeviceAuthenticationWithRegistrySymmetricKey(deviceIdSplChar, sharedAccessKey);
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(hostName, authenticationMethod);
            iotHubConnectionStringBuilder.HostName.Should().Be(hostName);
            iotHubConnectionStringBuilder.GatewayHostName.Should().BeNull();
            iotHubConnectionStringBuilder.SharedAccessKey.Should().Be(sharedAccessKey);
            iotHubConnectionStringBuilder.SharedAccessSignature.Should().BeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().NotBeNull();
            iotHubConnectionStringBuilder.AuthenticationMethod.Should().BeOfType <DeviceAuthenticationWithRegistrySymmetricKey>();
        }
        public void DeviceClientIotHubConnectionStringBuilderTest()
        {
            string connectionString = "HostName=acme.azure-devices.net;SharedAccessKeyName=AllAccessKey;DeviceId=device1;SharedAccessKey=dGVzdFN0cmluZzE=";
            var    iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);

            Assert.IsNotNull(iotHubConnectionStringBuilder.HostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.DeviceId);
            Assert.IsNull(iotHubConnectionStringBuilder.GatewayHostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.AuthenticationMethod);
            Assert.IsNotNull(iotHubConnectionStringBuilder.SharedAccessKey);
            Assert.IsNotNull(iotHubConnectionStringBuilder.SharedAccessKeyName);
            Assert.IsNull(iotHubConnectionStringBuilder.SharedAccessSignature);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithSharedAccessPolicyKey);

            connectionString = "HostName=acme.azure-devices.net;GatewayHostName=test;SharedAccessKeyName=AllAccessKey;DeviceId=device1;SharedAccessKey=dGVzdFN0cmluZzE=";
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);
            Assert.IsNotNull(iotHubConnectionStringBuilder.HostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.DeviceId);
            Assert.IsNotNull(iotHubConnectionStringBuilder.GatewayHostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.AuthenticationMethod);
            Assert.IsNotNull(iotHubConnectionStringBuilder.SharedAccessKey);
            Assert.IsNotNull(iotHubConnectionStringBuilder.SharedAccessKeyName);
            Assert.IsNull(iotHubConnectionStringBuilder.SharedAccessSignature);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithSharedAccessPolicyKey);

            connectionString = "HostName=acme.azure-devices.net;CredentialType=SharedAccessSignature;DeviceId=device1;SharedAccessSignature=SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=dGVzdFN0cmluZzU=&se=87824124985&skn=AllAccessKey";
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);
            Assert.IsNotNull(iotHubConnectionStringBuilder.HostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.DeviceId);
            Assert.IsNull(iotHubConnectionStringBuilder.GatewayHostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.AuthenticationMethod);
            Assert.IsNull(iotHubConnectionStringBuilder.SharedAccessKey);
            Assert.IsNotNull(iotHubConnectionStringBuilder.SharedAccessSignature);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithToken);

            connectionString = "HostName=acme.azure-devices.net;CredentialScope=Device;DeviceId=device1;SharedAccessKey=dGVzdFN0cmluZzE=";
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);
            Assert.IsNotNull(iotHubConnectionStringBuilder.HostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.DeviceId);
            Assert.IsNull(iotHubConnectionStringBuilder.GatewayHostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.AuthenticationMethod);
            Assert.IsNotNull(iotHubConnectionStringBuilder.SharedAccessKey);
            Assert.IsNull(iotHubConnectionStringBuilder.SharedAccessKeyName);
            Assert.IsNull(iotHubConnectionStringBuilder.SharedAccessSignature);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithRegistrySymmetricKey);

            connectionString = "HostName=acme.azure-devices.net;CredentialScope=Device;DeviceId=device1;SharedAccessSignature=SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=dGVzdFN0cmluZzU=&se=87824124985&skn=AllAccessKey";
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(connectionString);
            Assert.IsNotNull(iotHubConnectionStringBuilder.HostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.DeviceId);
            Assert.IsNull(iotHubConnectionStringBuilder.GatewayHostName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.AuthenticationMethod);
            Assert.IsNull(iotHubConnectionStringBuilder.SharedAccessKey);
            Assert.IsNull(iotHubConnectionStringBuilder.SharedAccessKeyName);
            Assert.IsNotNull(iotHubConnectionStringBuilder.SharedAccessSignature);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithToken);

            try
            {
                iotHubConnectionStringBuilder.HostName = "adshgfvyregferuehfiuehr";
                Assert.Fail("Expected FormatException");
            }
            catch (FormatException)
            {
            }

            iotHubConnectionStringBuilder.HostName             = "acme.azure-devices.net";
            iotHubConnectionStringBuilder.AuthenticationMethod = new DeviceAuthenticationWithRegistrySymmetricKey("Device1", "dGVzdFN0cmluZzE=");
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithRegistrySymmetricKey);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == "dGVzdFN0cmluZzE=");
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device1");

            iotHubConnectionStringBuilder.AuthenticationMethod = new DeviceAuthenticationWithToken("Device2", "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=dGVzdFN0cmluZzU=&se=87824124985&skn=AllAccessKey");
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithToken);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=dGVzdFN0cmluZzU=&se=87824124985&skn=AllAccessKey");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device2");

            iotHubConnectionStringBuilder.AuthenticationMethod = new DeviceAuthenticationWithSharedAccessPolicyKey("Device3", "AllAccess", "dGVzdFN0cmluZzI=");
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithSharedAccessPolicyKey);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == "dGVzdFN0cmluZzI=");
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device3");

            iotHubConnectionStringBuilder.AuthenticationMethod = new DeviceAuthenticationWithToken("Device4", "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=dGVzdFN0cmluZzU=&se=87824124985&skn=AllAccessKey");
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithToken);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=dGVzdFN0cmluZzU=&se=87824124985&skn=AllAccessKey");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device4");

            IAuthenticationMethod authMethod = AuthenticationMethodFactory.CreateAuthenticationWithToken("Device5", "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=dGVzdFN0cmluZzU=&se=87824124985&skn=AllAccessKey");

            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create("acme1.azure-devices.net", authMethod);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithToken);
            Assert.IsTrue(iotHubConnectionStringBuilder.HostName == "acme1.azure-devices.net");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=dGVzdFN0cmluZzU=&se=87824124985&skn=AllAccessKey");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device5");

            authMethod = new DeviceAuthenticationWithSharedAccessPolicyKey("Device3", "AllAccess", "dGVzdFN0cmluZzI=");
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create("acme2.azure-devices.net", authMethod);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithSharedAccessPolicyKey);
            Assert.IsTrue(iotHubConnectionStringBuilder.HostName == "acme2.azure-devices.net");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == "dGVzdFN0cmluZzI=");
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device3");

            authMethod = new DeviceAuthenticationWithToken("Device2", "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=dGVzdFN0cmluZzU=&se=87824124985&skn=AllAccessKey");
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create("acme3.azure-devices.net", authMethod);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithToken);
            Assert.IsTrue(iotHubConnectionStringBuilder.HostName == "acme3.azure-devices.net");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == "SharedAccessSignature sr=dh%3a%2f%2facme.azure-devices.net&sig=dGVzdFN0cmluZzU=&se=87824124985&skn=AllAccessKey");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device2");

            authMethod = new DeviceAuthenticationWithRegistrySymmetricKey("Device1", "dGVzdFN0cmluZzE=");
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create("acme4.azure-devices.net", authMethod);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithRegistrySymmetricKey);
            Assert.IsTrue(iotHubConnectionStringBuilder.HostName == "acme4.azure-devices.net");
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessSignature == null);
            Assert.IsTrue(iotHubConnectionStringBuilder.SharedAccessKey == "dGVzdFN0cmluZzE=");
            Assert.IsTrue(iotHubConnectionStringBuilder.DeviceId == "Device1");

            string hostName        = "acme.azure-devices.net";
            string gatewayHostname = "gateway.acme.azure-devices.net";
            IAuthenticationMethod authenticationMethod = new DeviceAuthenticationWithRegistrySymmetricKey("Device1", "dGVzdFN0cmluZzE=");

            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(hostName, gatewayHostname, authenticationMethod);
            Assert.AreEqual(gatewayHostname, iotHubConnectionStringBuilder.GatewayHostName);
            Assert.AreEqual(hostName, iotHubConnectionStringBuilder.HostName);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithRegistrySymmetricKey);

            hostName                      = "acme.azure-devices.net";
            authenticationMethod          = new DeviceAuthenticationWithRegistrySymmetricKey("Device1", "dGVzdFN0cmluZzE=");
            iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(hostName, authenticationMethod);
            Assert.AreEqual(hostName, iotHubConnectionStringBuilder.HostName);
            Assert.IsTrue(iotHubConnectionStringBuilder.AuthenticationMethod is DeviceAuthenticationWithRegistrySymmetricKey);
            Assert.IsNull(iotHubConnectionStringBuilder.GatewayHostName);
        }
Example #27
0
        public MainPage()
        {
            this.InitializeComponent();

            Func <Task> runner = async() =>
            {
                var controller = await GpioController.GetDefaultAsync();

                var pin17 = controller.OpenPin(17);
                var pin18 = controller.OpenPin(18);

                pin17.SetDriveMode(GpioPinDriveMode.Output);
                pin18.SetDriveMode(GpioPinDriveMode.Output);

                var myDevice = new TpmDevice(0); // Use logical device 0 on the TPM by default
                var hubUri   = myDevice.GetHostName();
                var deviceId = myDevice.GetDeviceId();
                var sasToken = myDevice.GetSASToken();

                var authMethod = AuthenticationMethodFactory.CreateAuthenticationWithToken(deviceId, sasToken);

                var deviceClient = DeviceClient.Create(hubUri, authMethod, TransportType.Amqp);

                while (true)
                {
                    var msg = await deviceClient.ReceiveAsync();

                    if (msg != null)
                    {
                        var body = Encoding.ASCII.GetString(msg.GetBytes());

                        await deviceClient.CompleteAsync(msg);

                        GpioPinValue redValue;
                        GpioPinValue greenValue;

                        switch (body.ToLowerInvariant())
                        {
                        case "red":
                            redValue   = GpioPinValue.High;
                            greenValue = GpioPinValue.Low;
                            break;

                        case "green":
                            redValue   = GpioPinValue.Low;
                            greenValue = GpioPinValue.High;
                            break;

                        default:
                            redValue   = GpioPinValue.Low;
                            greenValue = GpioPinValue.Low;
                            break;
                        }

                        pin17.Write(redValue);
                        pin18.Write(greenValue);
                    }

                    await Task.Delay(TimeSpan.FromSeconds(1));
                }
            };

            _run = runner();
        }