Beispiel #1
0
        public void UpdateTwinPropertiesDirect(TwinPropertyRequest twinPropertyRequest)
        {
            // Update Twin Properties using a Direct Method

            var method = new CloudToDeviceMethod(twinPropertyRequest.Name)
            {
                ResponseTimeout = TimeSpan.FromSeconds(30)
            };

            // see if this command has any desired properties
            if (twinPropertyRequest.Properties.Count > 0)
            {
                var json = "{";
                for (var i = 0; i < twinPropertyRequest.Properties.Count; i++)
                {
                    json += twinPropertyRequest.Properties[i].Key + $":'{twinPropertyRequest.Properties[i].Val}'";
                    if (i < (twinPropertyRequest.Properties.Count - 1))
                    {
                        json += ",";
                    }
                }
                json += "}";

                method.SetPayloadJson(json);
            }

            try
            {
                AsyncHelper.RunSync <CloudToDeviceMethodResult>(() => _serviceClient.InvokeDeviceMethodAsync(twinPropertyRequest.DeviceId, method));
            }
            catch (Exception err)
            {
                throw new Exception(Errors.ERR_DEVICE_BAGREQUEST, err);
            }
        }
Beispiel #2
0
        public void UpdateTwinTags(TwinPropertyRequest twinPropertyRequest)
        {
            // Update Twin Tags

            try
            {
                var twin = AsyncHelper.RunSync <Twin>(() => _registryManager.GetTwinAsync(twinPropertyRequest.DeviceId));

                var json = "{ tags : {" + $"{twinPropertyRequest.Name}" + ": {";

                for (var i = 0; i < twinPropertyRequest.Properties.Count; i++)
                {
                    json += twinPropertyRequest.Properties[i].Key + $":'{twinPropertyRequest.Properties[i].Val}'";
                    if (i < (twinPropertyRequest.Properties.Count - 1))
                    {
                        json += ",";
                    }
                }
                json += "}}}";

                AsyncHelper.RunSync <Twin>(() => _registryManager.UpdateTwinAsync(twinPropertyRequest.DeviceId, json, twin.ETag));
            }
            catch (Exception err)
            {
                throw new Exception(Errors.ERR_DEVICE_BAGREQUEST, err);
            }
        }
Beispiel #3
0
        public Manifest Create(Manifest manifest)
        {
            try
            {
                if (manifest.IsValid())
                {
                    // Provision the device in IoT Hub
                    var device =
                        AsyncHelper.RunSync <Microsoft.Azure.Devices.Device>(
                            () =>
                            _registryManager.AddDeviceAsync(
                                new Microsoft.Azure.Devices.Device(manifest.SerialNumber)));

                    var tags = new TwinPropertyRequest
                    {
                        DeviceId   = device.Id,
                        Name       = "manufacturer",
                        Properties =
                        {
                            ["manufacturer"] = manifest.Manufacturer,
                            ["model"]        = manifest.ModelNumber
                        }
                    };
                    UpdateTwinTags(tags);

                    var desiredProps = new TwinPropertyRequest
                    {
                        DeviceId   = device.Id,
                        Name       = "cadenceConfig",
                        Properties =
                        {
                            ["heartbeat"] = manifest.Extensions["heartbeat"],
                            ["telemetry"] = manifest.Extensions["telemetry"]
                        }
                    };
                    UpdateTwinProperties(desiredProps);

                    // Update the manifest and store in DocDb
                    manifest.Modified         = DateTime.UtcNow;
                    manifest.Key.PrimaryKey   = device.Authentication.SymmetricKey.PrimaryKey;
                    manifest.Key.SecondaryKey = device.Authentication.SymmetricKey.SecondaryKey;
                    manifest.Hub = _iothubhostname;
                    _dbase.Insert(manifest);
                }
                else
                {
                    throw new Exception(Errors.ERR_DEVICE_MODEL_NOT_VALID);
                }
            }
            catch (Exception err)
            {
                throw new Exception(Errors.ERR_DEVICE_BAGREQUEST, err);
            }

            return(manifest);
        }
Beispiel #4
0
 public void UpdateTwinProperties([FromBody] TwinPropertyRequest twinPropertyRequest)
 {
     _deviceService.UpdateTwinProperties(twinPropertyRequest);
 }