/// <summary> /// Usefull for updating Twins properties (either tags or desired/reported properties). /// This first version does not include desired/reported properties serialization/deserialization but it could be added /// easily (additional properties in settings classes) /// </summary> /// <param name="deviceId"></param> /// <param name="options"></param> /// <returns></returns> public async Task<bool> UpdateDeviceSettingsAsync(string deviceId, SIoT.DeviceIoTSettings options) { if (string.IsNullOrEmpty(deviceId)) throw new ArgumentNullException(nameof(deviceId)); if (options == null) throw new ArgumentNullException(nameof(options)); if (options.Twins != null && options.Twins.Tags != null) try { var twin = await _registryManager.GetTwinAsync(deviceId).ConfigureAwait(false); if (twin != null) { var jsonTags = JsonConvert.SerializeObject(options.Twins, new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore}); var updatedTwin = await _registryManager.UpdateTwinAsync(deviceId, jsonTags, twin.ETag).ConfigureAwait(false); return updatedTwin != null; } return false; } catch (Exception ex) { _logger.LogError(ex, ex.Message); throw; } return false; }
public async Task<SIoT.Device> AddDeviceAsync(string deviceId, SIoT.DeviceIoTSettings settings) { if (settings == null) throw new ArgumentNullException(nameof(settings)); var device = await AddDeviceToIoTHubAsync(deviceId).ConfigureAwait(false); var twinUpdated = await UpdateDeviceSettingsAsync(deviceId, settings).ConfigureAwait(false); if (device != null && twinUpdated) return _mapper.Map<SIoT.Device>(device); throw new Exception("An error has occurred during the device creation or the twin updates."); }
/// <summary> /// Add a device with strongly typed settings (could be usefull in some scenarios) /// </summary> /// <param name="deviceId"></param> /// <param name="settings"></param> /// <returns></returns> public async Task<SIoT.Device> AddDeviceWithTagsAsync(string deviceId, SIoT.DeviceIoTSettings settings) { var converter = new TwinJsonConverter(); Twin twin = null; if (settings != null && settings.Twins != null) { twin = new Twin(deviceId); var jsonTags = JsonConvert.SerializeObject(settings.Twins, new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore}); twin.Tags = new TwinCollection(jsonTags); } var result = await _registryManager.AddDeviceWithTwinAsync(new Device(deviceId), twin).ConfigureAwait(false); if (result != null && result.IsSuccessful) return await GetDeviceAsync(deviceId).ConfigureAwait(false); throw new Exception("An error has occurred during the device creation or the twin updates."); }