/// <summary> /// Convert twin to module /// </summary> /// <param name="twin"></param> /// <returns></returns> public static Module ToModule(this DeviceTwinModel twin) { return(new Module(twin.Id, twin.ModuleId) { ManagedBy = twin.Id }); }
/// <summary> /// Clone twin /// </summary> /// <param name="model"></param> /// <returns></returns> public static DeviceTwinModel Clone(this DeviceTwinModel model) { if (model == null) { return(null); } return(new DeviceTwinModel { Capabilities = model.Capabilities == null ? null : new DeviceCapabilitiesModel { IotEdge = model.Capabilities.IotEdge }, ConnectionState = model.ConnectionState, Etag = model.Etag, Id = model.Id, LastActivityTime = model.LastActivityTime, ModuleId = model.ModuleId, Properties = model.Properties.Clone(), Status = model.Status, StatusReason = model.StatusReason, StatusUpdatedTime = model.StatusUpdatedTime, Tags = model.Tags? .ToDictionary(kv => kv.Key, kv => kv.Value?.DeepClone()), Version = model.Version }); }
/// <summary> /// Convert twin to device /// </summary> /// <param name="twin"></param> /// <returns></returns> public static Device ToDevice(this DeviceTwinModel twin) { return(new Device(twin.Id) { Capabilities = twin.Capabilities?.ToCapabilities() }); }
/// <summary> /// Convert twin to device /// </summary> /// <param name="twin"></param> /// <returns></returns> public static Device ToDevice(this DeviceTwinModel twin) { if (twin == null) { return(null); } return(new Device(twin.Id) { Capabilities = twin.Capabilities?.ToCapabilities(), Scope = twin.DeviceScope }); }
/// <summary> /// Convert twin to twin /// </summary> /// <param name="twin"></param> /// <param name="isPatch"></param> /// <returns></returns> public static Twin ToTwin(this DeviceTwinModel twin, bool isPatch = false) { return(new Twin(twin.Id) { ETag = twin.Etag, ModuleId = twin.ModuleId, DeviceId = twin.Id, Tags = twin.Tags?.ToTwinCollection(), Capabilities = null, // r/o Version = null, // r/o Properties = new TwinProperties { Desired = twin.Properties?.Desired?.ToTwinCollection(), Reported = isPatch ? null : twin.Properties?.Reported?.ToTwinCollection() } }); }
/// <summary> /// Consolidated /// </summary> /// <param name="model"></param> /// <returns></returns> public static Dictionary <string, JToken> GetConsolidatedProperties( this DeviceTwinModel model) { var desired = model.Properties?.Desired; var reported = model.Properties?.Reported; if (reported == null || desired == null) { return((reported ?? desired) ?? new Dictionary <string, JToken>()); } var properties = new Dictionary <string, JToken>(desired); // Merge with reported foreach (var prop in reported) { if (properties.TryGetValue(prop.Key, out var existing)) { if (existing == null || prop.Value == null) { if (existing == prop.Value) { continue; } } else if (JToken.DeepEquals(existing, prop.Value)) { continue; } properties[prop.Key] = prop.Value; } else { properties.Add(prop.Key, prop.Value); } } return(properties); }
/// <summary> /// Check whether twin is disabled /// </summary> /// <param name="twin"></param> /// <returns></returns> public static bool?IsDisabled(this DeviceTwinModel twin) => twin.Status?.EqualsIgnoreCase("disabled");
/// <summary> /// Check whether twin is connected /// </summary> /// <param name="twin"></param> /// <returns></returns> public static bool?IsConnected(this DeviceTwinModel twin) => twin.ConnectionState?.EqualsIgnoreCase("connected");
/// <summary> /// Check whether twin is enabled /// </summary> /// <param name="twin"></param> /// <returns></returns> public static bool?IsEnabled(this DeviceTwinModel twin) { return(twin.Status?.EqualsIgnoreCase("enabled")); }
/// <summary> /// Check whether twin is connected /// </summary> /// <param name="twin"></param> /// <returns></returns> public static bool?IsConnected(this DeviceTwinModel twin) { return(twin.ConnectionState?.EqualsIgnoreCase("Connected")); }